FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Xguide am 14 August 2013, 21:48:33

Titel: At im Notify dynamisch anlegen
Beitrag von: Xguide am 14 August 2013, 21:48:33
Hallo Ihr Experten,

ich benötige eurer Rat. Ich breche mir nun seit geraumer Zeit die Ohren bei einem "dynamisch" angelegtem At.
Folgendes Problem:

define EGLiving_FollowOnTimer dummy
define EGLiving_MDIR_Notify notify EGLiving_MDIR.motion.* {\
  fhem "set EGMotionIndication on-for-timer 60";;\
  if(ReadingsVal("EGLiving_MDIR","brightness","40")<35){\
    if(ReadingsVal("HueBulb5","onoff","") eq "0" || ReadingsVal("EGLiving_FollowOnTimer","state","") eq "on"){\
      fhem "set HueBulb5 on : bri 150 : color 450";;\
      fhem "delete EGLiving_HUE_OffTimer";;\
      fhem "define EGLiving_HUE_OffTimer at +00:03:00 set HueBulb5 off ;; set EGLiving_FollowOnTimer off";;\
      fhem "attr EGLiving_HUE_OffTimer room CronJobs";;\
      fhem "attr EGLiving_HUE_OffTimer group Temporary helper items";;\
      fhem "set EGLiving_FollowOnTimer on";;\
    }\
  }\
}

<vorgeplänkel>
Also, ich habe einen HM-MDIR der das Notify "on motion" auslöst, dann wird ein Dummy für meine Bewegungsregistrierung gesetzt, geprüft ob die Helligkeit unter einem Schwellwert liegt und im nächsten Schritt geschaut ob die Lampe nicht vielleicht manuell eingeschaltet wurde, bzw. sie schon über den Bewegungsmelder eingeschaltet wurde und nun die Einschaltdauer verlängert werden soll.
--> Lampe an (warmweiss)
Dann wird ein evtl. angelegtes At gelöscht um es im Anschluss mit einer neuen Zeit neu anzulegen.

</vorgeplänkel>

Nun kommt mein Problem und ich habe echt schon viel ausprobiert.
Der 2. Befehl im At: "set EGLiving_FollowOnTimer off" wird nie ausgeführt. Inzwischen weiss ich echt nicht mehr weiter wie ich das lösen soll, mir sind schon die {} und fhem""s ausgegangen :-) Somit wende ich mich nach zahlreichen Suchen und Versuchen an die Experten.

<nachgeplänkel>
Es folgen noch 2 Attribute um das At in einen entsprechenden Raum zu packen und das ""set EGLiving_FollowOnTimer on" was leider immer ansteht.
</nachgeplänkel>

Falls jemand was weiss, ich bin für alles offen und extrem dankbar für den richtigen Wink.
1000 Dank
Titel: Aw: At im Notify dynamisch anlegen
Beitrag von: Xguide am 15 August 2013, 21:06:21
...echt doof gelöst, allerdings funktioniert es so erstmal!

define EGLiving_FollowOnTimer dummy
define EGLiving_MDIR_Notify notify EGLiving_MDIR.motion.* {\
  fhem "set EGMotionIndication on-for-timer 60";;\
  if(ReadingsVal("EGLiving_MDIR","brightness","40")<35){\
    if(ReadingsVal("HueBulb5","onoff","") eq "0" || ReadingsVal("EGLiving_FollowOnTimer","state","") eq "on"){\
      {fhem("delete EGLiving_HUE_OffTimer") }\
      {fhem("delete EGLiving_HUE_OffTimer_Helper") }\
      {fhem("set HueBulb5 on : bri 150 : color 450") }\
      {fhem("define EGLiving_HUE_OffTimer at +00:03:00 set HueBulb5 off") }\
      {fhem("attr EGLiving_HUE_OffTimer room 91_CronJobs") }\
      {fhem("attr EGLiving_HUE_OffTimer group Temporary helper items") }\
      {fhem("define EGLiving_HUE_OffTimer_Helper at +00:02:59 set EGLiving_FollowOnTimer off") }\
      {fhem("attr EGLiving_HUE_OffTimer_Helper room 91_CronJobs") }\
      {fhem("attr EGLiving_HUE_OffTimer_Helper group Temporary helper items") }\
      {fhem("set EGLiving_FollowOnTimer on") }\
    }\
  }\
}

Bin für jeden Tipp eines kompakteren on-for-timer für HM-SEC-MDIR dankbar.
Titel: Aw: At im Notify dynamisch anlegen
Beitrag von: rudolfkoenig am 16 August 2013, 09:08:49
1. HUEDevice verwendet mWn die setExtensions http://fhem.de/commandref.html#setExtensions (//fhem.de/commandref.html#setExtensions) und hat damit ein off-for-timer

2.statt einen at mit 2 attributen zu definieren wuerde ich das FHEM(!) sleep verwenden:
OK:
set dev1 on;; sleep 5;; set dev1 off
fhem("set dev1 on;; sleep 5;; set dev1 off");
fhem("set dev1 on;")
fhem("sleep 5;; set dev1 off");

NICHT OK: (egal welcher):
fhem("set dev1 on");
fhem("sleep 5");
fhem("set dev1 off");

fhem("set dev1 on;; sleep 5;;");
fhem("set dev1 off");

fhem("set dev1 on;;");
slep(5);
fhem("set dev1 off");

3. Der CUL_HM Maintainer (Martin) sollte gebeten werden, die setExtensions einzubauen.
Titel: Aw: At im Notify dynamisch anlegen
Beitrag von: Xguide am 16 August 2013, 10:57:34
Danke Rudolf für die Denkansätze, werde mich am Wochenende mal wieder damit beschäftigen.

Ich benutze das gleiche/ähnliches Konstrukt für mehrere HM-LC-Sw1PBU-FM und HM-LC-SW1-FM, bei denen die SetExtensions "on-for-timer" sich anders verhalten haben als ich mir das vorgestellt habe.
Ich habe vor Jahren meine ersten FHEM Gehversuche mit FS20 gemacht, nun habe ich auf HM umgestellt und versuche mich mit der wenigen Zeit die so da ist mehr und mehr in FHEM einzuarbeiten. An dieser Stelle erstmal mein Kompliment zu dem wirklich genialen Projekt.

Ganz verstanden habe ich den Unterschied zwischen deinen Beispielen jedoch noch nicht, nehme sie aber als Fakt hin. Interessehalber dennoch die Frage. ist es so zu interpretieren, dass sich das "FHEM sleep" immer auf eine direkt folgende Aktion bezieht?

Ließt der CUL_HM Maintainer (Martin) diese Threads oder würde Sinn machen ihm die Sachen per PM zu schicken?  
 
Titel: Aw: At im Notify dynamisch anlegen
Beitrag von: rudolfkoenig am 16 August 2013, 11:31:52
>  HM-LC-SW1-FM, bei denen die SetExtensions "on-for-timer" sich anders verhalten haben

Wieso hat das HM-eigene on-for-timer nicht deiner Vorstellung entsprochen?

HM verwendet keine setExtensions. setExtensions implementiert ein paar haeufig vorkommende Befehle wie on-for-timer,blink,etc mit on/off und FHEM-Interne Timer, wenn ein Geraet on/off implementiert aber nicht on-for-timer usw.

Wie ich gerade sehe, HM implementiert on-for-timer selbst, insofern wuerde setExtensions hier nicht eingreifen.



> Liest der CUL_HM Maintainer (Martin) diese Threads oder würde Sinn machen ihm die Sachen per PM zu schicken?

Ich vermute er liest sie nicht, und ich wuerde ihn auch nicht direkt bitten, er koennte das als Anweisung missverstehen. Viel besser waere ein Thread in der HM Gruppe, wo ein Anwender das anspricht. Da ich wiederum die HM Gruppe nicht lese (ist mir zuviel), muesste ich hier darueber benachrichtigt werden.
Titel: Antw:At im Notify dynamisch anlegen
Beitrag von: Xguide am 28 Januar 2014, 08:32:47
Hallo Rudolf,

lange habe ich benötigt um herauszufinden warum der on-for-timer nicht meinen Vorstellungen entspricht, deswegen habe ich an meinem umständlichen Konzept festgehalten.
Mein Problem bestand immer darin, dass ich einen on-for-timer abgesetzt habe (der auch funktionierte), allerdings wurde bei einer erneuten Bewegungserfassung der on-for-timer nicht neu gesetzt (also nicht verlängert).
Gestern bin ich dann auf einen Codeschnipsel gestoßen den ich seinerzeit für das Rücksetzen von FS20 on-for-timer devices implementiert habe.
Prinzipiell habe ich einfach verpennt den von dir miterarbeiteten Lösungsvorschlag für das FS20 Problem richtig zu integrieren.

https://groups.google.com/forum/#!msg/fhem-users/HlV_Q7qixqM/cQlBaqPl7usJ (https://groups.google.com/forum/#!msg/fhem-users/HlV_Q7qixqM/cQlBaqPl7usJ)

define OnForTimerNotify notify .*-for-timer.* {\
  my @@a = split(" ", "%");;\
  my $t = $a[1];;\
  my $tspec = sprintf("%%02d:%%02d:%%02d", $t/3600, ($t%%3600)/60, $t%
%60);;\
  fhem("define @_offtimer at +$tspec set @ off");;\
}


Wichtig war und ist hierbei den @_offtimer, wie natürlich auch beschrieben, wieder zu löschen. Was ich nicht berücksichtigt hatte, war dass der Code auch bei Homematic on-for-timer Befehlen greift und dafür sorgt, dass bei erneuter Bewegung kein neuer @_offtimer gesetzt wird wenn noch einer vorhanden ist.

Hat jemand einen Tipp wie man verhindern kann, dass ein manuell eingeschaltes Licht am Schalter nicht von einem per Bewegungsmelder gesetztem on-for-timer überschrieben wird und nach der Timerlaufzeit ausgeschaltet wird.
Um es ein wenig zu präzisieren, ich habe bspw. einen HM-LC-Sw1PBU-FM (Funk-Schaltaktor 1-fach für Markenschalter, Unterputzmontage) der somit zum einen manuell über den Taster eingeschaltet werden kann, aber zum anderen auch auf die Bewegungserkennung eines HM-SEC-MDIR (Bewegungsmelder) reagiert. Bei dieser Kombination kann ich natürlich das Reading "timedOn" und den "state" zur Erkennung benutzen, nur was mache ich wenn ich per Bewegungsmelder direkt eine Philips Hue einschalte, die leider nicht über das "timedOn" Reading verfügt.

Danke für eure Vorschläge....