Event auslösen, nachdem ein Reading XY Sek. NICHT mehr aktualisiert wurde?

Begonnen von Dracolein, 18 Dezember 2024, 20:17:38

Vorheriges Thema - Nächstes Thema

Dracolein

Hi zusammen,
inzwischen ist es unglaublich, wie hilfreich AI-LLMs auch für FHEM sind. Viele Lösungen habe ich inzwischen umgesetzt, ohne die manuelle Hilfe dieses Forums in Anspruch nehmen zu müssen  8)  Hier jedoch scheitere ich bisweilen, wenngleich ich überzeugt bin, dass es lösbar sein muss.

Szenario:
Ein Reading "energy_added" meines Elektroautos gibt mir während des Ladens alle X Sekunden Updates rein, wieviele kWh bereits aufgeladen worden sind. Der Wert aktualisiert sich also permanent. Ich möchte den finalen(!) Wert gern in ein Filelog Device schreiben, nachdem der Ladevorgang abgeschlossen ist.
Weiterhin liefert ein Reading "state" den Status "charging" und nach Beendigung des Ladevorgangs kurzzeitig den Wert "online".

D.h. wenn der Zustand von "charging" zu "online" wechselt, möchte ich den aktuellen Wert in ein Filelog schreiben.

Ich habe etliche Lösungsansätze verfolgt, komme aber einfach auf keinen grünen Zweig. Der Befehltsteil, also das Übernehmen in ein Filelog, ist kein Problem. Ich hänge fest, wie ich die Zustandsänderung ermitteln und daraus ein Event generieren kann, um das ganze Vorgaben z.B. in einem DOIF umzusetzen.

Alternativ hatte ich erfolglos versucht, den Timestamp des Readings "energy_added" mit der aktuellen Uhrzeit zu vergleichen, um zu ermitteln, ob die letzte Wertänderung länger als (zb) 120 Sekunden zurückliegt (was ebenso bedeuten würde, dass der Ladevorgang abgeschlossen ist). Aber auch das Stichwort "Timer" ist für mich ein Problem

Könnt Ihr weiterhelfen?
Raspberry Pi 4 mit FHEM; FTUI Dashboard auf Asus 15,6" VT168H Touchscreen; ZigBee mit ConBee2 USB-Stick; div. Shelly 2.5; integr. Gaszähler mit ESP8266 & ESPEasy;

MadMax-FHEM

Wo ist da das Problem, wenn es einen Wechsel von charging auf online gibt?

notify/DOIF auf online und dann deinen Code für's Filelog, den du ja hast...

Wenn du nicht selbst anlegen willst: Eventmonitor, auf das Event online warten und notify/DOIF anlegen lassen...

EDIT: Alternative oder Antwort auf deinen Titel: watchdog

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

tobi01001

Edit: Joachim war schneller ;)

Deine Überschrift:
ZitatEvent auslösen, nachdem ein Reading XY Sek. NICHT mehr aktualisiert wurde?
--> watchdog watchdog

Aber das ist ja nicht was du willst. Du willst eventuell ein notify:
defmod meinAutoIstFertigNotify notify Ladegeraet:state:online.* { fhem("setreading DevFuerFileLog energy_added ".ReadingsNum("$NAME", "energy_added", 0)); }
hab das nur ins unreine geschrieben. Aber im Prinzip sollte das passen.
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

MadMax-FHEM

Aber state taucht nur auf, wenn stateEvent oder so gesetzt ist.
Ansonsten meine ich kommt beim state Reading der Name state nicht mit...

EDIT: am einfachsten über Eventmonitor...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Damian

Du kannst beim DOIF das Attribut wait in Kombination mit dem Attribut do resetwait nutzen

DOIF(Trigger auf das Reading) (mach etwas)
attr wait 300
attr do resetwait

Bedeutet:

Solange der Trigger innerhalb von 300 Sekunden kommt, wird der Wait-Timer zurückgesetzt. In Umkehr bedeutet es, wenn 300 Sekunden nach dem letzten Trigger nichts mehr kommt, dann wird etwas ausgeführt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

tobi01001

Zitat von: MadMax-FHEM am 18 Dezember 2024, 20:43:26ber state taucht nur auf, wenn stateEvent oder so gesetzt ist.
Das stimmt wohl. Dann eher ... notify Ladegeraet:online.* ... für jedes Event des Ladegeraets / der Wallbox das mit "online" beginnt.

Zitat von: MadMax-FHEM am 18 Dezember 2024, 20:43:26EDIT: am einfachsten über Eventmonitor...
Aber genau für dieses Event muss er doch dann warten bis das Auto voll geladen ist...
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

MadMax-FHEM

Ja, muss er halt einmal...
Dafür stimmt dann das notify auch 100%ig :)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

canis

https://forum.fhem.de/index.php?topic=49408.0
z.B.:
attr ... readingsWatcher 360,,transmission-state erzeugt ein Event, wenn seit 6 Minuten keine Reaktion des Gerätes mehr erfolgt ist

Dracolein

Moin Leute, ich habs heute Nacht ganz einfach so gemacht

defmod doif_BEV_energy_check DOIF (
[MQTT2_BEV:cars_1_geofence] eq "<hier steht der geofence name>" and
[MQTT2_BEV:cars_1_state] eq "online" and
[MQTT2_BEV:cars_1_state_old] eq "charging"
)
(set dummy_BEV_energy_added [MQTT2_BEV:cars_1_charge_energy_added])
(setreading MQTT2_BEV cars_1_state_old online)
DOELSEIF
(
[MQTT2_BEV:cars_1_geofence] eq "<hier steht der geofence name>" and
[MQTT2_BEV:cars_1_state] eq "charging"
)
(setreading MQTT2_BEV cars_1_state_old charging)

Getestet in der Simulation scheint es wie gewünscht zuklappen.

Zitat von: Damian am 18 Dezember 2024, 20:53:53Du kannst beim DOIF das Attribut wait in Kombination mit dem Attribut do resetwait nutzen

DOIF(Trigger auf das Reading) (mach etwas)
attr wait 300
attr do resetwait

Bedeutet:

Solange der Trigger innerhalb von 300 Sekunden kommt, wird der Wait-Timer zurückgesetzt. In Umkehr bedeutet es, wenn 300 Sekunden nach dem letzten Trigger nichts mehr kommt, dann wird etwas ausgeführt.

Das ist allerdings ein sehr guter Hinweis.
Ich habe ständig den Gedanken "jetzt ein Timer nutzen, der runterzählt", wenn ich etwas in FHEM baue. Und immer fehlt mir solch eine Funktion.
Werde ich mir merken.

Zitat von: canis am 18 Dezember 2024, 22:02:44https://forum.fhem.de/index.php?topic=49408.0
z.B.:
attr ... readingsWatcher 360,,transmission-state erzeugt ein Event, wenn seit 6 Minuten keine Reaktion des Gerätes mehr erfolgt ist

Danke, auch cool
Raspberry Pi 4 mit FHEM; FTUI Dashboard auf Asus 15,6" VT168H Touchscreen; ZigBee mit ConBee2 USB-Stick; div. Shelly 2.5; integr. Gaszähler mit ESP8266 & ESPEasy;