Comet WiFi Thermostate und Home Assistant

Comet WiFi Thermostate und Home Assistant

Ich habe einige dieser Comet WiFi Thermostate von eurotronic im Einsatz, sie sind recht günstig. Außerdem waren sie einfach in meine alte Smart Home Lösung der Telekom einzubinden. Mit dem Umstieg auf Home Assistant musste ich feststellen, dass es keine Integration für die Thermostate gab. Also habe ich mich auf die Suche gemacht und in mehreren Artikeln im Internet Infos gefunden, wie diese Thermostate in Home Assistant eingebunden werden können.

Das Thermostat verwendet MQTT über eine WiFi Verbindung zur Kommunikation. Leider lässt sich der MQTT-Server Eintrag des Thermostates nicht ändern. Es gibt auch vom Hersteller keine Dokumentation über die genutzten Topics zur Steuerung des Thermostats. In verschiedenen Foren habe ich Blogs gefunden, und mir die Informationen zusammengesucht.

Da der MQTT Server nicht konfigurierbar ist, muss zunächst über den eigenen DNS-Server eine Umleitung der Daten auf einen eigenen MQTT-Server erreicht werden. Das Thermostat verwendet zwei MQTT-Server (mqtt.eurotronic.io / mqtt1.eurotronic.io), beide werden im DNS auf den eigenen Server umgeleitet. Für die DNS-Umleitung habe ich das Add-Ons Dnsmasq verwendet, als MQTT-Broker Mosquitto.

Am MQTT müssen sich alle Clients anmelden, die Comet Wifi Thermostate machen dass alle mit der gleichen Username/Passwort Kombination, die ich in Klartext in einem Wireshark Trace gefunden haben. Dazu mit WireShark tracen und ein Thermostat zurücksetzten und neu einbinden.

Comet WiFi Thermostate und Home Assistant

Diese Username/PW Kombination wird dann im Mosquitto eingetragen.

Mit einem MQTT-Explorer auf dem eigenen PC kann man sich dann mit dem Mosquitto verbinden und alle MQTT-Messages sehen.

Comet WiFi Thermostate und Home Assistant

MQTT baut hierarchische Strukturen auf, s.g. Topics. Jedes Topic hat dann einen Wert. Bei mir sind vier Thermostate eingebunden, jedes Thermostat hat denselben Aufbau der Topics.

Folgende Topics konnte ich durch Recherche im Internet herausfinden. Jedes Topic kann an das Thermostat gesendet und auch ausgelesen werden. Einige Topics werden verwendet, um das Thermostat abzufragen.

S/ set value 
V/ reported value from device.

/S/XX verify connection
/S/AF
 request temperature and other values
- #0B requests current target and actual temperature
- #02000000 -- connect with app, request current temp 
- #FFFFFFFF - request device to send all fields back
 
A0 setpoint 
A1 current temp 
A2 temp Offset 
A3 options bitfield keylock / summertime / rotate display 
 #200700 rotate off 
 #220500 rotate on 
 #230400 activate summertime 
 #220500 deactivate summertime 
 #270000 key lock on  
 #230400 key lock off 
 
A5 => window open settings #1234  
 last byte = duration in min 
 first byte sensitivity 
 X80 => high 
 X08 => middle 
 X0C =>low 
 
A7 - holiday settings 
A8 - AE weekday program 
 

Wie bei den Werten zu sehen ist, es sind HEX-Werte. Die Temperatur-Werte müssen umgerechnet werden.
Der HEX-Wert wird zunächst das # Steuerzeichen entfernt, es wird dann in einen Integer-Wert umgewandelt und danach noch durch Zwei geteilt, da das Thermostat mit 0,5° Werten arbeitet.
{{ int(value[1:3],base=16)/2 }}

Jetz müssen wir ein Device vom Type climate erstellen, damit wir das Thermostat auch ansteuern können.

#Dazu legen wir eine YAML-Datei für die MQTT-Settings an und verlinken sie in der Configuration.yaml:
mqtt: !include mqtt.yaml

#In der mqtt.yaml wird dann jedes Gerät wie folgt angelegt:
    climate:
    - name: EssZimmer 
      unique_id: esszimmer1_climate
      temperature_command_topic: "03/00004DA6/D43D391E23B8/S/A0"
      temperature_command_template: '{{ "#" + "%0x" %int(float(value)*2) }}'
      temperature_state_topic: "03/00004DA6/D43D391E23B8/V/A0" 
      temperature_state_template: '{{ int(value[1:3],base=16)/2 }}'
      current_temperature_topic: "03/00004DA6/D43D391E23B8/V/A1"
      current_temperature_template: '{{ int(value[1:3],base=16)/2 }}'
      icon: mdi:temperature-celsius
      modes: "heat"
      temp_step: 0.5
      precision: 0.5
      min_temp: 16
      max_temp: 30
      retain: true
      initial: 17
