FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Michi240281 am 28 Oktober 2021, 21:02:34

Titel: Batterycheck: Notify in DOIF ändern
Beitrag von: Michi240281 am 28 Oktober 2021, 21:02:34
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?
Titel: Antw:Batterycheck: Notify in DOIF ändern
Beitrag von: dyna am 29 Oktober 2021, 08:54:42
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
Titel: Antw:Batterycheck: Notify in DOIF ändern
Beitrag von: enno am 29 Oktober 2021, 09:30:22
https://forum.fhem.de/index.php/topic,84390.msg766887.html#msg766887
Titel: Antw:Batterycheck: Notify in DOIF ändern
Beitrag von: MadMax-FHEM am 29 Oktober 2021, 10:04:11
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
Titel: Antw:Batterycheck: Notify in DOIF ändern
Beitrag 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.

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!!
Titel: Antw:Batterycheck: Notify in DOIF ändern
Beitrag von: MadMax-FHEM am 01 November 2021, 12:26:24
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
Titel: Antw:Batterycheck: Notify in DOIF ändern
Beitrag von: Per am 14 März 2022, 16:12:28
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...