Regex in DOIF - was mache ich falsch?

Begonnen von Master_Nick, 12 März 2018, 14:41:23

Vorheriges Thema - Nächstes Thema

Master_Nick

Hallo, ich habe mir über https://regex101.com/ passend auf meine Sensoren eine RegEx gecastet:

^[[:alpha:]]{1,}_Sensor_\d\Z

Dieser deckt alle meine Sensoren ab:
Balkon_Sensor_6
Arbeitszimmer_Sensor_3
Kinderzimmer_Sensor_2
Schlafzimmer_Sensor_4
Wohnzimmer_Sensor_5
Badezimmer_Sensor_1


Allerding scheitere ich bei der Anwendung:


([[[:alpha:]]{1,}_Sensor_\d:humidity]>54 and $device ne "Badezimmer_Sensor_1")
(set GoogleCloudMessages send Homeland|Information|Luftfeuchtigkeit im $room seit über 45 Minuten bei $_ - bitte lüften)


Aktuell meldet er mir ich nutze eine falsch formatierte Uhrzeit, somit gehe ich davon aus, dass er noch nicht als als RegEx interpretiert.
Ich habe auch schon Variationen aus dem Commandref (https://fhem.de/commandref_DE.html#DOIF) versucht, aber einen grünen Zweig habe ich noch nicht erreicht.


*Edit - Hui und hiermit scheine ich FHEM sogar in die Knie zu zwingen (also mit Vorsicht zu genießen):
([#"[[:alpha:]]{1,}_Sensor_\d":humidity,0]>54 and $device ne "Badezimmer_Sensor_1")
(set GoogleCloudMessages send Homeland|Information|Luftfeuchtigkeit im $room seit über 45 Minuten bei $_ - bitte lüften)
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

CoolTux


(["_Sensor_:^humidity$",0] > 54 and ...


Eventuell musst Du noch ^ bei humidity entfernen. Aber teste erstmal so
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Master_Nick

Also kann ich keinen normalen/komplexen RegEx verwenden?
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Otto123

Doch, aber nach meiner Erfahrung ist regEx auch immer etwas individuell und DOIF ist individueller  ;D
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux

Nur zum Teil. Du musst Dich da bitte schon an die Commandref halten. DOIF hat einen eigenen parser Teil um die Bedingung dann entsprechend zu prüfen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

He Leon -> "give me five" - da waren wir aber synchron :)


Mit der Doppelklammer  [] machst Du doch extra ne Uhrzeit aus dem Inhalt - oder?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

#6
Mach dir das Leben nicht komplizierter als es ist:

(["_Sensor_:humidity",0] > 54 ...

Edit: OK. ich sehe gerade, ich habe mir schon zu viel Zeit mit der Antwort gelassen, da war CoolTux schneller. ^ und $ macht die Sache eindeutiger.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Master_Nick

 ;) Naaaaa gut  :D
Das ist mir zwar eigentlich viel zu einfach so  8) 8) ;D ;D ;D hehe.

Vielen Dank :-)
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Master_Nick

Ist das nun böse, im gleichen Thread noch eine Frage zu den Variablen $room und $_ zu haben? :-D Wäre ja nicht mehr wirklich DOIF...

Er wandelt mir $room nicht um und behauptet sogar es wäre nicht definiert.
Ich habe das schon mal gehabt beim setzen der Variable $wday als reading für ein device da war ".$wday die Lösung - weil es ganz am ende stand.
Aber auf die gleiche Art und Weise bekomme ich es hier nicht escaped... auch ob das ".$DEVICE." in der Bedingung wirklich funktioniert ist mir noch unklar.

(["_Sensor_:humidity",0] > 54 and ".$DEVICE." ne "Badezimmer_Sensor_1")
{fhem("set GoogleCloudMessages send Homeland|Information|Luftfeuchtigkeit im ".$room" seit über 45 Minuten bei ".$_" - bitte lüften")}
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

CoolTux

Das wird so nix. $DEVICE in der Bedingung geht so nicht wie Du es gemacht hast.
$room geht meines Wissens gar nicht da Damain noch keine? Attributsauswertung dabei hat.

Und wieso gehst du im Ausführungsteil in Perl. Das sollte nicht nötig sein.


["_Sensor_:humidity",0] > 54 and $DEVICE ne "Badezimmer_Sensor_1") (set GoogleCloudMessages send Homeland|Information|Luftfeuchtigkeit im [$DEVICE:room] seit über 45 Minuten bei - bitte lüften)