Comet WiFi Thermostate und Home Assistant

Und schon erscheinen die Thermostate im Home Assistant und können von dort gesteuert werden.
Ein Schritt fehlt uns, die Thermostate senden von sich aus keine MQTT-Messages um Strom zu sparen. Wir brauchen eine Automatisierung, um regelmäßig die aktuellen IST-Werte der Thermostate auszulesen. Ich habe zwei Automatisierungen geschrieben, eine bei der ich gezielt ein Gerät abfragen kann, eine Automatisierung, die alle Comet Devices abfragt.
Das Prinzip ist immer gleich, ich setzte eine MQTT-Message auf das Topic “03/00004DA6/DEVICE-ID/S/A0″ mit dem Wert “#2b” ab. Device-ID ist die ID (Mac-Addesse) des Gerätes, dass ich abfragen will.

Die erste Automatisierung startet alle 2 Stunden und beim Start von Home Assistant und fragt alle Thermostate ab. Hier nutze ich den Payload “#0b” beim Start von HA um die IST- und Soll-Temperatur auszulesen und “#02000000” alle 2 Stunden um nur die aktuelle Temperatur auszulesen.

alias: get temperature from all comet devices
description: ""
trigger:
  - platform: homeassistant
    event: start
    id: start HA
  - platform: time_pattern
    hours: "2"
    id: alle 2 Stunden
action:
  - variables:
      Comets:
        - D43D39132F26
        - D43D39551156
        - D43D39E38DCE
        - D43D391E23B8
  - choose:
      - conditions:
          - condition: trigger
            id:
              - start HA
        sequence:
          - repeat:
              count: "{{ Comets | count }}"
              sequence:
                - variables:
                    comet: "{{ Comets[repeat.index - 1] }}"
                - service: mqtt.publish
                  data:
                    payload: "#0b"
                    topic: 03/00004DA6/{{ comet }}/S/AF
            enabled: true
      - conditions:
          - condition: trigger
            id:
              - alle 2 Stunden
        sequence:
          - repeat:
              count: "{{ Comets | count }}"
              sequence:
                - variables:
                    comet: "{{ Comets[repeat.index - 1] }}"
                - service: mqtt.publish
                  data:
                    payload: "#02000000"
                    topic: 03/00004DA6/{{ comet }}/S/AF
            enabled: true
    default:
      - repeat:
          count: "{{ Comets | count }}"
          sequence:
            - variables:
                comet: "{{ Comets[repeat.index - 1] }}"
            - service: mqtt.publish
              data:
                payload: "#0b"
                topic: 03/00004DA6/{{ comet }}/S/AF
        enabled: true
mode: single

Die zweite Automatisierung reagiert auf eine Änderung der Soll-Temperatur der Thermostate und gibt dann nur die aktuelle Temperatur zurück. Hier nutze ich eine hilfreichen Trick von MQTT, im Topic können Wildcards verwendet werden. Das “/+/” im topic “03/00004DA6/+/S/A0″ ist ein Platzhalter, so werden alle Änderungen der Soll-Temperatur in den Topics der Comet Devices erkannt. Das Script fordert mit dem Payload “#02000000” nur die aktuelle Temperatur des einen Devices an.

alias: get current temperature A0
description: use push mqtt on S/AF =
trigger:
  - platform: mqtt
    topic: 03/00004DA6/+/S/A0
condition: []
action:
  - service: mqtt.publish
    data:
      qos: 0
      retain: false
      payload: "#0B"
      topic: 03/00004DA6/{{trigger.topic[12:24]}}/S/AF
mode: queued
max: 5

Das war es, es war etwas ticky, aber so können Comet WiFi Thermostate über Home Assistant gesteuert werden.

1 Gedanke zu „Comet WiFi Thermostate und Home Assistant“

  1. Hi, thank you for this Article, for im trying to integrate my Comets since last year.

    I tried your Configuration, by adapting it with my credentials, but run into an error which prevents my configuration to reload.

    true for dictionary value @ data[‘mqtt’][0][‘climate’][0][‘retain’]. Got None

    it seems theres a misspelling in mqtt.yaml but i can’t find out why.

    Antworten

Schreibe einen Kommentar