Batterycheck: Notify in DOIF ändern

Begonnen von Michi240281, 28 Oktober 2021, 21:02:34

Vorheriges Thema - Nächstes Thema

Michi240281

Hallo zusammen,

ich arbeite seit Jahren nur noch mit DOIFs, jetzt habe ich noch ein altes notify, das ich als DOIF umsetzen will, doch da hab ich so meine Probleme. Könnte mir jemand helfen?

define n_batt_chk_2 notify .*:[Bb]attery.* {\
  if($EVENT !~ m/ok/) {\
      Log(3,"$NAME: Batteriewarnung $EVENT");;\
      fhem("set Push msg 'FHEM' 'FHEM Batteriewarnung, $NAME. - $EVENT' 'Michi240281'0''");;\
    }\
  }\


Wie müsste das als DOIF lautet?
FHEM 5.6 auf RPi2 / HM LAN Adapter / diverse HM-Devices
FHEM-Remote-App
QNAP 419P / Onkyo TX-SR 608
DM500HD / GM Spark One
Sony 52HX905

dyna

Hallo,

ungetestet
geht bestimmt eleganter, es sollte benachrichtigten bei niedrigen Batterielevel.
defmod Batterie_Check_Doif DOIF ([":battery:"])\
   (\
    {\
if (ReadingsVal("$DEVICE","battery","0") ne "ok")\
       {\
   Log(3,"$NAME: Batteriewarnung $EVENT");;\
           fhem("set Push msg 'FHEM' 'FHEM Batteriewarnung, $NAME. - $EVENT' 'Michi240281'0''");;\
   }\
}\
   )\
DOELSEIF ([":Battery:"])\
   (\
    {\
if (ReadingsVal("$DEVICE","Battery","0") ne "ok")\
       {\
   Log(3,"$NAME: Batteriewarnung $EVENT");;\
           fhem("set Push msg 'FHEM' 'FHEM Batteriewarnung, $NAME. - $EVENT' 'Michi240281'0''");;\
   }\
}\
   )
attr Batterie_Check_Doif do always


MadMax-FHEM

#3
Mal "kätzerisch" gefragt: ;)

warum von einem notify das funktioniert (und du verstehst?) weg zu einem DOIF, das du nicht mal selbst erstellen kannst?

Wie stellst du dir da dann "Wartung" vor?

Was versprichst du dir davon?

Ja klar weniger "Modul-Familien"... (und ist das so wichtig?)
Aber sonst?

@dyna: bei dir gehen aber Devices die z.B. batteryPercent oder batteryLevel o.ä. haben "verloren", weil deine ReadingsVal ja nur auf battery/Battery gehen und auch (so ich DOIF verstehe) nur auf Events triggert, die Device:battery:ok/nok bzw. Device:Battery:ok/nok sind (wo ich nicht weiß, ob es mit "echten" Batterie-Events tatsächlich funktioniert. Getestet?)

@Michi240281: Wobei ja im "Original" auch nur auf Devices geprüft wurde, die ok im Readingwert haben -> wenn du ein Device hast, das batteryPercent o.ä. hat (ZWave/Zigbee) oder batteryLevel (manche CUL_HM Homematic), dann bekommst du für die ja (auch jetzt schon) eine Nachricht, dass Batterien leer sind, obwohl das gar nicht sein muss...

@enno: das ist aber mehr ein "at" als ein DOIF was "reagiert" ;)

Ich habe für Batteriewarnung ja ein simples notify (so wie deins Michi240281) und frage die ganzen Gerätespezifika (weil da leider [immer noch] ein wildes "Durcheinander" herrscht wie nun Batteriestatus/-zustand angegeben wird) in einer myUtils ab und entscheide da, ob nun Batterien gewechselt werden müssen oder nicht...

Nur der Vollständigkeithalber: https://forum.fhem.de/index.php/topic,82637.msg747514.html#msg747514

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)

Michi240281

Ne es ist eigentlich genau umgekehrt! Das Notify stammt noch aus Zeiten, wo ich gerade mit FHEM angefangen habe und das habe ich auch nur irgendwo aus nem Wiki/HowTo kopiert. Seitdem hat es gute Dienste geleistet, allerdings bin ich mit DOIF sehr viel vertrauter, ich habe schon alle von mir erstellen Notifys in DI geändert, nur bei dem hier ist mir die Syntax zu komplex bzw. kenne sie nicht. Und die Syntax im DOIF ist ja generell einfacher, weil ohne Perl möglich.

