Sensor: External automatisch bei Heizkörperthermostat setzen

Hallo,

ich habe eine Aqara Heizkörperthermostat E1 welcher über Zigbee2MQTT angebunden ist. Zusätzlich habe ich externe Temperaturmesser welche auch angebunden sind und den internen Messfühler ersetzen.
Über eine Automation wird dem Thermostat die neue gemessene Temperatur gesagt, er behandelt es dann wie seine lokale Temperatur und regelt entsprechend.
Funktioniert auch gut, allerdings nur wenn über die Weboberfläche bei Z2M den wert sensor: auf External bei expose-funktionen gestellt ist.
Bei internal scheint er gar keine Kommandos mehr anzunehmen.
Es ist mir schon öfters passiert dass diese Werte wieder auf internal standen. Immer wenn der HA Server neustartet oder Stromlos wird.
Ein mitschicken per mqtt.publish scheint nicht zu funktionieren.

Der Explorer zeigt zwar an set = {“external_temperature_input”: 9.56, “sensor”: “external” }

aber der Wert bleibt trotzdem auf internal wenn ich ihn zum testen so einmal auf der UI gesetzt habe.

Log sagt:

[] z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/Schlafzimmer Temp', payload '{"battery":100,"device_temperature":9,"humidity":68.33,"linkquality":152,"power_outage_count":8,"pressure":1003.7,"temperature":9.56,"update":{"installed_version":-1,"latest_version":-1,"state":null},"voltage":3063}'

[] z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/Schlafzimmer Thermostat', payload '{"away_preset_temperature":"18.0","battery":100,"calibrate":null,"calibrated":true,"child_lock":"UNLOCK","device_temperature":28,"external_temperature_input":null,"internal_heating_setpoint":21,"linkquality":180,"local_temperature":23.1,"occupied_heating_setpoint":21,"power_outage_count":0,"preset":"manual","schedule":false,"schedule_settings":"mon,sun|0:00,21.0|12:00,17.0|18:00,21.0|23:59,21.0","sensor":"internal","setup":false,"system_mode":"heat","update":{"installed_version":-1,"latest_version":-1,"state":null},"valve_alarm":false,"valve_detection":true,"voltage":3100,"window_detection":false,"window_open":false}'

Sobald ich den Sensor wieder manuell auf external stelle geht es auch wieder

[] z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/Schlafzimmer Temp', payload '{"battery":100,"device_temperature":9,"humidity":83.63,"linkquality":192,"power_outage_count":8,"pressure":1004,"temperature":11.32,"update":{"installed_version":-1,"latest_version":-1,"state":null},"voltage":3063}'

[] z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/Schlafzimmer Thermostat', payload '{"away_preset_temperature":"18.0","battery":100,"calibrate":null,"calibrated":true,"child_lock":"UNLOCK","device_temperature":28,"external_temperature_input":null,"internal_heating_setpoint":21,"linkquality":192,"local_temperature":10.74,"occupied_heating_setpoint":21.5,"power_outage_count":0,"preset":"manual","schedule":false,"schedule_settings":"mon,sun|0:00,21.0|12:00,17.0|18:00,21.0|23:59,21.0","sensor":"external","setup":false,"system_mode":"heat","update":{"installed_version":-1,"latest_version":-1,"state":null},"valve_alarm":false,"valve_detection":true,"voltage":3100,"window_detection":false,"window_open":false}'

Wie kann ich sicherstellen, dass immer überprüft und korrigiert wird, dass der Modus auch auf external Sensor steht?
Mein YAML

alias: Neu mit Ext
description: Test Setzt sensor auf external
triggers:
  - trigger: state
    entity_id:
      - sensor.schlafzimmer_temp_temperature
conditions: []
actions:
  - action: mqtt.publish
    metadata: {}
    data:
      evaluate_payload: false
      qos: "2"
      retain: false
      topic: zigbee2mqtt/Schlafzimmer Thermostat/set
      payload: >
        {"external_temperature_input": {{
        states('sensor.schlafzimmer_temp_temperature') }},
                  "sensor": "external"
                  }
mode: single

Es geht um das Aqara SRTS-A01?

Ich hab das einfach in zigbee2MQTT angeklickt:

Auf der Seite “Expose-Funktionen’ einfach auf external bei Sensor klicken.
Die Temperaturen, die ich schreibe, stehen dann hier unter Local temperature.

Ich schreibe die in einer Automation in zwei Thermostate (ein Aqara und ein Sonoff):

actions:
  # Wenn sich die Temperatur des externen Sensors geändert hat, dann
  # schreibe die neue Temperatur in die beiden Thermostaten (ein
  # Aqara SRTS-A01 und ein Sonoff TRVZB)
  - if:
      - condition: trigger
        id: Isttemperatur_Sensor
    then:
      - action: number.set_value
        metadata: {}
        data:
          value: "{{ states('sensor.sonoff_snzb_02d_wz_temperature') }}"
        target:
          entity_id: number.thermostat_wz_l_external_temperature_input
      - action: number.set_value
        metadata: {}
        data:
          value: "{{ states('sensor.sonoff_snzb_02d_wz_temperature') }}"
        target:
          entity_id: number.thermostat_wz_r_external_temperature_input

Unter Entwicklerwerkzeuge → Zustände finden sie sich im Attribut current_temperature:

Danke für deinen Beitrag Oern. Ja es geht um genau den Thermostat.
Aber das ist nicht das Problem.
Es funktioniert bei mir auch gut mit meinem Code. So wie bei dir werden die Werte übernommen.

Das Problem: wenn Stromausfall ist und der HA Server wieder neu startet sind alle Werte von Sensor wieder auf " internal " gestellt und ich muss händisch in die UI und es wieder auf “external” stellen. (Ausführlich siehe oben)

PS. Warum verwendest du nicht mqtt.publish? Es geht anscheinend auch ohne?
Wenn es auf internal steht nimmt das Thermostat keinerlei werte über mqtt.publish an. Geht es ohne publish und nur mit set?

Meinst Du mit Stromausfall “Der Computer, auf dem HA läuft, geht schlagartig aus”? Das kommt bei mir nicht vor, weil ich eine USV habe. :wink:

Meinen NUC, auf dem HA läuft, starte ich regelmäßig komplett neu, wenn ich da was konfiguriere oder installiere. Bisher läuft meine Heizungssteuerung ohne zu murren sauber durch.

Äh … keine Ahnung!? Ich hab es in der UI ganz am Anfang beim Einrichten einmal umgestellt und seitdem nicht mehr angefasst. :man_shrugging:

Es gibt nur diese eine number, wo die aktuelle Temperatur gespeichert wird. Ich hab gerade mal von external auf internal umgestellt und der Wert wurde umgehend überschrieben:

Da es nur diese eine number gibt, wo die aktuelle Temperatur gespeichert wird, wäre es natürlich Quatsch, sie mit Werten von extern zu überschreiben, wenn auf intern geschaltet ist. Von daher ist es schon verständlich, wenn die Werte nicht angenommen werden. :wink: