[GELÖST] Notify Bewegungsmelder: Kombination von Schaltzuständen

Begonnen von Michi240281, 02 März 2014, 19:37:27

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: Michi240281 am 03 März 2014, 23:42:31
Und was ich halt nicht verstehe: Ich habe das schon ausgetauscht, und zwar so:

define BM_Terasse_Motion notify BM_Terasse:motion.* IF ([BM_Terasse:brightness] < 100) (set Lampe_Terasse 100 90,define Lampe_Terasse_at at +00:01:30 set Lampe_Terasse {[Lampe_Terasse:state]})

Doch dann tut der Notify garnix!! Nur wenn der hintere Ausdruck auch [BM_Terasse:brightness] lautet, arbeitet das notify!

Bei den Tests musst du natürlich 90 Sekunden warten, bis du den nächsten Motion-Event auslöst, sonst existiert der define at noch und kann nicht neu definiert werden. Ansonsten kannst du innerhalb von 90 Sekunden schauen, was unter Lampe_Terasse_at steht, denn das ist das set Kommando welches aufgelöst wurde und nach 90 Sekunden ausgeführt wird.

Gruß

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

Damian

Ursprünglich ging ich nur von Zahlen im Reading aus, da wären die geschweifte Klammern nicht schlimm, die braucht man allerdings nur, wenn man beim IF vor der Ausführung des FHEM-Befehls hier der set-Befehl noch etwas in Perl berechnen will, damit sind die geschweiften Klammern in deinem Fall eigentlich überflüssig, im Gegenteil sogar, da beim Reading state offenbar auch der Zustand on, off drin stehen wird, kann der Perl-Parser damit nichts anfangen und dürfte im Log eine Fehlermeldung bringen. Ebenso verhält es sich mit dem Prozentzeichen.

Es reicht also einfach die geschweiften Klammern zu entfernen.

define BM_Terasse_Motion notify BM_Terasse:motion.* IF ([BM_Terasse:brightness] < 100) (set Lampe_Terasse 100 90,define Lampe_Terasse_at at +00:01:30 set Lampe_Terasse [Lampe_Terasse:state])

So wird bei set Lampe_Terasse ..., genau das genommen, was im Reading state steht. Alternativ kannst du das Gleiche mit Reading-level machen. Wenn dort Prozentzeichen vorkommt, dann wird das auch an set weiter gegeben, in der Hoffnung dass dein Device damit was anfangen kann. Du kannst aber auch im Reading mit :d nach Zahlen filtern, dann würde vom Reading-level nur die Zahl genommen. Der Code sieht dann so aus:

define BM_Terasse_Motion notify BM_Terasse:motion.* IF ([BM_Terasse:brightness] < 100) (set Lampe_Terasse 100 90,define Lampe_Terasse_at at +00:01:30 set Lampe_Terasse [Lampe_Terasse:level:d])

Ich hoffe, dass du nach der gestrigen Odyssee langsam zum Erfolgserlebnis kommst.  :)

Gruß

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

Michi240281

Hallo Damian,

besten Dank für deine Antwort! :)

Tatsächlich war es gestern ziemlich langwierig und am Ende war das gewünschte Ergebnis noch nicht da, leider.

Das Reading "state" von Lampe_Terasse kann die Werte "off, 1-99% und on" annehmen. Beim Reading level steht nur 0-100% drin. Da es wie gesagt ein Dimmer ist, würde ich das Reading "level" bevorzugen.

Bin schon gespannt, ob das so hinhaut! Werde es heute Abend direkt testen.

Wenn das grundsätzlich so klappt, ist nur noch die Frage, zu welchem Zeitpunkt er dann den Wert des Readings ausliest. Das müsste ja wie gesagt passieren, bevor das Notify die Lampe auf 100% setzt. Sonst machts ja keinen Sinn.

Danke und Gruß
FHEM 5.6 auf RPi2 / HM LAN Adapter / diverse HM-Devices
FHEM-Remote-App
QNAP 419P / Onkyo TX-SR 608
DM500HD / GM Spark One
Sony 52HX905

Deudi

Hallo Michi,

eine kleine Nebenbemerkung zum Notify "notify BM_Terasse:motion.*". Ich würde das ".*" am Ende weglassen, sonst wird dein Notify immer dreimal getriggert (je Event des BM). Aus dem Gedächtnis meldet der BM nämlich z.B. immer:
10:36:03 BM_Terasse motion
10:36:03 BM_Terasse motion on (to HMLAN...)
10:36:03 BM_Terasse motion Count ....
Mit ".*" regiert das Notify auf alle drei Events, ohne nur auf das erste.
Hatte mich bei mir immer gewundert, dass das Kommando an die Lampe immer dreimal rausgeht. Vielleicht bringt das bei deinem Vorhaben auch die Dinge durcheinander.

Hope that helps...
Gigabyte Brix, Ubuntu 16.04.3 LTS, Homematic, Z-Wave, EnOcean, Shelly@MQTT, SIGNALduino, JeeLink DAVIS-Sketch

Michi240281

Zitat von: Deudi am 04 März 2014, 10:37:18
Hallo Michi,

eine kleine Nebenbemerkung zum Notify "notify BM_Terasse:motion.*". Ich würde das ".*" am Ende weglassen, sonst wird dein Notify immer dreimal getriggert (je Event des BM). Aus dem Gedächtnis meldet der BM nämlich z.B. immer:
10:36:03 BM_Terasse motion
10:36:03 BM_Terasse motion on (to HMLAN...)
10:36:03 BM_Terasse motion Count ....
Mit ".*" regiert das Notify auf alle drei Events, ohne nur auf das erste.
Hatte mich bei mir immer gewundert, dass das Kommando an die Lampe immer dreimal rausgeht. Vielleicht bringt das bei deinem Vorhaben auch die Dinge durcheinander.

Hope that helps...

Vielen Dank für den Hinweis! Werde ich direkt umsetzen! :)
FHEM 5.6 auf RPi2 / HM LAN Adapter / diverse HM-Devices
FHEM-Remote-App
QNAP 419P / Onkyo TX-SR 608
DM500HD / GM Spark One
Sony 52HX905

Damian

Zitat von: Michi240281 am 04 März 2014, 10:14:43
Wenn das grundsätzlich so klappt, ist nur noch die Frage, zu welchem Zeitpunkt er dann den Wert des Readings ausliest. Das müsste ja wie gesagt passieren, bevor das Notify die Lampe auf 100% setzt. Sonst machts ja keinen Sinn.

Dass Level-Zustand vor dem Setzen auf 100% genommen wird, da bin ich mir ziemlich sicher.

Wenn du, wie Deudi dein Motion-Notify so filterst, dass bei einer Bewegung nur einmal dein notify auslöst, dann wird jeweils nur einmal die IF-Abfrage ausgeführt und genau zu dem Zeitpunkt, also bevor set Lampe 100 90 ausgeführt wird, wird das Reading-Level dem define übergeben. Das kannst du, wie schon geschrieben, auch sehen, wenn du innerhalb von 90 Sekunden dir den at-define anschaust.

Das es so ist, müsste ich eigentlich genau wissen - hab´s  ja schließlich programmiert.

Gruß

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

dafex

Eine Verständnisfrage für mich als absoluten Programmier Laien. Du willst doch, bevor die Lampe auf 100% geht, wissen welchen Wert sie hat. Bzw. ob der Wert kleiner als 100% ist. Stimmt das so? Wenn dem so ist, müsste nach dem IF Befehl nicht Lampe_Terasse:level oder so ähnlich stehen?

Ansonsten wird meiner Meinung nach ja nur Helligkeitsert des Bewegungsmelders abgefragt. Der ja völlig irrelevant ist. Der muss ja nur Bewegung melden.

Michi240281

@Damian: Vielen Dank für deine Mühen! Bin schon gespannt, das heute Abend auszuprobieren und freu mich riesig, wenns hinhaut!

@Dafex: Ne das ist so nicht richtig. Zum einen will ich die Lampe ja nur bei Dunkelheit einschalten lassen, daher die Abfrage des "brightness"-Wertes. Zusätzlich möchte ich jedoch folgendes erreichen: Angenommen ich habe die Lampe vorher per Wanddimmer auf 30% eingeschaltet, um eben eine "Schummerbeleuchtung" zu erzeugen. Jetzt läuft draußen jmd rum und die Lampe wird für 90 Sekunden auf 100% gesetzt. Soweit so gut. Nach den 90 Sekunden würde die Lampe aber dann aus gehen. Ich möchte jedoch, dass die Lampe dann wieder die 30% annimmt, die vorher ja auch (von mir) eingestellt wurden. Alles verstanden?
FHEM 5.6 auf RPi2 / HM LAN Adapter / diverse HM-Devices
FHEM-Remote-App
QNAP 419P / Onkyo TX-SR 608
DM500HD / GM Spark One
Sony 52HX905

Michi240281

Mann o Mann!

Es geht immer noch nicht! Das Reading wird korrekt übernommen und es gibt auch hinterher ein "set", aber die Lampe geht dann trotzdem aus. Hier mal ein Auszug aus dem Eventmonitor:

2014-03-04 17:58:59.412 CUL_HM Lampe_Terasse level: set_27
2014-03-04 17:58:59.423 CUL_HM Lampe_Terasse set_27
2014-03-04 17:58:59.445 Global global DELETED Lampe_Terasse_at
2014-03-04 17:58:59.647 CUL_HM Lampe_Terasse level: 99.5 %
2014-03-04 17:58:59.647 CUL_HM Lampe_Terasse pct: 99.5
2014-03-04 17:58:59.647 CUL_HM Lampe_Terasse deviceMsg: 99.5 % (to HMLAN1)
2014-03-04 17:58:59.647 CUL_HM Lampe_Terasse chn:99.5 % phys:100 %
2014-03-04 17:58:59.647 CUL_HM Lampe_Terasse timedOn: running
2014-03-04 17:58:59.647 CUL_HM Lampe_Terasse dim: down:99.5 %
2014-03-04 17:58:59.647 CUL_HM Lampe_Terasse overload: aus
2014-03-04 17:58:59.647 CUL_HM Lampe_Terasse overheat: aus
2014-03-04 17:58:59.647 CUL_HM Lampe_Terasse reduced: aus
2014-03-04 17:59:04.582 CUL_HM CUL_HM_HM_LC_Dim1TPBU_FM_1D66E8_Sw1_V_01 off
2014-03-04 17:59:04.582 CUL_HM CUL_HM_HM_LC_Dim1TPBU_FM_1D66E8_Sw1_V_01 phyLevel: 0 %
2014-03-04 17:59:04.590 CUL_HM CUL_HM_HM_LC_Dim1TPBU_FM_1D66E8_Sw1_V_02 off
2014-03-04 17:59:04.590 CUL_HM CUL_HM_HM_LC_Dim1TPBU_FM_1D66E8_Sw1_V_02 phyLevel: 0 %
2014-03-04 17:59:04.601 CUL_HM Dimmer_Terasse chn:set_100 phys:0 %
2014-03-04 17:59:04.601 CUL_HM Dimmer_Terasse phyLevel: 0 %
2014-03-04 17:59:04.633 CUL_HM Lampe_Terasse phyLevel: 0 %
2014-03-04 17:59:04.633 CUL_HM Lampe_Terasse level: 0 %
2014-03-04 17:59:04.633 CUL_HM Lampe_Terasse pct: 0
2014-03-04 17:59:04.633 CUL_HM Lampe_Terasse deviceMsg: aus (to HMLAN1)
2014-03-04 17:59:04.633 CUL_HM Lampe_Terasse aus
2014-03-04 17:59:04.633 CUL_HM Lampe_Terasse timedOn: aus
2014-03-04 17:59:04.633 CUL_HM Lampe_Terasse dim: stop:aus
2014-03-04 17:59:04.633 CUL_HM Lampe_Terasse overload: aus
2014-03-04 17:59:04.633 CUL_HM Lampe_Terasse overheat: aus
2014-03-04 17:59:04.633 CUL_HM Lampe_Terasse reduced: aus


Hast du noch ne Idee? Habe den notify jetzt so:

define BM_Terasse_Motion notify BM_Terasse:motion.* IF ([BM_Terasse:brightness] < 400) (set Lampe_Terasse 100 90,define Lampe_Terasse_at at +00:01:30 set Lampe_Terasse [Lampe_Terasse:level])

Habe in den 90 Sekunden ins at geschaut und da stand auch drin ".....set 27%". Das komische ist, wenn ich in die Kommandozeile "set Lampe_Terasse 27%" eingebe, funktioniert es! Was kann denn das bloß sein? :(
FHEM 5.6 auf RPi2 / HM LAN Adapter / diverse HM-Devices
FHEM-Remote-App
QNAP 419P / Onkyo TX-SR 608
DM500HD / GM Spark One
Sony 52HX905

Michi240281

#39
Ok ich habs! :) :) :)

Man muss, wie du auch geschrieben hast, das % rauswerfen. MIt folgendem Notify geht nun alles wie gewünscht!

define BM_Terasse_Motion notify BM_Terasse:motion.* IF ([BM_Terasse:brightness] < 400) (set Lampe_Terasse 100 90,define Lampe_Terasse_at at +00:01:30 set Lampe_Terasse [Lampe_Terasse:level:d])

Vielen vielen Dank für deine Hilfe!!!!!!!!! Ohne dich hätte ich es nie hinbekommen!!

Wenn ich jetzt noch zusätzliche Aktionen ausführen möchte, könnte ich die einfach mit , getrennt hinten dranhängen, richtig?

Also z.B.:

define BM_Terasse_Motion notify BM_Terasse:motion.* IF ([BM_Terasse:brightness] < 400) (set Lampe_Terasse 100 90,define Lampe_Terasse_at at +00:01:30 set Lampe_Terasse [Lampe_Terasse:level:d],set Lampe on)

?

Muss nach dem Komma eigentlich ein Leerzeichen? Habe ich davor ja auch nicht (vor dem define), oder ist es egal?
FHEM 5.6 auf RPi2 / HM LAN Adapter / diverse HM-Devices
FHEM-Remote-App
QNAP 419P / Onkyo TX-SR 608
DM500HD / GM Spark One
Sony 52HX905

Damian

Zitat von: Michi240281 am 04 März 2014, 18:24:07
Ok ich habs! :) :) :)

Man muss, wie du auch geschrieben hast, das % rauswerfen. MIt folgendem Notify geht nun alles wie gewünscht!

define BM_Terasse_Motion notify BM_Terasse:motion.* IF ([BM_Terasse:brightness] < 400) (set Lampe_Terasse 100 90,define Lampe_Terasse_at at +00:01:30 set Lampe_Terasse [Lampe_Terasse:level:d])

Vielen vielen Dank für deine Hilfe!!!!!!!!! Ohne dich hätte ich es nie hinbekommen!!

Wenn ich jetzt noch zusätzliche Aktionen ausführen möchte, könnte ich die einfach mit , getrennt hinten dranhängen, richtig?

Also z.B.:

define BM_Terasse_Motion notify BM_Terasse:motion.* IF ([BM_Terasse:brightness] < 400) (set Lampe_Terasse 100 90,define Lampe_Terasse_at at +00:01:30 set Lampe_Terasse [Lampe_Terasse:level:d],set Lampe on)

?

Muss nach dem Komma eigentlich ein Leerzeichen? Habe ich davor ja auch nicht (vor dem define), oder ist es egal?

Ich würde allerdings statt set Lampe_Terasse 100 90 set Lampe_Terasse 100 oder set Lampe_Terasse on angeben, denn durch geringe Verzögerungen könnten sich die Vorgänge leicht überholen und dann wird der Timer von 90 dir evtl. die kurz vorher zurückgesetzte Lampe ausschalten.

Du kannst beliebig viele FHEM-Befehle mit Komma getrennt angeben, Leerzeichen sind egal.

Schön, dass es noch geklappt hat und ich finde viel eleganter, weil viel kürzer, als deine erste, im Vergleich hierzu umständliche, Lösung.  :)

Gruß

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

Michi240281

Das mit dem 100 90 habe ich extra so gewählt, weil dadurch die Lampe dann hochdimmt. Man kann dann sogar als 3. Parameter noch die Hochdimmrampe bestimmen, das brauche ich aber nicht. Ein einfaches on schaltet die Lampe direkt ein. Was ich auch sehr cool finde: Das at dimmt die Lampe dann auch wieder runter. Richtig gut!!

Also zusammengefasst: TOP Funktion von dir und super Service zugleich!!!!!!! Bin begeistert! :)
FHEM 5.6 auf RPi2 / HM LAN Adapter / diverse HM-Devices
FHEM-Remote-App
QNAP 419P / Onkyo TX-SR 608
DM500HD / GM Spark One
Sony 52HX905

Damian

Zitat von: Michi240281 am 04 März 2014, 19:35:02
Das mit dem 100 90 habe ich extra so gewählt, weil dadurch die Lampe dann hochdimmt.Also zusammengefasst: TOP Funktion von dir und
OK.

Und denke noch daran deinen notify eindeutig zu machen, wie Deudi vorgeschlagen hatte, sonst wird IF, bei jeder Bewegung, drei mal ausgeführt.

Gruß

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

dafex

So, sitz jetzt vor meinem Schreibtisch Rechner. Erschreckend was Tapatalk so alles verschluckt!

Zitat von: Michi240281 am 04 März 2014, 13:29:26@Dafex: Ne das ist so nicht richtig. Zum einen will ich die Lampe ja nur bei Dunkelheit einschalten lassen, daher die Abfrage des "brightness"-Wertes. Zusätzlich möchte ich jedoch folgendes erreichen: Angenommen ich habe die Lampe vorher per Wanddimmer auf 30% eingeschaltet, um eben eine "Schummerbeleuchtung" zu erzeugen. Jetzt läuft draußen jmd rum und die Lampe wird für 90 Sekunden auf 100% gesetzt. Soweit so gut. Nach den 90 Sekunden würde die Lampe aber dann aus gehen. Ich möchte jedoch, dass die Lampe dann wieder die 30% annimmt, die vorher ja auch (von mir) eingestellt wurden. Alles verstanden?
Ja, dann hab ich dich schon richtig verstanden, nur ich hab mich falsch ausgedrückt. Ich meinte nicht den IF Befehl selber, sondern dasdefine Lampe_Terasse_at at +00:01:30 set Lampe_Terasse [BM_Terasse:brightness]) nach dem IF Befehl.
Ich war nur irritiert wegen dem [BM_Terasse:brightness] in deinem set Befehl. Das hast Du ja jetzt durch [Lampe_Terasse:level:d] ersetzt.


Michi240281

Alles passiert! .* hab ich rausgenommen! Alles prima!

Vielen Dank nochmal an alle!
FHEM 5.6 auf RPi2 / HM LAN Adapter / diverse HM-Devices
FHEM-Remote-App
QNAP 419P / Onkyo TX-SR 608
DM500HD / GM Spark One
Sony 52HX905