So, hier endlich die versprochene Schritt für Schritt Anleitung um Controme mit dem Home Assistant zu verbinden.
1. Sensoren erstellen
Mit Hilfe des Controme yaml creator die Sensoren erstellen.
2. Script für Ziel Temperatur setzen
In der configuration.yaml Scripte für das setzen der Ziel Temperatur einfügen.
shell_command:
wohnzimmer_ziel_temperatur_setzen: 'curl --location --request POST ''http://contromeminiserver.fritz.box/set/json/v1/1/ziel/7/'' --form ''ziel="{{ states(''sensor.wohnzimmer_ziel_temperature_value'') }}"'' --form ''duration="default"'' --form ''user="user@domain.local"'' --form ''password="ganzGeheimesPasswort"'''
Das Script setzt einen REST Call ab, es sollte auch mit der REST Integration funktionieren, da hatte ich aber mit der Formatierung Probleme.
3. Sensor für die Zieltemperatur erstellen
In der configuration.yaml muss ein Tempate Sensor erstellt werden.
Der Template Sensor stellt die Zieltemperatur für einen Raum bereit, die in der Climate Generic Thermostat Integration verwendet werden kann.
template:
- sensor:
- name: "Wohnzimmer Ziel Temperatur"
unique_id: wohnzimmer_ziel_temperature_value
device_class: temperature
state_class: measurement
unit_of_measurement: "°C"
state: "{{ state_attr('climate.wohnzimmer', 'temperature') }}"
4. Für den Raum einen Generic Thermostat erstellen
In der configuration.yaml wird ein Generic Thermostat erstellt
Dieser kann im Dashboard verwendet werden, z.B. mit der Tile Card.
climate:
- platform: generic_thermostat
name: Wohnzimmer
target_sensor: sensor.wohnzimmer_ist_temperatur_value
heater: input_boolean.controme_dummy_heater
min_temp: 4.5
max_temp: 30.5
precision: 0.1
Der Gerneric Thermostat benötigt einen Switch heater. Da ich die Steuerungslogik von Controme nicht überschreiben will habe ich hierfür einen Helper vom Type Toggle angelegt. Dadurch kann ich die Konfigurationsanforderungen des Generic Thermostat erfüllen, die Steuerung läuft aber ins leere.
Den Helper über legt man am besten über die UI an.
Im Beispiel mit dem namen controme_dummy heater. Das ergibt die Entity ID input_boolean.controme_dummy_heater.
5. Ist Temperatur
Für die Ist Temperatur kann entweder der Wert aus der Controme REST API verwendet werden, wenn dort für den Raum ein Enocean Sensor eingebunden wurde.
Oder es kann auch ein beliebiger anderer Sensor, z.B. Aqara oder homematic IP verwendet werden.
Der Name des Sensors muss in den beschriebenen Schritten entsprechend angepasst werden.
Etappenziel
Wenn die ganze Steuerung über Home Assistant erfolgen soll und keine Änderungen mehr in der Controme Weboberfläche erfolgen, und dort auch keine Temperaturszenen, Heizprogramme, Wetterkorrektur oder ähnliches eingesetzt wird, dann ist die Integration damit vollständig.
Soll davon etwas verwendet werden, was auch Sinn macht, denn andernfalls wäre der Controme Miniserver ja überflüssig, dann sind noch weitere Schritte erforderlich. Die spiegeln Änderungen in Controme im Home Assistant wieder. Und sie sorgen dafür, dass zeitgleiche oder sehr kurz aufeinander folgende Änderungen in beiden Oberflächen nicht in einem undefinierten Zustand enden.
6. Helper
Es werden Helper benötig, welche erkennen lassen, wo gerade eine Änderung stattgefunden hat, und entsprechend verhindern, dass eine automatische Action eine Änderung durchführt.
Die Helper können in der configuration.yaml angelegt werden:
input_boolean:
temperature_wohnzimmer_thermostat_flag:
name: "Wohnzimmer - Änderung am Thermostat"
temperature_wohnzimmer_controme_flag:
name: "Wohnzimmer - Änderung in Controme"
Oder über die UI als Helper vom Typ Toggle.
7. Automatisierungen
Es sind noch drei Automatisierungen notwendig. Die können über die UI angelegt werden. Die Dokumentation ist darüber etwas mühsam, deshalb hier der yaml Code. Wenn beim Anlegen einer Automatisierung auf "Edit in YAML"umgeschaltet wird, dann kann das Codesnippet dort eingetragen werden. Wenn alle Bezeichner für die verwendeten Entities stimmen, dann wird der Code auch schön in die graphische Ansicht übersetzt.
Zieltemperatur in Controme setzen wenn am Thermostat im Home Assistant etwas geändert wird.
alias: Set Controme Ziel Temperatur from WohnzimmerThermostat
description: ""
trigger:
- platform: state
entity_id:
- climate.wohnzimmer
attribute: temperature
condition:
- condition: state
entity_id: input_boolean.temperature_wohnzimmer_controme_flag
state: "off"
action:
- service: input_boolean.turn_on
data: {}
target:
entity_id:
- input_boolean.temperature_wohnzimmer_thermostat_flag
- service: shell_command.wohnzimmer_ziel_temperatur_setzen
data: {}
- delay:
hours: 0
minutes: 0
seconds: 5
milliseconds: 0
- service: input_boolean.turn_off
data: {}
target:
entity_id: input_boolean.temperature_wohnzimmer_thermostat_flag
mode: single
Änderungen in Controme, automatisch oder manuell, in Home Assistant übertragen.
alias: Set Thermostat Wohnzimmer Ziel Temperatur from Controme
description: ""
trigger:
- platform: state
entity_id:
- sensor.wohnzimmer_soll_temperatur_value
condition:
- condition: and
conditions:
- condition: numeric_state
entity_id: sensor.wohnzimmer_soll_temperatur_value
below: 99
- condition: state
state: "off"
entity_id: input_boolean.temperature_wohnzimmer_thermostat_flag
action:
- service: input_boolean.turn_on
data: {}
target:
entity_id: input_boolean.temperature_wohnzimmer_controme_flag
- service: climate.set_temperature
data:
temperature: "{{ states('sensor.wohnzimmer_soll_temperatur_value') }}"
target:
entity_id: climate.wohnzimmer
- delay:
hours: 0
minutes: 0
seconds: 5
milliseconds: 0
- service: input_boolean.turn_off
data: {}
target:
entity_id: input_boolean.temperature_wohnzimmer_controme_flag
mode: single
Und für den Fall, dass für den Raum in Controme nur ein Dummy Sensor defniniert wurde und kein echter Sensor angemeldet ist,
kann hiermit der Wert des Sensors regelmäßig an Controme übertragen werden. Diese Automatisierung wird aber wirklich nur benötigt,
wenn in Controme kein echter Sensor, sei es Enocean Sensor oder Raumthermostat angemeldet ist.
alias: Set Controme Ist Temperature from Wohnzimmer Sensor periodically
description: ""
trigger:
- platform: time_pattern
minutes: /4
condition: []
action:
- service: shell_command.wohnzimmer_ist_temperatur_setzen
data: {}
mode: single
In diesem Fall muss in der configuration.yaml noch das Script zum setzen der Temperatur eingetragen werden.
Die Sensor ID ist eine ID für einen 2-draht Sensor und muss durch eine gültige ID ersetzt werden.
shell_command:
wohnzimmer_ist_temperatur_setzen: 'curl --location --request POST ''http://contromeminiserver.fritz.box/set/json/v1/1/set/'' --form ''value="{{ states(''sensor.wohnzimmer_ist_temperature_value'') }}"'' --form ''sensorid="28_aa_aa_aa_aa_aa_aa_aa"'' --form ''user="user@domain.local"'' --form ''password="ganzGeheimesPasswort"'''