Anfängerfrage zu at - Meldung zu leeren Batterien

Begonnen von marboj, 19 Dezember 2021, 17:51:33

Vorheriges Thema - Nächstes Thema

marboj

Hallo zusammen,

habe im Internet eine at-Definition gefunden, die ab einem bestimmten Batteriestand eine Meldung um 10 Uhr schickt, bei welchen Geräten die Batterien zur Neige gehen. Dieser at hat noch nie ausgelöst, da entweder noch keine Batterien leer waren bzw. die Xiaomi-Thermometer immer direkt aus sind, ohne einen korrekten Batteriestand zu übermitteln. Habe mir nun Comet-Thermostate für die Heizkörper gekauft, die als reading diverse Batteriestati dokumentieren:

setstate FBDECT_FritzDECT_XXXXX_XXXXXXX desired-temp: 21.0 C
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 FBNAME Arbeitszimmer Thermostat
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 FBPROP actuator,tempSensor
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 FBTYPE Comet DECT
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 ID 20
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-16 07:20:44 IODev FritzDECT
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 battery 100 %
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 batteryPercent 100
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 batteryState ok
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 batterylow 0
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 boostactive no
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 boostactiveendtime N/A
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 day-temp 21.0 C
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 desired-temp 21.0 C
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 devicelock no
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 errorcode noError (0)
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 fwversion 03.68
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 holidayactive no
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 locked no
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 nextPeriodStart 2021-12-19 23:00:00
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 nextPeriodTemp 16.0 C
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 night-temp 16.0 C
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 present yes
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 state desired-temp: 21.0 C
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 summeractive no
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 tempadjust -1.0 C
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 temperature 22.5 C (measured)
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 windowopenactiv no
setstate FBDECT_FritzDECT_XXXXX_XXXXXXX 2021-12-19 17:41:01 windowopenactiveendtime N/A


Habe den at-Befehl um die Termostate erweitert:

defmod BatteryLowPushover at *10:00:00 {if (ReadingsVal("K1.Thermo", "batteryPercent","") < 10){fhem ("set Pushnachricht msg 'Thermometer Jorick' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("K2.Thermo", "batteryPercent","") < 10){fhem ("set Pushnachricht msg 'Thermometer Jarno' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("SZ.Thermo", "batteryPercent","") < 10){fhem ("set Pushnachricht msg 'Thermometer Schlafzimmer' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("BAD.Thermo", "batteryPercent","") < 10){fhem ("set Pushnachricht msg 'Thermometer Badezimmer' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("WZ.Thermo", "batteryPercent","") < 10){fhem ("set Pushnachricht msg 'Thermometer Wohnzimmer' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("KUE.Thermo", "batteryPercent","") < 10){fhem ("set Pushnachricht msg 'Thermometer Küche' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("AZ.Thermo", "batteryPercent","") < 10){fhem ("set Pushnachricht msg 'Thermometer Arbeitszimmer' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("GWC.Thermo", "batteryPercent","") < 10){fhem ("set Pushnachricht msg 'Thermometer Gäste-WC' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("HWR.Thermo", "batteryPercent","") < 10){fhem ("set Pushnachricht msg 'Thermometer HWR' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("GAR.Thermo", "batteryPercent","") < 10){fhem ("set Pushnachricht msg 'Thermometer Garage' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("Wassersensor_SP", "batteryPercent","") < 10) {fhem ("set Pushnachricht msg 'Wassermelder Spülmaschine' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("Wassersensor_WaMa", "batteryPercent","") < 10) {fhem ("set Pushnachricht msg 'Wassermelder Waschmaschine' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("Wassersensor_Heizung", "batteryPercent","") < 10) {fhem ("set Pushnachricht msg 'Wassermelder Heizung' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("Bad Thermostat", "batteryPercent","") < 10) {fhem ("set Pushnachricht msg 'Thermostat Bad' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("Arbeitszimmer Thermostat", "batteryPercent","") < 10) {fhem ("set Pushnachricht msg 'Thermostat Arbeitszimmer' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("Esszimmer Thermostat", "batteryPercent","") < 10) {fhem ("set Pushnachricht msg 'Thermostat Esszimmer' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("Gäste-WC Thermostat", "batteryPercent","") < 10) {fhem ("set Pushnachricht msg 'Thermostat Gäste-WC' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("Jarno Thermostat", "batteryPercent","") < 10) {fhem ("set Pushnachricht msg 'Thermostat Jarno' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("Jorick Thermostat", "batteryPercent","") < 10) {fhem ("set Pushnachricht msg 'Thermostat Jorick' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("Schlafzimmer Thermostat", "batteryPercent","") < 10) {fhem ("set Pushnachricht msg 'Thermostat Schlafzimmer' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("Wohnzimmer Thermostat 1", "batteryPercent","") < 10) {fhem ("set Pushnachricht msg 'Thermostat Wohnzimmer 1' 'Bitte Batterie tauschen' '' 0 ''")}};;\
{if (ReadingsVal("Wohnzimmer Thermostat 2", "batteryPercent","") < 10) {fhem ("set Pushnachricht msg 'Thermostat Wohnzimmer 2' 'Bitte Batterie tauschen' '' 0 ''")}};;
attr BatteryLowPushover room 99_System

setstate BatteryLowPushover Next: 10:00:00
setstate BatteryLowPushover 2021-12-19 17:49:33 state Next: 10:00:00


Kann mir nicht erklären, warum heute um 10 Uhr eine Nachricht für alle Thermostate kam, dass die Batterien leer seien, obwohl alle den gleichen Status haben wie das oben eingefügte.

Hat jemand eine Idee?

Viele Grüße
Marco





meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

marboj

Hallo betateilchen,

Wie kann man das denn optimieren? Kann das auch der Grund für eine Falschmeldung sein?
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

Icinger

Ein AT für den Batteriestatus ist mMn das denkbar schlechteste Tool.

Ich würde hier entweder auf Notify oder DOIF umsteigen.

zB Notify:
defmod BatteriewarnungNotify notify .*:[Bb]attery:.* {if($EVENT !~ m/ok/i || (looks_like_number($EVENT) && $EVENT<10) || (looks_like_number($EVTPART1) && $EVTPART1<10)) {\
   if (AttrVal("$NAME","comment",0) ne 1) {\
      Log 3,"Bat $NAME $EVTPART1";;\
      fhem "attr $NAME comment 1";;\
      fhem "msg Bitte Batterie bei Gerät $NAME tauschen";;\
   }\
}elsif(($EVENT =~ m/ok/i || (looks_like_number($EVENT) && $EVENT>50) || (looks_like_number($EVTPART1) && $EVTPART1>50)) and (AttrVal("$NAME","comment","0") eq 1)) {fhem("setreading $NAME lastBatChange ".localtime)}\
elsif (AttrVal("$NAME","comment",0) eq 1) {fhem("deleteattr $NAME comment")}\
\
}

Hier wird das comment-Attr mißbraucht, um bei einem Wechsel von NOK nach OK zusätzlich den letzten Batterie-Wechsel zu dokumentieren.

Oder
efmod di_Batteriewarnung DOIF (([":[Bb]attery(State)?:.*low"] or [":[Bb]attery(Percent)?:.([01]\d*|2[0-5])"]) and ([?$SELF:$DEVICE] eq "ok" or [?$SELF:$DEVICE] eq "novalue"))\
(setreading $SELF $DEVICE [$SELF:delayCounter])\
DOELSEIF (([":[Bb]attery(State)?:.*low"] or [":[Bb]attery(Percent)?:.([01]\d*|2[0-5])"]) and [?$SELF:$DEVICE] gt 0 and [?$SELF:$DEVICE] le [?$SELF:delayCounter])\
(setreading $SELF $DEVICE {([$SELF:$DEVICE])-1})\
DOELSEIF (([":[Bb]attery(State)?:.*ok"] or [":[Bb]attery(Percent)?:.(9\d|100)"]) and [?$SELF:$DEVICE] ne "ok") (setreading $SELF $DEVICE ok;;{fhem("setreading $NAME lastBatChange ".localtime)})\
DOELSEIF (([":[Bb]attery(State)?:.*low"] or [":[Bb]attery(Percent)?:.([01]\d*|2[0-5])"]) and [?$SELF:$DEVICE] eq "0")\
(msg 'Batteriewarnung $DEVICE: $EVENT', setreading $SELF $DEVICE low)\

attr di_Batteriewarnung userattr delayCounter
attr di_Batteriewarnung DbLogExclude .*
attr di_Batteriewarnung delayCounter 2
attr di_Batteriewarnung do always
attr di_Batteriewarnung notexist "novalue"
attr di_Batteriewarnung userReadings delayCounter { AttrVal($name,"delayCounter",0);; }

Hier hast du zusätzlich ein attr delayCounter xx, um false-positives abzufangen.

lg, Stefan
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

marboj

Hallo Stefan,

vielen Dank. Ich hab mal das doif probiert.

Wie bekomme ich nun die Thermometer und Wassersensoren in das doif?

Thermometer:

setstate AZ.Thermo T: 22.12 H: 55 D: 12.7
setstate AZ.Thermo 2021-12-19 08:17:28 batteryPercent 63
setstate AZ.Thermo 2021-12-19 08:17:28 batteryState ok
setstate AZ.Thermo 2021-12-20 08:02:31 dewpoint 12.7
setstate AZ.Thermo 2021-03-17 14:19:30 firmware 1.0.0_0109


Wassersensor:

setstate Wassersensor_Heizung 1
setstate Wassersensor_Heizung 2021-12-17 16:10:26 .lastupdated 2021-12-17 15:10:26
setstate Wassersensor_Heizung 2021-12-17 16:10:26 .lastupdated_local 2021-12-17 16:10:26
setstate Wassersensor_Heizung 2021-12-16 07:20:44 IODev deCONZ
setstate Wassersensor_Heizung 2021-12-20 07:45:24 battery 97
setstate Wassersensor_Heizung 2021-12-20 07:45:24 batteryPercent 97
setstate Wassersensor_Heizung 2021-12-17 16:10:26 batteryState ok
setstate Wassersensor_Heizung 2021-12-01 20:10:57 lastseen 2021-12-02T04:00Z
setstate Wassersensor_Heizung 2021-12-20 07:45:24 reachable 1
setstate Wassersensor_Heizung 2021-12-17 16:10:26 tampered 0
setstate Wassersensor_Heizung 2021-12-17 16:10:26 water 0


Schalter:
setstate IKEA_schalter 1002
setstate IKEA_schalter 2021-12-20 04:40:30 .lastupdated 2021-12-20 03:40:30
setstate IKEA_schalter 2021-12-20 04:40:30 .lastupdated_local 2021-12-20 04:40:30
setstate IKEA_schalter 2021-12-16 07:20:44 IODev deCONZ
setstate IKEA_schalter 2021-12-20 07:48:48 battery 87
setstate IKEA_schalter 2021-12-20 07:48:48 batteryPercent 87
setstate IKEA_schalter 2021-12-20 07:48:48 reachable 1
setstate IKEA_schalter 2021-12-20 04:40:30 state 1002


Vielen Dank für die Hilfe
Marco
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

MadMax-FHEM

#5
@Icinger: warum ein Attribut für den letzten Wechsel? Da gibt es doch das unschöne Fragezeichen bzw. wenn ohne Fragezeichen und ohne Speicherung sind die Werte nach einem Neustart weg... -> bei einem Reading würde das nicht passieren...
EDIT: wobei du ja ein Reading nimmst?
Zitatfhem("setreading $NAME lastBatChange ".localtime
wozu dann das Attibut? Ah, ok... Aber auch das ginge doch über ein Reading?

@marboj: die Regex anpassen... ;)

Ich verwende das hier: https://forum.fhem.de/index.php/topic,82637.msg747514.html#msg747514
(allerdings mitlerweile etwas erweitert um wie lange halten die Batterien so und welche Batterie-Typen inkl. "DB" der vorhandenen und Meldung, wenn ich welche besorgen muss :)  )

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)

marboj

Was bedeutet dieser Fehler:

setreading di_Batteriewarnung FBDECT_FritzDECT_11960_0761704 ok;{fhem("setreading $NAME lastBatChange ".localtime)}: Global symbol "$NAME" requires explicit package name (did you forget to declare "my $NAME"?) at (eval 1473624) line 1.
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

MadMax-FHEM

#7
Zitat von: marboj am 20 Dezember 2021, 11:10:32
Was bedeutet dieser Fehler:

setreading di_Batteriewarnung FBDECT_FritzDECT_11960_0761704 ok;{fhem("setreading $NAME lastBatChange ".localtime)}: Global symbol "$NAME" requires explicit package name (did you forget to declare "my $NAME"?) at (eval 1473624) line 1.

Du hast wohl "notify-Code" in einem DOIF verwendet!

notify: $NAME
DOIF: $DEVICE (denke ich)

EDIT: noch besser wäre es halt, ein list des gesamten Devices zu haben statt irgendwelcher (durch dich) ausgewählter Ausschnitte... Und die dann noch nicht mal in "code-Tags"...

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)

Damian

Ich persönlich präferiere eine zeitgebundene Überprüfung der leeren Batterien.

Beide Lösungen von Icinger fressen über den Tag schon etwas Performance, weil sie aufgrund fehlender Deviceangaben auf jedes Ereignis triggern, welches überprüft werden muss. Es ist ja keine zeitkritische Information, die in der gleichen Minute angezeigt werden müsste. Eine Überprüfung alle paar Stunden sollte eigentlich reichen.



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

marboj

@MadMax-FHEM

so sieht es aus:

defmod di_Batteriewarnung DOIF (([":[Bb]attery(State)?:.*low"] or [":[Bb]attery(Percent)?:.([01]\d*|2[0-5])"]) and ([?$SELF:$DEVICE] eq "ok" or [?$SELF:$DEVICE] eq "novalue"))\
(setreading $SELF $DEVICE [$SELF:delayCounter])\
DOELSEIF (([":[Bb]attery(State)?:.*low"] or [":[Bb]attery(Percent)?:.([01]\d*|2[0-5])"]) and [?$SELF:$DEVICE] gt 0 and [?$SELF:$DEVICE] le [?$SELF:delayCounter])\
(setreading $SELF $DEVICE {([$SELF:$DEVICE])-1})\
DOELSEIF (([":[Bb]attery(State)?:.*ok"] or [":[Bb]attery(Percent)?:.(9\d|100)"]) and [?$SELF:$DEVICE] ne "ok") (setreading $SELF $DEVICE ok;;{fhem("setreading $NAME lastBatChange ".localtime)})\
DOELSEIF (([":[Bb]attery(State)?:.*low"] or [":[Bb]attery(Percent)?:.([01]\d*|2[0-5])"]) and [?$SELF:$DEVICE] eq "0")\
(set Pushnachricht msg 'Batteriewarnung $DEVICE: $EVENT', setreading $SELF $DEVICE low)\

attr di_Batteriewarnung userattr delayCounter
attr di_Batteriewarnung delayCounter 2
attr di_Batteriewarnung do always
attr di_Batteriewarnung notexist "novalue"
attr di_Batteriewarnung userReadings delayCounter { AttrVal($name,"delayCounter",0);; }

setstate di_Batteriewarnung cmd_3
setstate di_Batteriewarnung 2021-12-20 09:11:58 AZ.Thermo ok
setstate di_Batteriewarnung 2021-12-20 13:26:27 Device FBDECT_FritzDECT_11960_0761704
setstate di_Batteriewarnung 2021-12-20 13:26:27 FBDECT_FritzDECT_10971_0662656 ok
setstate di_Batteriewarnung 2021-12-20 13:26:27 FBDECT_FritzDECT_11795_0530000 ok
setstate di_Batteriewarnung 2021-12-20 13:26:26 FBDECT_FritzDECT_11959_0140904 ok
setstate di_Batteriewarnung 2021-12-20 13:26:27 FBDECT_FritzDECT_11960_0761704 ok
setstate di_Batteriewarnung 2021-12-20 13:26:27 FBDECT_FritzDECT_11960_0782000 ok
setstate di_Batteriewarnung 2021-12-20 13:26:26 FBDECT_FritzDECT_11960_0951960 ok
setstate di_Batteriewarnung 2021-12-20 13:26:26 FBDECT_FritzDECT_11961_0644848 ok
setstate di_Batteriewarnung 2021-12-20 13:26:26 FBDECT_FritzDECT_11961_0765464 ok
setstate di_Batteriewarnung 2021-12-20 13:26:26 FBDECT_FritzDECT_11961_0778000 ok
setstate di_Batteriewarnung 2021-12-20 09:37:37 GWC.Thermo ok
setstate di_Batteriewarnung 2021-12-20 12:56:22 HWR.Thermo ok
setstate di_Batteriewarnung 2021-12-20 09:59:49 K1.Thermo ok
setstate di_Batteriewarnung 2021-12-20 09:41:15 KUE.Thermo ok
setstate di_Batteriewarnung 2021-12-20 08:30:50 Wassersensor_Heizung ok
setstate di_Batteriewarnung 2021-12-20 13:09:17 Wassersensor_SP 0
setstate di_Batteriewarnung 2021-12-20 08:11:15 Wassersensor_WaMa ok
setstate di_Batteriewarnung 2021-12-20 13:26:27 cmd 3
setstate di_Batteriewarnung 2021-12-20 13:26:27 cmd_event FBDECT_FritzDECT_11960_0761704
setstate di_Batteriewarnung 2021-12-20 13:26:27 cmd_nr 3
setstate di_Batteriewarnung 2021-12-20 13:26:27 delayCounter 2
setstate di_Batteriewarnung 2021-12-20 13:26:27 error setreading di_Batteriewarnung FBDECT_FritzDECT_11960_0761704 ok;;{fhem("setreading $NAME lastBatChange ".localtime)}: Global symbol "$NAME" requires explicit package name (did you forget to declare "my $NAME"?) at (eval 1510714) line 1.\

setstate di_Batteriewarnung 2021-12-20 08:07:01 mode enabled
setstate di_Batteriewarnung 2021-12-20 13:26:27 state cmd_3


meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

MadMax-FHEM

Das ist kein list sondern ein RawDef ;)

Und: da muss jemand antworten, der DOIF (besser) kennt bzw. halt Icinger, weil er hat es ja gepostet...

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)

Icinger

Sorry, da war ein Fehler drinnen

Der DOELSE-Zweig muss
DOELSEIF (([":[Bb]attery(State)?:.*ok"] or [":[Bb]attery(Percent)?:.(9\d|100)"]) and [?$SELF:$DEVICE] ne "ok") (setreading $SELF $DEVICE ok;{fhem("setreading $DEVICE lastBatChange ".localtime)})

Grundsätzlich hat Damian sicher nicht unrecht, es würde sicher einmal am Tag auch reichen, um Rechenzeit zu sparen.
Aber ehrlich gesagt merke ich nix davon, dass mir das DOIF Kapazitäten wegfrisst. Und das hat sich einfach über die Jahre als funktionierend ergeben :)

@MadMax-FHEM Wegen dem Attribut: Stimmt, das löst ein rotes Fragezeichen aus, könnte man anders machen. Als ich das damals (pre-DOIF) in Verwendung hatte, gabs das Fragezeichen noch nicht ^^

lg, Stefan

Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

Damian

Hier mal zur Abwechslung ein Einzeiler zum Thema:

defmod di_battery DOIF {[18:00];;set_Reading("leer",[?@"":"^[Bb]attery$":$_ ne "ok"])}

Im Reading "leer" stehen um 18:00 Uhr alle Devices, deren Batterien nicht "ok" sind.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

marboj

Vielen Dank an alle für die Unterstützung.

@Damian: Wie kann ich das mit einer Benachrichtigung verknüpfen, dass mir die leeren Geräte gemeldet werden?

Gruß
Marco
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

Damian

Zitat von: marboj am 21 Dezember 2021, 08:15:53
Vielen Dank an alle für die Unterstützung.

@Damian: Wie kann ich das mit einer Benachrichtigung verknüpfen, dass mir die leeren Geräte gemeldet werden?

Gruß
Marco

Indem du statt set_Reading einen Pusch-Befehl auf das Ergebnis der Aggregationsfunktion [...] anwendest.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF