Unterschiedliche Abfragen für "Fenster offen"

Begonnen von dennis_n, 22 November 2022, 11:33:32

Vorheriges Thema - Nächstes Thema

dennis_n

Hallo,

ich habe mal wieder ein Problem. Wie ihr an meinen Anfragen merkt, bin ich dabei ein paar Dinge in meiner Hausautomatisierung zu ändern. Und ich stehe nach einige Jahren der Anpassung etwas auf dem Schlauch. Entschuldigt bitte.

Ich habe an allen Fenstern Fensterkontakte. Dazu habe ich DOIF, welches die Fenster überwacht und mir nach 10 Minuten Lüften und unter 10 Grad Aussentemperatur über Alexa sagt, dass noch Fenster offen sind. Das klappt wunderbar.
Aber gerade in den Bädern, wo nach dem duschen eine sehr hohe Luftfeuchtigkeit existiert, möchte ich gerne die Fenster länger offen lassen. Ohne dass mir nach 10 Minuten Alexa sagt, ich soll die Fenster schließen.

Jetzt sieht meine aktuelles DOIF so aus:

([#"^ZWave_SENSOR_NOTIFICATION_"::$STATE eq "open"] != 0 and [netatmo_M02_00_00_6b_32_04:temperature] < 10.0) (set ECHO_XXX speak Es ist kalt draussen und es sind noch Fenster offen. Genug gelüftet.)

Wenn ich jetzt einen Aqara Feuchtigkeitssensor im Bad verbaue, wie ich muss ich den Abfragen, damit der Wert in den Bädern mit berücksichtigt wird? Aber eben nur in den Bädern.

Eine Möglichkeit wäre vielleicht alle Räume (ausser den Bädern) in einer Struktur zusammen zu fassen und diese in einem DOIF abzufragen und für die beiden Bäder ein eigenes DOIF zu machen.

Oder gibt es elegantere Ideen?

Gruss
Dennis

Damian

#1
Diese Variablen kannst du abfragen und mit and zu deiner Bedingung $STATE eq "open" hinzufügen:

$_ 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

und am besten im Namen eine Gemeinsamkeit zu bestehenden Definitionen wählen, damit man effizient den Trigger definieren kann:

z. B. _SENSOR_NOTIFICATION_
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dennis_n

Also müsste das für mein Bäder so aussehen?

([#"^ZWave_SENSOR_NOTIFICATION_"::$STATE eq "open" and $group != "Bad"] != 0 and [netatmo_M02_00_00_6b_32_04:temperature] < 10.0) (set ECHO_XXX speak Es ist kalt draussen und es sind noch Fenster offen. Genug gelüftet.)

DOELSEIF

([#"^ZWave_SENSOR_NOTIFICATION_"::$STATE eq "open" and $group eq "Bad"] != 0 and [netatmo_M02_00_00_6b_32_04:humidity] < 55.0) (set ECHO_XXX speak Das Badfenster kann jetzt geschlossen werden.)



Sorry, aber tue mir echt schwer mit den Schreibweisen.

Gruss
Dennis

Damian

Zitat von: dennis_n am 22 November 2022, 14:41:57
Also müsste das für mein Bäder so aussehen?

([#"^ZWave_SENSOR_NOTIFICATION_"::$STATE eq "open" and $group != "Bad"] != 0 and [netatmo_M02_00_00_6b_32_04:temperature] < 10.0) (set ECHO_XXX speak Es ist kalt draussen und es sind noch Fenster offen. Genug gelüftet.)

DOELSEIF

([#"^ZWave_SENSOR_NOTIFICATION_"::$STATE eq "open" and $group eq "Bad"] != 0 and [netatmo_M02_00_00_6b_32_04:humidity] < 55.0) (set ECHO_XXX speak Das Badfenster kann jetzt geschlossen werden.)



Sorry, aber tue mir echt schwer mit den Schreibweisen.

Gruss
Dennis

([#"^ZWave_SENSOR_NOTIFICATION_":

Das ist hier die Regex für die zu triggernden Devices, die ist hier noch auf ZWave eingeschränkt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dennis_n

Verstehe ich nicht.

Das sind doch alles ZWAVE Sensoren an den Fenstern. Auch im Bad.

Gruss
Dennis

Per

Du könntest ein virtuelles Device erstellen, welches bei offenem Fenster erst bei Erreichen der gewünschten Luftfeuchtigkeit auf "offen" geht.

Damian

Zitat von: dennis_n am 22 November 2022, 18:48:31
Verstehe ich nicht.

Das sind doch alles ZWAVE Sensoren an den Fenstern. Auch im Bad.

Gruss
Dennis

Dann ist ja alles bestens.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dennis_n

Leider funktioniert das so nicht.

([#"^ZWave_SENSOR_NOTIFICATION_"::$STATE eq "open" and $group ne "Bad"] != 0 and [netatmo_M02_00_00_6b_32_04:temperature] < 10.0) (set ECHO_XXX speak Es ist kalt draussen und es sind noch Fenster offen. Genug gelüftet.)

DOELSEIF

([#"^ZWave_SENSOR_NOTIFICATION_"::$STATE eq "open" and $group eq "Bad"] != 0 and [netatmo_M02_00_00_6b_32_04:humidity] < 60.0) (set ECHO_XXX speak Das Badfenster kann jetzt geschlossen werden.)


Im Log steht:
2022.11.22 21:57:08 1: PERL WARNING: Argument "Bad" isn't numeric in numeric ne (!=) at (eval 71563) line 1.
2022.11.22 21:57:08 3: eval: Offene_Fenster: warning in condition c01
2022.11.22 21:57:08 1: PERL WARNING: Argument "" isn't numeric in numeric ne (!=) at (eval 71563) line 1.
2022.11.22 21:57:08 3: eval: Offene_Fenster: warning in condition c01
2022.11.22 21:57:08 3: Offene_Fenster: aggregate function: warning in condition: $STATE eq "open" and $group != "Bad", Device: ZWave_SENSOR_NOTIFICATION_17

Damian

#8
Zitat2022.11.22 21:57:08 3: Offene_Fenster: aggregate function: warning in condition: $STATE eq "open" and $group != "Bad", Device: ZWave_SENSOR_NOTIFICATION_17

hier sollte eigentlich eq stehen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dennis_n

Also der Sensor_17 ist nicht in einem Bad. Sondern das Büro Fenster.

Also sollte bei entsprechender Lüftungszeit die Ansage kommen, dass es kalt druassen ist.

Handelt es sich aber um ein Bad Fenster, soll die Ansage erst kommen, wenn die Luftfeuchtigkeit entsprechend niedrig ist.
In sofern müsste das DOIF doch so stimmen oder?

([#"^ZWave_SENSOR_NOTIFICATION_"::$STATE eq "open" and $group ne "Bad"] != 0 and [netatmo_M02_00_00_6b_32_04:temperature] < 10.0) (set ECHO_XXX speak Es ist kalt draussen und es sind noch Fenster offen. Genug gelüftet.)

DOELSEIF

([#"^ZWave_SENSOR_NOTIFICATION_"::$STATE eq "open" and $group eq "Bad"] != 0 and [netatmo_M02_00_00_6b_32_04:humidity] < 60.0) (set ECHO_XXX speak Das Badfenster kann jetzt geschlossen werden.)


Wenn ich das mal so vor mich hin übersetze:
Wenn ein ZWAVE Sensor open anzeigt und NICHT zur Gruppe Bad gehört und es mindestens einen davon gibt und die Aussentemperatur unter 10 Grad leigt, dann mache eine Ansage

ODER

Wenn ein ZWAVE Sensor open anzeigt und zur Gruppe Bad gehört und es mindestens einen davon gibt und die Luftfeuchtigkeit noch unter 60 liegt, dann mache eine Ansage

Hmmm, ich finde den Fehler nicht.  :-\

Gruss
Dennis


Damian

Zitat von: dennis_n am 22 November 2022, 22:35:37
Also der Sensor_17 ist nicht in einem Bad. Sondern das Büro Fenster.

Also sollte bei entsprechender Lüftungszeit die Ansage kommen, dass es kalt druassen ist.

Handelt es sich aber um ein Bad Fenster, soll die Ansage erst kommen, wenn die Luftfeuchtigkeit entsprechend niedrig ist.
In sofern müsste das DOIF doch so stimmen oder?

([#"^ZWave_SENSOR_NOTIFICATION_"::$STATE eq "open" and $group ne "Bad"] != 0 and [netatmo_M02_00_00_6b_32_04:temperature] < 10.0) (set ECHO_XXX speak Es ist kalt draussen und es sind noch Fenster offen. Genug gelüftet.)

DOELSEIF

([#"^ZWave_SENSOR_NOTIFICATION_"::$STATE eq "open" and $group eq "Bad"] != 0 and [netatmo_M02_00_00_6b_32_04:humidity] < 60.0) (set ECHO_XXX speak Das Badfenster kann jetzt geschlossen werden.)


Wenn ich das mal so vor mich hin übersetze:
Wenn ein ZWAVE Sensor open anzeigt und NICHT zur Gruppe Bad gehört und es mindestens einen davon gibt und die Aussentemperatur unter 10 Grad leigt, dann mache eine Ansage

ODER

Wenn ein ZWAVE Sensor open anzeigt und zur Gruppe Bad gehört und es mindestens einen davon gibt und die Luftfeuchtigkeit noch unter 60 liegt, dann mache eine Ansage

Hmmm, ich finde den Fehler nicht.  :-\

Gruss
Dennis

Das mag alles sein, aber die Warnungen, die du gepostet hast, passen nicht zu deiner Definition. Es wird der Vergleich mit != angemeckert, du zeigst mir aber eine Definition mit eq.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dennis_n

So, ich bin ein Schritt weiter.
Der Fehler war leider von mir verursacht. Ich hatte die Änderung noch nicht gespeichert.

Aber auch mit der Verbesserung löst das DOIF nicht aus. Jetzt habe ich das mal umgestellt und triggere nicht auf die Gruppe, sondern direkt auf den Sensor in der Dusche.
Wenn ich also nur das hier im DOIF habe, funktioniert die Sprachausgabe.

z.B. wenn das Fenster im Büro geöffnet ist:
([#"^ZWave_SENSOR_NOTIFICATION_"::$STATE eq "open" and $name ne "ZWave_SENSOR_NOTIFICATION_28"] != 0 and [netatmo_M02_00_00_6b_32_04:temperature] < 10.0) (set ECHO_XXX speak Es ist kalt draussen und es sind noch Fenster offen. Genug gelüftet.)

Wenn ich aber nun das hier hinzufüge und das Fenster im Büro öffne, kommt entweder keine Sprachausgabe oder sie hört nicht mehr auf.
DOELSEIF

([#"^ZWave_SENSOR_NOTIFICATION_"::$STATE eq "open" and $name eq "ZWave_SENSOR_NOTIFICATION_28"] != 0 and [netatmo_M02_00_00_6b_32_04:humidity] < 60.0) (set ECHO_XXX speak Das Badfenster kann jetzt geschlossen werden.)


Gruss
Dennis