"simples" DOIF - bei Bewegung soll Musik weiter gespielt werden

Begonnen von marwal, 24 Juli 2018, 20:50:37

Vorheriges Thema - Nächstes Thema

marwal

Hallo zusammen,
ein "eigentlich" recht simples DOIF bereitet mir seit letzter Woche Kopfzerbrechen. Nach nun unzähligen Neudefinitionen, Änderungsversuchen mit Notifys, Watchdog und Dummys, sowie natürlich das durchforsten des Forum, komme ich dem Ziel nicht näher und hoffe auf eure Hilfe.

IST: Raspberrymatic + Bewegungsmelder HM-Sec-MDIR-2, Sonos Play 1
SOLL: Musik weiterhin abspielen, wenn Bewegungen erkannt werden

Folgendes DOIF ist aus dem Eventmonitor definiert:
defmod HM60bm_DOIF_1 DOIF ([HM60bm:"^1.MOTION:.yes$"]) (set Sonos_Badezimmer Play) (set Sonos_Badezimmer Pause)
attr HM60bm_DOIF_1 do resetwait
attr HM60bm_DOIF_1 wait 0,40


List:
Internals:
   CFGFN     
   DEF        ([HM60bm:"^1.MOTION:.yes$"]) (set Sonos_Badezimmer Play) (set Sonos_Badezimmer Pause)
   MODEL      FHEM
   NAME       HM60bm_DOIF_1
   NR         5371
   NTFY_ORDER 50-HM60bm_DOIF_1
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2018-07-24 20:35:50   Device          HM60bm
     2018-07-24 20:35:28   cmd             1.2
     2018-07-24 20:35:28   cmd_event       HM60bm
     2018-07-24 20:35:28   cmd_nr          1
     2018-07-24 20:35:28   cmd_seqnr       2
     2018-07-24 20:35:50   e_HM60bm_events 1.MOTION: no,control: no,no,hmstate: no
     2018-07-24 19:54:41   mode            enabled
     2018-07-24 20:35:28   state           cmd_1
     2018-07-24 20:35:28   wait_timer      no timer
   Regex:
   attr:
     cmdState:
     wait:
       0:
         0
         40
     waitdel:
   condition:
     0          EventDoIf('HM60bm',$hash,'^1.MOTION:.yes$',1)
   devices:
     0           HM60bm
     all         HM60bm
   do:
     0:
       0          set Sonos_Badezimmer Play
       1          set Sonos_Badezimmer Pause
     1:
   helper:
     event      1.MOTION: no,control: no,no,hmstate: no
     globalinit 1
     last_timer 0
     sleepdevice HM60bm
     sleepsubtimer -1
     sleeptimer -1
     timerdev   HM60bm
     timerevent 1.MOTION: yes
     triggerDev HM60bm
     DOIF_eventas:
       cmd_nr: 1
       cmd_seqnr: 2
       cmd_event: HM60bm
       state: cmd_1
     timerevents:
       1.MOTION: yes
       control: yes
       yes
       hmstate: yes
     timereventsState:
       1.MOTION: yes
       control: yes
       state: yes
       hmstate: yes
     triggerEvents:
       1.MOTION: no
       control: no
       no
       hmstate: no
     triggerEventsState:
       1.MOTION: no
       control: no
       state: no
       hmstate: no
   internals:
   itimer:
   readings:
   trigger:
     all         HM60bm
   uiState:
   uiTable:
Attributes:
   do         resetwait
   wait       0,40


Im Raspberrymatic ist der Sendeabstand auf dynamisch, 15sek eingestellt.

Löst nun ein Event aus, geht die Musik auch wie gewollt an, nach kurzer bekomme auch auch das "noMotion" Event angezeigt.
2018-07-24 20:34:12 DOIF HM60bm_DOIF_1 cmd_nr: 1
2018-07-24 20:34:12 DOIF HM60bm_DOIF_1 cmd_seqnr: 1
2018-07-24 20:34:12 DOIF HM60bm_DOIF_1 cmd: 1.1
2018-07-24 20:34:12 DOIF HM60bm_DOIF_1 cmd_event: HM60bm
2018-07-24 20:34:12 DOIF HM60bm_DOIF_1 cmd_1_1
2018-07-24 20:34:12 DOIF HM60bm_DOIF_1 wait_timer: 24.07.2018 20:34:52 cmd_1_2 HM60bm
2018-07-24 20:34:12 HMCCUDEV HM60bm 1.MOTION: yes
2018-07-24 20:34:12 HMCCUDEV HM60bm control: yes
2018-07-24 20:34:12 HMCCUDEV HM60bm yes
2018-07-24 20:34:12 HMCCUDEV HM60bm 1.BRIGHTNESS: 41
2018-07-24 20:34:12 HMCCUDEV HM60bm hmstate: yes

2018-07-24 20:34:44 HMCCUDEV HM60bm 1.MOTION: no
2018-07-24 20:34:44 HMCCUDEV HM60bm control: no
2018-07-24 20:34:44 HMCCUDEV HM60bm no
2018-07-24 20:34:44 HMCCUDEV HM60bm hmstate: no

2018-07-24 20:34:48 HMCCUDEV HM60bm 1.MOTION: yes
2018-07-24 20:34:48 HMCCUDEV HM60bm control: yes
2018-07-24 20:34:48 HMCCUDEV HM60bm yes
2018-07-24 20:34:48 HMCCUDEV HM60bm hmstate: yes


Auch die Bewegung danach werden erkannt, trotzdem endet die Musik nach 40sek.

Bei folgendem Verhalten scheint das DOIF dann aber noch zu funktionieren:
Egal ob die Bewegung erkannt wird, oder nicht, ändert sich das Reading "e_HM60bm_events 1.MOTION: no,control: no,no,hmstate: no" aus dem o.g. DOIF nie. Befinde ich mich nun im Frontend, und aktualisiere die Site, wird mir sowohl "yes" bei erkannter Bewegung, als auch "no", nach dem Sendeintervall angezeigt.
Wird nun innerhalb des waits eine neue Bewegung erkannt, verlängert sich die Musik wie gewollt um weitere 40sek ...

Hab ich Tomaten auf den Augen, stimmt hier was mit meiner Konfiguration nicht, liegt es am DOIF?

Vielen dank im Voraus für eure Unterstützung!

Beste Grüße ... Martin


Otto123

Hallo Martin,

grundlegend halte ich das DOIF für richtig, ich verwende das so ähnlich. Das hier verstehe ich nicht:
ZitatBei folgendem Verhalten scheint das DOIF dann aber noch zu funktionieren:
Egal ob das Bewegung erkannt wird, oder nicht, ändert sich der Wert "e_HM60bm_events 1.MOTION: no,control: no,no,hmstate: no" aus dem o.g. DOIF nie. Befinde ich mich nun im Frontend, und aktualisiere die Site, wird mir sowohl "yes" bei erkannter Bewegung, als auch "no", nach dem Sendeintervall angezeigt.
Wird nun innerhalb des waits eine neue Bewegung erkannt, verlängert sich die Musik wie gewollt um weitere 40sek ...

Auch nicht nach 10 mal lesen :)

Gruß Otto
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

marwal

Hallo Otto,

wenn ich das DOIF im Browser betrachte, wird jedes Reading nach der entsprechenden Zeit mit einem neuen Zeitstempel versehen. Außer das Reading "1.MOTION".
Es bleibt also trotz auslösen auf "no". (In der Devicedefinition selber, ändert es sich auf "yes"-Bewegung erkannt) Aktualisiere ich den Browser nach Auslösung des Bewegungsmelder, bekomme ich im Reading ein "yes". Ist das Interval rum, werden alle Readings automatisch aktualisiert, nur eben das "1.MOTION" nicht. Aktualisiere ich den Browser, wird mir nun wieder ein "no" angezeigt, und das Reading wurde aktualisiert. Löse ich jetzt in der verbleibenden Zeit vom wait eine Bewegung aus, funktioniert das DOIF und die Musik bleibt weiterin an.

LG - Martin


Otto123

Hallo Martin,

ja so hatte ich es mir sogar gedacht :)
Aber das ist doch nur ein optisches und kein funktionelles Problem?

Es werden nicht alle Readings in der Weboberfläche von selbst aktualisiert, das ist oft so. Da gab es auch mal ne Erklärung dafür ...

Du sagst aber, wenn Du den Browser aktualisierst funktioniert das DOIF? Sonst nicht? Das verstehe ich nicht.

Gruß Otto
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

Invers

Mein Doif für Licht sieht so aus:
defmod DI_Timer_LED_Kueche DOIF ([BM_Kueche] eq "noMotion" and [LED_Kueche] eq "on") (set LED_Kueche off)
attr DI_Timer_LED_Kueche disable 0
attr DI_Timer_LED_Kueche room Wohnung->Küche
attr DI_Timer_LED_Kueche wait 90
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

Otto123

Zitat von: Invers am 24 Juli 2018, 21:28:13
Mein Doif für Licht sieht so aus:
defmod DI_Timer_LED_Kueche DOIF ([BM_Kueche] eq "noMotion" and [LED_Kueche] eq "on") (set LED_Kueche off)
attr DI_Timer_LED_Kueche disable 0
attr DI_Timer_LED_Kueche room Wohnung->Küche
attr DI_Timer_LED_Kueche wait 90

Und "wer" macht on? ???
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

marwal

Hi Otto,

ich habe gleichgestellte Probleme im Forum mit Bewegungsmeldern und Licht gefunden und die entsprechenden Lösungen nachgestellt. Egal ob ich eine Lösung mit notify oder watchdog umsetze, wenn ich den Browser wie beschrieben aktualisiere, funktioniert der Algorithmus. Aktualisiere ich nicht, passiert auch nichts ... Verstehen tue ich das ganze auch nicht  :( wie geht man jetzt am besten weiter vor, um das Problem einzugrenzen, oder gibt es noch eine Möglichkeit der Umsetzung,  welche ich nicht in betracht gezogen haben?

LG - Martin

Invers

@ Otto:
Na, sein Kollege. :-)
defmod DI_LichtStart DOIF ([BM_Kueche] eq "motion" and [LED_Kueche] eq "off" and [BM_Kueche:brightness:d] <35)\
    (set LED_Kueche on)
attr DI_LichtStart disable 0
attr DI_LichtStart do always
attr DI_LichtStart room Wohnung->Küche

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

Otto123

Hallo Martin,

Ok also ich verwende die HM Bewegungsmelder mit CUL_HM, damit funktioniert das genauso wie Du es angesetzt hast.

Du meinst also der Event vom BM kommt nur wenn du Refresh im Browser machst? Ich kann mir viel vorstellen, aber das DOIF notify usw. nur arbeiten wenn der Browser aktualisiert wird kann ich mir nicht vorstellen. Oder wird dein FHEM vom Browser blockiert? Ich versteh es ehrlich nicht.

Kannst Du dein DOIF mit dem trigger Befehl ansteuern?trigger HM60bm 1.MOTION: yes
Aber eigentlich sagst Du, die Events kommen von selbst - oder?

Gruß Otto
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

Otto123

@Invers
Naja ich mache das in Einem, noMotion werte ich nicht aus. defmod di_Flurlicht DOIF ([PIR1:"motion:.on"] and ([?Tageslicht] eq "0" or [?PIRWg:brightness] < 130)) (set SW01_Sw01 on)(set SW01_Sw01 off)
attr di_Flurlicht do resetwait
attr di_Flurlicht room Flur
attr di_Flurlicht wait 0,180
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

Invers

Auch nicht übel. Probier ich mal. Meine DOIFs sind noch ziemlich alt. Damals lief das noch nicht so gut. Eigentlich müsste man mal alles neu programmieren, aber wer macht das 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

marwal

@ Invers
auf die schnelle versucht (ohne meinen Browser zu aktualisieren) bliebt das DOIF bei mir an und ging nicht mehr aus  :-\

@ Otto
der Trigger wird zwar erkannt, aber es passiert nichts  :-\
die Events kommen alle an.

Martin

Otto123

Und wenn kein Browser auf FHEM zugreift? also alle Webzugriffe "aus"?

Ich bin immer noch nicht sicher, mit "es passiert nichts" meinst Du: Du siehst im Browser nichts, oder meinst Du die echte Lampe geht nicht aus!?
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

marwal

#13
Es geschieht alles wie gewollt, wenn ich vorm Rechner sitze und das DOIF (Browser) aktualisiere und nachdem ich ein aktualisiertes "1.Motion:no" bekomme eine Bewegung im Bad erkannt wird. Stelle ich mich mit ner Stopuhr ins Bad, wird die Musik nach 40sek. beendet, egal ob Bewegungen erkannt werden oder nicht - hierbei aktualisiere ich den Browser nicht.

Otto123

Ich sag mal: ein System was nur funktioniert wenn man Refresh am Browser drückt - ist sinnlos.

Da ist was grundlegend faul.  :'(
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

marwal

#15
Das System an sich funktioniert ja, Heizungslogik (auch Homematic), Lichtlogik, Presence, ... Nur bei dieser Herausforderung, komme ich auf keinen grünen Zweig. Das komische ist eben, dass es bei jedem mit den im Forum genannten Lösungen funktioniert?!
FHEM ist was updates angeht auf dem aktuellen Stand. Auch Perl läuft auf der aktuellen Version.
Nur was kann man denn von Grund auf falsch machen, dass es dann an solchen "kleinen" Sachen scheitert? Und wie grenzt man solche Probleme am besten ein um eine Neuinstallation zu vermeiden?

LG - Martin

Otto123

Du meinst nur das DOIF mit dem Homematic Bewegungsmelder läuft nicht?

Gute Nacht
Otto
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

marwal

Guten Morgen Otto,
ja richtig, aber auch mit notify, watchdog komme ich nicht zum gewünschten Erfolg.
Evtl liegt es ja Bewegungsmelder, aber Bewegungen und Helligkeit erkennt er ja wunderbar, eben nur nicht wiederholt.  :-\

LG - Martin

Otto123

Moin Martin,

wenn die Erkennung des HM Bewegungsmelders vom Refresh des Browsers abhängt (ich habe immer noch keine Ahnung wie das passiert) sage ich mal: da ist an der Verbindung CCU und FHEM etwas faul!
Allerdings kenne ich mich mit dem Konstrukt HMCCU usw. nur in sofern aus, dass ich es nicht haben will!  :D :-X

Dann solltest Du das Problem mal separat beschreiben und im Homematic Board posten, vielleicht hat der Entwickler von HMCCU eine Idee.

Gruß Otto
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

Es wird wohl kaum vom Browser abhängen.

Wenn ein Reading hier z. B. motion ohne Event geändert wird, dann muss man den Browser aktualisieren, um die Änderung zu sehen. Nur mit Event (sichtbar im Eventmonitor) bekommt FHEM es mit und aktualisiert die html-Seite. Ohne Event kann auch kein anderes Modul (insb. DOIF) darauf reagieren, wenn es nicht ständig das Reading abfragen will (pollen).

DOIF erzeugt z. B. bewusst, um Ressourcen zu schonen, keine Events, wenn es seine e_.... Readings aktualisiert. Hier muss man immer den Browser aktualisieren um zu schauen, welche Ereignisse DOIF zuletzt ausgewertet hat.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

Zitat von: marwal am 25 Juli 2018, 05:56:49
aber Bewegungen und Helligkeit erkennt er ja wunderbar, eben nur nicht wiederholt.  :-\
Ja Damian, ich verstehe es auch nicht. Er sagt ja aber es werden Events erzeugt ( es gab weiter oben im Eingangspost  auch einen Auszug aus dem Eventmonitor) aber er sagt die Events werden erst erzeugt wenn er im Browser refresh drückt ...
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

marwal

@Otto
ZitatDann solltest Du das Problem mal separat beschreiben und im Homematic Board posten, vielleicht hat der Entwickler von HMCCU eine Idee.
Ja das werde ich machen. Ich werde heute Abend mal noch einen anderen Bewegungsmelder testen und schauen wie dieser auf die wiederholte Bewegung reagiert.

@Damian
ZitatDOIF erzeugt z. B. bewusst, um Ressourcen zu schonen, keine Events, wenn es seine e_.... Readings aktualisiert. Hier muss man immer den Browser aktualisieren um zu schauen, welche Ereignisse DOIF zuletzt ausgewertet hat.
Also ist das normal, Vielen Dank für den Hinweis! Es kam mir nur seltsam vor, woraufhin ich den Browser aktualisiert habe und die Musik nach erneuter Bewegungserkennung 40s weiter lief - also wenn das e_.... Reading aktualisiert wurde. Die Events werden mir, wie Otto schon geschrieben hat, im Eventmonitor angezeit.