Bitte lese noch mal DOIF, bin mir unsicher ob das genau so passt im Ausführungsteil. Was Du mit $_ bezwecken wolltest weiß ich nicht.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Master_Nick

Mhh also in der commandref zu DOIF steht:

ZitatIn der Aggregationsbedingung können alle in FHEM definierten Perlfunktionen genutzt werden. Folgende Variablen sind vorbelegt und können ebenfalls benutzt werden:

$_ Inhalt des angegebenen Readings (s.o.)
$number Nach Zahl gefilteres Reading
$name Name des Devices
$TYPE Devices-Typ
$STATE Status des Devices (nicht das Reading state)
$room Raum des Devices
$group Gruppe des Devices

Lass mich raten.... ich fische wieder an einer Stelle wo ich gar nicht bin - Stichwort: "Aggregationsbedingung"
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

CoolTux

Zitat von: Master_Nick am 12 März 2018, 16:46:21
Mhh also in der commandref zu DOIF steht:

Lass mich raten.... ich fische wieder an einer Stelle wo ich gar nicht bin - Stichwort: "Aggregationsbedingung"

Aber nur in der Aggregationsbedingung

Mom ich muss lesen
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux


define di_temp DOIF (([08:00-20:00]) and [?#"_Sensor_":humidity: $_ > 54] != 0)
(set GoogleCloudMessages send Homeland|Information|Luftfeuchtigkeit im [@"^Rooms":humidity:$_ > 54,"keine"] seit über 45 Minuten bei - bitte lüften)

DOELSE
()

attr di_temp do always
attr di_Raumtemp state In folgenden Zimmern ist zu feucht: [@"^Rooms":humidity:$_ > 54,"keine"])


Probiere bitte erst mal. Nur zum testen
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Master_Nick

Erst einmal danke ;-)

Ich glaube so will es noch nicht. Ich habe für den Test aus 54 mal 20 gemacht und er erfasst dennoch keinen einzigen Sensor.
Bei der Meldung welche Räume betroffen wären, sagt er auch dauerhaft "keine".
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

CoolTux

Muss ich mir auch erstmal was in meiner Testumgebung auf bauen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Damian

define di_temp DOIF (([08:00-20:00]) and [?#"_Sensor_":humidity: $_ > 54] != 0)

Euch ist bewusst, dass hier nur um 08:00 Uhr etwas Sinnvolles herauskommen kann?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

CoolTux

#16
Naja Damian wir testen ja noch,  ;D



([#"_Sensor_":humidity: $_ > 54] != 0)
(set GoogleCloudMessages send Homeland|Information|Luftfeuchtigkeit im [@"_Sensor_":humidity: $_ > 54,"keine"] seit über 45 Minuten bei - bitte lüften)

DOELSE
()

do         always
state      In folgenden Zimmern ist zu feucht: [@"_Sensor_":humidity: $_ > 54,"keine"])


So geht es erstmal irgendwie bei mir
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Jetzt musst Du nur noch schauen was Du als trigger nimmst oder lässt. So wie ich es jetzt gemacht habe triggert es immer wenn bei einem humidity sich ändert. Du bekommst also ständig eine Nachricht bis alle Sensoren unter 54 sind
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Also das mit dem Raum bekomme ich nicht hin. Kann Dir leider nicht sagen wie man den Raum raus findet. Da muß bitte Damian einmal ein Beispiel geben.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Master_Nick

#19
Danke schon mal für deine investierte Zeit  ;D
Muss ich wohl mal bald einen 6er springen lassen bei deiner Menge an Hilfe in letzter Zeit :-)

Klar dein Beispiel würde ich auch  adaptieren und mit einem wait arbeiten plus einer maximalen Anzahl an Benachrichtigungen die sich selber beim unterschreiten des Wertes wieder zurücksetzt (ein reading würde ich dafür missbrauchen). Außer mir kommt dabei noch eine andere Idee ;-)
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Damian

Zitat von: CoolTux am 12 März 2018, 18:41:46
Also das mit dem Raum bekomme ich nicht hin. Kann Dir leider nicht sagen wie man den Raum raus findet. Da muß bitte Damian einmal ein Beispiel geben.

$room kann man natürlich auch nur in der Aggregationsbedingung abfragen wie das Beispiel in der Commandref:


[@"rooms$":temperature:$_ > 20 and $room eq "livingroom"]

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

Master_Nick

#21
Perfekt Danke :-)

Und wie kann ich es in der "ausführenden" nutzen? Also das er die Räume oder den Raum angibt?

Das hier [@"^Rooms":humidity:$_ > 54,"keine"]  oder $room ging nicht.

