Notify schaltet, ohne die Bedingung zu beachten

Begonnen von Invers, 24 Mai 2014, 08:27:20

Vorheriges Thema - Nächstes Thema

Invers

Ich will das Licht anschalten, wenn der Bewegungsmelder auslöst und eine bestimmte Dunkelheit erreicht ist.
Dazu habe ich folgendes Notify gebastelt:

BM_Kueche:motion.* IF ([BM_Kueche:brightness] <75)(set LED_Lueche on-for-timer 245)

Es wird geschaltet, wobei aber leider die Helligkeitsprüfung ignoriert wird. Das Licht geht also leider auch bei Sonnenschein an.
Was habe ich falsch gemacht?
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

der-Lolo

Vielleicht funktioniert es wenn Du
([BM_Kueche:brightness:d] <75)
mitgibst - :d sagt das ein dezimal wert erwartet wird...

Invers

Danke, scheint zu funktionieren.
Warum funktioniert dann aber folgendes Konstrukt ohne d: ? Ich hab das nicht verstanden.

BM_Aussen:brightness.* IF ([BM_Aussen:brightness] <175 and [BinIchDa] eq "present")(set Links on,deleteattr Links_AutoAus disable,attr Links_AutoAn disable 1)
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

der-Lolo

bist du sicher das das richtig funktioniert? sobald du mit and verknüpfst musst du eigentlich das Konstrukt einklammern...

BM_Aussen:brightness.* IF (([BM_Aussen:brightness] <175) and ([BinIchDa] eq "present"))(set Links on,deleteattr Links_AutoAus disable,attr Links_AutoAn disable 1)
und als REGEX vor dem IF solltest du in diesem fall noch etwas einbauen damit bei Änderung von BinIchDa auch ein event ausgelöst wird.

Invers

Ich bin hundertprozentig sicher, dass es funktioniert.
Ich schalte auf diese Weise 4 verschiedene Lampen und Steckdosen, die nur bei Dunkelheit und wenn ich zu Hause bin auch wirklich angehen. Auch das Ausschalten funktioniert einwandfrei. Den Code habe ich ebenfalls hier aus dem Forum.

Ob dieser Teil funktioniert, habe ich noch nicht getestet, weil halt bisher immer jemand anwesend war, als es dunkel wurde.

Zitatund als REGEX vor dem IF solltest du in diesem fall noch etwas einbauen damit bei Änderung von BinIchDa auch ein event ausgelöst wird.

Was müsste ich denn da einbauen?
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Damian

Zitat von: Invers am 24 Mai 2014, 09:00:20
Danke, scheint zu funktionieren.
Warum funktioniert dann aber folgendes Konstrukt ohne d: ? Ich hab das nicht verstanden.

BM_Aussen:brightness.* IF ([BM_Aussen:brightness] <175 and [BinIchDa] eq "present")(set Links on,deleteattr Links_AutoAus disable,attr Links_AutoAn disable 1)

Das "d" zum Filtern von Zahlen brauchst du nur, falls im Reading (hier: BM_Aussen:brightness) noch etwas anderes außer einer Zahl stünde z. B "32 %" oder andere Zeichen die keine Zahlen sind. Dann würde durch das "d" nur die Zahl genommen werden und nicht die anderen Zeichen (z. B. das Prozentzeichen) damit der Vergleich (hier < 175) auch klappt.

Gruß

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

Damian

Zitat von: Invers am 24 Mai 2014, 09:40:57
Ich bin hundertprozentig sicher, dass es funktioniert.
Ich schalte auf diese Weise 4 verschiedene Lampen und Steckdosen, die nur bei Dunkelheit und wenn ich zu Hause bin auch wirklich angehen. Auch das Ausschalten funktioniert einwandfrei. Den Code habe ich ebenfalls hier aus dem Forum.

Ob dieser Teil funktioniert, habe ich noch nicht getestet, weil halt bisher immer jemand anwesend war, als es dunkel wurde.

Was müsste ich denn da einbauen?

Dazu musst du zuerst über den Eventmonitor schauen, welche Events "BM_Aussen:brightness" liefert. Beim notify hast du immer das Problem, dass bei jedem Event getriggert wird und wenn deine Bedingung stimmt,  dein Ausführungsteil jedes mal ausgeführt wird.

Das wird demnächst mit dem neuen Modul DOIF (siehe Nachbar-Thread) viel einfacher, weil das Modul das mehrfache Schalten unterbindet und man sich dann über die Events und vor allem über die dazugehörigen regexp, die den Usern immer wieder Kopfzerbrechen machen, weniger Gedanken machen muss :)

Gruß

Damian


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

