MQTT-Schnittstelle des Digital Thermostats X2
Der ALM-X2 tauscht mit dem MQTT-Broker Nachrichten im JSON-Format aus. Sie gliedern sich in drei Kategorien: Autodiscovery, Status-Nachrichten und Command-Nachrichten.
- MQTT Autodiscovery: Das Thermostat meldet seine Entitäten selbstständig an
- Status-Nachrichten: Ist-Temperatur, Sollwert, Betriebszustand
- Command-Nachrichten: Sollwert und Betriebsart aus dem Smart Home setzen
- Nachrichtenformat durchgängig JSON
- Getestet mit Home Assistant, ioBroker, openHAB und Node-RED
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.
Häufige Fragen
Wird der ALM-X2 in Home Assistant automatisch erkannt?
Ja. Über MQTT Autodiscovery meldet das Thermostat seine Entitäten am Broker an und erscheint in Home Assistant ohne manuelle YAML-Konfiguration.
In welchem Format kommen die Nachrichten?
Alle Status- und Command-Nachrichten werden im JSON-Format übertragen.
Welcher MQTT-Broker wird benötigt?
Jeder gängige Broker, zum Beispiel Mosquitto – auch als Add-on innerhalb von Home Assistant.
Kann ich den Sollwert per Automation setzen?
Ja, über die Command-Nachrichten lässt sich der Sollwert aus jeder Automation heraus verändern.
ALM Controls e.K. aus Bad Camberg entwickelt und vertreibt seit 2011 Digital Thermostate und Smart-Home-Komponenten. Fragen vor dem Kauf beantworten wir in der Regel innerhalb von 24 Stunden per E-Mail.