FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Joesky am 01 April 2019, 15:15:55

Titel: [Gelöst] Batterieüberwachung nur einmal täglich
Beitrag von: Joesky am 01 April 2019, 15:15:55
Hat vielleicht jemand eine Idee wie man die Batterieüberwachung (https://wiki.fhem.de/wiki/Batterie%C3%BCberwachung) aus dem Wiki so abändern könnte, dass

1. Alle Meldungen nur einmal am Tag gesammelt verschickt werden (bei mit über Telegram)
2. Die Meldungen sich nicht wiederholen, also pro Gerät nur eine Zeile gespeichert und verschickt wird.

Hintergrund bei mir ist dieser, dass ich eine Batteriewarnung bekomme, die über die CUL433 reinkommt aber nicht von einem meiner Geräte ist. Ich habe das Gerät in der fhem.cfg auf die Geräte-Ignoreliste gesetzt. Es wird auch nicht mehr in der fhem.cfg neu angelegt und trotzdem bekomme ich täglich zwischen 100 und 150 Meldungen, 24h. Das nervt. Ich habe gesehen, dass Einträge mit dem Gerät in der fhem.save gibt.
Des weiteren nerven mich Batteriewarnungen, die Nachts kommen. Auch wenn der Ton aus ist, die Vibration kriege ich mit. Und der dritte Grund ist, dass die Geräte, wenn sie eine Batteriewarnung ausgeben mind. einen ganzen Tag noch halten werden, vor daher ist eine sofortige Meldung für mich persönlich nicht nötig. Ich hab nur keine Idee, wie man das machen könnte.
Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: igami am 01 April 2019, 17:03:32
Das monitoring Modul deckt das ab. Ein Beispiel für die Batterie Überwachung findet sich in der commandref.
Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: Joesky am 01 April 2019, 17:41:10
Danke für den Tipp! Würde ich nun mit DOIF oder einem Notify zu einer bestimmten Uhrzeit einen Reading auslesen und verschicken?
Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: Damian am 01 April 2019, 19:59:50
Zitat von: Joesky am 01 April 2019, 17:41:10
Danke für den Tipp! Würde ich nun mit DOIF oder einem Notify zu einer bestimmten Uhrzeit einen Reading auslesen und verschicken?

notify kann keine Zeitsteuerung, wenn schon, dann at-Befehl oder eben DOIF.
Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: Byte09 am 01 April 2019, 20:13:59
Du könntest das auch komplett über MSWITCH realisieren . Das könnte alle Meldungen 'sammeln' und zu einer bestimmten Zeit verschicken.  Da wäre alles komplett in einem Device.  Bin heute leider unterwegs , könnte aber morgen mal was bauen.

Gruss Byte09

Gesendet von meinem SM-G900F mit Tapatalk

Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: igami am 01 April 2019, 20:56:15
Zitat von: Joesky am 01 April 2019, 17:41:10
Danke für den Tipp! Würde ich nun mit DOIF oder einem Notify zu einer bestimmten Uhrzeit einen Reading auslesen und verschicken?
Hier ist eine Möglichkeit wie man das machen kann:
Zitat von: igami am 11 Juli 2017, 08:05:47
Schon etwas ausführlicher:

defmod ServiceNotifications_DI DOIF ((\
   [":^error add:"]\
   || [$SELF:cmd] == 2\
) \
&& (\
   (\
     [ServiceNotifications_cu:state] eq "ein"\
     && [NRW:state] eq "none"\
   ) \
   || AttrVal("$DEVICE", "priority", 0) == 1\
) \
)(\
  {my $msg = fhem("get TYPE=monitoring default");;\
   my $oldMsg = $defs{$SELF}{helper}{oldMsg};;\
\
   if($msg && (!$oldMsg || $msg ne $oldMsg)){\
    sendEmail("XXX", $msg);;\
\
$defs{$SELF}{helper}{oldMsg} = $msg;;\
   }\
   \
   return;;\
  }\
)\
DOELSEIF\
([":^error add:"])

attr ServiceNotifications_DI cmdState send notifications|notifications pending
attr ServiceNotifications_DI cmdpause 60*15
attr ServiceNotifications_DI do always
attr ServiceNotifications_DI wait 60*15

Ich überprüfe immer auf error add:

Umschriben bedeutet der code:
Falls ein Gerät ein "error add:" Event auslöst, oder ich mich im Status zwei Befinde
Und, mein Weekdaytimer eingeschaltet ist und kein Feiertag ist, oder die Benachrichtigung Priorität hat,
warte 15 Minuten ob noch weitere Fehlermeldungen kommen und schicke mir dann eine Nachricht, sofern die Nachricht sich von der vorherigen unterscheidet und nicht leer ist.
Andernfalls falls ein Gerät ein "error add:" Event auslöst, speichere das als Status zwei.

Dieses DOIF nutze ich auf der Arbeit um mich nur während der Arbeitszeit informieren zu lassen. Ich möchte ja nicht zu Hause wissen, dass ich Batterien tauschen muss. Falls aber etwas wichtiges ist, z.B. Klimaanlage im Serverraum ausgefallen werde ich trotzdem benachrichtigt. Dafür habe ich meinen monitoring einer userattr priority spendiert.

Zu Hause mache ich das ganz anders, da lasse ich mir einfach alle Nachrichten schicken, wenn ich 15 Minuten zu hause bin. Und nicht dann, wenn sie auftreten.
Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: Joesky am 03 April 2019, 14:11:32
Das sieht irgendwie kompliziert aus. Ich will doch nur Meldungen gesammelt 1x am Tag zur festen Uhrzeit ausgeben...  ;)

Das mit dem MSWITCH find ich interessant.
Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: Eistee am 03 April 2019, 14:27:11
Schreib doch in deine DOIF Bedingung einfach die Uhrzeit mit rein: and [18:00]
Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: DeeSPe am 03 April 2019, 15:01:31
Hier ein beispielhaftes at:

defmod at_Batteriewarnung at *20:00 {\
  my @devs;;\
  foreach (devspec2array("battery!=,batteryPercent!="))\
  {\
    push @devs,$_ if (ReadingsVal($_,"battery","") eq "low" || ReadingsNum($_,"batteryPercent",100) < 20);;\
  }\
  fhem "msg push Die Batterien von folgenden Geräten sollten ausgetauscht werden: ".join(", ",@devs) if (@devs);;\
}


Jeden Tag um 20 Uhr werden alle Devices die ein battery oder batteryPercent Reading haben und deren Werte entweder low oder kleiner als 20 sind in ein Array geschrieben und am Ende das Array als kommaseparierter String per Push Nachricht versendet.

Gruß
Dan
Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: DeeSPe am 03 April 2019, 15:30:59
Zitat von: DeeSPe am 03 April 2019, 15:01:31
Hier ein beispielhaftes at:

defmod at_Batteriewarnung at *20:00 {\
  my @devs;;\
  foreach (devspec2array("battery!=,batteryPercent!="))\
  {\
    push @devs,$_ if (ReadingsVal($_,"battery","") eq "low" || ReadingsNum($_,"batteryPercent",100) < 20);;\
  }\
  fhem "msg push Die Batterien von folgenden Geräten sollten ausgetauscht werden: ".join(", ",@devs) if (@devs);;\
}


Jeden Tag um 20 Uhr werden alle Devices die ein battery oder batteryPercent Reading haben und deren Werte entweder low oder kleiner als 20 sind in ein Array geschrieben und am Ende das Array als kommaseparierter String per Push Nachricht versendet.

Gruß
Dan

Oder noch kürzer:
defmod at_Batteriewarnung at *20:00 {\
  my @devs = devspec2array("battery=low,batteryPercent<20");;\
  fhem "msg push Die Batterien von folgenden Geräten sollten ausgetauscht werden: ".join(", ",@devs) if (@devs);;\
}


Gruß
Dan
Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: Byte09 am 03 April 2019, 18:01:07
Zitat von: Joesky am 03 April 2019, 14:11:32
Das sieht irgendwie kompliziert aus. Ich will doch nur Meldungen gesammelt 1x am Tag zur festen Uhrzeit ausgeben...  ;)

Das mit dem MSWITCH find ich interessant.

hier die MSwitch Version:

aktuelles Fhem ist Voraussetzung. sendet dir die Infos immer um 18.00 Uhr . Wenn du reinschaust wirst du sehen , wo du die Zeit ändern kannst.

ansonsten kannst du manuell das Senden auslösen und die readings zurücksetzen. Bei Fragen gerne melden.

gruss Byte09

PS:

falls du im device folgende meldung bekommst :

Zitattelebot   
Achtung: Dieses Device ist nicht vorhanden , bitte mit "set changed_renamed" korrigieren !

musst du den Namen deines telegrammdevices anpassen. dazu bitte 'set changed_renamed telebot DEINDEVICENAME' eingeben' ( direkt im Device über die 'set' auswahl.


defmod Batteri_Info MSwitch
attr Batteri_Info MSwitch_Debug 0
attr Batteri_Info MSwitch_Delete_Delays 1
attr Batteri_Info MSwitch_Expert 1
attr Batteri_Info MSwitch_Extensions 0
attr Batteri_Info MSwitch_Help 0
attr Batteri_Info MSwitch_Ignore_Types notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul
attr Batteri_Info MSwitch_Include_Devicecmds 1
attr Batteri_Info MSwitch_Include_MSwitchcmds 0
attr Batteri_Info MSwitch_Include_Webcmds 0
attr Batteri_Info MSwitch_Inforoom MSwitch
attr Batteri_Info MSwitch_Lock_Quickedit 1
attr Batteri_Info MSwitch_Mode Full
attr Batteri_Info eventMap /exec_cmd_1:send_info/exec_cmd_1 ID 1:clear_readings/
attr Batteri_Info room 1_test
attr Batteri_Info stateFormat {my $out = ReadingsVal($name,'Devices_all','no_info');;$out=~ s/\n/<br>/ig;;return $out;;}
attr Batteri_Info webCmd send_info:clear_readings

setstate Batteri_Info no_info
setstate Batteri_Info 2019-04-03 17:21:51 .Device_Affected FreeCmd-AbsCmd1,FreeCmd-AbsCmd2,teleBot-AbsCmd1
setstate Batteri_Info 2019-04-03 17:54:13 .Device_Affected_Details FreeCmd-AbsCmd1#[NF]cmd#[NF]cmd#[NF]{#[nl]my#[sp]@devs#[se]#[nl]@devs=(devspec2array('battery!='))#[se]#[nl]my#[sp]$alldevices#[se]#[nl]foreach#[sp](@devs)#[nl]{#[nl]my#[sp]$devicename#[sp]=#[sp]"Device_".$_#[se]#[nl]my#[sp]$inhalt#[sp]=#[sp]ReadingsVal($_#[sp]#[ko]'battery'#[ko]'')#[se]#[nl]$alldevices#[sp].=#[sp]$_."#[sp]Status#[dp]#[sp]".$inhalt."#[bs]n"#[se]#[nl]fhem("setreading#[sp]$SELF#[sp]$devicename#[sp]$inhalt")#[se]#[nl]}#[nl]fhem("setreading#[sp]$SELF#[sp]Devices_all#[sp]$alldevices")#[se]#[nl]}#[NF]#[NF]delay1#[NF]delay1#[NF]00#[dp]00#[dp]00#[NF]00#[dp]00#[dp]00#[NF]#[NF]#[NF]0#[NF]0#[NF]1#[NF]0#[NF]#[NF]0#[NF]0#[NF]1#[ND]FreeCmd-AbsCmd2#[NF]cmd#[NF]cmd#[NF]{#[nl]fhem("deletereading#[sp]$SELF#[sp]Device_.*")#[se]#[nl]fhem("deletereading#[sp]$SELF#[sp]Devices_.*")#[se]#[nl]}#[NF]#[NF]delay1#[NF]delay1#[NF]00#[dp]00#[dp]00#[NF]00#[dp]00#[dp]00#[NF]#[NF]#[NF]0#[NF]0#[NF]1#[NF]1#[NF]#[NF]0#[NF]0#[NF]1#[ND]teleBot-AbsCmd1#[NF]_msg#[NF]no_action#[NF][$SELF#[dp]Devices_all]#[NF]#[NF]delay1#[NF]delay1#[NF]00#[dp]00#[dp]00#[NF]00#[dp]00#[dp]00#[NF]#[NF]#[NF]0#[NF]0#[NF]2#[NF]0#[NF]#[NF]0#[NF]0#[NF]1
setstate Batteri_Info 2019-04-03 17:20:54 .Device_Events no_trigger
setstate Batteri_Info 2019-04-03 16:31:32 .First_init done
setstate Batteri_Info 2019-04-03 16:31:32 .Trigger_cmd_off no_trigger
setstate Batteri_Info 2019-04-03 16:31:32 .Trigger_cmd_on no_trigger
setstate Batteri_Info 2019-04-03 17:20:54 .Trigger_condition
setstate Batteri_Info 2019-04-03 16:31:32 .Trigger_off no_trigger
setstate Batteri_Info 2019-04-03 16:31:32 .Trigger_on no_trigger
setstate Batteri_Info 2019-04-03 17:20:54 .Trigger_time on~off~ononly[18#[dp]00]~offonly~onoffonly
setstate Batteri_Info 2019-04-03 16:31:32 .V_Check V2.00
setstate Batteri_Info 2019-04-03 17:56:25 Trigger_device no_trigger
setstate Batteri_Info 2019-04-03 16:31:32 Trigger_log off
setstate Batteri_Info 2019-04-03 17:29:19 last_activation_by manual
setstate Batteri_Info 2019-04-03 17:50:09 last_cmd 2
setstate Batteri_Info 2019-04-03 17:50:09 last_exec_cmd set teleBot _msg 0
setstate Batteri_Info 2019-04-03 17:29:19 state on

Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: Eistee am 03 April 2019, 18:05:26
Dann mach ich noch mal das DOIF:
defmod xx.Battery.di DOIF ([":^[Bb]attery"] eq "low" and [18:00])\
(msg push Die Batterie von $DEVICE ist bald leer.)
Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: Byte09 am 03 April 2019, 18:16:58
Zitat von: Eistee am 03 April 2019, 18:05:26
Dann mach ich noch mal das DOIF:
defmod xx.Battery.di DOIF ([":^[Bb]attery"] eq "low" and [18:00])\
(msg push Die Batterie von $DEVICE ist bald leer.)


nun ist ja reichlich Auswahl vorhanden  ;D

gruss Byte09
Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: Damian am 03 April 2019, 18:56:54
Zitat von: Eistee am 03 April 2019, 18:05:26
Dann mach ich noch mal das DOIF:
defmod xx.Battery.di DOIF ([":^[Bb]attery"] eq "low" and [18:00])\
(msg push Die Batterie von $DEVICE ist bald leer.)


Das wird nicht gut gehen, ein Event ist nur wahr oder falsch, es kann aber nicht low sein und schon gar nicht gleichzeitig mit einem Zeittrigger.

Es gibt dennoch eine kurze Alternative mit Hilfe der Aggregation mit DOIF:

define msgBattery DOIF ([18:00]) (msg push Batteriewechsel für folgende Devices: [@"":battery:$_ ne "ok","keine"])
attr msgBattery  do always


PS.: Im DOIF-Perlmodus geht es noch kürzer ohne Attribute
Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: Joesky am 08 April 2019, 15:09:46
Uj, danke erstmal für die ganzen Vorschläge. Es gibt viele Wege, die nach Rom führen. Oder so ähnlich...  :)

Zitatsendet dir die Infos immer um 18.00 Uhr . Wenn du reinschaust wirst du sehen , wo du die Zeit ändern kannst.
Nein, leider sehe ich es nicht. Ehrlich gesagt verstehe ich das Modul noch nicht. Ich hab noch nicht rausbekommen, wie ich es dem Modul beibringe, dass er auf .*:[Bb]attery:.* (hier dann natürlich auf !ok, wie derzeit beim Notify) reagiert. Und auch, dass es die Benachrichtigung auf Telegram verschickt.

EDIT:
Jetzt sehe ich was... Wo trage ich das ganze Geraffel ab "setstate" ein?
Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: Byte09 am 08 April 2019, 18:19:52
Zitat von: Joesky am 08 April 2019, 15:09:46
Uj, danke erstmal für die ganzen Vorschläge. Es gibt viele Wege, die nach Rom führen. Oder so ähnlich...  :)
Nein, leider sehe ich es nicht. Ehrlich gesagt verstehe ich das Modul noch nicht. Ich hab noch nicht rausbekommen, wie ich es dem Modul beibringe, dass er auf .*:[Bb]attery:.* (hier dann natürlich auf !ok, wie derzeit beim Notify) reagiert. Und auch, dass es die Benachrichtigung auf Telegram verschickt.

