DOIF für Battery leer Warnung mit unterchiedlichen Devices

Begonnen von Johann.S, 24 September 2019, 16:18:12

Vorheriges Thema - Nächstes Thema

Johann.S

Hallo,

ich versuche mich schon länger an einer Benachrichtigung wenn Batterien sich dem Ende nähern!
Alle Devices sind HmIP haben aber keine einheitliche Namesstruktur.
Teilweise funktioniert es:(((["^:voltage"] > 1.5) and (["^:voltage"] < 2.2)) or (["^:voltage"] < 1.2))
(
    {DebianMail('beo.bachter@gmx.at', 'Smarthome: Batteriestand', 'Der Batteriestand von $DEVICE ist '.ReadingsVal("$DEVICE","voltage",0).'V' , '');
     Log 0, "$DEVICE: Batteriewarnung ".ReadingsVal("$DEVICE","voltage",0).'V EVENT = $EVENT EVENTS = $EVENTS'}
)
DOELSEIF ([12:00])


Sinn ist es, dass bei allen Devices die das Reading voltage haben eine Mail verschickt wird bei 1,5V kommt unter 1,2V und bei 3,0V unter 2,2V eine Mail!
Das ganze wird einmal Täglich aufgerufen.
Ein Teil meines Problemes, die Auswahlbedingungen werden nicht erkannt und der andere Teil, dass er nur eine findet auch wenn mehrere vorhanden sind!

Im voraus Danke,

Johann
Raspi 3, Sduino 433MHz und 868MHz beide CC1101, Wetterstation TFA Dostmann 35.1119 (WH1080), NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, ESPEASY Steckdosen für Gartenbewässerung, Pool und Pool-Solar, ...

Damian

Würde ich so nicht machen. Die Definition reagiert auf alle Events (da keine Devices eingeschränkt) und produziert unnötig viel Systemlast.

Ich würde eher einmal am Tag per Zeittrigger die  Aggregationsfunktion aufrufen, die dir alle verdächtigen Geräte liefert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Johann.S

lt. Docu dürfte die Routine nur einmal um 12:00 Uhr aufgerufen werden DOELSEIF ([12:00]) oder verstehe ich da auch was falsch.
Raspi 3, Sduino 433MHz und 868MHz beide CC1101, Wetterstation TFA Dostmann 35.1119 (WH1080), NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, ESPEASY Steckdosen für Gartenbewässerung, Pool und Pool-Solar, ...

rabehd

Zitatlt. Docu dürfte die Routine nur einmal um 12:00 Uhr aufgerufen werden
Das glaube ich nicht.
Zitat?
Auch funktionierende Lösungen kann man hinterfragen.

Johann.S

Raspi 3, Sduino 433MHz und 868MHz beide CC1101, Wetterstation TFA Dostmann 35.1119 (WH1080), NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, ESPEASY Steckdosen für Gartenbewässerung, Pool und Pool-Solar, ...

MadMax-FHEM

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)

rabehd

ZitatZum täglichen 'Rücksetzen' des DOIF wird eine 2., zeitbasierte Bedingung definiert, welche das DOIF von state cmd1 (nach einer ausgelösten Warnung) auf cmd2 wechseln lässt. So wird führt das nächste Event wieder zu einer Warnung.

Zitatlt. Docu dürfte die Routine nur einmal um 12:00 Uhr aufgerufen werden
Da steht eben, dass das DOIF um 12:00 zurückgesetzt wird, die Meldung wird beim nächsten folgenden Event ausgelöst.
Auch funktionierende Lösungen kann man hinterfragen.

Johann.S

Bin immer noch am Lesen in dem Thread die du mir geschickt hast!
Ich habe den Satz falsch Interprediert, da währe dann doch ein at besser!
Raspi 3, Sduino 433MHz und 868MHz beide CC1101, Wetterstation TFA Dostmann 35.1119 (WH1080), NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, ESPEASY Steckdosen für Gartenbewässerung, Pool und Pool-Solar, ...

Johann.S

@MadMax-Fhem, so, bin mittlerweile mit den Threads von durch und zu der Erkentniss gekommen,
um das zu bekommen was ich will muss ich selber ran!

@Damian und @rabehd, mein Aufbau ist jetzt in ein at um die Systemlast zu reduzieren.

Ich weiss leider nicht wie ich die Liste der Geräte durchgehen soll.
Werde weitersuchen, vielleicht kann mir ja jemand noch einen Kick geben.

LG
Johann
Raspi 3, Sduino 433MHz und 868MHz beide CC1101, Wetterstation TFA Dostmann 35.1119 (WH1080), NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, ESPEASY Steckdosen für Gartenbewässerung, Pool und Pool-Solar, ...

Damian

Zitat von: Johann.S am 25 September 2019, 12:43:12
@MadMax-Fhem, so, bin mittlerweile mit den Threads von durch und zu der Erkentniss gekommen,
um das zu bekommen was ich will muss ich selber ran!

@Damian und @rabehd, mein Aufbau ist jetzt in ein at um die Systemlast zu reduzieren.

Ich weiss leider nicht wie ich die Liste der Geräte durchgehen soll.
Werde weitersuchen, vielleicht kann mir ja jemand noch einen Kick geben.

LG
Johann

Du brauchst doch nur das Beispiel aus der Commandref auf deine Anwendung anpassen:

Zitat(push "In folgenden Zimmern ist zu kalt [@"^Rooms":temperature:$_ < 20,"keine"]")

Du musst nur das Reading und den Grenzwert anpassen, mit [@"":  kannst du alle Geräte checken.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

hoppel118

Hey,

sowas interessiert mich auch. Wäre schön, wenn du das fertige Ergebnis hier mal posten könntest. Ich bin gerade für ein paar Wochen auf einem Roadtrip und habe keine Zeit für FHEM. ;)

Viele Grüße Hoppel
Server: Openmediavault, XEON E3-1240L-v5, Supermicro X11SSH-CTF, 64GB ECC RAM, SSD, RAID-Z2
Homebridge | Alexa | Yowsup
Homematic | HomeConnect | MQTT | Philips Hue | Sonos | Unifi Network & Protect | vbus | Xiaomi

Damian

#11
Hier mal ein Einzeiler in DOIF-Perl als Raw Definiton:

defmod di_battery DOIF {[18:00];;fhem_set("pushbullet message Batteriewechsel für folgende Geräte:".[?@"":value:$_ < 2.2]) if ([?#"":value:$_ < 2.2,0])}

kann jeder für seine Bedürfnisse anpassen :)

Im Klartext: Um 18:00 Uhr wird geprüft, ob es Geräte gibt, die im Reading value (falls existent) einen Wert kleiner 2.2 haben, wenn ja, dann werden die Gerätenamen per pushbullet versendet

Informative Links:

https://fhem.de/commandref_DE.html#DOIF_aggregation
https://fhem.de/commandref_DE.html#DOIF_Perl_Modus
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Johann.S

Danke für den Einzeiler, ich bin erst jetzt dazu gekommen ihn auszuprobieren!
Bei zwei 1.5V Batterien funktioniert es aber ich habe auch einzelne 1.5V Batterien (HMIP-SWDO).
Wie kann ich diese in das DOIF bringen!

if ([?@"":value:$_ < 1.2]) or (([?@"":value:$_ > 1.5]) and ([?@"":value:$_ < 2.2])

Einer meiner Versuche sieht so aus:
In folgenden Geräten ist die Batterie zu wechseln: [@"":voltage:$_ < 1.2 or [@"":voltages:$_> 1.5 and [@"":voltage:$_ < 2.4 ]]]
Fehler: error in aggregate function: Can't find string terminator '"' anywhere before EOF, line 1

In folgenden Geräten ist die Batterie zu wechseln: [@"":voltage:$_ < 1.2] or ([@"":voltages:$_> 1.5 ] and [@"":voltage:$_ < 2.4 ])
absoluter Schuss in den Ofen

In folgenden Geräten ist die Batterie zu wechseln: [@"":voltage:$_ < 1.2 or  ((AttrVal($name,"voltage",0) > 1.5) and (AttrVal($name,"voltage",0) < 2.4))]
Hier kommen nur die kleiner 1.2

Ich habe mir in der Referenz die Aggregationsbedingungen angesehen und komme auf keinen grünen Zweig.

Meine RAW Definition:
defmod di_battery DOIF ([18:00])
attr di_battery do always
attr di_battery room EG->Buero
attr di_battery state In folgenden Geräten ist die Batterie zu wechseln: [@"":voltage:$_ < 1.2 or ((AttrVal($name,"voltage",0.0) > 1.5 ) and (AttrVal($name,"voltage",0.0) < 2.4 ))]

setstate di_battery In folgenden Geräten ist die Batterie zu wechseln: Eugen_Fenster_links,Wohnzimmer_Fenster_rechts,Wohnzimmer_Steckdose
setstate di_battery 2019-10-09 22:28:30 cmd 1
setstate di_battery 2019-10-09 22:28:30 cmd_event set_cmd_1
setstate di_battery 2019-10-09 22:28:30 cmd_nr 1
setstate di_battery 2019-10-09 22:04:54 mode enabled
setstate di_battery 2019-10-09 22:46:36 state In folgenden Geräten ist die Batterie zu wechseln: Eugen_Fenster_links,Wohnzimmer_Fenster_rechts,Wohnzimmer_Steckdose
setstate di_battery 2019-10-09 22:04:54 timer_01_c01 10.10.2019 18:00:00


Vieleicht kann mich jemand in die richtige Richtung schubsen!
Raspi 3, Sduino 433MHz und 868MHz beide CC1101, Wetterstation TFA Dostmann 35.1119 (WH1080), NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, ESPEASY Steckdosen für Gartenbewässerung, Pool und Pool-Solar, ...

amenomade

[?@"":value:$_ < 2.2]

?@"" => Aggregation
value => Reading
$_ < 2.2 => Condition

Da musst Du nur die Condition ändern:
[?@"":value:$_ < 2.2 or ($_ > 1.5 and $_ < 2.4)]
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

carlos

Hallo,
das doif bringt einen Fehler, wenn in value ein string "5 V" steht.
Da braucht man den numerischen Wert.
Wie wäre das dann zu ändern?
Gruß

Carlos
FHEM svn auf Intel NUC mit proxmox, 3 Raspberry Pi, signalduino, nanoCUL,  toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly