{"id":22525322,"url":"https://github.com/ignaciohr/diematic_server","last_synced_at":"2025-08-03T21:32:22.993Z","repository":{"id":62568184,"uuid":"469673533","full_name":"IgnacioHR/diematic_server","owner":"IgnacioHR","description":"Daemon to read/write parameters from/to the De Dietrich boiler RESTfull service and InfluxDB backends","archived":false,"fork":false,"pushed_at":"2024-11-22T22:12:59.000Z","size":615,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-11-22T22:25:45.602Z","etag":null,"topics":["de-dietrich","diematic","home-automation","influxdb","iot","modbus","python","restful"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/IgnacioHR.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-03-14T09:56:59.000Z","updated_at":"2024-11-22T22:13:03.000Z","dependencies_parsed_at":"2024-11-22T22:25:49.143Z","dependency_job_id":"b1a39300-55d1-4ef8-bd34-f0fa222a601c","html_url":"https://github.com/IgnacioHR/diematic_server","commit_stats":{"total_commits":22,"total_committers":1,"mean_commits":22.0,"dds":0.0,"last_synced_commit":"1adefd0315d641bc76c5a1517ea3c798e19f3bf2"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IgnacioHR%2Fdiematic_server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IgnacioHR%2Fdiematic_server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IgnacioHR%2Fdiematic_server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IgnacioHR%2Fdiematic_server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IgnacioHR","download_url":"https://codeload.github.com/IgnacioHR/diematic_server/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228567024,"owners_count":17937986,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["de-dietrich","diematic","home-automation","influxdb","iot","modbus","python","restful"],"created_at":"2024-12-07T06:09:51.248Z","updated_at":"2024-12-07T06:09:51.764Z","avatar_url":"https://github.com/IgnacioHR.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# diematic\n\nA Unix service written in Python to monitor De Dietrich boiler equiped with Diematic system using Modbus RS-845 protocol.\nThe service reads data from the boiler and makes it available to be consumed in four ways:\n\n- Optionally, the values fetched from the boiler are sent to an InfluxDB database.\n- Optionally, the values fetched from the boiler are sent to an MQTT broker.\n- Optionally, a RESTful web server is installed and values can be obtained using GET and modified using POST requests.\n- Optionally, boiler parameters can be changed from the mqtt topics\n\n![Screenshot](images/web-requests.png?raw=true)\n![Screenshot](images/chronograf_screenshot.png?raw=true)\n\n## Hardware requirements\n\n * A De Dietrich boiler with Diematic regulation and a mini-din socket\n * A mini-din cable \n * A RS-845 to USB adapter\n * A nano-computer with a USB port and Python3 installed (Raspberry pi or similar)\n\nCheck tutorials in the \"references\" section below on how to do the hardware setup.\n\n## Changes from version 2.X\n\n * Added support to integrate with mqtt broker\n * Added command line parameters with priority over provided values in the configuration file\n\n## Http server\n\nSatrting from version 3.0 the web server can be configured from the `diematic.yaml` configuration file by adding an `http` key as follows:\n\n```\nhttp:\n    address: 0.0.0.0\n    port: 8080\n```\n\nOnce the service is running head to:\n\nhttp://{HOSTNAME}:{PORT}/diematic/parameters\n\nyou can have access to all parameters indicated in the configuration file. Read the webserver.py documentation to know more about it.\n\n## MQTT\n\nStarting 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:\n\n```\nmqtt:\n  broker: your broker server\n  port: 1883\n  user: your mqtt user, optional\n  password: your mqtt user credentials\n  retain: false\n  tls: false\n  topic: diematic2mqtt/boiler\n  discovery:\n    prefix: homeassistant\n```\n\nIf 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.\n\n## Installation\n```\ngit clone https://github.com/IgnacioHR/diematicd.git\ncd diematicd\npython3 -m venv venv\nsource venv/bin/activate\npip install -r requirements.txt\nmkdir /etc/diematic\ncp diematic.yaml /etc/diematic\ncp diematicd.service /etc/systemd/system\nsystemctl enable diematicd\nsystemctl start diematicd\n```\n\n## Test\nRun `python3 diematicd.py --help`\n```\nusage: diematicd.py [-h] [-b {none,configured,influxdb,mqtt}] [-d DEVICE] [-f]\n                    [-l {critical,error,warning,info,debug}] [-c CONFIG]\n                    [-w HOSTNAME] [-p PORT] [-s {loop,web,both}] [-a ADDRESS]\n                    [-t {Raw,DiematicOneDecimal,DiematicModeFlag,ErrorCode,DiematicCircType,DiematicProgram,bit0,bit1,bit2,bit3,bit4,bit5,bit6,bit7,bit8,bit9,bitA,bitB,bitC,bitD,bitE,bitF}]\n                    {status,start,stop,restart,reload,runonce,readregister}\n\npositional arguments:\n  {status,start,stop,restart,reload,runonce,readregister}\n                        action to take\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -b {none,influxdb}, --backend {none,influxdb}\n                        select data backend (default is influxdb)\n  -d DEVICE, --device DEVICE\n                        define modbus device\n  -f, --foreground      Run in the foreground do not detach process\n  -l {critical,error,warning,info,debug}, --logging {critical,error,warning,info,debug}\n                        define logging level (default is critical)\n  -c CONFIG, --config CONFIG\n                        alternate configuration file\n  -w HOSTNAME, --hostname HOSTNAME\n                        web server host name, defaults to 0.0.0.0\n  -p PORT, --port PORT  web server port, defaults to 8080\n  -s {loop,web,both}, --server {loop,web,both}\n                        servers to start\n  -a ADDRESS, --address ADDRESS\n                        register address to read whe action is readregister\n  -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}\n                        value format to apply for register read, default is\n                        Raw\n\n```\n\n## InfluxDB preparation\n### Minimal\n```\nCREATE DATABASE \"diematic\"\nCREATE USER \"diematic\" WITH PASSWORD 'mySecurePas$w0rd'\nGRANT ALL ON \"diematic\" TO \"diematic\"\nCREATE RETENTION POLICY \"one_week\" ON \"diematic\" DURATION 1w REPLICATION 1 DEFAULT\n```\n\n### Additionnal steps for down-sampling\n```\nCREATE RETENTION POLICY \"five_weeks\" ON \"diematic\" DURATION 5w REPLICATION 1\nCREATE RETENTION POLICY \"five_years\" ON \"diematic\" DURATION 260w REPLICATION 1\n\nCREATE CONTINUOUS QUERY \"cq_month\" ON \"diematic\" BEGIN\n  SELECT mean(/temperature/) AS \"mean_1h\", mean(/pressure/) AS \"mean_1h\", max(/temperature/) AS \"max_1h\", max(/pressure/) AS \"max_1h\"\n  INTO \"five_weeks\".:MEASUREMENT\n  FROM \"one_week\".\"diematic\"\n  GROUP BY time(1h),*\nEND\n\nCREATE CONTINUOUS QUERY \"cq_year\" ON \"diematic\" BEGIN\n  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\"\n  INTO \"five_years\".:MEASUREMENT\n  FROM \"five_weeks\".\"diematic\"\n  GROUP BY time(24h),*\nEND\n```\n\n\n## References\n- https://github.com/gmasse/diematic.git\n- https://github.com/riptideio/pymodbus\n- (french) http://sarakha63-domotique.fr/chaudiere-de-dietrich-domotise-modbus/amp/\n- (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\n- (french forum) https://www.domotique-fibaro.fr/topic/5677-de-dietrich-diematic-isystem/\n- ~~(french forum) http://www.wit-square.fr/forum/topics/de-dietrich-communication-modbus-bi-ma-tre~~\n- (french, modbus registers sheets, copy from previous forum) https://drive.google.com/file/d/156qBsfRGJvOpJBJu5K4WMHUuwv34bZQN/view?usp=sharing\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fignaciohr%2Fdiematic_server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fignaciohr%2Fdiematic_server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fignaciohr%2Fdiematic_server/lists"}