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.

  1. MQTT Autodiscovery
  2. Status Nachrichten
  3. 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.