Hauptmenü

DOIF Batterieüberwachung

Begonnen von weini, 02 Juni 2016, 23:35:59

Vorheriges Thema - Nächstes Thema

Ellert

Zitat von: weini am 06 September 2016, 23:21:22
Ellert meint vermutlich "lt" als Ersatz für ">". Nach meinem Verständnis müsste das aber "gt" sein, also:
[?$SELF:$DEVICE] gt "0" and [?$SELF:$DEVICE]

Wie gesagt, ich kann es selbst nicht testen, weil der Fehler bei mir nicht reproduzierbar ist.
Ja, gt ist natürlich richtig.

moonsorrox

OK, dann werde ich das mal testen...
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

moonsorrox

das war es nicht, es geht munter weiter hier die letzten Auszüge
2016.09.07 17:50:44 1: PERL WARNING: Argument "low" isn't numeric in numeric le (<=) at (eval 3494886) line 1.
2016.09.07 17:47:27 1: PERL WARNING: Argument "low" isn't numeric in numeric le (<=) at (eval 3491872) line 1.
2016.09.07 17:45:04 1: PERL WARNING: Argument "low" isn't numeric in numeric le (<=) at (eval 3490462) line 1.
2016.09.07 17:42:26 1: PERL WARNING: Argument "low" isn't numeric in numeric le (<=) at (eval 3488324) line 1.
2016.09.07 17:39:31 1: PERL WARNING: Argument "low" isn't numeric in numeric le (<=) at (eval 3486844) line 1.
2016.09.07 17:36:21 1: PERL WARNING: Argument "low" isn't numeric in numeric le (<=) at (eval 3484626) line 1.
2016.09.07 17:34:05 1: PERL WARNING: Argument "low" isn't numeric in numeric le (<=) at (eval 3482645) line 1.


hier nochmal das DEF:
( ([":^battery:.*low"] or [":^battery:.*0"]) and [?$SELF:$DEVICE] eq "0") ( {DebianMail('xxxxxxxxxxxx@gmx.de', 'FHEM Batteriewarnung', "$DEVICE: $EVENT")}, {Log 3,"$DEVICE: Batteriewarnung $EVENT"}, setreading $SELF $DEVICE low) DOELSEIF ( ([":^battery:.*low"] or [":^battery:.*0"]) and ([?$SELF:$DEVICE] eq "ok" or [?$SELF:$DEVICE] eq "novalue")) (setreading $SELF $DEVICE [$SELF:delayCounter]) DOELSEIF ( ([":^battery:.*low"] or [":^battery:.*0"]) and [?$SELF:$DEVICE] gt "0" and [?$SELF:$DEVICE] <= [?$SELF:delayCounter]) (setreading $SELF $DEVICE {([$SELF:$DEVICE])-1}) DOELSEIF ( ([":^battery:.*ok"] or [":^battery:.*1"]) and [?$SELF:$DEVICE] ne "ok") (setreading $SELF $DEVICE ok)
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Ellert

Der aufmerksame Leser sieht, das es eine andere Warnung ist und die ist nach dem gleichen Prinzip zu beheben  ;)

moonsorrox

#19
echt...  ;) ich habe jetzt wirklich nicht gesehen das es eine andere Meldung ist (<=)
Da ich aber Perl überhaupt nicht verstehe, fehlt mir da jede Beziehung und kann somit auch nichts dazu beitragen  :-\
wäre diese Variante jetzt richtig..?

[?$SELF:$DEVICE] gt "<=" [?$SELF:delayCounter]
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

weini

nicht ganz...   ;)

Versuch bitte:
[?$SELF:$DEVICE] le [?$SELF:delayCounter]


Morgennebel

Nur als Zusammenfassung und für den nächsten, der dies implementieren möchte - das DOIF mit einer Pushbullet-Notification und allen Korrekturen:


( ([":^battery:.*low"] or [":^battery:.*0"]) and [?$SELF:$DEVICE] eq "0")
( set PBNotification message 'Intelligentes Wohnen' | 'Batteriewarnung $DEVICE: $EVENT', setreading $SELF $DEVICE low)
DOELSEIF ( ([":^battery:.*low"] or [":^battery:.*0"]) and ([?$SELF:$DEVICE] eq "ok" or [?$SELF:$DEVICE] eq "novalue"))
(setreading $SELF $DEVICE [$SELF:delayCounter])
DOELSEIF ( ([":^battery:.*low"] or [":^battery:.*0"]) and [?$SELF:$DEVICE] gt 0 and [?$SELF:$DEVICE] le [?$SELF:delayCounter])
(setreading $SELF $DEVICE {([$SELF:$DEVICE])-1})
DOELSEIF ( ([":^battery:.*ok"] or [":^battery:.*1"]) and [?$SELF:$DEVICE] ne "ok") (setreading $SELF $DEVICE ok)


Die Attribute sind noch zusätzlich zu setzen.

Ciao, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

satprofi

hallo.
Gutes neues Jahr vorerst.
Aber jetzt zur Frage, kann mir jemand die Funktion ausdeutschen?
[?Battery:$DEVICE]

m.f.g.
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Morgennebel

Das steht aber nirgends im DOIF...

Ciao, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

satprofi

in deinem nicht, aber im DOIF manual bzgl. batterieabfrage
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Morgennebel

Steht doch alles in der COMMANDREF.

Battery ist ein Dummy. setreading erzeugt künstliche Readings mit dem Namen des $DEVICE.

Dann ist [?Battery:DEVICE] eine nicht-triggerende DOIF-Abfrage, ob dieses Reading bereits existiert.

Das DOIF hier im Thread kommt ohne den Dummy aus, da die künstlichen Readings im DOIF selbst (via $SELF) erzeugt werden.

Ciao, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

satprofi

aha,
dann würde das ja auch genügen ?

define di_battery DOIF ([":battery: low"])

    ({DebianMail('yourname@gmail.com', 'FHEM - battery warning from device: $DEVICE'})
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

weini

Ja, das sollte auch passen.

Ich habe die kompliziertere Logik mit den Readings aufgebaut, weil ich bei mir ein paar Batteriegeräte habe, die manchmal einen Fehlalarm bzgl. des Batteriezustands provozieren. Deshalb löst ein DOIF erst aus, wenn der Alarm eine konfigurierbare Anzahl mal wiederholt aufgetreten ist.

satprofi

Hallo.Ich verzweifle mal wieder mit der fiesen Batterieüberwachung.
habe DOIF

DOIF (["^:battery:low"] or ["^:Battery:low"] ) (set Telegram message @xxxxxxxx send 'Battery warnung $DEVICE' low)
DOELSEIF (["^:batteryLevel"] > 2.2) (set Telegram message @xxxxxxx send 'Batteryspannung $DEVICE' unter 2.2V)
DOELSE


in den Readings steht auch

Device HZ_Schlafzimmer  2017-01-23 06:41:40
cmd 3 2017-01-23 06:48:24
cmd_event HZ_Buero 2017-01-23 06:48:24
cmd_nr 3 2017-01-23 06:48:24
matched_event_c2_1 batteryLevel: 2 2017-01-23 06:41:40
state cmd_3 2017-01-23 06:48:24


Warum wird cmd2 nicht ausgeführt?

Gibts nicht besseres um die Batterien zu checken?
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

weini

...weil du auf >2.2 V und nicht auf <2.2 V abfrägst?