FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: uron am 12 Dezember 2021, 18:03:33

Titel: Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: uron am 12 Dezember 2021, 18:03:33
Seit einiger Zeit versuche ich die Überschreitung eines bestimmten Messwertes (powerfox:power) als Auslöser für die Schaltung zweier Devices in Abhängigkeit von der Uhrzeit (13 Uhr) zu nutzen.
Meine ersten Versuche ergaben 2 Befehlsfolgen, die jeweils im 5-Minutenrhytmus den Messwert abgefragt haben:
define DEVICEabschaltung at +*00:05:00 {if (ReadingsNum("powerfox","power",0) > "400" && $hour > "12") {fhem ("set FBDECT_FritzBox_DECT200_1 off-for-timer 60")} elsif (ReadingsNum("powerfox","power",0) > "400" && $hour < "13") {fhem ("set FBDECT_FritzBox_DECT200_2 off-for-timer 60")}}

Diese Syntax funktioniert, erscheint mir allerdings wegen der zweimaligen Abfrage des Messwertes ,,power" nicht sehr elegant, außerdem belastet sie das System im 5-Minutenrhythmus.

Der nächste Versuch war einer per watchdog. Irgendwie finde ich aber keinen Weg zu einem 2. Event (regexp2), welches dem Vergleich dient – vielleicht bin ich auch zu einfältig, das Syntax-Muster umzusetzen.

Aktuell nutze ich DOIF in Kombination mit einer if-Abfrage:
define DEVICEabschaltung DOIF ([powerfox:power] > 400) {if ($hour > "12") {fhem("set FBDECT_DECT200_1 off-for-timer 60")} else {fhem("set FBDECT_FritzBox_DECT200_2 off-for-timer 60")}}

Im Ergebnis funktioniert auch diese Syntax, jedoch nicht durchgängig:
Von 27 Messwertüberschreitungen führten nur 6 zur Abschaltung eines Device – korrekt in Abhängigkeit von der Uhrzeit.
Stellt sich mir die Frage, wie oft triggert DOIF den Meßwert oder habe ich im DOIF-Ansatz einen Fehler eingebaut?

Den Weg über notify habe ich nicht weiter verfolgt, da sich der Messwert eigentlich ständig ändert und so das System mit dem Check der ,,Überschreitungsklärung" belastet wird – oder liege ich da falsch?

Welche Weg würdet ihr denn gehen?
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: Otto123 am 12 Dezember 2021, 20:16:33
Vorschlag define n_DEVICEabschaltung notify powerfox:power:.* {if ($EVTPART1 > 400) {if ($hour > 12) {fhem ("set FBDECT_FritzBox_DECT200_1 off-for-timer 60")} elsif ($hour < 13) {fhem ("set FBDECT_FritzBox_DECT200_2 off-for-timer 60")} } }

Finde ich eleganter als polling alle 5 min  ::)
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: uron am 12 Dezember 2021, 20:19:52
Jou, klingt gut. Werde ich testen!
Danke für den Hinweis!
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: Otto123 am 12 Dezember 2021, 20:22:22
sorry da hat notify gefehlt, habs ergänzt. Ist aber insgesamt nur geschrieben nicht getestet.
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: uron am 12 Dezember 2021, 20:55:27
Prima, nun bringt die Befehlsfolge keine Fehlermeldung mehr.
Ein erster Spontantest ergibt zunächst die gewünschte Funktion - morgen werde ich tagsüber einen Kompletttest durchführen.
Nochmals Danke!
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: Otto123 am 12 Dezember 2021, 21:17:15
ich habe nicht ganz verstanden wie das mit der Zeit wirklich sein soll. Du kannst das notify mit disabledForIntervals auch noch zeitlich deaktivieren.
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: uron am 12 Dezember 2021, 22:09:33
Das ist eine gute Idee mit "disabledForIntervals", da die relevanten und "interessanten" Events nur tagsüber eintreten, d.h. nach der Bürgerlichen Dämmerung, sind die Events nicht zu überwachen.

Nachtrag 1: Ach ja, um auf deine Frage zu antworten: ich möcht am Vor- und am Nachmittag unterschiedliche Devices abschalten!
Nachtrag 2: Klappt jetzt wunderbar!
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: uron am 14 Dezember 2021, 14:42:58
Was gestern noch so gut klappte, hat heute der Geist aufgegeben:
define n_DEVICEabschaltung notify powerfox:power:.* {if ($EVTPART1 > 400) {if ($hour > 12) {fhem ("set FBDECT_FritzBox_DECT200_1 off-for-timer 60")} elsif ($hour < 13) {fhem ("set FBDECT_FritzBox_DECT200_2 off-for-timer 60")} } }
Es kommen seit heute 9:25 Uhr vom Device ,,powerfox:power keine neuen Events mehr:

list powerfox
Internals:
   BUSY       0
   DEF        https://xxx%40yyy.com:aaa%bbb@backend.powerfox.energy/api/2.0/my/zzzz/current 300
   FUUID      6077fe25-f33f-aab4-b615-c1ae47baa9c89b0e
   Interval   300
   MainURL    https://xxx%40yyy.com:aaa%bbb@backend.powerfox.energy/api/2.0/my/zzz/current
   ModuleVersion 4.1.10 - 6.7.2021
   NAME       powerfox
   NOTIFYDEV  global
   NR         1469
   NTFY_ORDER 50-powerfox
   STATE      ???
   TYPE       HTTPMOD
   value     
   HttpUtils:
     NAME       
     addr       https://backend.powerfox.energy:443
     auth       1
     buf       
     data       
     displayurl https://xxx%40yyyy.com:aaa%bbb@backend.powerfox.energy/api/2.0/my/zzz/current
     header     
     host       backend.powerfox.energy
     httpversion 1.0
     ignoreredirects 1
     loglevel   4
     path       /api/2.0/my/zzz/current
     protocol   https
     pwd        aaa#bbb
     redirects  0
     timeout    2
     url        https://xxx%40yyy.com:aaa%bbb@backend.powerfox.energy/api/2.0/my/zzz/current
     user       xxx@yyy.com
     sslargs:
   QUEUE:
   READINGS:
     2021-12-14 14:27:29   power           457
     2021-12-14 14:27:29   total_consumption 2782182
     2021-12-14 14:27:29   total_feed      16395
   REQUEST:
     context    reading
     data       
     header     
     ignoreredirects 0
     num        unknown
     retryCount 0
     type       update
     url        https://xxx%40yyy.com:aaa%bbb@backend.powerfox.energy/api/2.0/my/zzz/current
   defptr:
     readingBase:
       power      reading
       total_consumption reading
       total_feed reading
     readingNum:
       power      01
       total_consumption 02
       total_feed 03
     readingOutdated:
     requestReadings:
       update:
         power      reading 01
         total_consumption reading 02
         total_feed reading 03
Attributes:
   reading01JSON Watt
   reading01Name power
   reading02JSON A_Plus
   reading02Name total_consumption
   reading03JSON A_Minus
   reading03Name total_feed
   room       Keller,PV-Anlage
   verbose    3


Woran könnte das liegen?
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: Otto123 am 14 Dezember 2021, 14:53:18
wirklich?
     2021-12-14 14:27:29   power           457
hast Du mit dem Eventmonitor geschaut?
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: uron am 14 Dezember 2021, 15:01:20
das list Modulabschaltung zeigt:
Internals:
   DEF        define Modulabschaltung notify powerfox:power:.* {if ($EVTPART1 > 400) {if ($hour > 12) {fhem ("set FBDECT_DECT200_1 off-for-timer 60")} elsif ($hour < 13) {fhem ("set FBDECT_FritzBox_DECT200_2 off-for-timer 60")} } }
   FUUID      61b65140-f33f-aab4-228f-c1138e3952609aca
   NAME       Modulabschaltung
   NR         308
   NTFY_ORDER 50-Modulabschaltung
   REGEXP     define
   STATE      active
   TYPE       notify
   READINGS:
     2021-12-14 14:27:17   state           active
     2021-12-14 09:25:16   triggeredByDev  powerfox
     2021-12-14 09:25:16   triggeredByEvent power: 454
Attributes:
   icon       solar_icon
   room       PV-Anlage

siehe das Reading, das zuletzt um 9:25:16 Uhr aktualisiert ist!
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: Otto123 am 14 Dezember 2021, 15:16:41
Ja ok, dann schau nach ob Events kommen. Das notify sagt nein, dein powerfox aktualisiert aber die Readings. Keine Ahnung warum keine Events kommen sollen...
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: uron am 14 Dezember 2021, 15:47:48
lt. Event Monitor kommen Events
2021-12-14 15:42:29.634 HTTPMOD powerfox power: 380
2021-12-14 15:42:29.634 HTTPMOD powerfox total_consumption: 2782638
2021-12-14 15:42:29.634 HTTPMOD powerfox total_feed: 16395

Warum schlagen die nicht in der "Modulabschaltung" auf?
Den FHEM-Server hatte ich auch schon einmal neu gestartet!
STATE von powerfox steht auf "3 Fragezeichen" - hat das in diesem Zusammenhang eine Bedeutung?
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: Damian am 14 Dezember 2021, 16:00:46
Unter 400 kann nach deiner Definition auch nichts passieren ;)
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: uron am 14 Dezember 2021, 16:06:08
Richtig, habe ich übersehen, hab zum Test den Schwellwert mal auf 200 gesenkt - das gleiche Problem bei power = 417.

Dann habe ich mal das Modul komplett gelöscht und neu eingestellt - Ergebnis:
Internals:
   DEF        define Modulabschaltung notify powerfox:power:.* {if ($EVTPART1 > 200) {if ($hour > 12) {fhem ("set FBDECT_FritzBox_DECT200_1 off-for-timer 60")} elsif ($hour < 13) {fhem ("set FBDECT_FritzBox_DECT200_2 off-for-timer 60")} } }
   FUUID      61b65140-f33f-aab4-228f-c1138e3952609aca
   NAME       Modulabschaltung
   NR         308
   NTFY_ORDER 50-Modulabschaltung
   REGEXP     define
   STATE      active
   TYPE       notify
   READINGS:
     2021-12-14 15:55:26   state           active
Attributes:
   icon       solar_icon
   room       PV-Anlage

Es fehlen die Triggerreadings!
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: CoolTux am 14 Dezember 2021, 16:10:24
Schau doch erstmal ob überhaupt ein Event erscheint. Also Eventmonitor auf machen und Filter setzen.
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: Otto123 am 14 Dezember 2021, 16:12:38
wie oft kommen denn Events?
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: uron am 14 Dezember 2021, 16:15:37
2021-12-14 16:00:32.766 HTTPMOD powerfox power: 506
2021-12-14 16:00:32.766 HTTPMOD powerfox total_consumption: 2782751
2021-12-14 16:00:32.766 HTTPMOD powerfox total_feed: 16395
2021-12-14 16:05:32.315 HTTPMOD powerfox power: 417
2021-12-14 16:05:32.315 HTTPMOD powerfox total_consumption: 2782751
2021-12-14 16:05:32.315 HTTPMOD powerfox total_feed: 16395
2021-12-14 16:10:33.080 HTTPMOD powerfox power: 364
2021-12-14 16:10:33.080 HTTPMOD powerfox total_consumption: 2782953
2021-12-14 16:10:33.080 HTTPMOD powerfox total_feed: 16395

Alle 5 Minuten, dann wird auch powerfox aktualisiert!
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: Otto123 am 14 Dezember 2021, 16:20:30
und der erste hat nicht getriggert?
Wobei das eine falsche Aussage / Frage ist. Das notify wird durch jeden dieser Events getriggert. Nur der Ausführungsteil läuft erst ab der Schwelle.
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: Damian am 14 Dezember 2021, 16:24:14
Und abgesehen davon. Du willst ggf. alle 5 Minuten den set-Befehl absetzen?
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: uron am 14 Dezember 2021, 16:31:51
@Damian: Ja, will ich!
@Otto123: Nein, der erste hat nicht getriggert die Readings bei "Modulabschaltung" haben sich gegenüber oben noch ncht geändert.
Die Triggerreadings fehlen immer noch!
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: Otto123 am 14 Dezember 2021, 16:56:27
So schräg kann man gar nicht  :'( :'( :'(
Was soll das sein?
DEF        define Modulabschaltung notify powerfox:power:.*

Du schreibst das define mit dem DEF Editor da rein?
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: Damian am 14 Dezember 2021, 17:04:40
Zitat von: Otto123 am 14 Dezember 2021, 16:56:27
Du schreibst das define mit dem DEF Editor da rein?

Da muss man erst drauf kommen :)
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: CoolTux am 14 Dezember 2021, 17:10:26
Wow, gutes Auge Otto  ;D
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: uron am 14 Dezember 2021, 17:27:41
Hatte  "Modudulabschaltung" komplett gelöscht und den kompletten define-Befehl dann in die Eingabezeile ganz oben eingetragen.
Notwendige Änderungen mache ich dann im DEF-Editor!
Was ist daran falsch?
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: Otto123 am 14 Dezember 2021, 17:31:02
Die DEF ist falsch! Du hast Schrott eingetragen - schau es Dir doch einfach an ...

Die DEF in einem notify beginnt mit dem Suchmuster und nicht mit dem Wort define  :-X
Dein notify würde auf das Suchmuster define triggern - das wolltest Du nicht!
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: uron am 14 Dezember 2021, 17:40:09
Oh je, hab's jetzt gesehen und korrigiert. Jetzt warte ich auf Ergebnisse
Titel: Antw:Schwellwert abfragen mit if, DOIF, notify oder watchdog
Beitrag von: uron am 14 Dezember 2021, 19:53:56
Läuft wieder, wie gewünscht.
Danke für's Augenöffnen *schäm*