Skip to main content

Daemon that will pull sensor data from a network of sensor hosting a micro HTTP API.

Project description

Lightweight sensor status pulling daemon.

PythonSupport PyPI VersionStatus codecov Checks

Installation:

pip install SensorNet

Run instructions:

  1. Run once: sensornet -c <path/to/config.yaml>

  2. Run daemon: sensornet -d - c <path/to/config.yaml>

Configuration:

Create a configuration file in /etc/sensornet/sensor.yaml

daemon_name: SensorNetDaemon
backend:
  driver: sqlalchemy
  url: "engine://username:password@host:port/dbname"
networks:
  - name: network0
    ip_addresses:
      - 10.0.0.1/32
      - 10.0.1.10 - 10.0.1.20
    sensor_prefix: sn0
    api_port: 80
    api_location: "/"
    cron: "* * * * * *"

daemon_name

Name for the daemon that will be sent to the backend.

backend

driver: name of the backend module to use. Modules should be installed in /lib/sensor_net/backend_driver/module.py

This section will contain the module configuration, and will be passed as a dict to the get_driver function.

SensorData = namedtuple('SensorData', ["name", "value", "datetime_utc"])

class BackendDriver(Protocol):
    def write(self, network_name: str, network_prefix: str, sensor_address: str, data: list[SensorData]):
        """Writes all data to the backend"""
        ...

def get_driver(name: str, configuration: dict) -> BackendDriver:
    """Instantiate a new BackendDriver from the given configuration"""
    raise NotImplementedError("get_backend is not implemented.")

Note: get_driver MUST have parameters types annotations.

networks:

Defines the networks to pull.

A pull is a simple HTTP GET request to http://endpoint/api_location It expects a JSON body containing:

{
  "data": [
    {
      "name": str,
      "value": number,
      "epoch": number
    }, ...
  ]
}
  • network_name: the name of the network

  • ip_addresses: IP address with mask or range of IP addresses

  • sensor_prefix: prefix for the sensor, it’s recommended to use the sensor prefix for deduplication in the backend.

  • api_port: port the API is listening to.

  • api_location: location of the sensor API

  • cron: interval between polling for this network

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

SensorNet-1.0.post0.dev5.zip (55.7 kB view details)

Uploaded Source

File details

Details for the file SensorNet-1.0.post0.dev5.zip.

File metadata

  • Download URL: SensorNet-1.0.post0.dev5.zip
  • Upload date:
  • Size: 55.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for SensorNet-1.0.post0.dev5.zip
Algorithm Hash digest
SHA256 50c87a535d666851fd2095951a0c5ab2ba819716fed61cc2c030717635771de4
MD5 d3b202c2fc16eb31f55b84160572dc52
BLAKE2b-256 b9d4d207c9e97cc7413fe0dcab2634dbb355f3297ea633183753e22c04bd80cf

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