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 Docker Image Version (tag latest semver) Documentation Status

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.dev18.zip (56.3 kB view details)

Uploaded Source

File details

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

File metadata

  • Download URL: SensorNet-1.0.post0.dev18.zip
  • Upload date:
  • Size: 56.3 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.dev18.zip
Algorithm Hash digest
SHA256 b452535c62070c453182ff241cf35f6c0ba62009f842e3f407784f710b8ba68a
MD5 e2ee730bc31e5c00b108ca7777c2fc80
BLAKE2b-256 0f9006a44f462eb65f528f0b468cc12b0738925c0c6410fc4487fbf59fb4e9d9

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