DOIF neue Features (Sleep-Alternative)

Begonnen von Damian, 12 Juli 2015, 21:17:52

Vorheriges Thema - Nächstes Thema

Damian

#255
Zitat von: Brockmann am 01 Oktober 2015, 10:38:50
Warum sollte ich das? Wie ich schrieb, habe ich mein Problem gelöst.
Ich wollte mit meinem Hinweis nur dem Fragesteller behilflich sein, weil ich eine gewisse Parallele zwischen meinem Problem und seinem sehe.
Vielleicht hilft ihm ja die Perspektive "In meinem DOIF war immer schon was falsch, nur hat es bislang keine Rolle gespielt." bei der Fehlersuche weiter.

Falls Du aus dem Satz "Durch marginale Änderungen an DOIF oder auch an FHEM selbst in Bezug auf das Abarbeiten der Queue hat sich das Timing verändert" Kritik oder irgendeinen Vorwurf ablesen solltest, siehst Du das falsch.

Ich habe es nicht als Vorwurf verstanden, sondern eher als ein unterschiedliches Verhalten des Moduls durch unterschiedliches Timing. Und das hat mich interessiert, denn möglicherweise ist es kein Timinigproblem, sondern  einfach das Problem, was es immer schon gab, aber jetzt den Usern erst auffällt.

z. B.

set test_d on

define di_test DOIF ([test_d] eq "on" and [test_1:?]) (set test_1 on) DOELSE (set test_1 off)

trigger test_1


Es wird zwei mal set test1 on geschaltet, obwohl kein do always gesetzt ist.

Das ist jetzt so und war vorher schon so. Es ist auch erklärbar warum es so ist und ließe sich beheben, wenn man eine Inkompatibilät des Moduls in Kauf nehmen würde, wie ich ein paar Posts zuvor geschrieben habe.

Gruß

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

Damian

Zitat von: eberlrudi am 01 Oktober 2015, 11:06:40
Also Ich verstehe bei meinem DOIF jetzt gar nichts mehr...

Ich muss das Notify aktiviert lassen, dass DOIF überhaupt funktioniert... Es sieht so aus, als würde DOIF doch nicht ausgelöst werden...


Damian möchtest du dir mein FHEM einmal anschauen? Ich könnte dir eine URL freigeben.

poste einfach list dein_modul hier.

Gruß

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

eberlrudi

Vielen Dank für deine Geduld...

Das DOIF:

Internals:
   DEF        ([EsKlingelt:?]) (trigger WEB JS:location="/fhem?room=Überwachung", {UDP_Msg("192.168.2.6" , "wolido:displayon")})
  ({UDP_Msg("192.168.2.6" , "wolido:speak:Es hat geklingelt")},trigger WEB JS:location="/fhem?room=Küche")
  ({UDP_Msg("192.168.2.6" , "wolido:displayoff")})
   NAME       di_EsKlingelt
   NR         58
   NTFY_ORDER 50-di_EsKlingelt
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-10-01 20:25:15   Device          EsKlingelt
     2015-10-01 20:26:17   cmd_event       EsKlingelt
     2015-10-01 20:26:17   cmd_nr          1
     2015-10-01 20:26:17   cmd_seqnr       3
     2015-10-01 20:25:15   e_EsKlingelt_events
     2015-10-01 20:26:17   error           {UDP_Msg("192.168.2.6" , "wolido:displayoff")}: send wolido:displayoff
     2015-10-01 20:26:17   state           cmd_1
     2015-10-01 20:26:17   wait_timer      no timer
   Condition:
     0          EventDoIf('EsKlingelt',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'')
   Devices:
     0           EsKlingelt
     all         EsKlingelt
   Do:
     0:
       0          trigger WEB JS:location="/fhem?room=Überwachung", {UDP_Msg("192.168.2.6" , "wolido:displayon")}
       1          {UDP_Msg("192.168.2.6" , "wolido:speak:Es hat geklingelt")},trigger WEB JS:location="/fhem?room=Küche"
       2          {UDP_Msg("192.168.2.6" , "wolido:displayoff")}
   Helper:
     globalinit 1
     last_timer 0
     sleepdevice EsKlingelt
     sleepsubtimer -1
     sleeptimer -1
     triggerDev EsKlingelt
     triggerEvents:

   Internals:
   Itimer:
   Readings:
   State:
   Trigger:
     all         EsKlingelt
