NEWS
Nach Änderung von Wert -> Timer, Re-Check & Aktion
-
Hallo zusammen,
noch recht neu bei Blockly und Iobroker habe ich eine Frage:
Ich habe Steckdosen, die alle 10 Sekunden per MQTT Ihre Werte an den Broker übermitteln. An einer der Steckdosen hängt die Waschmaschine. Ich möchte bei jeder Veränderung des Wertes prüfen, ob er zb. den Wert von 1 (=1 Watt hat). Wenn er dieses hat, möchte ich 15 Minuten warten und dann erneut prüfen, ob der dann in der Datenbank stehende Wert (bis dahin sind ja 150 weitere Datensätze gekommen) sich verändert hat oder immer noch unverändert bei 1W steht. Wenn ja, möchte ich eine Aktion (zb. Mail oder Signal Nachricht) auslösen.
Was möchte ich erreichen? Bei 1W dauerhaft ist das Waschprogramm durchgelaufen und er steht im "END" Status und verbraucht dort gem. Steckdose konstant 1W. Jedoch kann auch im laufenden Waschbetrieb einmal 1W erreicht werden und dann möchte ich nicht adhoc abschalten, sondern einfach warten ob der Wert nach 15 Minuten unverändert ist.
Dafür suche ich Ansätze wie sowas aussehen kann und wie man mit Timern und aktuellen Werten arbeitet.
Mein bisheriger Ansatz hat nicht wirklich funktioniert. Er hat nach den 10 Minuten einfach die "alten" Werte erneut in der "Falls" Bedingung genommen, auch wenn real dort der Verbrauch schon wieder höher war. Auch wenn der Ansatz sicherlich nicht korrekt ist, zeige ich ihn hier mal. Ich kann mir aber dennoch gut vorstellen, dass ein neuer Ansatz davon massiv abweicht - ich habe einfach noch zu wenig Erfahrung mit Timern und wie die Skripte laufen und wann die Werte gesetzt werden. -
-
@paul53
Danke. Das werde ich mal bei der nächsten Wäsche ausprobieren.
Aber könntest Du noch etwas beschreiben, wie ich mir das vom Ablauf des Skriptes vorstellen muss?Bei jeder Änderung wird geprüft, ob der Wert über 4W (also gem. Deines Beispiels). Wenn ja, wird der Timeout "fertig" gestoppt.
Wenn nicht: Was bedeute da "nicht Verzögerung 'fertig'"?Ultimativ wird dann nach 5 Minuten die Meldung generiert ...?
-
@hagbard sagte: Was bedeute da "nicht Verzögerung 'fertig'"?
Das ist eine Sperre per Timer-Variable, die verhindert, dass bei Leistungen kleiner als der Grenzwert weitere Timer gestartet werden, die sich nicht mehr stoppen lassen. Bei "stop timeout" wird die Timer-Variable auf null zurück gesetzt.
-
Danke. Damit werde ich es mal probieren.
Kann man mit Blockly auch sowas prüfen, wie: "Durchschnittswerte der letzten 100 Aktualisierungen" oder so? Denn manchmal gibts quasi "Zuckungen" wo ggfs. wenn die Maschine schon fertig ist und eigentlich dauerhaft 1W verbraucht (und schon 1x die Meldung dann gekommen ist), ein Update mal kurz 5W oder so sagt und dann gehts wieder auf 1W -> Sowas würde dann zu einer erneuten Meldung führen. Wenn ich prüfen könnte, dass es zb. x Minuten vorher immer einen Durchschnitt von 1W gab, muss ich nich nochmal alarmieren ...
-
Als Abschluss für den Thread und weil ich mich bedanken möchte und interessierten Lesern später zeigen möchte, wie ich das zb. für meine Spülmaschine gelöst habe:
Da ich zum einen ab und an komische Werte > 0W hatte, die entweder an dem Gerät, der Steckdose oder einfach daran liegen, dass jemand kurz die Maschine startet und das Programm dann doch nicht aktiviert, habe ich mich entschlossen einen Mechanismus einzubauen, der eben auch berücksichtigt, ob die Maschine bzw. das Programm ernsthaft gelaufen ist:
- Wenn ein Wert sich ändert und er ist über 100W (als Beispiel), dann können wir davon ausgehen, dass ein Programm läuft => Wir setzen eine definierte Variable auf "WAHR".
- Wenn ein Wert >0 aber < 100W als Veränderung gesehen wird, wird ein ggfs. laufender Timer gestoppt - ansonsten passiert nichts.
- Wenn eine Veränderung des Wertes dazu führt, dass der Wert 0 ist UND die definierte Variable "WAHR" ist, wird eine Nachricht geschickt - die Variable wird dann wieder auf "FALSCH" gesetzt.
In dem Stil werde ich es auch mit der Waschmaschine machen und anderen Geräten, die in einem Programm ablaufen und als Kennzeichen haben einen gewissen Schwellwert (zb. für das Heizen) stets zu überschreiten - kleine Verbräuche die aus unterschiedlichsten Gründen auftauchen können, werden ignoriert.