Skip to main content

Sends MQTT events from KRONOTERM device

Project description

kronoterm2mqtt

tests codecov kronoterm2mqtt @ PyPi Python Versions License GPL-3.0-or-later

Get information from the Kronoterm heat pump connected to Modbus TEX interface.

While reading Modbus registers from the pump the kronoterm2mqtt sends MQTT discovery events from KRONOTERM to MQTT broker (Mosquito) that Home Assistant then reads and the sensor readings appear therein automatically.

Optionally, the MQTT loop can also control custom (DIY) IO expander to be added to heat pump controlling additional heating loops and pumps for solar DHW pre-heat boiler. This expander board is using Arduino nano MCU to provide serial (UART) interface for Raspberry Pi control. See Etera UART GPIO expander project for help on the protocol and interface. By default, this module functionality is disabled so that only Kronoterm Heat Pump MQTT can still be used without having this hardware module.

Bootstrap kronoterm2mqtt

Clone the sources and just call the CLI to create a Python Virtualenv, e.g.:

~$ git clone --recursive https://github.com/kosl/kronoterm2mqtt.git
~$ cd kronoterm2mqtt
~/kronoterm2mqtt$ ./cli.py --help

The output of ./cli.py --help looks like:

kronoterm2mqtt v0.1.3 bed9746 (/home/leon/kronoterm2mqtt)
                                                                                            
 Usage: ./cli.py [OPTIONS] COMMAND [ARGS]...                                                
                                                                                            
╭─ Options ────────────────────────────────────────────────────────────────────────────────╮
│ --help      Show this message and exit.                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────╮
│ edit-settings         Edit the settings file. On first call: Create the default one.     │
│ print-registers       Print RAW modbus register data                                     │
│ print-settings        Display (anonymized) MQTT server username and password             │
│ print-values          Print all values from the definition                               │
│ probe-usb-ports       Probe through the USB ports and print the values from definition   │
│ publish-loop          Publish KRONOTERM registers to Home Assistant MQTT                 │
│ systemd-debug         Print Systemd service template + context + rendered file content.  │
│ systemd-remove        Remove Systemd service file. (May need sudo)                       │
│ systemd-setup         Write Systemd service file, enable it and (re-)start the service.  │
│                       (May need sudo)                                                    │
│ systemd-status        Display status of systemd service. (May need sudo)                 │
│ systemd-stop          Stops the systemd service. (May need sudo)                         │
│ test-mqtt-connection  Test connection to MQTT Server                                     │
│ version               Print version and exit                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────╯
                                                                                            
 Project Homepage: https://github.com/kosl/kronoterm2mqtt

Setup

Once having hardware (Modbus wiring) correctly installed the steps to get running are:

  1. ./cli-app.py edit-setting to configure MQTT host and credentials, heat pump model and RS485 port.
  2. ./cli-app.py test-mqtt-connection to check that Mosquitto broker accepts connections.
  3. ./cli-app.py print-values to see the actual registers from the heat pump converted to correct units.
  4. Install and configure MQTT integration in Home assistant
  5. ./cli-app.py publish-loop to see the heat pump under Home Assistant -> Settings -> Devices & Services -> MQTT.
  6. sudo ./cli-app.py systemd-setup to create permanent service, and
  7. sudo ./cli-app.py systemd-start to start the publish-loop service

There are some other useful commands to debug (-v switch) and develop it further. Unwanted registers can be commented out by changing kronoterm2mqtt/definitions/kronoterm_ksm.toml individual [[sensor]] entries to something like [[sensor_disabled]] so that it will be skipped during definitions scan. There are quite some number of disabled sensors that can be shown and the TOML file can get more sensors if required.

print-values

$ ./cli.py print-values

+ /home/leon/kronoterm2mqtt/.venv-app/bin/kronoterm2mqtt_app print-values

kronoterm2mqtt v0.1.3 bed9746 (/home/leon/kronoterm2mqtt)
                                        (Set log level 0: ERROR)
Connect to /dev/ttyUSB0...
slave_id=20
              System operation 1 
          HP inlet temperature 29.7 °C
               DHW temperature 46.4 °C
           Outside temperature 28.4 °C
         HP outlet temperature 29.3 °C
       Evaporating temperature 30.4 °C
        Compressor temperature 30.1 °C
     Current power consumption 0.0 W
            Loop 1 temperature 29.6 °C
            Loop 2 temperature 27.3 °C
 Loop 2 thermostat temperature 25.0 °C
       Heating system pressure 1.4 bar
               Source pressure 1.9 bar
                           COP 0.00 
                          SCOP 0.00 

Using PyPi repository

kronoterm2mqtt is released under PyPi so that it is easier to install it in a virtual environment such as:

python -m venv venv
venv/bin/pip install kronoterm2mqtt
venv/bin/kronoterm2mqtt_app edit-settings
venv/bin/kronoterm2mqtt_app print-values

Images

Modbus RTU connection within a Kronoterm ETERA heat pump from Raspberry Pi3B to TEX interface

Raspberry Pi3B (running Home Assistant) and a small 5-port ethernet switch below are powered by a buckle step down (12->5V) converters.

Home Assistant

Home Assistant -> Settings -> Devices & Services -> MQTT screenshot Home Assistant

TODO

  • enum_sensor to convert status registers to more meaningfull text readings instead of float sensor
  • switch to turn on at least DHW circulation pump manually in Home Assistant and then programatically since 6 transitions provided by the heat pump is too limited
  • binary_sensor to show some two-state states
  • status_sensor to decode binary statuses in enum like manner combined. For example error messages.
  • Upgrade ha-services with number component allowing change of some numeric parameters (set temperatures, etc.).

References

  • Navodila za priklop in uporabo CNS sistema.pdf Kronoterm Modbus RTU description (in Slovene) obtained from Kronoterm support
  • Installation and Operating Manual for BMS System.pdf Kronoterm Modbus RTU description obtained from Kronoterm support

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

kronoterm2mqtt-0.1.5.tar.gz (560.3 kB view details)

Uploaded Source

Built Distribution

kronoterm2mqtt-0.1.5-py3-none-any.whl (40.3 kB view details)

Uploaded Python 3

File details

Details for the file kronoterm2mqtt-0.1.5.tar.gz.

File metadata

  • Download URL: kronoterm2mqtt-0.1.5.tar.gz
  • Upload date:
  • Size: 560.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.2

File hashes

Hashes for kronoterm2mqtt-0.1.5.tar.gz
Algorithm Hash digest
SHA256 f51ff1678a11ad894fe4e3091fd41102f9f9660a475209f546c2ca3cfe9ee218
MD5 e1dbe6ef017a9126a656be357a7e01a8
BLAKE2b-256 3d6a443a267acc8485d5ba35af3232a1c25f7b277e43217799f3df97e920febc

See more details on using hashes here.

File details

Details for the file kronoterm2mqtt-0.1.5-py3-none-any.whl.

File metadata

File hashes

Hashes for kronoterm2mqtt-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 bb5ca3a9c70603280909747511a76bdd4c6d38c99c0ba06fa609cbf792a98783
MD5 cf266775029acd7936f975b5d83cf368
BLAKE2b-256 fb23a7ed1408c0343972ae72e45c9c36a7bf63d3f0e468abfffd2e9002501f00

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page