Attributes:
   cmdpause   61
   do         always
   wait       3,59




Das Notify:

Internals:
   DEF        EsKlingelt.*|cmd=trigger%20EsKlingelt
;
trigger WEB JS:location="/fhem?room=Überwachung" ;
{UDP_Msg("192.168.2.6" , "wolido:displayon")} ; sleep 3 ; {UDP_Msg("192.168.2.6" , "wolido:speak:Es hat geklingelt")} ;
sleep 39 ;
trigger WEB JS:location="/fhem?room=Küche" ;
{UDP_Msg("192.168.2.6" , "wolido:displayoff")}
   NAME       EsKlingelt
   NR         40
   NTFY_ORDER 50-EsKlingelt
   REGEXP     EsKlingelt.*|cmd=trigger%20EsKlingelt
   STATE      2015-10-01 20:25:15
   TYPE       notify
   Readings:
     2015-10-01 13:36:10   state           active
Attributes:

Damian

#258
Du kannst an den Readings einiges erkennen:

Hier kannst du sehen, ob und wann ein relevates Event kam:

     2015-10-01 20:25:15   e_EsKlingelt_events

Hier kannst du sehen, welches Device die Ausführung ausgelöst hat:

     2015-10-01 20:26:17   cmd_event       EsKlingelt

Hier kannst du sehen welches Kommando ausgeführt wurde:


     2015-10-01 20:26:17   cmd_nr          1

Und hier welches Kommado der Befehlssequenz zuletzt ausgeführt wurde:

     2015-10-01 20:26:17   cmd_seqnr       3

hier hat also alles Funktioniert.

das notify macht im prinzip das Gleiche, wäre also doppelt gemoppelt.

Sobald das Event kommt, sollte die Abfolge abgearbeitet werden und das sollte von dem notify unabhängig sein.


Gruß

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

eberlrudi

ich versuche es noch einmal. Ich deaktiviere das Notify......

eberlrudi

So.

Nach ausgiebigen tests, funktioniert es soweit.

Nur:


Der Befehl :
{UDP_Msg("192.168.2.6" , "wolido:displayoff")}: send wolido:displayoff
wird tatsächlich verschluckt, da das Display nicht mehr ausgeht...

Die Sprachausgabe:
({UDP_Msg("192.168.2.6" , "wolido:speak:Es hat geklingelt")}
kommt gleichzeitig mit dem Wechsel zurück in den Raum Küche.
trigger WEB JS:location="/fhem?room=Küche")

Was macht eigentlich die letzte Klammer da?

Damian

Zitat von: eberlrudi am 01 Oktober 2015, 21:51:59
So.

Nach ausgiebigen tests, funktioniert es soweit.

Nur:


Der Befehl :
{UDP_Msg("192.168.2.6" , "wolido:displayoff")}: send wolido:displayoff
wird tatsächlich verschluckt, da das Display nicht mehr ausgeht...

Die Sprachausgabe:
({UDP_Msg("192.168.2.6" , "wolido:speak:Es hat geklingelt")}
kommt gleichzeitig mit dem Wechsel zurück in den Raum Küche.
trigger WEB JS:location="/fhem?room=Küche")

Was macht eigentlich die letzte Klammer da?

Ob und wann tatsächlich das Kommdo ausgeführt wird, kannst du testen, indem du statt des Kommandos z. B. die Ausführung loggst.

anstatt {UDP_Msg("192.168.2.6" , "wolido:speak:Es hat geklingelt")} angeben {Log 3," wolido:speak:Es hat geklingelt"}

Im Log siehst du dann, ob und wann die UDP_Msg geschickt worden wäre.

Die letzte Klammer schließt die Befehlssequenz, die zuvor mit einer Klammer auf geöffnet wurde.

Gruß

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

Steffen

Hallo,

ich wollte jetzt nicht unbedingt ein neues Thema aufmachen denn ich grübel nun schon lange über einen doif nach wo ich einfach keine richtige lösung finde...

ich habe 3x define erstellt, unten das bsp. ist nur eins die anderen sind gleich aufgebaut nur mit anderen namen:

([Liescha:state] eq "present") (set TuerSchloss open) (set Fl_LampeDecke press short) DOELSE ([Steffen:state] eq "absent" and [Doreen:state] eq "absent" and [Liescha:state] eq "absent") (set TuerSchloss lock)