Muss ich es vorher in eine eigene Variable übergeben?


Autsch :-D Ich sehe gerade erst, dass er nur das Commandref zitiert hat.  ::) *schäm* :-D
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

CoolTux

Zitat von: Master_Nick am 12 März 2018, 19:31:50
Perfekt Danke :-)

Und wie kann ich es in der "ausführenden" nutzen? Also das er die Räume oder den Raum angibt?

Das hier [@"^Rooms":humidity:$_ > 54,"keine"]  oder $room ging nicht.

Muss ich es vorher in eine eigene Variable übergeben?

Wollte ich auch gerade Fragen  ;D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Master_Nick

#23
 ;)

Haha die Art die er seine Antwort gegeben hat war schon mal sehr gut an dieser Stelle, denn es war keine Lösung sondern ein Beispiel um es zu verstehen. Vor allem aber hat es geklappt :D

Ich habe nun gerafft, wie man sich schon mal die devices ausgeben lassen kann:

[@"_Sensor_":humidity:$_ > 20,"keine"]

Das funktioniert auch im ausführenden Zweig.
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

CoolTux

Zitat von: Master_Nick am 12 März 2018, 20:02:44
;)

Haha die Art die er seine Antwort gegeben hat war schon mal sehr gut an dieser Stelle, denn es war keine Lösung sondern ein Beispiel um es zu verstehen. Vor allem aber hat es geklappt :D

Ich habe nun gerafft, wie man sich schon mal die devices ausgeben lassen kann:

[@"_Sensor_":humidity:$_ > 20,"keine"]

Das funktioniert auch im ausführenden Zweig.

Ich weiß, das hat ja schon mein Beispiel gemacht  :)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Master_Nick

#25
Oops stimmt! :-D

Also eigentlich muss ja das was du vorhin genommen hast, um Räume auszugeben, auch gehen. Laut dem Beispiel aus der Commandref (da fehlt übrins eins 'es' im Beispiel ;)):

ZitatRaumtemperatur-Überwachung:

define di_temp DOIF (([08:00] or [20:00]) and [?#"^Rooms":temperature: $_ < 20] != 0)
(push "In folgenden Zimmern ist zu kalt [@"^Rooms":temperature:$_ < 20,"keine"]")
DOELSE
(push "alle Zimmmer sind warm")

Würde ich sagen muss zu:
[@"^Rooms":humidity:$_ < 20,"keine" and $room ne "Badezimmer" and ne "Messungen"]
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Damian

Zitat von: Master_Nick am 12 März 2018, 20:14:58
Oops stimmt! :-D

Also eigentlich muss ja das was du vorhin genommen hast, um Räume auszugeben, auch gehen. Laut dem Beispiel aus der Commandref (da fehlt übrins eins 'es' im Beispiel ;)):

Würde ich sagen muss zu:
[@"^Rooms":humidity:$_ < 20,"keine" and $room ne "Badezimmer" and ne "Messungen"]

ja, abgesehen vom fehlenden "es" (in meiner Muttersprache kann man es tatsächlich weglassen ;) )

ist in dem Beispiel Trigger-Regex vom Device zufällig als "Rooms" angegeben und hat nichts mit der Variablen $room zu tun. Bei dir könnte es z. B. so aussehen:

[@"_Sensor_":humidity:$_ < 20 and $room =~ "Badezimmer|Messung","keine"]

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

Master_Nick

#27
=~  Bedeutung ist in Liste, richtig?

Dann würde ich  !~ nutzen. Ist nicht in Liste

Aber beides bringt mir noch keine Räume in z. B. dem state oder die Nachricht selber.  :o
Ich möchte nicht den Devicenamen sondern den Namen des Raumes in dem sich das Device befindet.

state In folgenden Zimmern ist es zu feucht: [@"_Sensor_":humidity:$_ < 20 and $room !~ "Badezimmer|Messungen|Echo","keinem"]

Ergebnis:
ZitatIn folgenden Zimmern ist es zu feucht: keinem

Dabei wäre es in genügend über 20% Luftfeuchtigkeit ;-)
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Damian

Zitat von: Master_Nick am 12 März 2018, 21:10:16
=~  Bedeutung ist in Liste, richtig?

Dann würde ich  !~ nutzen. Ist nicht in Liste

Aber beides bringt mir noch keine Räume in z. B. dem state oder die Nachricht selber.  :o
Ich möchte nicht den Devicenamen sondern den Namen des Raumes in dem sich das Device befindet.

state In folgenden Zimmern ist zu feucht: [@"_Sensor_":humidity:$_ < 20 and $room !~ "Badezimmer|Messungen|Echo","keinem"]

Ergebnis:
Dabei wäre es in genügend über 20% Luftfeuchtigkeit ;-)

über ist nicht unter (<)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Master_Nick

#29
Absolut richtig Sorry! :-D Der Fehler schlich sich durch fieses Copy Paste ein ....

Aber dennoch bringt es mir Devicenamen und nicht die Namen der Räume von den Devices :-)

Und vom Gefühl her macht =~ auch nicht so wirklich was an der stelle zumindest nicht als negation ;-) eher als inklusion denn sonst würde der Sensor im Badezimmer nicht auftauchen dürfen.

state In folgenden Zimmern ist es zu feucht: [@"_Sensor_":humidity:$_ > 20 and $room =~ "Badezimmer|Messungen|Echo","keinem"]

ZitatIn folgenden Zimmern ist es zu feucht: Arbeitszimmer_Sensor_3,Badezimmer_Sensor_1,Balkon_Sensor_6,Kinderzimmer_Sensor_2,Schlafzimmer_Sensor_4,Wohnzimmer_Sensor_5


Ich würde aber gerne haben, dass dort die Namen der Räume stehen in denen sich der jeweilige Device befindet  ;D



Edit auch ein konkreter Ausschluss eines devices scheint nicht zu wirken:

state In folgenden Zimmern ist es zu feucht: [@"_Sensor_":humidity:$_ > 20 and $device ne "Badezimmer_Sensor_1","keinem"]

ZitatIn folgenden Zimmern ist es zu feucht: Arbeitszimmer_Sensor_3,Badezimmer_Sensor_1,Balkon_Sensor_6,Kinderzimmer_Sensor_2,Schlafzimmer_Sensor_4,Wohnzimmer_Sensor_5
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Damian

#30
Zitat von: Master_Nick am 12 März 2018, 21:39:04
Absolut richtig Sorry! :-D Der Fehler schlich sich durch fieses Copy Paste ein ....

Aber dennoch bringt es mir Devicenamen und nicht die Namen der Räume von den Devices :-)

Und vom Gefühl her macht =~ auch nicht so wirklich was an der stelle zumindest nicht als negation ;-) eher als inklusion denn sonst würde der Sensor im Badezimmer nicht auftauchen dürfen.

state In folgenden Zimmern ist es zu feucht: [@"_Sensor_":humidity:$_ > 20 and $room =~ "Badezimmer|Messungen|Echo","keinem"]


Ich würde aber gerne haben, dass dort die Namen der Räume stehen in denen sich der jeweilige Device befindet  ;D



Edit auch ein konkreter Ausschluss eines devices scheint nicht zu wirken:

state In folgenden Zimmern ist es zu feucht: [@"_Sensor_":humidity:$_ > 20 and $device ne "Badezimmer_Sensor_1","keinem"]

Rooms wirst du auf diese Weise auch nicht bekommen, @ liefert lediglich Devicenamen, die du z. B. in Perl weiter auswerten kannst.

$device habe ich bisher in der Aggregationsbedingung nicht vorgesehen/definiert, da man aufgrund der Device-Regex im ersten Teil hier "_Sensor_" nach bestimmten Devices filtern kann.

Edit:

mit (Zitat aus der Commandref):

ZitatFür reine Perlangaben gibt es eine entsprechende Perlfunktion namens AggrDoIf(<function>,<regex Device>,<reading>,<condition>,<default>) diese liefert bei der Angabe @ ein Array statt einer Stringliste, dadurch lässt sie sich gut bei foreach-Schleifen verwenden.

und DOIF-Perl https://forum.fhem.de/index.php/topic,84969.0.html

kannst du in kürzester Zeit, die tollsten Sachen zaubern, wenn du dich auf Perl einlässt.

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

Master_Nick

Moin  :)
Sorry für die verspätete Rückmeldung und vielen Dank für deine Antwort.

Stimmt dann filter ich das Badezimmer (_Sensor_1) einfach mit  _Sensor_[2-6] raus. :-)

Dann schau ich mal wie und ob ich es so baue :-)

Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Master_Nick

Ich wollte meine funktionierende Lösung noch kund tun :-)
Ich habe mir in jedem Sensor ein Reading gesetzt namens alias, dass den Raumnamen enthält.
(Eventuell weiß noch jemand wie ich Umlaute nutzen kann lueften -> lüften wäre nun das I-Tüpfelchen)

Danke nochmals für die Hilfe :-)

Hier die funktionierende Lösung für mich:
Internals:
   CFGFN     
   DEF        ([@"_Sensor_[2-5]":humidity:$_ > 54])

{fhem ("set GoogleCloudMessages send Homeland|Achtung|Luftfeuchtigkeit im [$DEVICE:alias:"(.*)":"$1"] bei [$DEVICE:humidity:"(.*)":"$1"]\% - bitte lueften!")}
   NAME       Luftfeuchtigkeitskontrolle_DI
   NR         152
   NTFY_ORDER 50-HumidityWatch
   STATE      initialized
   TYPE       DOIF
   READINGS:
     2018-03-19 16:10:49   Device          Schlafzimmer_Sensor_4
     2018-03-19 16:10:25   cmd             0
     2018-03-19 16:10:25   mode            enabled
     2018-03-19 16:10:25   state           initialized
     2018-03-19 16:10:34   wait_timer      no timer
   Regex:
     cond:
       :
         0:
           "_Sensor_[2-5]" _Sensor_[2-5]
   condition:
     0          AggregateDoIf($hash,'@','_Sensor_[2-5]','humidity','$_ > 54')
   devices:
   do:
     0:
       0          {fhem ("set GoogleCloudMessages send Homeland|Achtung|Luftfeuchtigkeit im [$DEVICE:alias:"(.*)":"$1"] bei [$DEVICE:humidity:"(.*)":"$1"]\% - bitte lueften!")}
     1:
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      humidity: 51
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev Schlafzimmer_Sensor_4
     triggerEvents:
       humidity: 51
     triggerEventsState:
       humidity: 51
   internals:
   itimer:
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always
   room       Technikraum
   wait       2700
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Master_Nick

#33
 :) Ein wenig zu früh gefreut...
Also Raum und Device und Luftfeuchtigkeit habe ich ja nun ausgegeben.

Was nicht passt: Er meldet irgendeinen Sensor mit 46% statt 54% solange eines der 4 Möglichen Devices bei mir die 54% Luftfeuchtigkeit übersteigt.

Muss ich jetzt ein DOIF für jeden der 4 Sensoren bauen oder kann man da noch was tweaken? :-D Dachte eigentlich da er das Device in den Wait timer schreibt, dass er dann pro Device ein Wait machen würde und dann nach 45 Minuten bei Überschreitung eines Devices genau dies Melden würde (wahrscheinlich müsste ich ihm diese Logik erst bauen?).


*EDIT* Interessant aktuell scheint es tatsächlich ohne Veränderung zu gehen wie es gedacht ist.


**EDIT** ok das war quatsch ich hatte wohl etwas geändert und es vergessen :-)
([@"_Sensor_[2-5]":humidity:$_ > 54])

{ if ([$DEVICE:humidity:"(.*)":"$1"] >54) {fhem ("set GoogleCloudMessages send Homeland|Achtung|Luftfeuchtigkeit im [$DEVICE:alias:"(.*)":"$1"] bei [$DEVICE:humidity:"(.*)":"$1"]\% - bitte lueften!")}}

Es wird so zumindest nicht der falsche Device ausgegeben, dafür kann es mal vorkommen, dass eine Meldung aus bleibt weil es in dem Moment der falsche Sensor ist :-D
Ich glaube aber die sauberste Lösung ist wohl ein Doif zu machen pro Sensor oder mit DOELSEIF zu arbeiten oder mit einem userreading wo der Device der über 54% war drin steht und beim If wird genau dieser geprüft.
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Damian

#34
Wenn du ohnehin ereignisgesteuert arbeitest, reicht eine einfache allgemeine Abfrage:

(["_Sensor_[2-5]:humidity",0] > 54) (set Google.... bitte Lüften [$DEVICE:alias] bei [$DEVICE:humidity])

Eine elegantere Lösung ist, zeitverzögert eine Meldung zu produzieren, denn ein paar Minuten über 54 % sind normalerweise unkritisch. Allerdings reicht dafür ein wait-Timer nicht aus.   

Ab heute gibt es auch die Möglichkeit zeitverzögert so etwas in einem DOIF-Modul für mehrere Sensoren zu lösen. Siehe Anwendungsbeispiele (z. B. Verzögerte Fenster-offen-Meldung mit Wiederholung für mehrere Fenster) mit Timern:
https://fhem.de/commandref_DE.html#DOIF_Einfache_Anwendungsbeispiele_Perl
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Master_Nick

Geil! :-)

Das ist ja genau was ich brauchte.  8)

Danke!
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)