Digital Thermostat X2 - MQTT Nachrichten Aufbau
Nach Eingabe der Zugangsdaten zum MQTT Broker und erfolgreichem Verbindungsaufbau findet folgender Nachrichtenaustausch zwischen dem Thermostat und dem MQTT Broker im JSON Format statt. Die Nachrichten werden hierbei in folgende 3 Kategorien unterteilt.
- MQTT Autodiscovery
- Status Nachrichten
- Command Nachrichten
1. MQTT Autodiscovery
Mit Hilfe der MQTT Discovery Funktion erfolgt der Austausch der Informationen zwischen dem Thermostat und dem MQTT Broker. Hierbei teilt das Thermostat mit welche Informationen in welchen Nachrichten (Topics) hinterlegt sind. Der Austausch erfolgt jedes Mal, wenn sich das Thermostat mit dem MQTT Broker verbindet.
1.1 Geräte Konfiguration
Topic: homeassistant/climate/%hostname%/config
{
"name": "Thermostat",
"unique_id": "alm-x2-flur",
"~": "alm-x2-flur",
"qos": 1,
"device": {
"identifiers": [
"20:10:56:ca:4c:40"
],
"name": "ALM-X2-FLUR",
"model": "X2",
"sw_version": "X2-V1.00a",
"manufacturer": "ALM Controls"
},
"availability_topic": "~/tele/LWT",
"payload_available": "Online",
"payload_not_available": "Offline",
"action_topic": "~/stat/thermostat/properties",
"action_template": "{{value_json.action}}",
"mode_command_topic": "~/cmnd/thermostat/config",
"mode_command_template": "{"heatcoolmode":"{{ value }}"}",
"mode_state_topic": "~/stat/thermostat/config",
"mode_state_template": "{{value_json.heatcoolmode}}",
"temperature_command_topic": "~/cmnd/thermostat/properties",
"temperature_command_template": "{"targetTemperature":{{ value }}}",
"temperature_state_topic": "~/stat/thermostat/properties",
"temperature_state_template": "{{value_json.targetTemperature}}",
"current_temperature_topic": "~/stat/thermostat/properties",
"current_temperature_template": "{{value_json.temperature}}",
"preset_mode_command_topic": "~/cmnd/thermostat/properties",
"preset_mode_command_template": "{"schedulesMode":"{{ value }}"}",
"preset_mode_state_topic": "~/stat/thermostat/properties",
"preset_mode_value_template": "{{value_json.schedulesMode}}",
"preset_modes": [
"comfort",
"home",
"boost"
],
"min_temp": 10,
"max_temp": 40,
"temp_step": 0.1,
"modes": [
"heat",
"cool",
"off"
]
}
1.2 Sensordaten
Topic für Temperatur: homeassistant/sensor/%hostname%_temperature/config
{
"name": "Thermostat Temperature",
"unique_id": "alm-x2-flur_temperature",
"device_class": "temperature",
"~": "alm-x2-flur",
"qos": 1,
"device": {
"identifiers": [
"20:10:56:ca:4c:40"
]
},
"state_topic": "~/stat/thermostat/properties",
"value_template": "{{value_json.temperature}}",
"unit_of_measurement": "°C"
}
Topic für Signalstärke RSSI: homeassistant/sensor/%hostname%_rssi/config
{
"name": "Thermostat WiFi RSSI",
"unique_id": "alm-x2-flur_rssi",
"device_class": "signal_strength",
"~": "alm-x2-flur",
"qos": 1,
"device": {
"identifiers": [
"20:10:56:ca:4c:40"
]
},
"state_topic": "~/stat/network/properties",
"value_template": "{{value_json.rssi}}",
"unit_of_measurement": "dBm"
}
1.3 Aktordaten
Topic für Relais Zustand: homeassistant/binary_sensor/%hostname%_relay1/config
{
"name": "Thermostat Relay1 State",
"unique_id": "alm-x2-flur_state_relay1",
"~": "alm-x2-flur",
"qos": 1,
"device": {
"identifiers": [
"20:10:56:ca:4c:40"
]
},
"state_topic": "~/stat/thermostat/properties",
"value_template": "{{value_json.relay1}}",
"payload_on": "on",
"payload_off": "off"
}
2. Status Nachrichten
2.1 Online Status
Topic: %hostname%/tele/LWT
Über den Topic Online Status erfolgt die Erkennung, ob das Gerät Online ist. Sollte nach vorgegebenen Timeout keine Aktualisierung dieses Topics erfolgen, so wird das Gerät als Offline deklariert.
2.2 Thermostat Status
Topic: %hostname%/stat/thermostat/properties
{
"temperature": 23,
"targetTemperature": 18,
"deviceOn": true,
"schedulesMode": "comfort",
"locked": false,
"action": "idle",
"relay1": "off"
}
2.3 Wochenprogramm
Bei der Aufschlüsselung des Wochenprogramms wird die in der Tabelle dargestellte Logik herangezogen.
Wochenprogramm | Wert | ||||||||||||||||||||||||
Stunden | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | |
Werktage | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | |
Binär | 00000011 | 00000000 | 11111110 | ||||||||||||||||||||||
HEX | 03 | 00 | FE | 0300FE | |||||||||||||||||||||
Wochenende | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | |
Binär | 00000000 | 11111111 | 11111111 | ||||||||||||||||||||||
HEX | 00 | FF | FF | 00FFFF |
Nach der oben dargestellten Logik wird das Wochenprogramm für jeden Wochentag in einer Hexadezimalen Zahl abgespeichert. Die 0-Werte in Binär repräsentieren den ECO-Modus und die 1-Werte den Komfort Modus.
Topic: %hostname%/stat/thermostat/schedules
{
"Monday": "000300FE",
"Monday_Target_Temp": 22,
"Tuesday": "000300FE",
"Tuesday_Target_Temp": 22,
"Wednesday": "000300FE",
"Wednesday_Target_Temp": 22,
"Thursday": "000300FE",
"Thursday_Target_Temp": 22,
"Friday": "000300FE",
"Friday_Target_Temp": 22,
"Saturday": "0000FFFF",
"Saturday_Target_Temp": 22,
"Sunday": "0000FFFF",
"Sunday_Target_Temp": 22
}
2.4 Einstellungen
Topic: %hostname%/stat/thermostat/config
{
"firmware": "X2-V1.00a",
"heatcoolmode": "heat",
"EcoTemperature": 18,
"Tdifference": 0.4,
"Tadjust": -0.4,
"RegulationMode": "normalClose",
"PI_Period": 10,
"PI_Prop_Kp": 20,
"PI_Integral_Ki": 5,
"SwitchControl": "relay1"
}
2.5 Netzwerk
Topic: %hostname%/stat/network/properties
{
"idx": "alm-x2-flur",
"ip": "192.168.178.124",
"rssi": -37
}
2.6 Uhrzeit
Topic: %hostname%/stat/clock/properties
{
"ntpServer": "pool.ntp.org",
"timeZone": 60,
"validTime": true
}
3. Command Nachrichten
3.1 Änderung Temperatur Sollwert
Bei einer Änderung des Sollwertes ist das Verhalten des Thermostats genau so, als wenn die Temperatur am Gerät selbst geändert wird. Dabei repräsentiert der manuelle Modus am Gerät den Modus Home, das Wochenprogramm am Gerät den Modus Comfort und temporäre Änderung des Wochenprogramms den Modus Boost im HomeAssistant.
Topic: %hostname%/cmnd/thermostat/properties
{
"targetTemperature": 22
}
3.2 Änderung Wochenprogramm und manuelle Regelung
Topic: %hostname%/cmnd/thermostat/properties
{
"schedulesMode": "comfort"
}
Mögliche Vorgaben: comfort für Wochenprogramm und home für manuelle Regelung
3.3 Änderung Heiz-, Kühlmodus, Ein/Aus
Topic: %hostname%/cmnd/thermostat/config
{
"heatcoolmode": "heat"
}
Mögliche Vorgaben: heat, cool, off
Die zuvor dargestellten Command Nachrichten, sind Nachrichten, die von Homeassistant direkt unterstützt werden. Es besteht natürlich die Möglichkeit alle Parameter (außer Temperatur Istwert und Firmware), die unter Status Nachrichten dargestellt sind, ebenfalls zu ändern. Hierfür bedarf es einer eigenständiger Implementierung je nach verwendetem Smart Home System.