Python Script, Sensor Werte Neustart

Hallo Zusammen,
ich nutze das Python Script im Template-Sensorwerte aus NodeRed aus zu überschrieben.
Beim Neustarten von HomeAssistant wird allerdings der Wert zurückgesetzt auf den Wert den ich beim Template Sensor eingestellt habe.

Gibt es eine Möglichkeit, dass er den letzten Wert behält?

Ich weiß, dass ich ihn aus NodeRed wieder beim Start beschreiben könnte, aber das finde ich unsauber.

Hat jemand eine Idee?

Also ich habe es so gelöst. Meine Rollos speichern ihren Zustand in einem Text Helfer.

alias: Rollo Zustand speichern und wiederherstellen
description: >-
  Speichert den Zustand der Rollos vor dem Herunterfahren von Home Assistant und
  stellt ihn beim Start wieder her. 
trigger:
  - platform: homeassistant
    event: start
    id: start
  - platform: state
    entity_id:
      - sensor.rollo_1_zustand
      - sensor.rollo_2_zustand
      - sensor.rollo_kuche_zustand
      - sensor.rollo_schlafzimmer_zustand
    id: anderung
action:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - start
        sequence:
          - service: python_script.update_sensor_values
            data: {}
      - conditions:
          - condition: trigger
            id:
              - anderung
        sequence:
          - condition: template
            value_template: "{{ trigger.to_state.state != 'unknown' }}"
          - service: input_text.set_value
            target:
              entity_id: input_text.rollo_zustande
            data_template:
              value: >
                {{ states('sensor.rollo_1_zustand') }}, {{
                states('sensor.rollo_2_zustand') }}, {{
                states('sensor.rollo_kuche_zustand') }}, {{
                states('sensor.rollo_schlafzimmer_zustand') }}

Bei Start von HA wird ein python Script aufgerufen und die Werte werden wieder zurück geschrieben.

entities = [
    "sensor.rollo_1_zustand",
    "sensor.rollo_2_zustand",
    "sensor.rollo_kuche_zustand",
    "sensor.rollo_schlafzimmer_zustand",
]

input_text_value = hass.states.get("input_text.rollo_zustande").state

for i, entity in enumerate(entities):
    hass.states.set(entity, input_text_value.split(",")[i])

Das ist mein Weg!

Ok danke dir. Das ist ja aber auch irgendwie getrickst. Komisch, dass das nicht einfacher geht.

Hintergrund ist. Ich möchte mir einen Gewichtstracker bauen. Die Messwerte werden händisch in ein Number Input eingetragen und per Button im Template Sensor abgespeichert. Es ist halt unschön, wenn dann nach jemand Neustart kurzzeitig 0 drin steht.

Gibt es vielleicht andere Ideen, wie man das umsetzen könnte? Stehe vielleicht auch auf dem Schlauch.

Was heißt getrickst? HA kann nix für mein Problem mit den Zuständen. Die paar Zeilen Code sind ja nun auch kein Großer Aufwand.

D.h. Sie stehen dann nach HA Neustart noch im Helfer? Wenn ja dann brauchst du doch nur nach Neustart deinen Button drücken per Auto.

Warum noch zusätzlich den Template Sensor?
Die Werte hast Du schon mit den Input Number erfasst. Dieser behält seinen Zustand nach einem Home Assistant Neustart. Eine history hast Du mit dem Input number ja auch.

Und auch der Template Sensor behält seinen letzen Zustand nach einem Home Assistant Neustart.
Gehe mal davon aus, Du verwendest einen Trigger-based Template Sensor. Der beim betätigen des Buttons den Wert vom Input Number übernimmt.

Gruß
Osorkon

Ja im Number Input bleibt der Wert stehte, ich wollte aber eigentlich nicht, dass man versehentlich Werte schreibt, sondern erst wenn man auf Übernehmen drückt.

Ich hab bei Helfer einen Template Sensor eingestellt und habe ihm einen Anfangswert von “70” gegeben. Über Node Red überschreibe ich dann über das Python Script den Wert. Beim Neustart nimmt er aber tatsächlich wieder den Anfangswert.

Dann lass den Unsinn mit Node Red weg. :wink:

Wenn Du zusätzlich zu Deinem Input Number, der bereits ja Dein Gewicht erfasst. Noch einen Template Sensor haben möchtest, der beim drücken eines Buttons, den Wert des Input Number Helfer übernehmen soll.
Dan machst Du das über ein Trigger-based Template Sensor.


#configuration.yaml
template:
  - trigger:
      - platform: state
        entity_id:
          - input_button.gewicht
    sensor:
      - name: Gewicht
        unique_id: fad57335-104f-44e1-91dc-bbc871e81af0
        state: |
          {{ states('input_number.gewicht') | float(0) | round(2) }}
        state_class: measurement
        device_class: weight
        unit_of_measurement: "kg"

Gruß
Osorkon

1 „Gefällt mir“