Skip to content

Heatpump telemetry for makes/models: Viessmann Vitocal 100A, Rinnai Shimanto, Thermocold MEX Vsx series is decoded to json and posted to a mosquitto topic

License

Notifications You must be signed in to change notification settings

ezplanet/heatpump

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Viessman Vitocal 100A, Rinnai Shimanto, Thermocold MEX Vsx, Maxa i-32V5 - Heatpump Telemetry

Purpose

Heatpump telemetry for makes/models: Viessmann Vitocal 100A, Rinnai Shimanto, Thermocold MEX Vsx, Maxa i-32V5 series is decoded to json and posted to a mosquitto topic

Description

This service reads the MODBUS communications between a Viessmann Remote Touch Controller (master) and a Vitocal 100A heatpump (slave) and posts heatpump data in json format to an MQTT topic. A Remote Touch Controller (RTC) is essential because this service only reads MODBUS data, it does not query the heatpump directly. The Remote Touch Controller is the MODBUS master that initiates the communications with a Vitocal 100A heatpump and queries its telemetry. It could be possible to reproduce the queries sent by the RTC, however this service was designed to be read only in order to avoid the risk of sending unwanted configuration changes to the heatpump.

Note

Viessmann, Rinnai, Thermocold MODBUS data packets are undocumented (The Manufacturers do not provide documentation), they have been decoded by observing the heatpump behaviour and patterns and thus in some cases they might be inaccurate or incorrect.

Decoding

Four query/response records have been decoded, each are identified by their length

MODBUS Read Registers Records

A Vitocal 100A response record looks as follows:

+--------------------------------+
| AA FF SZ VVVV1 VVVV2 VVVx CKSM |
+--------------------------------+
AA = Modbus Address, 1 Byte (default = 1)
FF = Modbus Function, 1 Byte (read registers = 3)
SZ = Data registers size in bytes (1 register = 2 bytes), 1 Byte
VVV1 = Register 1
VVV2 = Register 2
VVVx = Register x
CKSM = Checksum (inverted bytes)

Four response types have been identified: STATES, MACHINE, TEMPERATURES, ERRORS. The record type is indentified by its size which is fixed for each type

STATES       = 27 bytes
MACHINE      = 11 bytes
TEMPERATURES = 100 bytes
ERRORS       = 15 bytes

The data payload size for each type is its size less 5 bytes (1 byte for the address, 1 byte for function, 1 byte for payload size, 2 bytes for checksum), thus the validity of a response record is verified by checking that the value of the third byte (payload size) is equal the total record size less five.

See RECORDS.md for MODBUS telemetry decoding

JSON telemetry data

This service reads the modbus data stream from the heat pump and encodes it into data stream in json format that is publised to a mosquitto topic. When the heatpump is in standby, records sent to mosquitto are throttled down to one every X seconds (where X is a configurable value) to reduce network traffic.

{
    "timestamp":"2022-11-14T11:45:19.454544965+01:00",
    "control_mode": 2,
    "status":0,
    "mode":1,
    "compressor_required":false,
    "compressor_status":0,
    "compressor_hz":0,
    "pump_status":0,
    "pump_speed":0,
    "fan_speed":0,
    "temperatures":{
        "water_in":"18.7",
        "water_out":"17.9",
        "external":"15.6",
        "compressor_in":"17.0"
        "compressor_out":"50.5"
    },
    "pressure_high":1189,
    "pressure_low":1201,
    "hours":17,
    "errors":{
        "error_1":0,
        "error_2":0,
        "error_3":0,
        "error_4":0,
        "error_5":0
    }

Notes

Repositories: github.com and local gitea

About

Heatpump telemetry for makes/models: Viessmann Vitocal 100A, Rinnai Shimanto, Thermocold MEX Vsx series is decoded to json and posted to a mosquitto topic

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages