TRV Kalibrierung Fehlermeldung

Moin!

Ich bin neu hier. Habe die Suche benutzt, bin bei meinem Anliegen aber nicht ganz fündig geworden.

Zum Setting: Ich nutze Thermostate (TRVZB) und Temperatursensoren (SNZB-02P) von Sonoff via Z2M auf einem Raspi 4B.

Das interne Reporting der Temperatur der Thermostate habe ich deaktiviert und Temperature sensor select auf external umgestellt. Bei den Temperatursensoren habe ich die Werte für das Reporting auf 1-60-10 angepasst. Für die Übergabe der Temperatur vom Temperatursensor an das Thermostat habe ich eine Automation geschrieben:

alias: TRV Kalibrierung EZ
description: Temperatur von Sonoff an TRV als externer Input
triggers:
  - entity_id:
      - sensor.temperatursensor_esszimmer_temperature
    for:
      hours: 0
      minutes: 0
      seconds: 1
    trigger: state
conditions: []
actions:
  - target:
      entity_id: number.thermostat_esszimmer_external_temperature_input
    data:
      value: "{{ states('sensor.temperatursensor_esszimmer_temperature') | float }}"
    action: number.set_value
mode: single

Das funktioniert auch ganz gut. Man könnte das sicherlich noch verbessern. Die Sekunden-Einstellung zum Beispiel könnte man sicher auch weglassen und in “bei Änderung” ändern. Wenn ich das richtig angestellt und verstanden habe, sorgt die Automation dafür, dass das Thermostat jetzt immer die gemessene Ist-Temperatur vom Temperatursenor bei jeder Änderung bekommt. Werte wie unter Local temperature calibration dürften somit ignoriert werden und keine Rolle mehr spielen.

Mein Problem: In den Logs erhalte ich für jedes Thermostat diese Fehlermeldungen:

TRV Kalibrierung SZ: Error executing script. Error for call_service at pos 1: Error rendering data template: ValueError: Template error: float got invalid input ‘unavailable’ when rendering template ‘{{ states(‘sensor.temperatursensor_schlafzimmer_temperature’) | float }}’ but no default was specified
TRV Kalibrierung SZ: Error executing script. Error for call_service at pos 1: Error rendering data template: ValueError: Template error: float got invalid input ‘unknown’ when rendering template ‘{{ states(‘sensor.temperatursensor_schlafzimmer_temperature’) | float }}’ but no default was specified

Wenn ich das richtig interpretiere, wird gemeckert, weil die Fälle unknown und unavailable nicht definiert sind, also wenn kein Temperatursensor vorhanden oder dieser nicht erreichbar ist. Meines Wissen fallen die TRVZB nach 2h in ein Fallback auf die interne Temperatur zurück, wenn sie den Wert nicht von extern bekommen. Ich müsste also den Code anpassen, um die Meldungen zu vermeiden, weiß aber nicht wie man das elegant macht.

Bin für jede Hilfe dankbar!

Ich habe hier auch Sonoff TRVZB’s und als externe Sensoren ebenfalls u.a. SNZB-02P. Nutze dieses Blueprint von photomoose, funktioniert 1A.

Edit:
Hier noch meine Einstellungen fürs Reporting von einem externen Sensor:

@knuti1960

Den Blueprint kenne ich. Der setzt, wenn ich das richtig gelesen habe, eine Editierung der zigbee2mqtt config.yaml für jeden Temperatursensor zwecks force_update voraus. Da war ich zurückhaltend. Die Fehler erscheinen trotzdem, weil die states nicht definiert sind.

Kommen die Meldungen immer oder nur bei einem Neustart o.ä.?
Denn bei einem Neustart haben die Temperatursensoren vermutlich noch nicht den Wert wieder und sind dann unavailable.

@maxe

Danke für den Hinweis. Ich beobachte das einmal. Wenn ich das richtig sehe, dann nur nach einem Neustart, was ja auch verständlich wäre.

Float hat keinen default-Wert, deshalb meldet er unavailable. Versuch mal float(20) z. B. Dann wird anstatt unavailable der Wert 20 genommen.

Danke! float(0) müsste das Problem ja dann eigentlich lösen, also wenn nicht da, dann default-Wert 0.

alias: TRV Kalibrierung EZ
description: Temperatur von Sonoff an TRV als externer Input
triggers:
  - entity_id:
      - sensor.temperatursensor_esszimmer_temperature
    for:
      hours: 0
      minutes: 0
      seconds: 1
    trigger: state
conditions: []
actions:
  - target:
      entity_id: number.thermostat_esszimmer_external_temperature_input
    data:
      value: "{{ states('sensor.temperatursensor_esszimmer_temperature') | float(0) }}"
    action: number.set_value
mode: single

Ja genau. Um keine so großen Schnitzer zu bekommen, würde ich allerdings nicht 0 nehmen, sondern einen Wert der an den normalen Wert ran reicht.

Was heißt “große Schnitzer”? Und was meinst Du mit dem “normalen Wert”? Danke!

Da es um eine Heizung und einen Temperaturwert geht, hatte ich extra float(20) geschrieben. Float(0) würde 0 Grad bedeuten, wenn ich deine Automation richtig verstehe.

Ja genau, photomoose beschreibt ja, weshalb das so sein soll. Ist ja kein Problem, das zu ergänzen:

  '0x38398ffffe18a031':
    friendly_name: HexenKlima
    homeassistant:
      temperature:
        force_update: true

Müsste man m.E. für eine eigene Automation eigentlich auch so machen, um den Failsafe-Mode bei konstanter externer Temperatur zu verhindern. Z2m sendet ja ansonsten anscheinend nur bei Änderung an HA, egal was bei Reporting eingetragen ist. Wenn ich das richtig verstehe… :grinning_face_with_smiling_eyes:

Von 20 hatte ich aber nichts geschrieben, auch wenn das bei einigen Räumen (nicht allen!) auch tatsächlich die angestrebte Raumtemperatur ist :sweat_smile:

Welcher Wert ist denn sinnvoll? Die jeweilige Zieltemperatur?

Gelesen und probiert hatte ich das auch, war mir aber ein wenig unsicher. Das kann ich ja noch nachträglich ändern. Es muss ja nur folgender Eintrag bei jedem Temperatursensor hinzugefügt werden:

homeassistant:
  temperature:
    force_update: true

Einfach einen Wert setzen der einigermaßen normal ist.

Ich weiß, aber 0 würde ich nicht nehmen. Und so hast du dich jetzt wenigstens damit beschäftigt. Kannst auch 19, 18 oder auch 23 nehmen. Bleibt dir überlassen. Kannst von mir aus auch 0 nehmen.

Mein Kommentar war nicht böse gemeint oder so. Ich dachte, ich hatte das mit dem Smiley gekennzeichnet. Ich frage nur nach best practice. Danke!

Habe ich nicht böse aufgefasst, aber du musst doch selbst wissen welchen default Wert du haben willst :thinking: Das können nicht wir entscheiden. Der Wert gilt auch nur, wenn der eigentliche nicht greift.