Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ignaciohr/diematic_server
Daemon to read/write parameters from/to the De Dietrich boiler RESTfull service and InfluxDB backends
https://github.com/ignaciohr/diematic_server
de-dietrich diematic home-automation influxdb iot modbus python restful
Last synced: about 1 month ago
JSON representation
Daemon to read/write parameters from/to the De Dietrich boiler RESTfull service and InfluxDB backends
- Host: GitHub
- URL: https://github.com/ignaciohr/diematic_server
- Owner: IgnacioHR
- License: other
- Created: 2022-03-14T09:56:59.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2024-11-22T22:12:59.000Z (about 2 months ago)
- Last Synced: 2024-11-22T22:25:45.602Z (about 2 months ago)
- Topics: de-dietrich, diematic, home-automation, influxdb, iot, modbus, python, restful
- Language: Python
- Homepage:
- Size: 601 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# 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 four 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.
- 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![Screenshot](images/web-requests.png?raw=true)
![Screenshot](images/chronograf_screenshot.png?raw=true)## 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 takeoptional 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 1CREATE 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),*
ENDCREATE 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