dem helper input_number in template einen Wert zuweisen

wo ich die Variable unterbringen wollte.
Wo Du die Variable unterbringen wolltest ja, aber es hätte ja auch was sein können wie "ich möchte per Variable einen Zeitraum, z.B. von morgens 8 Uhr bis abends 20 Uhr, definieren können, und innerhalb dessen soll alle 10 Minuten aktualisiert werden" oder so ;)
 
Guten Abend, ich brauche mal wieder Hilfe. Irgendwie komme ich mit HA nicht klar, bekomme einfache Sachen nicht programmiert. Also ich möchte aktive Phasen Zahlen. Eigentlich ist es ganz einfach, 3 IF Anweisungen und die Addition, funktioniert leider nicht so wie ich mir das vorstelle. device_class, state_class und unit_of_measurement passen zunächst nicht, ich denke, das ist für die Funktion nicht relevant.

YAML:
      #Phasen Zähler
    - name: "Anzahl Phasen"
      unique_id: "anzahl_phasen"
      device_class: "current"
      state_class: "measurement"
      unit_of_measurement: "A"
      state: > 
        {% if float(states.sensor.l1_strom.state) > 0.2 %}
          1 
        {% else %}
          1  
        {% endif %}   
        {% if float(states.sensor.l2_strom.state) > 0.2 %}
          {{ states('sensor.anzahl_phasen') | int }}  + 1  
        {% endif %} 
        {% if float(states.sensor.l3_strom.state) > 0.2 %}
          {{ states('sensor.anzahl_phasen') | int }}  + 1  
        {% endif %}

Gibt es eine andere einfache Methode, um die aktiven Phasen zusammenzuzählen?
 
Ich nutze HA ja nicht selbst und habe nur eine grobe Ahnung dessen, wofür Du es grade verwendest, insofern, Frage: Geht es darum, zu zählen, wieviele (0 - 3) von l1_strom, l2_strom, l3_strom mit state über 0.2 sind?

Dein Code sagt was völlig anderes, deshalb muss ich nachfragen :)
 
Ich möchte die Anzahl der aktiven Phasen zählen. Mein Auto lädt nur einphasig, es gibt aber auch Autos, die zwei- oder dreiphasig laden. Um den Ladestrom für die Walbox richtig zu berechnen, muss ich wissen, mit wie vielen Phasen das Auto geladen wird. Den aktuellen Strom kann ich von der Wallbox pro Phase ablesen, wenn der Strom größer als 0,2 A ist, dann ist die Phase aktiv.
 
YAML:
      state: >
        {% set active_states = 0 %}
        {% if states('sensor.l1_strom') | float(0) > 0.2 %}
          {% set active_states = active_states + 1 %}
        {% endif %}
        {% if states('sensor.l2_strom') | float(0) > 0.2 %}
          {% set active_states  = active_states + 1 %}
        {% endif %}
        {% if states('sensor.l3_strom') | float(0) > 0.2 %}
          {% set active_states  = active_states + 1  %}
        {% endif %}
        {{ active_states }}
Variable definieren, hochzählen pro aktiver Phase, Variable ausgeben.
 
selbst bei Schleifen
Apropor Schleifen, wie programmiert man eine While Schleife im Template? Ich habe es mit einem solchen Code versucht, leider ohne Erfolg.

YAML:
#While Schleife
    - name: "WHEC_Strom"
      unique_id: "whec_strom"
      state: >
        {% if  float(states.sensor.output_strom_wallbox.state)  >  float(states.sensor.l1_strom.state)  %}
          {% set strom_soll = states('sensor.output_strom_wallbox') | float(0) %}
          {% set strom_temp = states('sensor.l1_strom.state') | float(0) %}
          repeat:
            while: "{{ strom_temp < strom_soll }}"
          sequence:
            - action: "{{set strom_temp = strom_temp + 20 }}"
          - delay:
              seconds: 8
        {% endif %}

Mit so einer Schleife möchte ich den Ladestrom für das Auto langsam erhöhen oder verringern, im Moment wird der Strom schlagartig an die Wallbox geschickt, ich weiß nicht, ob das gut für das Auto ist.

L1_Strom.png
 
Zuletzt bearbeitet:
Ich habe so eine Schleife zum Testen erstellt, die Schleife läuft nur einmal durch. Ich verstehe nicht warum?


YAML:
#While Schleife
    - name: "WHEC_Strom"
      unique_id: "whec_strom"
      device_class: "current"
      state_class: "measurement"
      unit_of_measurement: "A"     
      state: >
        {% set strom_ist = states('sensor.l1_strom.state') | float(0) + states('sensor.l2_strom.state') | float(0) +states('sensor.l3_strom.state') | float(0) %}
          {% set strom_soll = 2000 %}
          {% set strom_temp = 10 %}
          repeat:
            while: "{{ strom_temp < strom_soll }}"
          sequence:
            - action: {% set strom_temp = strom_temp + 20 %}
            - delay:
                seconds: 8
        {{ strom_temp }}
 
Hmmm, in einer Automation sollten WHILE Schleifen möglich sein, aber das da oben sieht nicht aus, wie eine Automatisierung.
Wo hast Du gelesen, das es in einem Template auch gehen soll ?
 
Ich habe so eine Schleife zum Testen erstellt, die Schleife läuft nur einmal durch. Ich verstehe nicht warum?
Weil es nach meinem dafürhalten in Templates gar nicht vorgesehen ist, sondern in Automatisierungen. Dein Code aber keine Automatisierung ist und deswegen gehts nicht.
 
OK, ich versuche es mal in Automatisierung, obwohl eine For-Schleife auch in Template funktionieren sollte, da muss ich erst die Anzahl der Durchläufe ausrechnen.
 
Ich bekomme meine Schleife nicht zum Laufen. Ich habe es jetzt in Automatisierung versucht, yaml wird fehlerfrei übersetzt, aber nach dem Neustart bekomme ich die Fehlermeldung.
Fehler: „expected a dictionary for dictionary value @ data['action'][1]['repeat']. Got None
extra keys not allowed @ data['action'][1]['data']. Got {}
extra keys not allowed @ data['action'][1]['entity_id']. Got 'input_number.test_schleife_min_wert'
extra keys not allowed @ data['action'][1]['sequence']. Got [{'action': '{{ set strom_temp = strom_temp + 10 }}'}, {'delay': {'seconds': 8}}]
extra keys not allowed @ data['action'][1]['target']. Got None
extra keys not allowed @ data['action'][1]['while']. Got '{{ strom_temp < strom_soll }}'“.

YAML:
- id: '1723311924116'
  alias: Test Schleife 2
  description: ''
  trigger:
  - platform: state
    entity_id:
    - input_boolean.schleife_einschalten
    - input_number.test_schleife_min_wert
  action:
    - service: >-
        {% set strom_ist = states('sensor.l1_strom.state') | float(0) + states('sensor.l2_strom.state') | float(0) +states('sensor.l3_strom.state') | float(0) %}
          {% set strom_soll = 100 %}
          {% set strom_temp = 10 %}
    - repeat:
      while: "{{ strom_temp < strom_soll }}"
      sequence:
        - action: "{{ set strom_temp = strom_temp + 10 }}"
        - delay:
            seconds: 8
      data: {}
      target:
      entity_id: input_number.test_schleife_min_wert
  mode: single
 
Also bei mir übersetzt er gar nichts und schon mal gar nicht fehlerfrei.
Keine Ahnung, woher Du den Code schon wieder hast, aber wenn ich den bei mir als Automatisierung einfüge, geht gar nichts. Der erkennt nichts.
Die Einrückungen stimmen doch hinten und vorne nicht. Was sollen die ganzen Leerzeichen am Zeilenanfang ?

REPEATE mit WHILE sollte eher so aussehen.
Code:
action:
  - repeat:
      while:
        - condition: numeric_state
          entity_id: sensor.homematic_ip_accesspoint_temperatur_und_luftfeuchtigkeitssensor_balkon_temperature
           below: 15
        - condition: state
          entity_id: binary_sensor.homematic_ip_accesspoint_fensterkontakt_bad
          state: 'on'
      sequence:
        - service: notify.alexa_media_uberall
          data:
            message: Das Fenster im Bad ist offen.
            data:
              type: announce
              method: speak
        - delay:
             minutes: 20
 
Das
YAML:
action:
  - service:
wird verwendet, um einen Dienst auszulösen. Eine Berechnung ist kein Dienst, das kann also tatsächlich so nicht funktionieren.
 
Anhang anzeigen 8009


Ich habe den Code selbst erstellt. Ich möchte keine Meldung ausgeben, sondern einen Wert berechnen.
Es ist keine gute Idee, in der automations.yaml rum zu pfuschen. Warum machst Du es nicht über "Automatisierung & Szenen", da würden solche Syntaxfehler nicht passieren.
Hier ist ein Ausschnitt aus der Doku.

Anhang anzeigen 8010
Diese Doku zeigt schon einen vollkommen anderen Syntax, als Du ihn verwendest.
Code:
    - repeat:
      while: "{{ strom_temp < strom_soll }}"
      sequence:
        - action: "{{ set strom_temp = strom_temp + 10 }}"
        - delay:
            seconds: 8

Code:
        repeat:
          while:
            - condition: state
              entity_id: input_boolean.do_something
              state: "on"
            # Don't do it too many times
            - condition: template
              value_template: "{{ repeat.index <= 20 }}"

Siehst Du die Unterschiede ?
Auch deswegen, nutzte die eingebaute Automatisierung, die kann auch REPEATE und WHILE, dann passiert so etwas nicht.

Auch denke ich, das eine WHILE Schleife hier nicht der richtige weg ist.
Wie wäre folgender Ansatz. Eine Automatisierung mit 3 Auslösern. Phase 1, Phase 2, Phase 3
Wenn der Wert einer dieser Phasen 0,2 A übersteigt, wird die Automatisierung gestartet.
Bei DANN MACHE dann Aktion hinzufügen und BAUSTEINE auswählen. Dort dann "Wenn-dann"
Hier kannst Du dich dann nach Herzenslust austoben.
WENN Phase 1 > 0,2 A UND Phase 2 = 0 A UND Phase 3 = 0 A, DANN MACHE. Klar, es wird nur eine Phase genutzt.
WENN Phase 1 > 0.2 A UND Phase 2 > 0.2 A UND Phase 3 = 0 A DANN MACHE. Es werden 2 Phasen genutzt.
WENN Phase 1 > 0.2 A UND Phase 2 > 0.2 A UND Phase 3 > 0.2 A DANN MACHE. Es werden 3 Phasen genutzt.

Was Du dann bei jeweils DANN MACHE für Aktionen machst, bleibt Dir überlassen. Halte ich aber allemal für übersichtlicher, als eine WHILE Schleife.
 
Ich bin ein blutiger Anfänger, was HA betrifft. Ich habe Ideen für meine Projekte, die ich nicht in HA umsetzen kann, weil ich die Logik von HA nicht verstehe. Das Programmieren des Überschussladens habe ich nur geschafft, weil @Nival mir tatkräftig geholfen hat.
Ich bin der Meinung, dass die while Schleife die richtige ist, um den Ladestrom zu "glätten".
Ich habe auch versucht, die Schleife über die eingebaute Automatisierung zu programmieren, aber ich habe da keine while- oder until-Schleife gefunden.
 
Ich bin ein blutiger Anfänger, was HA betrifft. Ich habe Ideen für meine Projekte, die ich nicht in HA umsetzen kann, weil ich die Logik von HA nicht verstehe.
Das kommt normalerweise durch das Lesen hier im Forum. Gerade Beiträge, wo grundlegendes zu HA erzählt wird.
Das Programmieren des Überschussladens habe ich nur geschafft, weil @Nival mir tatkräftig geholfen hat.
Oder anders gesagt, Du hast eine fertige Lösung bekommen, aber nicht Verstanden, warum und wie es funktioniert.
Das ist schlecht.
Ich bin der Meinung, dass die while Schleife die richtige ist, um den Ladestrom zu "glätten".
Das kommt daher, das Du noch nicht Verstanden hast, das HA eher ein Objekt Orientiertes bzw. Ereignis Orientiertes Programmieren erfordert.
Das bedeutet, ein Ereignis tritt ein (PV liefert mehr als X Watt, Spülmaschine Steckdose verbraucht Strom, Sonnenuntergang, einsetzender Regen) und dann wird irgendwas in HA ausgelöst.
Liefert die PV mehr als X Watt, wird ein Verbraucher eingeschaltet.
Zieht die Steckdose der Spülmaschine Strom, wird das in HA angezeigt.
Wird die Zeit des heutigen Sonnenuntergang erreicht, werden die Rollläden geschlossen.
Setzt Regen ein, rufen wir die Kinder rein. :D
Ein Ereignis löst eine Aktion aus. Das ist HA. Zusätzlich kann es natürlich noch ein paar sonstige Dinge, wie Auswertungen machen, aber im großen und ganzen wird immer auf ein Ereignis reagiert.
Deine WHILE Schleife könnte das auch, aber sie belastet das System unnötig. Die läuft ja immer und verbraucht so Rechenleistung. Mag wenig sein, aber es summiert sich.
Anstatt zu sagen:
While Strom auf Leitung 1 kleiner als 1000
Berechne irgendwas
end While

Ist es wesentlich Sinnvoller zu sagen.
WENN der Strom auf Leitung 1 >= 1000 DANN mache irgendwas.

Aber gut. Ich denke, hier driften wir zu weit ins Programmieren ab.
Ich habe auch versucht, die Schleife über die eingebaute Automatisierung zu programmieren, aber ich habe da keine while- oder until-Schleife gefunden.
Weil es die nicht gibt. Nennt sich eben REPEAT.

Du hast Lösungsvorschläge bekommen, die mit ziemlicher Sicherheit funktionieren.
Du beharrst auf deine WHILE Schleife.
Dann muß ich sagen, bin ich hier raus, weil das nach meinem dafürhalten nicht zum Ziel führt.

Viel Erfolg weiterhin.
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
5.268
Beiträge
52.458
Mitglieder
5.019
Neuestes Mitglied
Jeff888
Zurück
Oben