Meine Automation hat den “sonst/else” Bereich ausgeführt und ich verstehe nicht warum ?.
Ist hier ein Fehler in der Auto. und ich sehe meinen Fehler nicht oder spinnt mein HA.
Das System hat zuerst heute Morgen auf 1000 Watt gesetzt und dann sofort auf 400 Watt.
Sorry aber mit der Formatierung vom Code komme ich nicht wirklich klar.
Ein else wird immer ausgeführt wenn die if Bedingung aus irgendeinem Grund nicht erfüllt ist … was für ein Schlaumeier aber dieser Grundsatz grenzt ein.
Der Wert war >15, er war 65% aber ich bin 100% sicher ob er in der Sekunde der Ausführung verfügbar war.
Der SOC wird alle 5 Min. aktualisiert da die Infos aus der Cloud waren.
Ab und zu sehe ich in einer anderen Übersicht das die Werte kurz auf 0 sind. Das passiert aber sehr selten.Und HA hat ja beide Aktionen ausgeführt, wäre der Wert 0 sollte doch auch nur Else laufen oder ?
Sicher, daß es nur einen Durchlauf gab? Was sagt der/die Trace?
Denkbar wäre, daß Dein m2 triggerte und If ordnungsgemäß ausgeführt wurde aber danach m2 triggerte und in den else lief
Ja. Das müßte im Trace unter IF auch einsehbar sein.
Also ich würde zuerst die Traces angucken bevor ich die ganze Automation neu baue.
das sieht mir danach aus das du es aus der automation.yaml kopiert hast, da würde ich im normal Fall nie ran gehen, man kann die auch einfach über die UI machen:
Ich hatte die alte Auto. in der GUI erstellt und dann den yaml code aus dem Trace rauskopiert.
Aber dann hatte ich die Auto. aus Frußt gelöscht.
Neuangelegt und jetzt hat es funktioniert. Eventuell war irgendwas falsch in der ersten Auto.
So läuft es jetzt der SOC war höher als 50 und jetzt hat er nur den “then” path genommen und “else” ignoriert.
Update:
Ahh werde wahnsinnig;
Ich hatte der jetzt neuen Auto. noch eine weitere Abfrage mit hinzugefügt trigger um 08:05 mit M1. Wiedererwartent hat er jetzt wieder was falsch gemacht und den Miner um 0805 auf 400 Watt gesetzt obwohl der SOC höher als 15 war und unter dem Auslöser M1 läuft. Anscheinen hat er das else von M2 genommen, häh ?
Hier was ich aus dem Trace finden kann und ich habe die Auto. jetzt nicht gelöscht, lasse die mal drin, würde gerne den Fehler finden.
Erstellt via GUI:
sieht für mich so aus als ob er 2x den Else path mit 400 ausageführt hat. Häh was ist hier los ?
Muss ich irgendwie ein STOP Auto. , wenn im “then” path abgebogen, einfügen oder so etwas ?
by HarryP: Zusammenführung Doppelpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“ anstatt „Antworten“ zu nutzen)
Nein, das ist der Yaml code, der mir in der Auto. dargestellt wird unter \traces\Automations-Konfiguration ; und dann machte ich copy paste.
Jetzt hänge ich es mal als jpg in den thread, irgendwie will mien firefox nicht so recht mit diesem Forum.
Du hast zwei getrennte IF Abfragen. Die werden, unabhängig vom Trigger auch beide geprüft.
Das Verhalten ist daher korrekt.
Um 08:00:05 triggert die ID “m1”. Da auch dein SOC über 15 ist führt die erste IF-Abfrage ihren THEN Zweig aus und setzt das Power Limit auf 1000.
Danach wird die zweite IF-Abfrage ausgeführt.
Da der Auslöser nicht “m2” war, wird hier entsprechend der ELSE Zweig ausgelöst und setzt das Powerlimit auf 400.
Warum allerdings 2x auf 400 gesetzt wird erschließt sich mir nicht direkt, wobei es wahrscheinlich etwas damit zu tun hat, dass es zuerst “400” und dann"400,0" ist. Hört sich irgendwie nach Konflikt text oder float an.
Ersetze deine beiden IF-Abfragen durch ein Choose(Auswählen), dann wird nur der jeweils zum trigger passende Zweig ausgeführt.
Du kopierst einfach nicht den korrekten Code teil. Du rufts nicht die Automation auf, dann die Traces und kopierst dann unter Automationskonfiguration, sondern:
Du öffnest die Automation, klickst oben rechts auf die drei Punkte und wählst dann “In YAML bearbeiten”. Den Code kannst du sowohl direkt bearbeiten, als auch vernünftig inkl indentation kopieren… und dann hier einfügen…
Ich glaube auch das du einen Logikfehler hast und das @bigmirror recht hat mit seiner choose Empfehlung. Statt zwei if-Blöcke untereinander zu hängen, nutzt man choose.
Dabei wird nur der Pfad ausgeführt, der exakt zur Trigger-ID passt. Der andere Block wird komplett ignoriert.
Oder nimm 2 getrennte Automationen wenn du beim if else then bleiben möchtest.
btw. würde ich dir auch empfehlen keine Geräte sondern lieber Entitäten zu verwenden.
besser lesbar
besser zu maintainen, wenn dir mal ein Gerät kaputt geht, kannst du du dem neuen Gerät dieselbe entity-ID geben und es läuft sofort wieder, ohne dass du in die Automation eingreifen musst.