Appliance mit Anlaufstromerkennung wird nach spätestem Startzeitpunkt nicht eingeschaltet
Closed this issue · 13 comments
Fehlerbeschreibung
Szenario ist wie folgt:
Appliance ist mit einem Schalter mit Anlaufstromerkennung konfiguriert.
Ein Zeitplan mit einer Schaltzeit von 3 Stunden maximaler Laufzeit (keine minimale Laufzeit angegeben) im Zeitfenster von 8 bis 16 Uhr ist erstellt.
Der Anlaufstrom wurde um 11:18 Uhr erkannt und das Gerät durch den SAE ausgeschaltet.
Das Gerät wurde an diesem Tag aber nicht wieder angeschaltet.
Bei Erreichen des spätesten Startzeitpunktes (13 Uhr) wurde das geplante Zeitfenster auf "EXPIRED" gesetzt und ein neues "DISABLED" Zeitfenster für den Folgetag durch den SAE erstellt.
Das Gerät blieb aber im ausgeschalteten Zustand, sodass auch keine erneute Anlaufstromerkennung gestartet wurde.
Wie kann das Problem reproduziert werden?
Appliance mit Anlaufstromerkennung, Zeitfenster mit minimaler und maximaler Laufzeit ist vorhanden.
SHM hat bis zum maximalen Zeitfenster keinen Startbefehl an den SAE gesendet.
Erwartetes Verhalten
Der SAE sollte sicherstellen, dass das Gerät beim Fehlen eines "ENABLED" Zeitfensters eingeschaltet ist.
Verwendetes System
- Betriebssystem und Version: Windows 11
- Smart Appliance Enabler Version: [2.3.1]
Zusätzliche Informationen
Log-Datei aus der das Verhalten erkennbar ist, ist angehangen.
rolling-2024-08-10.zip
Das letzte Release liegt schon eine Weile zurück und ich denke, dass ich auch diesen Fehler bereits vor einiger Zeit gefixt habe. Kannst Du bitte mit dieser Test-Version Version von 2.3.1 testen, ob das Problem damit bei Dir noch Auftritt?
https://drive.google.com/file/d/1NTPOWaoLXTx6791zPMfi_D638JVB87re/view?usp=drivesdk
Ich habe mit der Version getestet, allerdings hat das auch nicht immer so funktioniert, wie ich es mir vorgestellt habe.
Es ist immer noch zu Szenarien gekommen, in denen der SAE den Schalter ausgeschaltet hatte, aber gleichzeitig keine Zeitplanung vorhanden war.
Das Ergebnis war weiterhin, dass das Gerät ausgeschaltet war.
Ich habe als Workaround über meine Home Automation eine Erkennung für diesen Zustand integriert, sodass der Schalter eingeschaltet wird, wenn keine Planung vorhanden ist und der Schalter gleichzeitig ausgeschaltet ist.
Im Anhang habe ich noch einmal ein Log angehangen, aus dem das Verhalten ersichtlich wird.
rolling-2024-11-14_reduced.zip
Was mir gerade auffällt: Warum hast Du "externe Aktivierung" ausgewählt? Dann ist klar, warum nicht eingeschaltet wird.
Ja, der Screenshot war unglücklich gewählt.
Das ist ein Relikt aus den Tests die ich zu dem Thema durchgeführt hatte.
Wollte per Trial and Error schauen, ob gewisse Einstellungen an dem Verhalten bei mir was ändern.
Da es nichts gebracht hat, habe ich alles anschließend wieder zurückgestellt.
Unabhängig davon wurde dieses Mal ja auch eingeschaltet, aber ab einem gewissen Punkt kam der Zustand zustande, dass sowohl Switch als auch Appliance im Status „Off“ waren.
Der Anlaufstrom wurde um 19:57 und 21:45 erkannt
2024-11-14 19:57:14,655 DEBUG [MQTT Call: F-07062014-000000000003-00-StartingCurrentSwitch-0] d.a.s.c.StartingCurrentSwitch [StartingCurrentSwitch.java:154] F-07062014-000000000003-00: Starting current detected.
2024-11-14 21:45:30,663 DEBUG [MQTT Call: F-07062014-000000000003-00-StartingCurrentSwitch-0] d.a.s.c.StartingCurrentSwitch [StartingCurrentSwitch.java:154] F-07062014-000000000003-00: Starting current detected.
Da das Zeitfenster um 20:00 endet, kann erst am Folgetag einschalten. Keine Ahnung, wie Du dann nochmal um 21:45 den Anlaufstrom getriggert hast. Vermutlich funkt Deine Home Automation dazwischen.
Die Anlaufstromerkennung nutze ich selbst mehrmals in der Woche, insofern kann ich sagen, dass sie funktioniert.
Deshalb schliesse ich diesen Bug.
Nein, meine Home Automatisch greift nur ein, wenn der SAE das Gerät in einen ungültigen Zustand geschaltet hat, also die geschaltete Steckdose ausgeschaltet und keine aktive Planung im SEMP vorhanden ist.
Wenn dieser Zustand 5 Minuten vorliegt, dann schaltet meine Home Automation die Steckdose wieder ein. Ansonsten greift meine Home Automation nicht ein.
Kann es sein, dass das Verhalten auftritt, wenn innerhalb eines laufenden Zeitfensters mehrere Vorgänge gestartet werden, ohne dass vorher ein Abschaltstrom erkannt wurde?
Konkret hat meine Frau wohl mehrere Durchläufe des Trockners direkt nacheinander angestoßen, ohne das der "Finished current" erkannt wurde.
Dadurch passte dann das maximale Zeitfenster aus dem Zeitplan nicht mehr und der Zeitplan ist deaktiviert worden, weil die maximale Laufzeit erreicht war.
Das passierte zum ersten Mal um 19:56:21,669.
Um 19:56:21,680 wird der Starting Current Switch ausgeschaltet, das Appliance ist aber noch eingeschaltet.
Um 19:57:14,655 wurde dann der erste von Dir genannte Anlaufstrom erkannt, weil der Trockner noch lief.
Um 19:57:17,575 waren dann sowohl der StartingCurrentSwitch als auch die Appliance ausgeschaltet.
Um 20:00:00,183 hat meine Frau dann manuell über die Ampel gestartet.
Innerhalb des maximalen Zeitfensters von 01:45 Stunden hat meine Frau dann weitere Durchläufe neu gestartet, sodass um 21:45:21,712 der Zeitplan automatisch deaktiviert wurde.
Um 21:45:30,663 wird dann der Zweite von Dir genannte Anlaufstrom erkannt, weil der Trockner noch lief.
Um 21:45:51,701 wird der ausgelaufene Zeitplan entfernt und ein neuer deaktivierter Zeitplan für den Folgetag erstellt. Sowohl der StartingCurrentSwitch als auch die Appliance waren zu diesem Zeitpunkt ausgeschaltet und wären jetzt (ohne externen Eingriff) auch nicht mehr gestartet worden.
Um 21:50:21,782 hat meine Home Automation eingegriffen und die Steckdose wieder eingeschaltet:
Um 21:50:26,613 meldete der StartingCurrentSwitch dann, dass die Appliance nicht eingeschaltet ist, was hier falsch ist, da diese aufgrund des fehlerhaften Zustands extern wieder eingeschaltet worden ist.
Um 21:50:33,642 wurde dann der "External switch-on" erkannt, den meine Home Automation bereits ca. 12 Sekunden zuvor (s.o.) durchgeführt hatte. Ab diesem Zeitpunkt ist dann auch wieder ein gültiger aktiver Zeitplan vorhanden.
Um 23:29:15,714 wurde dann der finale Abschaltstrom erkannt und der Zustand ist wieder normal.
Ich habe diese Hinweise auch in der Datei (siehe voriger Post) eingefügt.
Diese sind Anhand der Zeichenfolge --> zu erkennen.
Kann es sein, dass das Verhalten auftritt, wenn innerhalb eines laufenden Zeitfensters mehrere Vorgänge gestartet werden, ohne dass vorher ein Abschaltstrom erkannt wurde?
Ja, die Einstellungen sollten so gewählt werden, dass der Abschaltstrom erkannt wird, bevor das Gerät erneut gestartet wird.
Okay, dann stellt sich mir die Frage, welche Einstellungen das sein sollen.
Wenn meine Frau in der Waschküche ist und den Trockner direkt wieder befüllt und anschaltet, dann kann ich die Einstellungen nicht passend wählen.
Sind die Zeiten zu kurz, dann wird der es eine Menge Fehlerkennungen geben, wenn der Trockner nur kurz eine Pause einlegen würde.
Und bei einer längeren Wartezeit (z.B. dem Standard von 5 Minuten) wird der WAF sehr schnell sinken, wenn mehrere Minuten vor dem Trockner gewartet werden müsste.
Generelle Frage: welche Kombinationen der Zustände von "on" und "applianceOn" sind für den "StartingCurrentSwitch" denn eigentlich valide?
Nummer | on | applianceOn | Beschreibung |
---|---|---|---|
1 | true | true | Eingeschaltet durch Ampel oder Schaltbefehl via SEMP |
2 | true | false | Ungültig? |
3 | false | true | Standardzustand solange kein Anlaufstrom erkannt wurde |
4 | false | false | Zustand nach Erkennung des Anlaufstroms |
Keine Ahnung ob die Tabelle so richtig ist, aber müsste, wenn der Timeframe ausläuft und ein Anlaufstrom erkannt wird, nicht ein neuer Timeframe eingestellt werden?
Selbst wenn dieser dann auf den folgenden Tag zeigt, weil das Zeitfenster für den Zeitplan bereits ausgelaufen ist, würde das zumindest dazu führen, dass nicht automatisch irgendwann wieder eingeschaltet wird, so wie es jetzt der Fall ist.
Und bei einer längeren Wartezeit (z.B. dem Standard von 5 Minuten) wird der WAF sehr schnell sinken, wenn mehrere Minuten vor dem Trockner gewartet werden müsste.
5 Minuten warten vor dem erneuten Start sollten eigentlich machbar sein. Es sei denn man sitzt direkt vor dem Gerät und wartet ...
Die Tabelle sieht richtig aus.
aber müsste, wenn der Timeframe ausläuft und ein Anlaufstrom erkannt wird, nicht ein neuer Timeframe eingestellt werden?
Ja, das sollte so sein, wenn ich mich richtig erinnere. Habe schon länger an dem Code nichts mehr geändert ...
Selbst wenn dieser dann auf den folgenden Tag zeigt, weil das Zeitfenster für den Zeitplan bereits ausgelaufen ist, würde das zumindest dazu führen, dass nicht automatisch irgendwann wieder eingeschaltet wird, so wie es jetzt der Fall ist.
Genau, dann läuft halt Geschirrspülder oder Waschmaschine erst am Folgetag.
Und bei einer längeren Wartezeit (z.B. dem Standard von 5 Minuten) wird der WAF sehr schnell sinken, wenn mehrere Minuten vor dem Trockner gewartet werden müsste.
5 Minuten warten vor dem erneuten Start sollten eigentlich machbar sein. Es sei denn man sitzt direkt vor dem Gerät und wartet...
Normalerweise sitzt meine Frau natürlich nicht vor dem Trockner und wartet. Es gibt aber Tage an denen viel Wäsche angefallen ist und der Trockner insbesondere in Richtung der Abendstunden mehrfach läuft. Da kann es dann schon einmal vorkommen, dass meine Frau die letzten paar Minuten vor dem Trockner wartet und diesen direkt wieder anwirft.
aber müsste, wenn der Timeframe ausläuft und ein Anlaufstrom erkannt wird, nicht ein neuer Timeframe eingestellt werden?
Ja, das sollte so sein, wenn ich mich richtig erinnere. Habe schon länger an dem Code nichts mehr geändert ...
Selbst wenn dieser dann auf den folgenden Tag zeigt, weil das Zeitfenster für den Zeitplan bereits ausgelaufen ist, würde das zumindest dazu führen, dass nicht automatisch irgendwann wieder eingeschaltet wird, so wie es jetzt der Fall ist.
Genau, dann läuft halt Geschirrspülder oder Waschmaschine erst am Folgetag.
Genau das passiert aber nicht.
Zumindest nicht, wenn der Anlaufstrom vorher erkannt wurde, und der Timeframe anschließend ausgelaufen ist.
Der Timeframe wird leider mit dem Status "QUEUED/...::DISABLED/..." eingestellt, obwohl sowohl der StartingCurrentSwitch als auch die Appliance "off" sind.
Kann im Log zwischen 21:45:51,701 und 21:45:52,078 nachvollzogen werden.
Aus meiner Sicht müsste für diesen Fall (StartingCurrentSwitch mit on=false und applianceOn=false, also Anlaufstrom erkannt), der Timeframe im Status "ENABLED" eingestellt werden, auch wenn das dann für den Folgetag wäre.
Ansonsten verbleibt die Appliance im ausgeschalteten Zustand und wird durch den SAE nie mehr eingeschaltet, solange man nicht manuell eingreift und einschaltet oder einen neuen Runtime Request einstellt.
--> Hier wird der StartingCurrentSwitch wieder ausgeschaltet, obwohl die Appliance noch weiterläuft
2024-11-14 21:45:21,712 DEBUG [Timer-0] d.a.s.a.Appliance [Appliance.java:441] F-07062014-000000000003-00: Switching off since timeframe interval was deactivated
Da ist kein Fehler vom SAE, sondern ein Konfigurationsfehler: Das reale Programm des Gerätes läuft länger als Du im Schaltplan konfiguriert hast. Der SAE kann in diesem Fall nichts Sinnvolles machen.
Vor einiger Zeit habe ich einen Fehler gefixt, der darin bestand, dass "alte" Timeframes nicht deregsitriert wurden. Bei Dir scheint der Fehler noch zu bestehen:
2024-11-14 21:45:21,701 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:227] F-07062014-000000000003-00: Current Queue:
2024-11-14 21:45:21,702 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:315] F-07062014-000000000003-00: ACTIVE/2024-11-14T20:00:01/2024-11-14T21:45:32::ENABLED/_s/0s
2024-11-14 21:45:21,703 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:294] F-07062014-000000000003-00: Updated queue:
2024-11-14 21:45:21,704 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:315] F-07062014-000000000003-00: EXPIRED/2024-11-14T20:00:01/2024-11-14T21:45:32::DISABLED/_s/6300s
2024-11-14 21:45:21,705 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:300] F-07062014-000000000003-00: Notifying TimeframeIntervalChangedListener RuntimeRequest DISABLED/_s/6300s
2024-11-14 21:45:21,705 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:300] F-07062014-000000000003-00: Notifying TimeframeIntervalChangedListener RuntimeRequest DISABLED/_s/6300s
2024-11-14 21:45:21,706 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:300] F-07062014-000000000003-00: Notifying TimeframeIntervalChangedListener RuntimeRequest DISABLED/_s/6300s
2024-11-14 21:45:21,706 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:300] F-07062014-000000000003-00: Notifying TimeframeIntervalChangedListener RuntimeRequest DISABLED/_s/6300s
2024-11-14 21:45:21,707 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:300] F-07062014-000000000003-00: Notifying TimeframeIntervalChangedListener RuntimeRequest DISABLED/_s/6300s
2024-11-14 21:45:21,707 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:300] F-07062014-000000000003-00: Notifying TimeframeIntervalChangedListener RuntimeRequest DISABLED/_s/6300s
2024-11-14 21:45:21,707 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:300] F-07062014-000000000003-00: Notifying TimeframeIntervalChangedListener RuntimeRequest DISABLED/_s/6300s
2024-11-14 21:45:21,708 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:300] F-07062014-000000000003-00: Notifying TimeframeIntervalChangedListener RuntimeRequest DISABLED/_s/6300s
2024-11-14 21:45:21,708 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:300] F-07062014-000000000003-00: Notifying TimeframeIntervalChangedListener RuntimeRequest DISABLED/_s/6300s
2024-11-14 21:45:21,709 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:300] F-07062014-000000000003-00: Notifying TimeframeIntervalChangedListener RuntimeRequest ENABLED/_s/6300s
2024-11-14 21:45:21,709 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:300] F-07062014-000000000003-00: Notifying TimeframeIntervalChangedListener RuntimeRequest ENABLED/_s/6300s
2024-11-14 21:45:21,710 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:300] F-07062014-000000000003-00: Notifying TimeframeIntervalChangedListener RuntimeRequest ENABLED/_s/6300s
2024-11-14 21:45:21,710 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:300] F-07062014-000000000003-00: Notifying TimeframeIntervalChangedListener RuntimeRequest ENABLED/_s/6300s
2024-11-14 21:45:21,710 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:300] F-07062014-000000000003-00: Notifying TimeframeIntervalChangedListener RuntimeRequest ENABLED/_s/6300s
2024-11-14 21:45:21,711 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:300] F-07062014-000000000003-00: Notifying TimeframeIntervalChangedListener RuntimeRequest ENABLED/_s/6300s
2024-11-14 21:45:21,711 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:300] F-07062014-000000000003-00: Notifying TimeframeIntervalChangedListener RuntimeRequest ENABLED/_s/6300s
2024-11-14 21:45:21,712 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:300] F-07062014-000000000003-00: Notifying TimeframeIntervalChangedListener RuntimeRequest ENABLED/_s/6300s
2024-11-14 21:45:21,712 DEBUG [Timer-0] d.a.s.s.TimeframeIntervalHandler [TimeframeIntervalHandler.java:300] F-07062014-000000000003-00: Notifying TimeframeIntervalChangedListener Appliance F-07062014-000000000003-00
Hier ist nochmal eine aktuellere 2.3.1-Version mit dem Fix:
https://drive.google.com/file/d/1UJWShHhpsouqM5wyvnrg2XJD7o7BIEC8/view?usp=sharing
Ich habe die Version installiert und teste es mal damit.
Wenn ich was Neues habe, dann melde ich mich.
Ich habe nochmal erfolgreich getestet, dass der Geschirrspüler abends nach Ende des Zeitplans den Anlaufstrom erkannt hat und am Folgetag dann entsprechend der konfigurierten Zeiten gelaufen ist.