FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: jual am 15 Januar 2023, 12:33:29

Titel: Batteriestatus mit DOIF und unterschiedlichen Readings [GELOEST]
Beitrag von: jual am 15 Januar 2023, 12:33:29
Jetzt muß ich mich bezüglich DOIF mal als Anfänger outen, da ich irgendwie nicht weiter komme ;-).

Ich würde gerne eine Info erstellen, wieviele Geräte einen niedrigen Batteriestand haben. Interessant finde ich den Weg über DOIF mit der Aggregatfunktion. Hier gibt es ja auch ein entsprechendes Beispiel.

Mit [#":battery":battery:$_ ne "ok"] bekomme ich die Anzahl aller Devices, deren Reading "battery" nicht auf "ok" steht. Soweit so gut.

Problem ist nun, dass die HUE Devices und auch die ZWave Devices in "battery" die Prozentangabe angeben und nicht den Status. Dieser steht in "batteryState".

Meine Idee war nun eine Aggregatfunktion zu definieren, die in etwa wie folgt aussieht:

              zähle alle Devices, (die nicht vom Typ "Zwave" sind und  nicht vom Typ "HUEDevice" und deren "battery" nicht "ok" entspricht) oder (die vom Typ "Zwave" oder Typ "HUEDevice" sind und deren "battery" == 0)

Wie ich das in ein DOIF packe für eine state-Definition ist mir nicht klar. Vielleicht kann mir jemand mal auf die Sprünge helfen.
Titel: Antw:Batteriestatus mit DOIF und unterschiedlichen Readings
Beitrag von: MadMax-FHEM am 15 Januar 2023, 14:03:34
Ist zwar jetzt nicht die Antwort zu DOIF...
...aber da du nicht im DOIF-Unterforum gefragt/gepostet hast, erlaube ich mir (trotzdem) eine Antwort (in eine andere Richtung):

ich nutze das hier https://forum.fhem.de/index.php/topic,82637.msg747514.html#msg747514

Damit werden auch unterschiedliche Device-Typen erfasst (und es lässt sich ja erweitern).

Bzgl. Batterie und DOIF gibt es aber doch einige Threads (verm. im Unterforum zu DOIF?)...

Gruß, Joachim
Titel: Antw:Batteriestatus mit DOIF und unterschiedlichen Readings
Beitrag von: KernSani am 15 Januar 2023, 14:13:03
Eine andere Möglichkeit (die nutze ich) ist, Readings zu vereinheitlichen - bei mir haben alle Batteriedevices, die keinen BatteryState liefern, ein UserReading in der Art:

batteryState {if (ReadingsNum($name, "battery", 0) > 25) {return "ok"} else {return "low"}}

(könnte man deutlich kürzer schreiben, ich weiß ;-))

Grüße,

Oli
Titel: Antw:Batteriestatus mit DOIF und unterschiedlichen Readings
Beitrag von: jual am 15 Januar 2023, 14:40:52
Zitat von: MadMax-FHEM am 15 Januar 2023, 14:03:34
Ist zwar jetzt nicht die Antwort zu DOIF...
...aber da du nicht im DOIF-Unterforum gefragt/gepostet hast, erlaube ich mir (trotzdem) eine Antwort (in eine andere Richtung):

ich nutze das hier https://forum.fhem.de/index.php/topic,82637.msg747514.html#msg747514

Damit werden auch unterschiedliche Device-Typen erfasst (und es lässt sich ja erweitern).

Bzgl. Batterie und DOIF gibt es aber doch einige Threads (verm. im Unterforum zu DOIF?)...

Gruß, Joachim

Danke für den Hinweis, werde ich mir mal anschauen. Tatsächlich wäre es wohl besser gewesen, die Frage direkt im DOIF-Thread zu posten ;-).
Titel: Antw:Batteriestatus mit DOIF und unterschiedlichen Readings
Beitrag von: jual am 15 Januar 2023, 14:42:35
Zitat von: KernSani am 15 Januar 2023, 14:13:03
Eine andere Möglichkeit (die nutze ich) ist, Readings zu vereinheitlichen - bei mir haben alle Batteriedevices, die keinen BatteryState liefern, ein UserReading in der Art:

batteryState {if (ReadingsNum($name, "battery", 0) > 25) {return "ok"} else {return "low"}}

(könnte man deutlich kürzer schreiben, ich weiß ;-))

Grüße,

Oli

Vielen Dank für den Vorschlag. Das hatte ich mir jetzt auch schon überlegt, nachdem ich mit dem ersten Ansatz nicht weitergekommen bin. Ist nur etwas aufwendiger und man muß bei möglichen neuen Geräten daran denken.
Titel: Antw:Batteriestatus mit DOIF und unterschiedlichen Readings
Beitrag von: jual am 15 Januar 2023, 16:10:17
Nach einem Spaziergang habe ich jetzt nochmal ein paar Versuche gestartet und siehe da, ich habe tatsächlich eine Lösung gefunden.

Folgende Aggregratfunktion liefert genau die Anzahl aller Geräte zum Batteriestatus von allen Geräten - auch mit unterschiedlichen Readings. Voraussetzung ist, dass alle gesuchten Geräte mindestens das Reading "battery" haben.


[#":battery":battery:$_ if(($_ ne "ok" and $TYPE ne "ZWave" and $TYPE ne "HUEDevice") or (ReadingsNum($name,"batteryPercent",100) < 25 ))]
Titel: Antw:Batteriestatus mit DOIF und unterschiedlichen Readings [GELOEST]
Beitrag von: Damian am 17 Januar 2023, 10:21:20
Du kannst statt eines festen Readings eine RegEx für verschiedene Readings angeben. In der if-Bedingung kannst du über $reading auf das jeweils aktuelle Reading zugreifen.