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), intertechno PAR1000/PA1500
NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, Eigenbau sonoff für Gartenbewässerung

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), intertechno PAR1000/PA1500
NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, Eigenbau sonoff für Gartenbewässerung

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), intertechno PAR1000/PA1500
NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, Eigenbau sonoff für Gartenbewässerung

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), intertechno PAR1000/PA1500
NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, Eigenbau sonoff für Gartenbewässerung

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), intertechno PAR1000/PA1500
NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, Eigenbau sonoff für Gartenbewässerung

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), intertechno PAR1000/PA1500
NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, Eigenbau sonoff für Gartenbewässerung

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,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

Damian

hier steht https://fhem.de/commandref_DE.html#DOIF_aggregation wie man auf numerische Werte (nach Zahl gefilterten Werte) zugreifen kann.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

pc1246

Zitat von: Johann.S am 09 Oktober 2019, 22:51:17
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!
Moin
Zur Not wuerde es auch ein zweites DOIF tun!?
Gruss Christoph
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

Johann.S

Hallo,

@amenomade, danke das funktioniert.
@pc1246, wäre mit der jetzigen Version möglich aber nicht mehr notwendig!

Für alle die es Interessiert, meine RAW Definition
defmod di_battery DOIF (([12:00]) and ([?#"":voltage:$_ < 1.2 or ($_ > 1.5  and $_ < 2.3 )]))\
(\
  { DebianMail('beo.bachter@gmx.at', 'Smarthome: Batteriestand', 'In folgenden Geräten ist die Batterie zu wechseln: [?@"":voltage:$_ < 1.2 or ($_ > 1.5  and $_ < 2.3 )]', '') }\
)
attr di_battery do always
attr di_battery room EG->Buero
attr di_battery state In folgenden Geräten ist die Batterie zu wecnseln: [?@"":voltage:$_ < 1.2 or ($_ > 1.5  and $_ < 2.3 )]) if ([?#"":voltage:$_ < 1.2 or ($_ > 1.5  and $_ < 2.3 )])


@Alle, Danke für die Hilfe.


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

Damian

#18
Zitat von: Johann.S am 11 Oktober 2019, 12:24:24
Hallo,

@amenomade, danke das funktioniert.
@pc1246, wäre mit der jetzigen Version möglich aber nicht mehr notwendig!

Für alle die es Interessiert, meine RAW Definition
defmod di_battery DOIF (([12:00]) and ([?#"":voltage:$_ < 1.2 or ($_ > 1.5  and $_ < 2.3 )]))\
(\
  { DebianMail('beo.bachter@gmx.at', 'Smarthome: Batteriestand', 'In folgenden Geräten ist die Batterie zu wechseln: [?@"":voltage:$_ < 1.2 or ($_ > 1.5  and $_ < 2.3 )]', '') }\
)
attr di_battery do always
attr di_battery room EG->Buero
attr di_battery state In folgenden Geräten ist die Batterie zu wecnseln: [?@"":voltage:$_ < 1.2 or ($_ > 1.5  and $_ < 2.3 )]) if ([?#"":voltage:$_ < 1.2 or ($_ > 1.5  and $_ < 2.3 )])


@Alle, Danke für die Hilfe.

Das kann man so machen, allerdings werden die Unzulänglichkeiten des FHEM-Modus sichtbar: hier wird unnötig bis zu vier mal eine aufwändige Routine aufgerufen.

Im Perl-Modus kann man elegant über das ganze Modul Variablen nutzen, die man mehrfach verwenden kann.

Diese Definition tut das Gleiche, dürfte aber mit wesentlich weniger Systemlast auskommen (auch wenn es nur einmal am Tag passiert):

define di_battery DOIF {
  [12:00];
  if ([?#"":voltage:$_ < 1.2 or ($_ > 1.5  and $_ < 2.3 )]) {
    $_dev=[?@"":voltage:$_ < 1.2 or ($_ > 1.5  and $_ < 2.3 )];
    DebianMail('beo.bachter@gmx.at', 'Smarthome: Batteriestand', "In folgenden Geräten ist die Batterie zu wechseln: $_dev",'');
    set_State ("In folgenden Geräten ist die Batterie zu wechseln: $_dev");
  }
}


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

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

#20
Zitat von: amenomade am 11 Oktober 2019, 18:56:33
Wo liegt der Unterschied?

Das müsste dir eigentlich auffallen. In seiner Version wird mindestens zwei mal  [?#"":voltage:$_ < 1.2 or ($_ > 1.5  and $_ < 2.3 )] aufgerufen und wenn es wahr ist, dann noch mal zwei mal [?@"":voltage:$_ < 1.2 or ($_ > 1.5  and $_ < 2.3 )]

In meiner Version wird nur einmal [?#"":voltage:$_ < 1.2 or ($_ > 1.5  and $_ < 2.3 )] für die Prüfung genutzt und wenn es wahr ist nur einmal [?@"":voltage:$_ < 1.2 or ($_ > 1.5  and $_ < 2.3 )]

Zu bedenken ist, dass bei einer Aggregationsfunktion  in zwei ineinander geschachtelten Schleifen das komplette System durchleuchtet wird.

Hinzukommt, dass im Perl-Modul bereits bei der Definition alles in Perl übersetzt wird. Im FHEM-Modus dagegen wird der Ausführungsteil und auch State bei jedem Aufruf erst mal in Perl übersetzt.

Es handelt sich hier sicherlich insgesamt um ein paar hundert Millisekunden, aber die summieren sich bei jeder Definition. Aus dem Bauchgefühl dürfte die Perl-Version Faktor 3-5 weniger Systemlast beim Aufruf produzieren, als die FHEM-Version.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Johann.S

ZitatDiese Definition tut das Gleiche, dürfte aber mit wesentlich weniger Systemlast auskommen (auch wenn es nur einmal am Tag passiert):
Ich bin da ganz deiner Meinung und habe es gleich übernommen.
Leider kommt eine Fehlermeldung:
2019.10.11 21:38:00 4 : di_battery: condition c01: Undefined subroutine &DOIF::DebianMail called, line 5. in perl block 1
2019-10-11 21:38:00 DOIF di_battery block_01: condition c01: Undefined subroutine &DOIF::DebianMail called, line 5.


Ich interpretiere die Meldung so, dass er DebianMail nicht findet.
defmod di_battery DOIF { [12:00];; \
  if ([?#"":voltage:$_ < 1.2 or ($_ > 1.5  and $_ < 2.3 )]) {\
    $_dev=[?@"":voltage:$_ < 1.2 or ($_ > 1.5  and $_ < 2.3 )];;\
    set_State ("In folgenden Geräten ist die Batterie zu wechseln: $_dev");;\
    DebianMail('beo.bachter@gmx.at', 'Smarthome: Batteriestand', 'In folgenden Geräten ist die Batterie zu wechseln: $_dev','');;\
  }\
}


Ich habe nur die Zeile set_State vor DebianMail gesetzt um ein Ergebnis zu sehen!
Raspi 3, Sduino 433MHz und 868MHz beide CC1101, Wetterstation TFA Dostmann 35.1119 (WH1080), intertechno PAR1000/PA1500
NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, Eigenbau sonoff für Gartenbewässerung

Damian

ja, da es sich hier um eine Funktion aus dem main-package handelt, musst du :: davorsetzen, ansonsten ist man im gekapselten DOIF-package:

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

Johann.S

so funktioniert es, ich musste nur die Variable $_dev noch aus den String nehme!

defmod di_battery DOIF { [12:00];; \
  if ([?#"":voltage:$_ < 1.2 or ($_ > 1.5  and $_ < 2.3 )]) {\
    $_dev=[?@"":voltage:$_ < 1.2 or ($_ > 1.5  and $_ < 2.3 )];;\
    set_State ("In folgenden Geräten ist die Batterie zu wechseln: $_dev");;\
    ::DebianMail('beo.bachter@gmx.at', 'Smarthome: Batteriestand', 'In folgenden Geräten ist die Batterie zu wechseln: '. $_dev ,'');;\
  }\
}


Danke noch mal für die Unterstützung!

Gruß Johann
Raspi 3, Sduino 433MHz und 868MHz beide CC1101, Wetterstation TFA Dostmann 35.1119 (WH1080), intertechno PAR1000/PA1500
NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, Eigenbau sonoff für Gartenbewässerung

Per

Zitat von: Damian am 11 Oktober 2019, 18:52:45Im Perl-Modus kann man elegant über das ganze Modul Variablen nutzen, die man mehrfach verwenden kann.
Kann man im DOIF-Mode doch mittels DOIF_Readings machen, oder?

Damian

Zitat von: Per am 15 Oktober 2019, 10:12:34
Kann man im DOIF-Mode doch mittels DOIF_Readings machen, oder?

ja, aber eine Perl-Variable zu nutzen, ist um einiges effizienter als ein Reading über Funktionen zu setzen oder auszulesen, zumal die Variable hier nur temporär gebraucht wird. Noch schlimmer wird es, wenn man ein Reading über setreading setzt, da der FHEM-Befehl erst über einen Parser erkannt werden muss ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#27
Hier noch mal eine Version für "Fanatiker". Sie ist kürzer und produziert noch weniger Last:

defmod di_battery DOIF { [12:00];; \
  if (($_dev=[?@"":voltage:$_ < 1.2 or ($_ > 1.5  and $_ < 2.3 ),"keine"]) ne "keine") {\
    set_State ("In folgenden Geräten ist die Batterie zu wechseln: $_dev");;\
    ::DebianMail('beo.bachter@gmx.at', 'Smarthome: Batteriestand', 'In folgenden Geräten ist die Batterie zu wechseln: '. $_dev ,'');;\
  }\
}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

sash.sc

Kannst du das Beispiel in die Wiki packen?

Gesendet von meinem MI 9 mit Tapatalk

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Damian

Zitat von: sash.sc am 20 Oktober 2019, 11:29:24
Kannst du das Beispiel in die Wiki packen?

Gesendet von meinem MI 9 mit Tapatalk

Finde ich recht speziell, ich habe z. B. keine Sensoren mit dem Reading Voltage.

Dann besser Sensoren anzeigen, deren Reading battery nicht ok ist oder Ausfall von Sensoren, wie eben gepostet: https://forum.fhem.de/index.php/topic,104569.msg985397.html#msg985397
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

stera

#30
Hallo Damian,

ich frage mal in diesem Topic und vllt hast du eine schnelle Idee. Kann man bei der Abfrage des Device auch irgendwie filtern "alles, außer HM_ Devices" zum Beispiel

Hintergrund ist und ich habe das noch nicht direkt gefunden. Es gibt ja Geräte mit Battery "low bzw. ok" oder die HUE Geräte mit Prozent Zahl.

Oder anders gefragt, man könnte auch nur nach Zahlen im Reading suchen. Aber mit $number geht das auch nicht.. Am besten wäre natürlich eine kombinierte Abfrage. Steh da gerade auf dem Schlauch und wäre für Hilfe dankbar.


{ [12:00];
  if (($_dev=[?@"":battery:$_ < 30,"keine"]) ne "keine") {
    set_State ("In folgenden Geräten ist die Batterie zu wechseln: $_dev");   
  }
}



{ [12:00];
  if (($_dev=[?@"":battery:$number < 30,"keine"]) ne "keine") {
    set_State ("In folgenden Geräten ist die Batterie zu wechseln: $_dev");   
  }
}



Kleines Update:
Geht leider doch nicht, zeigt alle Geräte von HUE an.
Ich habe eine Lösung gefunden, aber evtl. gibt es ja noch eine bessere Abfrage:


{ [12:00];
  if (($_dev=[?@"":battery:$_ < 30 and $TYPE eq "HUEDevice","keine"]) ne "keine") {
    set_State ("In folgenden Geräten ist die Batterie zu wechseln: $_dev");   
  }
}




Damian

Zitat von: stera am 20 Januar 2022, 08:42:30
Hallo Damian,

ich frage mal in diesem Topic und vllt hast du eine schnelle Idee. Kann man bei der Abfrage des Device auch irgendwie filtern "alles, außer HM_ Devices" zum Beispiel

Hintergrund ist und ich habe das noch nicht direkt gefunden. Es gibt ja Geräte mit Battery "low bzw. ok" oder die HUE Geräte mit Prozent Zahl.

Oder anders gefragt, man könnte auch nur nach Zahlen im Reading suchen. Aber mit $number geht das auch nicht.. Am besten wäre natürlich eine kombinierte Abfrage. Steh da gerade auf dem Schlauch und wäre für Hilfe dankbar.

Du kannst auch Verneinungen beim Trigger definieren, siehe: https://forum.fhem.de/index.php/topic,125545.msg1201935.html#msg1201935

Sonst kanns du als Bedingung definieren:

$TYPE ne "HUEDevice" and $_ ne "ok" or $TYPE eq "HUEDevice" and $number < 30

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

stera

Danke für die schnelle Antwort. Ich habe nun für mich eine gute Lösung gefunden.

Bekomme immer noch Logs im 10s Takt und komischerweise ist ja ein Zeittrigger hinterlegt.?
2022.01.20 15:34:28.037 1: PERL WARNING: Argument "ok" isn't numeric in numeric gt (>) at (eval 146052) line 1.
2022.01.20 15:34:28.037 1: PERL WARNING: Argument "ok" isn't numeric in numeric gt (>) at (eval 146053) line 1.
2022.01.20 15:34:28.037 1: PERL WARNING: Argument "ok" isn't numeric in numeric gt (>) at (eval 146054) line 1.
2022.01.20 15:34:28.037 1: PERL WARNING: Argument "ok" isn't numeric in numeric gt (>) at (eval 146055) line 1.




defmod doif_SensorUeberwachung DOIF { [12:00];; \
  if (($_batt1=[?@"HUE|BWM":battery:$_ < 30,"keine"]) ne "keine") {\
  fhem("setreading doif_SensorUeberwachung battery_low_percent $_batt1;;")\
  } else { fhem("setreading doif_SensorUeberwachung battery_low_percent keine;;") };;;;\
  \
  if (($_batt2=[?@"HM":battery:$_ ne "ok","keine"]) ne "keine") {\
  fhem("setreading doif_SensorUeberwachung battery_low_static $_batt2;;")\
  } else { fhem("setreading doif_SensorUeberwachung battery_low_static keine;;") }\
}
attr doif_SensorUeberwachung room SensorÜberachung
attr doif_SensorUeberwachung verbose 0

Damian

Zitat von: stera am 20 Januar 2022, 15:38:10
Danke für die schnelle Antwort. Ich habe nun für mich eine gute Lösung gefunden.

Bekomme immer noch Logs im 10s Takt und komischerweise ist ja ein Zeittrigger hinterlegt.?
2022.01.20 15:34:28.037 1: PERL WARNING: Argument "ok" isn't numeric in numeric gt (>) at (eval 146052) line 1.
2022.01.20 15:34:28.037 1: PERL WARNING: Argument "ok" isn't numeric in numeric gt (>) at (eval 146053) line 1.
2022.01.20 15:34:28.037 1: PERL WARNING: Argument "ok" isn't numeric in numeric gt (>) at (eval 146054) line 1.
2022.01.20 15:34:28.037 1: PERL WARNING: Argument "ok" isn't numeric in numeric gt (>) at (eval 146055) line 1.


Dann ist es keine Gute Lösung wenn man "ok" mit > vergleicht

Kann dir aber nicht sagen, woher es kommt, es scheint aber nicht vom geposteten DOIF zu sein, es muss ein  Größer-Zeichen > vorkommen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

stera

Hallo Damian,

danke für die Rückmeldung. Das waren doch Meldungen von einer Readingsgroup, die ich auch mit angelegt hatte.
Hast du eine Idee wie in die Warnung hier am besten wegbekomme im ValueFormat?


defmod ReadingGroup_Battery readingsGroup .*:[Bb]attery
attr ReadingGroup_Battery room SensorÜberwachung
attr ReadingGroup_Battery valueFormat { return undef if( $VALUE > 50 );;;; return undef if( $VALUE eq "ok" );;;;}
attr ReadingGroup_Battery valueIcon {'battery.low' => 'unknown@red','battery.ok' => 'general_ok@green','battery' => '{if ($VALUE <= 25) {"measure_battery_".(sprintf("%.0f",(($VALUE)/25))*25)."\@red"} else {if ($VALUE <= 50) {"measure_battery_".(sprintf("%.0f",(($VALUE)/25))*25)."\@orange"} else {if ($VALUE <= 75) {"measure_battery_".(sprintf("%.0f",(($VALUE)/25))*25)."\@yellow"} else {"measure_battery_".(sprintf("%.0f",(($VALUE)/25))*25)."\@green"}}}}'}\
attr ReadingGroup_Battery verbose 0


Damian

Zitat von: stera am 20 Januar 2022, 21:54:07
Hallo Damian,

danke für die Rückmeldung. Das waren doch Meldungen von einer Readingsgroup, die ich auch mit angelegt hatte.
Hast du eine Idee wie in die Warnung hier am besten wegbekomme im ValueFormat?


defmod ReadingGroup_Battery readingsGroup .*:[Bb]attery
attr ReadingGroup_Battery room SensorÜberwachung
attr ReadingGroup_Battery valueFormat { return undef if( $VALUE > 50 );;;; return undef if( $VALUE eq "ok" );;;;}
attr ReadingGroup_Battery valueIcon {'battery.low' => 'unknown@red','battery.ok' => 'general_ok@green','battery' => '{if ($VALUE <= 25) {"measure_battery_".(sprintf("%.0f",(($VALUE)/25))*25)."\@red"} else {if ($VALUE <= 50) {"measure_battery_".(sprintf("%.0f",(($VALUE)/25))*25)."\@orange"} else {if ($VALUE <= 75) {"measure_battery_".(sprintf("%.0f",(($VALUE)/25))*25)."\@yellow"} else {"measure_battery_".(sprintf("%.0f",(($VALUE)/25))*25)."\@green"}}}}'}\
attr ReadingGroup_Battery verbose 0



Readingsgroup ist nicht meine Baustelle, da musst du im Readingsgroup-Board anfragen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF