NEWS
Event auslösen wenn länger als Zeit X
-
Hi Community,
ich würde gerne ein Event auslösen (Auto Laden Programm), wenn z.B. ein Überschuss (Datenpunkt) länger als 5 Minuten auf JA steht.
Dies soll nur bei Sonnenaufgang - Sonnenuntergang passieren und eventuell alle 20 - 30 Minuten geprüft werden ob ein Überschuss (Datenpunkt) vorhanden ist.
Das Auto Laden Programm steuert die Wallbox über die lokale HTTP API an.Leider habe ich hierzu zu wenig Blockly Erfahrung und würde gerne zunächst auf Ideen der Umsetzung oder konkrete Vorschläge von den Profis zurückgreifen.
Wie würdet ihr dies in Blockly angehen?
Vielen Dank schon einmal.
Grüße
Phil -
@gerber sagte in Event auslösen wenn länger als Zeit X:
wenn z.B. ein Überschuss (Datenpunkt) länger als 5 Minuten auf JA steht
Dies soll nur bei Sonnenaufgang - Sonnenuntergang passierenDas Prinzip:
eventuell alle 20 - 30 Minuten geprüft werden ob ein Überschuss (Datenpunkt) vorhanden
Das macht man in der Regel anders.
Es wird nicht alle x Minuten geprüft, sondern auf die Änderung eines DP reagiert, mit dem sich der Überschuss ermitteln lässt. -
@codierknecht Danke dir für die Antwort.
Dann ist das Prinzip klar.
Ich habe gestern auch nochmals länger hin und her überlegt wie ich das ganze durchführen soll/werde.Das macht man in der Regel anders. Es wird nicht alle x Minuten geprüft, sondern auf die Änderung eines DP reagiert, mit dem sich der Überschuss ermitteln lässt.
Verstehe. Du meinst damit einen Datenpunkt, z.B. eines Wechselrichters?
Was aber, wenn sich dieser Datenpunkt fast sekündlich ändert? -
@gerber sagte in Event auslösen wenn länger als Zeit X:
Was aber, wenn sich dieser Datenpunkt fast sekündlich ändert?
Dann brauchst Du ja irgendwie einen DP, der Dir sagt ob Überschuss vorhanden ist oder nicht.
Der wird sich dann ja nicht sekündlich ändern. -
@gerber sagte in Event auslösen wenn länger als Zeit X:
Was aber, wenn sich dieser Datenpunkt fast sekündlich ändert?
ganz einfach:
- Schwelle mit Hysterese festlegen
- Per prüfen von "aktueller Wert > Ein-Schwelle und vorheriger Wert <= Ein-Schwelle feststellen wann der Schwellwert überschritten wird - merken, Timeout 5 Minuten starten.
- Per prüfen von "aktueller Wert < Ein-Schwelle - Hysterie - Schwellwert" - Ist das der Fall: Timeout löschen
Im Timeout die Aktion durchführen.
Da macht es dann auch wenig wenn der Wert sich sekündlich ändert, da immer nur die 3 Falls Bedingungen laufen.
A.
-
Dann brauchst Du ja irgendwie einen DP, der Dir sagt ob Überschuss vorhanden ist oder nicht. Der wird sich dann ja nicht sekündlich ändern.
Tatsächlich ist es so, dass der SunnyManager sekündlich die Werte übermittelt und diese auch ändert.
Danke dir.
Die Lösung klingt besser.Dies werde ich mir genauer ansehen.
Falls du für solch etwas ein Beispiel hast, kannst du es gerne kurz als Screenshot senden. -
-
Danke für die schnelle Antwort.
Sieht erstmal verwirrend aus -
@gerber sagte in Event auslösen wenn länger als Zeit X:
Tatsächlich ist es so, dass der SunnyManager sekündlich die Werte übermittelt und diese auch ändert.
Aber die Tatsache ob jetzt Überschuss vorhanden ist oder nicht, wird sich nicht sekündlich ändern.
Da einen passenden DP zu produzieren dürfte ja keine rocket science sein.Probier mal die von @Asgothian vorgeschlagene Vorgehensweise.
Wenn das nicht wie gewünscht funktioniert, können wir da immer noch mal da rangehen. -
Aber die Tatsache ob jetzt Überschuss vorhanden ist oder nicht, wird sich nicht sekündlich ändern. Da einen passenden DP zu produzieren dürfte ja keine rocket science sein.
Naja, leider doch.
Heute ist es bereits sehr oft zwischen Netzbezug und Überschuss gesprungen.
Man muss dazu sagen, dass ich auch 100 Prozent im HomeOffice arbeite und es bei solchen Tagen (kein Sommer) schwieriger ist. -
@gerber sagte: Das Auto Laden Programm steuert die Wallbox
Soll die Wallbox bei genügend Überschuss einschalten? Dann braucht man eine Hysterese, die etwas größer ist als die Leistungsaufnahme der Wallbox.
-
Soll die Wallbox bei genügend Überschuss einschalten? Dann braucht man eine Hysterese, die etwas größer ist als die Leistungsaufnahme der Wallbox.
yes, genau das ist der Plan.
Bei den Tagen außerhalb der Sommertage wird es natürlich schwer und man muss es anpassen, dass vllt bei 4000 W Überschuss bereits die Wallbox das laden startet.
-
@gerber sagte: genau das ist der Plan.
Prinzip, wenn die Wallbox < 5000 W aufnimmt:
-
@paul53
Danke dir ebenfalls für deine Antwort.Der Wert "PV-GrenzwertEin" ist ein Datenpunkt, welcher du fest definierst?
Wie genau funktioniert das mit dem Stop "delayOn / delayOff".
sry für die vllt dummen Fragen.
-
@gerber sagte: Wie genau funktioniert das mit dem Stop "delayOn / delayOff".
Der zugehörige Timer wird gestoppt und die Variable (z.B.
delayOn
) wird auf null gesetzt.@gerber sagte in Event auslösen wenn länger als Zeit X:
Der Wert "PV-GrenzwertEin" ist ein Datenpunkt, welcher du fest definierst?
Das ist ein eigener Datenpunkt, mit dem der Einschalt-Grenzwert vorgegeben werden kann, z.B. unterschiedlich für Winter / Sommer.
-
Vielen Dank an alle.
Sorry ich stehe gerade allgemein etwas auf dem Schlauch mit einem einfachen Timeout (diese sind mir noch nicht richtig klar):
Eventuell kann jemand nochmal bei Gelegenheit ein BLockly Script mit folgenden Werten senden (wäre sehr dankbar):
- Wenn ein Datenpunkt sich aktualisiert
- Wenn der Wert länger als 5 Minuten >= 0 ist.
Ich komme wie gesagt mit dem Timeout noch nicht ganz klar, wie ich den Wert der sich sekündlich ändert abfragen soll.
Vielen Dank. -
@gerber sagte in Event auslösen wenn länger als Zeit X:
Ich komme wie gesagt mit dem Timeout noch nicht ganz klar, wie ich den Wert der sich sekündlich ändert abfragen soll.
Den fragst du garnicht (explizit) ab. Der Trigger auf "Wert hat sich geändert" liefert den Wert
Wichtig ist das der Baustein "previous value" und der Baustein "state value" aus dem Trigger Bereich stammen - da ist er mit "Objekt ID" vorbelegt und erlaubt Zugriff auf eine Vielzahl von Details zu genau dem Datenpunkt der den Trigger ausgelöst hat:
In diesem Baustein steht im einen Fall der Wert den der DP hatte bevor der trigger aktiviert wurde, im anderen der Wert nachdem der Trigger aktiviert wurde.
Letztendlich prüft die 1 Falls Bedingung ob der Wert gerade unter 0 fällt - dann war er vorher höher und es könnte ein Timeout aktiv sein
die 2. Falls Bedingung prüft ob der Wert gerade von weniger als 0 auf 0 oder grösser gestiegen ist. Genau in diesem Fall willst du deinen Timeout starten, damit 5 Minuten nachdem der Wert auf 0 oder grösser gestiegen ist deine Aktion ausgelöst wird.Das ganze funktioniert gut - nur wenn der Wert ständig um 0 herum schwankt ist es kritisch. Deswegen wird oft eine Hysterse eingeführt, sprich das Aktivieren findet statt wenn der Wert z.Bsp. über 1 steigt, das deaktivieren wenn der Wert unter 0 fällt.
A.
Nachtrag: Schreibfehler im Kommentar - das passiert nach 5 Minuten -
@asgothian
Vielen Vielen Dank für die Hilfe und ausführliche Antwort.Ich glaube ich komme der Sache näher .
Kann es sein, dass der zweite IF Block etwas anders lauten muss, da dort < und <= vorhanden ist.
Sonst würde er doch nie erkennen, wenn dieser über 0 geht??Das ganze funktioniert gut - nur wenn der Wert ständig um 0 herum schwankt ist es kritisch. Deswegen wird oft eine Hysterse eingeführt, sprich das Aktivieren findet statt wenn der Wert z.Bsp. über 1 steigt, das deaktivieren wenn der Wert unter 0 fällt.
Hier würde man dann einfach den Wert "0" auf den Wunsch Wert erhöhen?
-
@paul53
Sollten auch in deinem Beispiel nicht die Vergleichsoperatoren gedreht sein??Du gibst doch einen Grenzwert Ein (Über einen Datenpunkt), bei dem der Switch angeschaltet werden soll (z.B. Ladestation).
Hier sollte doch dann eigentlich
wenn Wert >= Grenzwert ein sein und nicht <= oder?und im zweiten If Block auch umgedreht?
Wenn der GrenzwertAus 30 Minuten unterschritten ist, dann soll er den Switch ausschalten?Dann noch ein weiterer Punkt:
Wie löst du es, wenn z.B. das Auto nicht angeschlossen ist in diesem Moment in dem der Überschuss erkannt wurde?Angenommen der Überschuss findet um 10 Uhr statt, das Auto wird aber erst um 11 Uhr angeschlossen.
Dann wurde ja theoretisch der Überschuss bereits erkannt und der Switch umgelegt.Ist es irgendwie möglich einen Trigger Wert wieder auf 0 zusetzten?
-
@gerber sagte in Event auslösen wenn länger als Zeit X:
@asgothian
Vielen Vielen Dank für die Hilfe und ausführliche Antwort.Ich glaube ich komme der Sache näher .
Kann es sein, dass der zweite IF Block etwas anders lauten muss, da dort < und <= vorhanden ist.
Sonst würde er doch nie erkennen, wenn dieser über 0 geht??Das ganze funktioniert gut - nur wenn der Wert ständig um 0 herum schwankt ist es kritisch. Deswegen wird oft eine Hysterse eingeführt, sprich das Aktivieren findet statt wenn der Wert z.Bsp. über 1 steigt, das deaktivieren wenn der Wert unter 0 fällt.
Hier würde man dann einfach den Wert "0" auf den Wunsch Wert erhöhen?
Korrekt, in beiden Fällen. Ich hab das halt kurz zusammen gebaut und einmal falsch herum ausgewählt. Aber mit der Erklärung sollte ein Nachbauen möglich sein.