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.
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.
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
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.
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.
Hallo Guide
Ich fange mal ziemlich weit vorne an. Beim Versuch, diese Daten für Mosquito einzutragen, scheitere ich an: Fehler beim Speichern der Add-on Konfiguration, Invalid list for option ‚logins‘ in Mosquitto broker (core_mosquitto). Got {‚logins‘: {‚username‘: YYYYYYYY, ‚password‘: ‚XXXXXXXXXXXXXXXX‘}, ‚require_certificate‘: True, ‚certfile‘: ‚fullchain.pem‘, ‚keyfile‘: ‚privkey.pem‘, ‚customize‘: {‚active‘: False, ‚folder‘: ‚mosquitto‘}}
Und nun? Hast du einen Tipp für den nächsten Schritt?
Hi Joska, das klingt danach, dass du irgendwo ein Leerzeichen zu viel oder zu wenig hast. du kannst dir die config ja auch als YAML ausgeben, da siehst du es eher. Hier meine Config, steht ja nix kritisches drin. Ich habe auch nur die Infos unter logins konfiguriert, die anderen Werte habe ich so gelassen:
logins:
– username: 00004DA6
password: 3920453B3A4EA677
require_certificate: false
certfile: fullchain.pem
keyfile: privkey.pem
customize:
active: false
folder: mosquitto
debug: false
Hallo Guido
Danke für die Beschreibung. Bist du hier noch offen für Nachfragen?
Jörg
Hallo Guido
Ich habe es mit diversen Konfigurationen versucht. No chance, bei meinem usernamen 00006671 werden die ersten vier Nullen automatisch abgeschnitten, wenn ich dies nicht in Hochkommata packe. Wo kann ich eine YAML-Datei lesen und ggfls bearbeiten?
LG, Jörg
Hallo Guido
Der Tipp mit dem Leerzeichen war der Richtige.
Nun stehe ich vor dem Problem der Umleitung der Serveradresse. Welche Adresse muss mit dnsmasq wohin und wie umgeleitet werden? Ich lese kreuz und quer im Net, lese und frage in Foren, die Antworten sind…späääärlich 🙂
Hallo Guido
Nachdem ich den MQTT-Broker neu konfiguriert habe, die Einstellungen in der Test-Seite von mqtt-cool funktioniert, stehe ich vor der nächsten Herausforderung. Die Server-Adresse mqtt.eurotronic.io soll auf eine interne mqtt-Adresse, also den mosquitto-broker umgeleitet werden. Wie ist das konkret gemeint?
Hallo Jörg,
es gibt ein Add-On Dnsmasq, damit kannst du per DNS Anfragen umleiten. Damit das funktioniert musst du dann die IP des HomeAssistant Servers, auf dem Dnsmasq läuft als DNS-Server in deinem WLAN verteilen. Und in DNSMasq die IP des Homeassistant als IP der mqtt.eurotronic.io eintragen.
Zur Fritzbox gibt es hier eine Anleitun https://at.avm.de/service/wissensdatenbank/dok/FRITZ-Box-7560/165_Andere-DNS-Server-in-FRITZ-Box-einrichten/