Skip to main content

Robonomics package to read data from sensors and publish to different output channels

Project description

Sensors Connectivity

A Python service that acts as the data aggregation layer in the Robonomics decentralized sensors network. It receives signed sensor measurements, validates them, and distributes data through two channels: real-time IPFS pubsub for the Robonomics dApp and batched datalogs to the Robonomics parachain.

Architecture Overview

Sensors Connectivity is the provider node in the decentralized sensors network:

  • Receives signed measurements from Altruist devices via HTTP POST (port 8001 by default)
  • Also accepts data from other sensor types: EnvironmentalBox, MobileLab, LoRa sensors
  • Publishes real-time data via IPFS pubsub for the Robonomics dApp
  • Batches sensor data, pins to IPFS, and writes the hash as a datalog to the Robonomics parachain
Altruist / Other sensors
  |
  v HTTP POST (port 8001)
Sensors Connectivity Provider
  |- Validate: ED25519 signature + RWS subscription (Kusama/Polkadot)
  |- Real-time: IPFS pubsub -> Robonomics dApp
  |- Batch: collect -> pin to IPFS (local/Pinata/Crust) -> datalog to chain
  '- Network priority: Kusama (with RWS) -> Kusama -> Polkadot

How It Works

Validation. Each incoming message is verified: ED25519 signature check, then RWS (Robonomics Web Services) subscription lookup on both Kusama and Polkadot parachains. Sensor types are routed via sensors_fabric.py based on payload fields.

IPFS publishing. Validated data is published in real-time to IPFS pubsub topic airalab.lighthouse.5.robonomics.eth. Batched data is pinned through up to 4 gateways (local IPFS, Pinata, Crust, Temporal) managed by pinning_manager.py.

Datalog to chain. Pinned IPFS hashes are written as datalogs to the Robonomics parachain with a network cascade: Kusama with active subscription first, then Kusama without, then Polkadot as fallback.

Pre-requirements

IPFS daemon with pubsub enabled and Python 3.10+.

Install IPFS (Linux):

wget https://dist.ipfs.io/go-ipfs/v0.8.0/go-ipfs_v0.8.0_linux-amd64.tar.gz
tar -xzf go-ipfs_v0.8.0_linux-amd64.tar.gz
cd go-ipfs
sudo bash install.sh
ipfs init

Installation

From PyPi

pip3 install py-sr25519-bindings
pip3 install sensors-connectivity

From Source

Requires Poetry:

curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -

Clone and install:

git clone https://github.com/airalab/sensors-connectivity
cd sensors-connectivity
poetry install

Configuration

Configuration guide: https://robonomics.academy/en/learn/sensors-connectivity-course/sensors-connectivity-config-options/

When building from source, make a copy of default.json and fill it using the guide above.

Logging uses console and file handlers by default. The logging template is in connectivity/config/logging_template.py. Default log path: ~/.logs. See the Python logging docs for other handler options.

Launch

Start the IPFS daemon first:

ipfs daemon --enable-pubsub-experiment

Then run the service:

# PyPi install
sensors_connectivity "path/to/your/config/file"

# From source
poetry run sensors_connectivity "path/to/your/config/file"

Logs appear in your terminal (if console handler is set) and in ~/.logs.

Development

Test the module with an HTTP station:

poetry run test_mobile_lab
poetry run test_environmental_box

More details in the /docs directory.

Comprehensive guide on the Decentralized Sensors Network concept: https://robonomics.academy/en/learn/sensors-connectivity-course/overview/

Sensor preparation instructions: https://robonomics.academy/en/learn/sensors-connectivity-course/setting-up-and-connecting-sensors/

Troubleshooting

Python.h: No such file or directory

Install header files and static libraries for python-dev:

sudo apt install python3-dev

Note: python3-dev does not cover all versions. The service needs at least Python 3.10, so you may need: sudo apt install python3.10-dev. See examples for other package managers.

Python versions mismatch

If poetry install fails with a SolverProblemError about Python version incompatibility, specify the version for Poetry:

poetry env use python3.10.9

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sensors_connectivity-1.7.tar.gz (28.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sensors_connectivity-1.7-py3-none-any.whl (48.2 kB view details)

Uploaded Python 3

File details

Details for the file sensors_connectivity-1.7.tar.gz.

File metadata

  • Download URL: sensors_connectivity-1.7.tar.gz
  • Upload date:
  • Size: 28.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.10.20 Linux/6.17.0-1015-azure

File hashes

Hashes for sensors_connectivity-1.7.tar.gz
Algorithm Hash digest
SHA256 5869cdbaf501fcc30edd72c353e334334d5c6671498d04e1efe50048761a7bef
MD5 400c323e1df8e9e4c727aeb28449457d
BLAKE2b-256 c876607aede27d91923dc7268f995898ee2af94c9d36a3c6888bbf8e20890545

See more details on using hashes here.

File details

Details for the file sensors_connectivity-1.7-py3-none-any.whl.

File metadata

  • Download URL: sensors_connectivity-1.7-py3-none-any.whl
  • Upload date:
  • Size: 48.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.10.20 Linux/6.17.0-1015-azure

File hashes

Hashes for sensors_connectivity-1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 8ec23d99a632b40f6f6b5ff86f7e1e57206aa99dccb8085cb00e02c013e4d842
MD5 d282b2a81be845cdfd7b50b3583255f8
BLAKE2b-256 5447ead7b438f1498f68eea01cafb573d4ae880fc455647bc70272c5475e286d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page