Der Hintergrund der ganzen Geschichte ist simpel:

Das Notify reagiert auf jede einzelne Batteriewarnung, obwohl ich schon ein "Event on change reading .*" gesetzt habe. Manche HM Geräte melden den Batteriestatus alle 5 Minuten, so bekomme ich alle 5 Minuten ne Pushmitteilung. Und ich weiß halt nicht, wie ich da hier eine Begrenzung einbauen kann, eben weil ich mich mit Notify kaum auskenne. Das ist für mich in einem DI eben viel einfacher umzusetzen.

Alternativ könnt Ihr mir auch sagen, wie ich das Notify ändere, damit es nur alle 24h eine Batteriewarnung per Push rausschickt.

Besten Dank vorab!!
FHEM 5.6 auf RPi2 / HM LAN Adapter / diverse HM-Devices
FHEM-Remote-App
QNAP 419P / Onkyo TX-SR 608
DM500HD / GM Spark One
Sony 52HX905

MadMax-FHEM

#5
Zitat von: Michi240281 am 01 November 2021, 10:43:14
Ne es ist eigentlich genau umgekehrt! Das Notify stammt noch aus Zeiten, wo ich gerade mit FHEM angefangen habe und das habe ich auch nur irgendwo aus nem Wiki/HowTo kopiert. Seitdem hat es gute Dienste geleistet, allerdings bin ich mit DOIF sehr viel vertrauter, ich habe schon alle von mir erstellen Notifys in DI geändert, nur bei dem hier ist mir die Syntax zu komplex bzw. kenne sie nicht. Und die Syntax im DOIF ist ja generell einfacher, weil ohne Perl möglich.

Die Syntax bzw. die ganze "Verattributierung" ist bei notify ja wohl mal um Lichtjahre einfacher ;)

Und so richtig scheint es ja mit DOIF auch nicht zu sein ;)

Wo liegt das Problem?
Du kannst doch (verm.) (erst mal) einfach die RegEx des notify für das DOIF nehmen und den Rest dann in DOIF-Syntax umbauen, die kennst du ja...

Ansonsten tut es mir leid, da ich DOIF nicht nutze, kann ich nicht wirklich helfen, im Sinne: das ist dein DOIF... :-\

Und keiner zwingt dich bei notify Perl zu verwenden... 8)
...aber egal.

Genauso wie du bei DOIF (wenn du wirklich was machen willst) u.U. auch (schnell) bei Perl landest... ;)

Zitat von: Michi240281 am 01 November 2021, 10:43:14
Das Notify reagiert auf jede einzelne Batteriewarnung, obwohl ich schon ein "Event on change reading .*" gesetzt habe. Manche HM Geräte melden den Batteriestatus alle 5 Minuten, so bekomme ich alle 5 Minuten ne Pushmitteilung. Und ich weiß halt nicht, wie ich da hier eine Begrenzung einbauen kann, eben weil ich mich mit Notify kaum auskenne. Das ist für mich in einem DI eben viel einfacher umzusetzen.

Dann ist bei event-on-change-reading was falsch oder event-on-updtae-reading o.ä. gesetzt.
Poste doch mal ein list.

Bei mir ist mit event-on-change-reading .* Ruhe bzgl. Batteriemeldungen, außer wenn es auf's Ende zugeht, da überlegt sich der Sensor das ab und an mal und dann wechselt er immer wieder mal zwischen ok und nok... ;)

Und ein DOIF mit derselben RegEx würde ebenso oft auslösen...
Wenn man dann kein wait oder was hat (disabledAfterTrigger bei notify ;) ), dann bekommst du genauso oft eine Nachricht.
Und wenn du eine bessere RegEx für DOIF hast, geht die bei notify genauso...

Aber: auch egal ;)

Zitat von: Michi240281 am 01 November 2021, 10:43:14
Alternativ könnt Ihr mir auch sagen, wie ich das Notify ändere, damit es nur alle 24h eine Batteriewarnung per Push rausschickt.

disabledAfterTrigger ;)

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)

Per

Um solche "Überbleibsel" mit den Möglichkeiten von DOIF (ui) zu kombinieren drängt sich der Perl Modus doch geradezu auf.

Während ich das so schreibe, fällt mir da so was ein...