könnte man die drei zusammen fassen in eins denn das Problem ist ja wenn schon present ist also wenn schon da ist fragt er ja die anderen nicht mehr ab oder habe ich da einen denkfehler?!?

Denn selbst wenn ein oder zwei present sind soll noch "open" geschaltet werden.

Mfg Steffen

Damian

Zitat von: Steffen am 02 Oktober 2015, 15:04:29
Hallo,

ich wollte jetzt nicht unbedingt ein neues Thema aufmachen denn ich grübel nun schon lange über einen doif nach wo ich einfach keine richtige lösung finde...

ich habe 3x define erstellt, unten das bsp. ist nur eins die anderen sind gleich aufgebaut nur mit anderen namen:

([Liescha:state] eq "present") (set TuerSchloss open) (set Fl_LampeDecke press short) DOELSE ([Steffen:state] eq "absent" and [Doreen:state] eq "absent" and [Liescha:state] eq "absent") (set TuerSchloss lock)


könnte man die drei zusammen fassen in eins denn das Problem ist ja wenn schon present ist also wenn schon da ist fragt er ja die anderen nicht mehr ab oder habe ich da einen denkfehler?!?

Denn selbst wenn ein oder zwei present sind soll noch "open" geschaltet werden.

Mfg Steffen

Du kannst ja mehrere mit or verknüpfen:

([Steffen:state] eq "present" or [Doreen:state] eq "present" or [Liescha:state] eq "present") (set TuerSchloss open ...


Gruß

Damian

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

Amenophis86

Wenn ich dich richtig verstanden habe, hast du für jeden Person ein DOIF erstellt, wenn sie anwesend ist. Alle drei sind so aufgebaut, wie das von dir gepostete, nur, dass sich das erste Command in der Person unterscheidet. Und du willst diese alle zusammen fassen. Dann würde das so aussehen:


([Liescha] eq "present" or [Steffen] eq "present" or [Doreen] eq "present") (set TuerSchloss open) (set Fl_LampeDecke press short) DOELSEIF ([Steffen] eq "absent" and [Doreen] eq "absent" and [Liescha] eq "absent") (set TuerSchloss lock)


:state kannste dir übrigens sparen, weil immer state genommen wird, wenn kein Reading angegeben wird.
Und wichtig, dass zweite ist ein DOELSEIF
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Steffen


Vielen dank für eure Hilfe, so klappt es erstmal hatte irgendwie nicht an "or" gedacht und hatte auch bei meinen ersten Versuchen "DOELSE" versucht anstatt "DOELSEIF"!

Aber eine Frage hätte ich noch ist es richtig das ich "attr do always" bei dem von euch vorgeschlagen code verwenden muss, denn sonnst schaltet er nur bei dem ersten "Present"???

Mfg Steffen

Damian

Zitat von: Steffen am 02 Oktober 2015, 20:15:07
Vielen dank für eure Hilfe, so klappt es erstmal hatte irgendwie nicht an "or" gedacht und hatte auch bei meinen ersten Versuchen "DOELSE" versucht anstatt "DOELSEIF"!

Aber eine Frage hätte ich noch ist es richtig das ich "attr do always" bei dem von euch vorgeschlagen code verwenden muss, denn sonnst schaltet er nur bei dem ersten "Present"???

Mfg Steffen

ja.

Gruß

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

Steffen

#267
Hallo,

Leider wird doch bei diesem define auch der Befehl zum "open" gegeben selbst wenn der state von einen von den 3 device als absent gegeben wird?! Sollte eigentlich nur bei "present" sein...hier nochmal der code:


([Liescha] eq "present" or [Steffen] eq "present" or [Doreen] eq "present") (set TuerSchloss open) (set Fl_LampeDecke press short) DOELSEIF ([Steffen] eq "absent" and [Doreen] eq "absent" and [Liescha] eq "absent") (set TuerSchloss lock)


Hat jemand noch Idee wo der Fehler loegen könnte?

attr do always ist  auch Akteviert

Toto1973

Nein, da liegst Du falsch.
Erst wenn alle 3 auf absent sind, wird das Schloss verriegelt. Deshalb sind die 3 mit AND verknüpft.
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

Steffen

Wenn alle 3 "absent" sind wird es auch auf "locked" gesetzt das klappt auch aber ich wollten nur wenn"present" als state kommt dann "open" aber jetzt schaltet er auch auf "open" wenn einer der 3 "absent" als state bekommt?!?

Mfg Steffen