This software subscribes to mqtt-topics that contain raw sensor data and publishes average values for configurable time spans.
Project description
This software subscribes to mqtt-topics that contain raw sensor data and publishes e.g. average values for configurable time spans.
Available algorithms are: * Average - Vanilla average/mean implementation. * WeightedAverage - The weighted average of all valid data points within the time window. The weight is the inverse time difference to the time_to time stamp. * Count - Count how many valid data points are within the give time window. * Maximum - The maximum value of all valid data points within the time window. * Minimum - The minimum value of all valid data points within the time window.
Alcathous [1] is the brother of Copreus. Both are sons of Pelops. [wiki]
Pelops Overview
Alcathous is part of the collection of mqtt based microservices pelops. An overview on the microservice architecture and examples can be found at (http://gitlab.com/pelops/pelops).
For Users
Installation Core-Functionality
Prerequisites for the core functionality are:
sudo apt install python3 python3-pip
Install via pip:
sudo pip3 install pelops alcathous
To update to the latest version add --upgrade as prefix to the pip3 line above.
Install via gitlab (might need additional packages):
git clone git@gitlab.com:pelops/alcathous.git cd alcathous sudo python3 setup.py install
This will install the following shell scripts: * alcathous
The script cli arguments are: * ‘-c’/’–config’ - config file (mandatory) * ‘–version’ - show the version number and exit
YAML-Config
A yaml [2] file must contain three root blocks: * mqtt - mqtt-address, mqtt-port, and path to credentials file credentials-file (a file consisting of two entries: mqtt-user, mqtt-password) * logger - which log level and which file to be used * data-preparation * general - parameters for the manager * methods - mapping of algorithms, parameters and topic-pub suffix * datapoints - which topics should be used and which methods should be applied
mqtt:
mqtt-address: localhost
mqtt-port: 1883
credentials-file: ~/credentials.yaml
log-level: INFO
logger:
log-level: DEBUG
log-file: alcathous.log
data-preparation: # alcathous root node
no_data_behavior: last_valid # mute, last_valid, empty_message
update_cycle: 30 # new values published each ... seconds
number_worker: 2 # how many worker threads should be spawned to process task queue
methods:
- name: avg_5min # unique name for method
topic-pub-suffix: avg_5min
algorithm: avg # avg - average, wavg - weighted average, count, min, max
time_window: 5 # use the values from the last ... minutes
- name: wavg_5min # unique name for method
topic-pub-suffix: wavg_5min
algorithm: wavg # avg - average, wavg - weighted average, count, min, max
time_window: 5 # use the values from the last ... minutes
- name: count_2min # unique name for method
topic-pub-suffix: count_2min
algorithm: count # avg - average, wavg - weighted average, count, min, max
time_window: 2 # use the values from the last ... minutes
- name: min_3min # unique name for method
topic-pub-suffix: min_3min
algorithm: min # avg - average, wavg - weighted average, count, min, max
time_window: 3 # use the values from the last ... minutes
- name: max_3min # unique name for method
topic-pub-suffix: max_3min
algorithm: max # avg - average, wavg - weighted average, count, min, max
time_window: 3 # use the values from the last ... minutes
datapoints:
- topic-sub: /test/0/raw
topic-pub-prefix: /test/0/aggregated/
zero_is_valid: False # 0 is valid or rejected
methods: wavg_5min, avg_5min, count_2min, min_3min, max_3min
- topic-sub: /test/1/raw
topic-pub-prefix: /test/1/aggregated/
zero_is_valid: False # 0 is valid or rejected
methods: wavg_5min, avg_5min
systemd
add systemd example.
For Developers
Getting Started
The project consists of three main modules: * datapointmanager - loads the config and create all Datapoint instances. Hosts the main loop. * datapoint - Datapoint is one of the datapoints in the config. it holds all data received for the given topic, has its own set of method instances. * algorithms - The configureable algorithms are then used as data preparation methods in DataPoint. Currently, two algorithms are implemented: Average and WeightedAverage. The first one treats all values in a time window equivalent, the later one weights them with the time span between time_from and time_value.
DataPointManager has two lists: references to the process functions from all instantiated methods and a references to the purge functions from all instantiated DataPoints. The first list is ordered by an execution cost estimation (highest value first). Both lists are applied to worker threads (general.number_worker) - please adapt the number of the workers to your needs.
Todos
Add better validity check for incoming values
…
Misc
The code is written for python3 (and tested with python 3.5 on an Raspberry Pi Zero with Raspbian Stretch).
Merge requests / bug reports are always welcome.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file Alcathous-0.4.0.tar.gz.
File metadata
- Download URL: Alcathous-0.4.0.tar.gz
- Upload date:
- Size: 16.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: Python-urllib/3.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3244eeb9420e2280a89fa5f97c12120578c54ab88ab1989be778142ff8dd6e45
|
|
| MD5 |
aac4e409d51c30eff768aa1f9617b3d8
|
|
| BLAKE2b-256 |
8b0f2e40712bba2893e403ba3586799b85cf749fa24e03fc0e370a088c00e4a2
|