Invers

Danke für die ausführliche Antwort. Hab ich eigentlich verstanden, nehme ich an. Das erklärt aber nicht, warum das geht:
BM_Aussen:brightness.* IF ([BM_Aussen:brightness] <175 and [BinIchDa] eq "present")(set Links on,deleteattr Links_AutoAus disable,attr Links_AutoAn disable 1)

Aber das nicht:
BM_Kueche:motion.* IF ([BM_Kueche:brightness] <75)(set LED_Lueche on-for-timer 245)

sondern nur:
BM_Kueche:motion.* IF ([BM_Kueche:brightness:d] <75)(set LED_Lueche on-for-timer 245)


Meine Logs zeigen, dass hinter brightness nur eine Zahl steht. Aber selbst wenn nicht, müssten doch brightness bei beiden BMs gleich sein dürfen. Ich verstehe nicht, warum die nun unterschiedlich behandelt werden müssen:

IF ([BM_Aussen:brightness] <175 .............
IF ([BM_Kueche:brightness:d] <75 .............

Man kann ja bei Bedarf immer probieren, aber ich wüsste halt gerne, warum das so ist.
Habe ich deine Erklärung falsch verstanden? Sorry, will nicht nerven. :-)
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Damian

Zitat von: Invers am 24 Mai 2014, 10:17:07
Danke für die ausführliche Antwort. Hab ich eigentlich verstanden, nehme ich an. Das erklärt aber nicht, warum das geht:
BM_Aussen:brightness.* IF ([BM_Aussen:brightness] <175 and [BinIchDa] eq "present")(set Links on,deleteattr Links_AutoAus disable,attr Links_AutoAn disable 1)

Aber das nicht:
BM_Kueche:motion.* IF ([BM_Kueche:brightness] <75)(set LED_Lueche on-for-timer 245)

sondern nur:
BM_Kueche:motion.* IF ([BM_Kueche:brightness:d] <75)(set LED_Lueche on-for-timer 245)


Meine Logs zeigen, dass hinter brightness nur eine Zahl steht. Aber selbst wenn nicht, müssten doch brightness bei beiden BMs gleich sein dürfen. Ich verstehe nicht, warum die nun unterschiedlich behandelt werden müssen:

IF ([BM_Aussen:brightness] <175 .............
IF ([BM_Kueche:brightness:d] <75 .............

Man kann ja bei Bedarf immer probieren, aber ich wüsste halt gerne, warum das so ist.
Habe ich deine Erklärung falsch verstanden? Sorry, will nicht nerven. :-)

Entscheidend für die Abfrage ist nicht was im Log steht oder eventmonitor, sondern was in dem Reading steht. Wenn im Reading (hier: BM_Kueche:brightness) nur eine Zahl steht, dann muss beides funktionieren.

Gruß

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

Damian

Zitat von: der-Lolo am 24 Mai 2014, 09:13:37
bist du sicher das das richtig funktioniert? sobald du mit and verknüpfst musst du eigentlich das Konstrukt einklammern...

BM_Aussen:brightness.* IF (([BM_Aussen:brightness] <175) and ([BinIchDa] eq "present"))(set Links on,deleteattr Links_AutoAus disable,attr Links_AutoAn disable 1)
und als REGEX vor dem IF solltest du in diesem fall noch etwas einbauen damit bei Änderung von BinIchDa auch ein event ausgelöst wird.

Wenn du auch bei Änderungen von BinIchDa triggern willst, was in diesem Falle Sinn macht, musst beim notify auch beide angeben, z. B.

BM_Aussen:brightness|BinIchDa IF (([BM_Aussen:brightness] <175) and ([BinIchDa] eq "present"))(set Links on,deleteattr Links_AutoAus disable,attr Links_AutoAn disable 1)

Aber auch darüber wird man sich bei DOIF weniger Gedanken machen müssen, weil das vom Modul durch die Abfrage selbst erkannt wird.

Gruß

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

Invers

Nochmals herzlichen Dank!
Das "|" in "BM_Aussen:brightness|BinIchDa" ist mir völlig neu. Man lernt nie aus.
Zu DOIF habe ich mich dort bereits geäussert.

Ich werde erst einmal bis zur Fertigstellung von DOIF nichts anrühren. BinIchDa in Kombi mit Helligkeit wird erst wieder zum Herbst dringend. Bis dahin läuft DOIF bestimmt schon.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

der-Lolo

hehe - so ging es mir auch | war mir völlig neu bis Damian mich darauf schubste...
alle halbe Jahre gibt es so ne erleuchtung... zuletzt dank Andre fhainz und Loredo beim REGEX thema...