Unix daemon and supporting models for publishing data from Diematic DeDietrich boiler
Project description
diematic
A Unix service written in Python to monitor De Dietrich boiler equiped with Diematic system using Modbus RS-845 protocol. The service reads data from the boiler and makes it available to be consumed in three ways: Optionally, the values fetched from the boiler are sent to an InfluxDB database. Optionally, the values fetched from the boiler are sent to an MQTT broker. (TODO) Optionally, a RESTful web server is installed and values can be obtained using GET and modified using POST requests. Optionally, boiler parameters can be changed from the mqtt topics
Hardware requirements
- A De Dietrich boiler with Diematic regulation and a mini-din socket
- A mini-din cable
- A RS-845 to USB adapter
- A nano-computer with a USB port and Python3 installed (Raspberry pi or similar)
Check tutorials in the "references" section below on how to do the hardware setup.
Changes from version 2.X
- Added support to integrate with mqtt broker
- Added command line parameters with priority over provided values in the configuration file
Http server
Satrting from version 3.0 the web server can be configured from the diematic.yaml
configuration file by adding an http
key as follows:
http:
address: 0.0.0.0
port: 8080
Once the service is running head to:
http://{HOSTNAME}:{PORT}/diematic/parameters
you can have access to all parameters indicated in the configuration file. Read the webserver.py documentation to know more about it.
MQTT
Starting from version 3.0 the service can be configured to send data to an MQTT broker. The broker configuration goes in the diematic.yaml configuration file as follows:
mqtt:
broker: your broker server
port: 1883
user: your mqtt user, optional
password: your mqtt user credentials
retain: false
tls: false
topic: diematic2mqtt/boiler
discovery:
prefix: homeassistant
If there is no mqtt
key, mqtt will not be considered at all. Under the mqtt
key only broker
key is required. The value is the broker ip address or host name that can be resolved using dns. The port
default value is 1883 or 8883 if tls
key is set to true. If provided, the user
and password
keys are used to open connection to the broker. retain
can be used to inform the broker to retain the values. topic
key can be used to configure the topic under wich all information will be set. if discovery
key is set, the server will publish MQTT Discovery information to the broker. The prefix
key indicates the topic under wich home assistant is subscribed to receive MQTT Discovery information.
Installation
git clone https://github.com/IgnacioHR/diematicd.git
cd diematicd
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
mkdir /etc/diematic
cp diematic.yaml /etc/diematic
cp diematicd.service /etc/systemd/system
systemctl enable diematicd
systemctl start diematicd
Test
Run python3 diematicd.py --help
usage: diematicd.py [-h] [-b {none,configured,influxdb,mqtt}] [-d DEVICE] [-f]
[-l {critical,error,warning,info,debug}] [-c CONFIG]
[-w HOSTNAME] [-p PORT] [-s {loop,web,both}] [-a ADDRESS]
[-t {Raw,DiematicOneDecimal,DiematicModeFlag,ErrorCode,DiematicCircType,DiematicProgram,bit0,bit1,bit2,bit3,bit4,bit5,bit6,bit7,bit8,bit9,bitA,bitB,bitC,bitD,bitE,bitF}]
{status,start,stop,restart,reload,runonce,readregister}
positional arguments:
{status,start,stop,restart,reload,runonce,readregister}
action to take
optional arguments:
-h, --help show this help message and exit
-b {none,influxdb}, --backend {none,influxdb}
select data backend (default is influxdb)
-d DEVICE, --device DEVICE
define modbus device
-f, --foreground Run in the foreground do not detach process
-l {critical,error,warning,info,debug}, --logging {critical,error,warning,info,debug}
define logging level (default is critical)
-c CONFIG, --config CONFIG
alternate configuration file
-w HOSTNAME, --hostname HOSTNAME
web server host name, defaults to 0.0.0.0
-p PORT, --port PORT web server port, defaults to 8080
-s {loop,web,both}, --server {loop,web,both}
servers to start
-a ADDRESS, --address ADDRESS
register address to read whe action is readregister
-t {Raw,DiematicOneDecimal,DiematicModeFlag,ErrorCode,DiematicCircType,DiematicProgram,bit0,bit1,bit2,bit3,bit4,bit5,bit6,bit7,bit8,bit9,bitA,bitB,bitC,bitD,bitE,bitF}, --format {Raw,DiematicOneDecimal,DiematicModeFlag,ErrorCode,DiematicCircType,DiematicProgram,bit0,bit1,bit2,bit3,bit4,bit5,bit6,bit7,bit8,bit9,bitA,bitB,bitC,bitD,bitE,bitF}
value format to apply for register read, default is
Raw
InfluxDB preparation
Minimal
CREATE DATABASE "diematic"
CREATE USER "diematic" WITH PASSWORD 'mySecurePas$w0rd'
GRANT ALL ON "diematic" TO "diematic"
CREATE RETENTION POLICY "one_week" ON "diematic" DURATION 1w REPLICATION 1 DEFAULT
Additionnal steps for down-sampling
CREATE RETENTION POLICY "five_weeks" ON "diematic" DURATION 5w REPLICATION 1
CREATE RETENTION POLICY "five_years" ON "diematic" DURATION 260w REPLICATION 1
CREATE CONTINUOUS QUERY "cq_month" ON "diematic" BEGIN
SELECT mean(/temperature/) AS "mean_1h", mean(/pressure/) AS "mean_1h", max(/temperature/) AS "max_1h", max(/pressure/) AS "max_1h"
INTO "five_weeks".:MEASUREMENT
FROM "one_week"."diematic"
GROUP BY time(1h),*
END
CREATE CONTINUOUS QUERY "cq_year" ON "diematic" BEGIN
SELECT mean(/^mean_.*temperature/) AS "mean_24h", mean(/^mean_.*pressure/) AS "mean_24h", max(/^max_.*temperature/) AS "max_24h", max(/^max_.*pressure/) AS "max_24h"
INTO "five_years".:MEASUREMENT
FROM "five_weeks"."diematic"
GROUP BY time(24h),*
END
References
- https://github.com/gmasse/diematic.git
- https://github.com/riptideio/pymodbus
- (french) http://sarakha63-domotique.fr/chaudiere-de-dietrich-domotise-modbus/amp/
- (french) https://www.dom-ip.com/wiki/Réalisation_d%27une_Interface_Web_pour_une_chaudière_De_Dietrich_équipée_d%27une_régulation_Diematic_3
- (french forum) https://www.domotique-fibaro.fr/topic/5677-de-dietrich-diematic-isystem/
(french forum) http://www.wit-square.fr/forum/topics/de-dietrich-communication-modbus-bi-ma-tre- (french, modbus registers sheets, copy from previous forum) https://drive.google.com/file/d/156qBsfRGJvOpJBJu5K4WMHUuwv34bZQN/view?usp=sharing
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
Built Distribution
File details
Details for the file diematic_server-3.1.tar.gz
.
File metadata
- Download URL: diematic_server-3.1.tar.gz
- Upload date:
- Size: 27.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e22623f9d3ecb4b3250c20e9df5958a19c1adaab1a41270ccf3abfd6014a2650 |
|
MD5 | 60f7a4479242af3bb76ed4b1070220d3 |
|
BLAKE2b-256 | e2b37dfd42d06a4307818e48b38fa30060577cdfa1410629152d5eb086e159d8 |
File details
Details for the file diematic_server-3.1-py3-none-any.whl
.
File metadata
- Download URL: diematic_server-3.1-py3-none-any.whl
- Upload date:
- Size: 25.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 86ca0a61120d953941c25b6af16a63ca45c6ef9affff203edc69cd417a1f4a8b |
|
MD5 | 778de1de7d48ba3faef91065db5d4df9 |
|
BLAKE2b-256 | 5b3cd67a33b83d5272797f25acb5ff5b7e83f113715c06d0c23041dc3bdf4fd6 |