1. Photo Capture & Face Detection
A camera was integrated into the Home Assistant environment to capture images on demand, which an embedded Python service processes with OpenCV’s Haar-cascade classifier (no GPU required) to detect every face; each detected face is then anonymized by overlaying a smiling emoji via the Pillow library.
2. Integration with Home Assistant
To streamline deployment within Home Assistant, Alena, our main contributor to Robonomics integration with Home Assistant, created a lightweight “media integration” module based on the main Robonomics HA integration (https://github.com/airalab/homeassistant-robonomics-integration) The package (https://github.com/LoSk-p/robonomics_media_integration) reuses the core connector for subscribing to camera events and publishing meta-file CIDs to the Robonomics Datalog, but strips out unused features—so installation and configuration took only minutes.
3. IPFS Storage
After processing, each image is pinned to IPFS using Pinata’s pinning service, which returns a unique content identifier (CID) that serves as the permanent reference for the snapshot.
4. Metadata File & Datalog
For every new photo, the system rebuilds the JSON list of all image CIDs and pins that list to IPFS. A background task runs once a minute to compare the CID of the latest pinned list with the one recorded in the Robonomics Datalog—and if they don’t match, the new list’s CID is sent to the Datalog to keep the on-chain reference up to date.
RoSeMAN Indexing
RoSeMAN, our off-chain indexer (also used in the Sensor-Map case), is a Node.js service (see (https://github.com/airalab/RoSeMAN) that subscribes to the Robonomics Datalog via a Substrate-based sensor agent.
_
On each new meta-file CID logged in the Datalog, it performs an HTTP fetch from IPFS to retrieve and parse the JSON list of photo CIDs.
_
Parsed CIDs are inserted into RoSeMAN’s MongoDB backend and exposed through a simple HTTP API, so any external DApp can query RoSeMAN for an up-to-date gallery of all photos pinned on IPFS.
As a result
Visitors see a live, censorship-resistant gallery of every smile captured in Lugano—no central server, no single point of failure.