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?
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 ::)
Jou, klingt gut. Werde ich testen!
Danke für den Hinweis!
sorry da hat notify gefehlt, habs ergänzt. Ist aber insgesamt nur geschrieben nicht getestet.
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!
ich habe nicht ganz verstanden wie das mit der Zeit wirklich sein soll. Du kannst das notify mit disabledForIntervals auch noch zeitlich deaktivieren.
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!
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?
wirklich?
2021-12-14 14:27:29 power 457
hast Du mit dem Eventmonitor geschaut?
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!
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...
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?
Unter 400 kann nach deiner Definition auch nichts passieren ;)
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!
Schau doch erstmal ob überhaupt ein Event erscheint. Also Eventmonitor auf machen und Filter setzen.
wie oft kommen denn Events?
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!
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.
Und abgesehen davon. Du willst ggf. alle 5 Minuten den set-Befehl absetzen?
@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!
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?
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 :)
Wow, gutes Auge Otto ;D
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?
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!
Oh je, hab's jetzt gesehen und korrigiert. Jetzt warte ich auf Ergebnisse
Läuft wieder, wie gewünscht.
Danke für's Augenöffnen *schäm*