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?
Vielleicht funktioniert es wenn Du
([BM_Kueche:brightness:d] <75)
mitgibst - :d sagt das ein dezimal wert erwartet wird...
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)
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.
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?
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
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
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. :-)
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
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
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.
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...