EDIT:
Jetzt sehe ich was... Wo trage ich das ganze Geraffel ab "setstate" ein?

ok, damit wir nicht aneinander vorbei reden. du hast das jetzt nicht alles von hand eingegeben , oder  :o ?
... falls doch bitte hier lesen : https://wiki.fhem.de/wiki/Import_von_Code_Snippets (https://wiki.fhem.de/wiki/Import_von_Code_Snippets)

Gruss Byte09

Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: Joesky am 09 April 2019, 06:38:32
Alte Schule! Ich kopiere noch alles relevante direkt in die fhem.cfg rein...
Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: Byte09 am 09 April 2019, 06:40:57
OK, jeder wie er mag. [emoji53]
Aber dann bin ich raus hier, da kann mir zu viel schief gehen und ein direktes bearbeiten von MSwitch Devices in der cfg ist nicht möglich

Gruß Byte09

Gesendet von meinem ELE-L29 mit Tapatalk
Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: Joesky am 09 April 2019, 10:10:24
Ich kannte das (https://wiki.fhem.de/wiki/Import_von_Code_Snippets) noch nicht... Hat aber wunderbar funktioniert, danke dafür. Sehe ich irgendwie, ob da schon irgendwelche Meldungen aufgelaufen sind?
Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: Joesky am 11 April 2019, 15:00:31
OK, ich hab's gefunden. Da stehen ein paar Meldungen. Diese wurden nicht geschickt, das das Kommando set teleBot _msg ... lautet. Fehlt da nicht der Telegramempfänger? Wie kann ich den anpassen?

Edit: Ich hab auch das gefunden. Es muss bei der Action teleBot die "MSwitch 'cmd1': Set" auf message umgestellt werden. Dann in dem Textfeld vor dem "[$SELF:Devices_all]" der Telegram-Empfänger eingetragen werden.

Damit wäre dieser Thread gelöst.
Titel: Antw:Batterieüberwachung nur einmal täglich
Beitrag von: Byte09 am 11 April 2019, 18:11:47
Zitat von: Joesky am 11 April 2019, 15:00:31
OK, ich hab's gefunden. Da stehen ein paar Meldungen. Diese wurden nicht geschickt, das das Kommando set teleBot _msg ... lautet. Fehlt da nicht der Telegramempfänger? Wie kann ich den anpassen?

Edit: Ich hab auch das gefunden. Es muss bei der Action teleBot die "MSwitch 'cmd1': Set" auf message umgestellt werden. Dann in dem Textfeld vor dem "[$SELF:Devices_all]" der Telegram-Empfänger eingetragen werden.

Damit wäre dieser Thread gelöst.

Sorry, ich hate diesen Thead nicht mehr auf dem Schirm. Bei MSwitch Problemen poste doch zukünftig bitte hier:https://forum.fhem.de/index.php/topic,86199.0.html (https://forum.fhem.de/index.php/topic,86199.0.html)

dort antworte ich in der regel sehr kurzfristig.

grussByte09
Titel: Antw:[Gelöst] Batterieüberwachung nur einmal täglich
Beitrag von: nocomment am 10 März 2020, 00:32:48
Hey Byte09,

coole Umsetzung!

Würde es nur cooler finden wenn statt nach Zeit man eine Nachricht bekommt, wenn ein Batteriestatus nicht mehr auf "ok" ist.

Kann man das bei deinem Modul mit den "Trigger Conditions" umsetzen ?

Zitat[19:10-23:00] OR [Devicename:Reading] eq "on" eine der Bedingungen muss erfüllt sein
Titel: Antw:[Gelöst] Batterieüberwachung nur einmal täglich
Beitrag von: Peter_Listig am 11 März 2020, 22:47:04
@DeeSPe


Hallo Dan,

deine Lösung habe ich umgesetzt und bekomme früh um 16:00 Uhr die Meldung per Telegram ...




defmod at_Batteriewarnung at *16:00 {\
  my @devs = devspec2array("battery=low,batteryPercent<20");;\
  fhem "set MeinTG_bot message Die Batterien von folgenden Geräten sollten ausgetauscht werden: ".join(", ",@devs) if (@devs);;\
}



nicht gelungen ist mir die Meldung  z.B. nur am Sonntag auszugeben    at *16:00 IF (wday == 0) {\

Kleiner Tipp wäre nett

Gruß

Peter
Titel: Antw:[Gelöst] Batterieüberwachung nur einmal täglich
Beitrag von: DeeSPe am 12 März 2020, 08:56:10
Zitat von: Peter_Listig am 11 März 2020, 22:47:04
@DeeSPe


Hallo Dan,

deine Lösung habe ich umgesetzt und bekomme früh um 16:00 Uhr die Meldung per Telegram ...




defmod at_Batteriewarnung at *16:00 {\
  my @devs = devspec2array("battery=low,batteryPercent<20");;\
  fhem "set MeinTG_bot message Die Batterien von folgenden Geräten sollten ausgetauscht werden: ".join(", ",@devs) if (@devs);;\
}



nicht gelungen ist mir die Meldung  z.B. nur am Sonntag auszugeben    at *16:00 IF (wday == 0) {\

Kleiner Tipp wäre nett

Gruß

Peter

Moin Peter,

einfach hinten an das if als weitere Bedingung anfügen.

defmod at_Batteriewarnung at *16:00 {\
  my @devs = devspec2array("battery=low,batteryPercent<20");;\
  fhem "set MeinTG_bot message Die Batterien von folgenden Geräten sollten ausgetauscht werden: ".join(", ",@devs) if (@devs && $wday == 0);;\
}


Gruß
Dan
Titel: Antw:[Gelöst] Batterieüberwachung nur einmal täglich
Beitrag von: rcmcronny am 12 März 2020, 10:59:33
Hoi,

ich häng mich hier mal kurz rein, hoffe es ist ok.

Ich habe einen Sensor (NC_WS_80) der leider älter ist und immer ein "low" sendet, gibt es eine einfache Möglichkeit diesen auszuklammern ?
Aktuell bekomme ich halt jeden Abend 19 Uhr bei mir nun die Info, das ich da die Batterie tauschen soll, die ist aber noch ok :D

Ronny
Titel: Antw:[Gelöst] Batterieüberwachung nur einmal täglich
Beitrag von: DeeSPe am 12 März 2020, 11:25:04
Zitat von: rcmcronny am 12 März 2020, 10:59:33
Hoi,

ich häng mich hier mal kurz rein, hoffe es ist ok.

Ich habe einen Sensor (NC_WS_80) der leider älter ist und immer ein "low" sendet, gibt es eine einfache Möglichkeit diesen auszuklammern ?
Aktuell bekomme ich halt jeden Abend 19 Uhr bei mir nun die Info, das ich da die Batterie tauschen soll, die ist aber noch ok :D

Ronny

Einfach den Namen im devspec herausfiltern:
my @devs = devspec2array("battery=low,batteryPercent<20:FILTER=NAME!=NC_WS_80")
Wenn NC_WS_80 der Name des Devices ist.

Gruß
Dan
Titel: Antw:[Gelöst] Batterieüberwachung nur einmal täglich
Beitrag von: rcmcronny am 12 März 2020, 11:33:09
Hi Dan,

super, Danke ! Ich habs eingebaut :)

Ronny
Titel: Antw:[Gelöst] Batterieüberwachung nur einmal täglich
Beitrag von: DeeSPe am 12 März 2020, 14:50:12
Zitat von: DeeSPe am 12 März 2020, 08:56:10
Moin Peter,

einfach hinten an das if als weitere Bedingung anfügen.

defmod at_Batteriewarnung at *16:00 {\
  my @devs = devspec2array("battery=low,batteryPercent<20");;\
  fhem "set MeinTG_bot message Die Batterien von folgenden Geräten sollten ausgetauscht werden: ".join(", ",@devs) if (@devs && $wday == 0);;\
}


Gruß
Dan

Um es noch kürzer für den Parser zu machen und damit Speicher und CPU zu schonen wäre das wohl noch besser:

defmod at_Batteriewarnung at *16:00 {\
  return if ($wday != 0);;\
  my @devs = devspec2array("battery=low,batteryPercent<20");;\
  fhem "set MeinTG_bot message Die Batterien von folgenden Geräten sollten ausgetauscht werden: ".join(", ",@devs) if (@devs);;\
}


Gruß
Dan
Titel: Antw:[Gelöst] Batterieüberwachung nur einmal täglich
Beitrag von: rcmcronny am 12 März 2020, 19:34:57
Dan, ich muss nochmal nerven, sorry.

Zitat von: DeeSPe am 12 März 2020, 11:25:04
Einfach den Namen im devspec herausfiltern:
my @devs = devspec2array("battery=low,batteryPercent<20:FILTER=NAME!=NC_WS_80")
Wenn NC_WS_80 der Name des Devices ist.

Klappt leider nicht, ist trotzdem noch enthalten.

Was mach ich hier falsch ?

Danke Ronny

List vom Device

Internals:
   AlternativeDEFcode CUL_TCM97001_5_157
   CHANGED   
   CODE       CUL_TCM97001_89
   DEF        CUL_TCM97001_89
   FUUID      5d07c137-f33f-e150-52ac-f91aef85fe40a235
   LASTInputDev SIGNALESP2
   MSGCNT     213
   NAME       NC_WS_80
   NR         163
   SIGNALESP2_DMSG s59D803718000
   SIGNALESP2_MSGCNT 210
   SIGNALESP2_Protocol_ID 0.3
   SIGNALESP2_RAWMSG MS;P0=-3915;P1=-9184;P3=481;P7=-1960;D=31373037303037373030303730303737373737373737373030373030303737373030373737;CP=3;SP=1;R=39;O;m2;
   SIGNALESP2_RSSI -54.5
   SIGNALESP2_TIME 2020-03-12 19:29:23
   SIGNALESP_DMSG s59D803718000
   SIGNALESP_MSGCNT 32
   SIGNALESP_Protocol_ID 0
   SIGNALESP_RAWMSG MS;P2=494;P4=-1952;P5=-3894;P6=-9184;D=26242524252524242525252425252424242424242424242525242525252424242525242424;CP=2;SP=6;R=1;O;m2;
   SIGNALESP_RSSI -73.5
   SIGNALESP_TIME 2020-03-12 19:28:13
   STATE      T: 5.5 H: 24
   TYPE       CUL_TCM97001
   lastH      0
   lastT      1584037763.3846
   READINGS:
     2020-03-12 18:50:53   battery         low
     2020-03-12 18:50:53   batteryState    low
     2020-02-10 19:54:11   channel         1
     2020-03-12 19:29:23   humidity        24
     2020-03-12 16:49:33   mode            normal
     2020-03-12 19:29:23   state           T: 5.5 H: 24
     2020-03-12 19:29:23   temperature     5.5
Attributes:
   event-min-interval .*:300
   event-on-change-reading .*
   model      NC_WS
   room       CUL_TCM97001


Das at sieht wie folgt aus


Internals:
   COMMAND    {
  my @devs = devspec2array("battery=low,batteryPercent<20:FILTER=NAME!=NC_WS_80");
  fhem "msg push Die Batterien von folgenden Geräten sollten ausgetauscht werden: ".join(", ",@devs) if (@devs);
}
   DEF        *19:00 {
  my @devs = devspec2array("battery=low,batteryPercent<20:FILTER=NAME!=NC_WS_80");
  fhem "msg push Die Batterien von folgenden Geräten sollten ausgetauscht werden: ".join(", ",@devs) if (@devs);
}
   FUUID      5e67500d-f33f-e150-6ccf-6d02f28f10418488
   NAME       at_Batteriewarnung
   NR         230
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      Next: 19:00:00
   TIMESPEC   19:00
   TRIGGERTIME 1584122400
   TRIGGERTIME_FMT 2020-03-13 19:00:00
   TYPE       at
   READINGS:
     2020-03-12 19:13:09   state           Next: 19:00:00
Titel: Antw:[Gelöst] Batterieüberwachung nur einmal täglich
Beitrag von: DeeSPe am 12 März 2020, 19:49:31
Schon probiert mal den NAME Filter an den Anfang zu setzen?

{devspec2array("NAME!=NC_WS_80:FILTER=battery=low,batteryPercent<20")}

Gruß
Dan
Titel: Antw:[Gelöst] Batterieüberwachung nur einmal täglich
Beitrag von: rcmcronny am 12 März 2020, 19:59:54
Hoi,

nein, aber sorum klappt es dann auch, wie es soll :) Danke !

ronny
Titel: Antw:[Gelöst] Batterieüberwachung nur einmal täglich
Beitrag von: Peter_Listig am 13 März 2020, 12:23:19
Hallo zusammen,

@DeeSpe

vielen Dank an dich - ich wäre wedwe auf die eine noch die andere Lösung gekommen.

eine Kleinigkeit zum Verständnis noch:


  return if ($wday != 0);;\


bedeutet doch, dass return immer ausser am Sonntag erfolgt ?

@rcmcronny

bei mir zeigt ein "NC_WS" Device mit der Nummer 82 dasselbe Verhalten
deswegen auch die Meldung nur einmal am Sonntag - wenn der Sensor
sich länger als 24 Stunden nicht meldet informiert mich ein watchdog ...

Gruß

Peter
Titel: Antw:[Gelöst] Batterieüberwachung nur einmal täglich
Beitrag von: DeeSPe am 13 März 2020, 13:08:56
Zitat von: Peter_Listig am 13 März 2020, 12:23:19
@DeeSpe

vielen Dank an dich - ich wäre wedwe auf die eine noch die andere Lösung gekommen.

eine Kleinigkeit zum Verständnis noch:


  return if ($wday != 0);;\


bedeutet doch, dass return immer ausser am Sonntag erfolgt ?

Genau, das war doch gefordert!?

Gruß
Dan
Titel: Antw:[Gelöst] Batterieüberwachung nur einmal täglich
Beitrag von: Ralf9 am 13 März 2020, 13:12:53
ZitatIch habe einen Sensor (NC_WS_80) der leider älter ist und immer ein "low" sendet, gibt es eine einfache Möglichkeit diesen auszuklammern ?
Dafür gibts das Attribut "negation-batt", damit kann battery invertiert werden.

Gruß Ralf
Titel: Antw:[Gelöst] Batterieüberwachung nur einmal täglich
Beitrag von: Peter_Listig am 13 März 2020, 15:46:58
@DeeSpe



return if ($wday != 0);;\


meldet an jeden Tag ausser Sonntag ...


return if ($wday == 0);;\


meldet nur am Sonntag ... da habe ich Zeit   ;)

vielen Dank nochmal

Peter
Titel: Antw:[Gelöst] Batterieüberwachung nur einmal täglich
Beitrag von: DeeSPe am 13 März 2020, 17:26:23
Zitat von: Peter_Listig am 13 März 2020, 15:46:58
@DeeSpe

return if ($wday == 0);;\


meldet nur am Sonntag ... da habe ich Zeit   ;)

Natürlich! Da war ich auf dem falschen Fuß... ;)

EDIT: So wird die Schleife nur am Sonntag frühzeitig verlassen und meldet an allen anderen Tagen die Batterien.

Gruß
Dan
Titel: Antw:[Gelöst] Batterieüberwachung nur einmal täglich
Beitrag von: nocomment am 13 März 2020, 17:31:48
Würde es nur cooler finden wenn statt nach Zeit man eine Nachricht bekommt, wenn ein Batteriestatus nicht mehr auf "ok" ist.

Kann man das bei deinem Modul mit den "Trigger Conditions" umsetzen ?

Zitat[19:10-23:00] OR [Devicename:Reading] eq "on" eine der Bedingungen muss erfüllt sein
Titel: Antw:[Gelöst] Batterieüberwachung nur einmal täglich
Beitrag von: DeeSPe am 13 März 2020, 21:07:39
Zitat von: nocomment am 13 März 2020, 17:31:48
Würde es nur cooler finden wenn statt nach Zeit man eine Nachricht bekommt, wenn ein Batteriestatus nicht mehr auf "ok" ist.

Das war hier in diesem Thema aber nicht die Anforderung.
Was Du möchtest gibt es bereits beschrieben im Wiki, so wie es der TE schon im Eingangsbeitrag erwähnt hat.

Gruß
Dan
Titel: Antw:[Gelöst] Batterieüberwachung nur einmal täglich
Beitrag von: rcmcronny am 13 März 2020, 21:43:30
Hi Ralf,

Zitat von: Ralf9 am 13 März 2020, 13:12:53
Dafür gibts das Attribut "negation-batt", damit kann battery invertiert werden.

Ohh, das ist ja super, danke für den Tip. Funzt wie es soll  ;D

Ronny