Hauptmenü

Warum löst dieses DOIF aus?

Begonnen von RitterSport, 21 Februar 2016, 10:56:37

Vorheriges Thema - Nächstes Thema

RitterSport

#15
FHEM 5.6.
doif.pm ist vom 26.12.15

Da er heute nicht ausgelöst hat, kann ich nur diesen list anfügen:
Internals:
   DEF        ([Anwesenheitsstatus:?Home] and [?09:30-{sunset_abs(2400,"","19:30")}] )
(set Rolladen_alle Up,set TeleBotMain message @xxxx @xxxx Alle Rolläden hoch da Zustandswechsel von Away/Urlaub auf Home)
   NAME       ZufallstimerRolloWiederhoch
   NR         1307
   NTFY_ORDER 50-ZufallstimerRolloWiederhoch
   STATE      initialize
   TYPE       DOIF
   Readings:
     2016-02-21 19:27:19   state           initialize
     2016-02-22 09:30:00   timer_1_c1      23.02.2016 09:30:00
     2016-02-21 19:43:01   timer_2_c1      22.02.2016 19:11:33
   Condition:
     0          EventDoIf('Anwesenheitsstatus',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'Home') and DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
   Days:
   Devices:
     0           Anwesenheitsstatus
     all         Anwesenheitsstatus
   Do:
     0:
       0          set Rolladen_alle Up,set TeleBotMain message @xxxx @xxxx Alle Rolläden hoch da Zustandswechsel von Away/Urlaub auf Home
   Helper:
     globalinit 1
     last_timer 2
     sleeptimer -1
   Itimer:
   Realtime:
     0          09:30:00
     1          19:11:33
   State:
   Time:
     0          09:30:00
     1          {sunset_abs(2400,"","19:30")}
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
   Trigger:
     all         Anwesenheitsstatus
Attributes:
   alias      Rollo hoch Homestatuswechsel
   do         always
   room       Alarmanlage

Damian

Zitat von: RitterSport am 22 Februar 2016, 15:02:48
FHEM 5.6.
doif.pm ist vom 26.12.15

Da er heute nicht ausgelöst hat, kann ich nur diesen list anfügen:
Internals:
   DEF        ([Anwesenheitsstatus:?Home] and [?09:30-{sunset_abs(2400,"","19:30")}] )
(set Rolladen_alle Up,set TeleBotMain message @xxxx @xxxx Alle Rolläden hoch da Zustandswechsel von Away/Urlaub auf Home)
   NAME       ZufallstimerRolloWiederhoch
   NR         1307
   NTFY_ORDER 50-ZufallstimerRolloWiederhoch
   STATE      initialize
   TYPE       DOIF
   Readings:
     2016-02-21 19:27:19   state           initialize
     2016-02-22 09:30:00   timer_1_c1      23.02.2016 09:30:00
     2016-02-21 19:43:01   timer_2_c1      22.02.2016 19:11:33
   Condition:
     0          EventDoIf('Anwesenheitsstatus',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'Home') and DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
   Days:
   Devices:
     0           Anwesenheitsstatus
     all         Anwesenheitsstatus
   Do:
     0:
       0          set Rolladen_alle Up,set TeleBotMain message @xxxx @xxxx Alle Rolläden hoch da Zustandswechsel von Away/Urlaub auf Home
   Helper:
     globalinit 1
     last_timer 2
     sleeptimer -1
   Itimer:
   Realtime:
     0          09:30:00
     1          19:11:33
   State:
   Time:
     0          09:30:00
     1          {sunset_abs(2400,"","19:30")}
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
   Trigger:
     all         Anwesenheitsstatus
Attributes:
   alias      Rollo hoch Homestatuswechsel
   do         always
   room       Alarmanlage


ja, ich erinnere mich jetzt dunkel an ein Problem in diesem Zusammenhang. Mit [?09:30... wird das ohnehin nicht auftreten. Nimm einfach die heutige Version und das Problem sollte nicht mehr auftreten können.

Gruß

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

RockFan

Hallo Damian,

Erstmal vielen Dank für DOIF. Es erleichtert und ersetzt so viele Dinge in FHEM. Einfach Mega-Super-Geil  :) 8)

Da die Fragestellung dieses Threads genau mein derzeitiges Problem beschreibt, möchte ich mich mal hier anhängen.
Mein DOIF soll, wenn mein Handy in meinem Heimnetzwerk anwesend ist kurz vor dem läuten des Weckers ein paar Wetterinfos sprechen. Dazu verwende ich u.a. AMAD (LG_G3_Smartphone). Das setzen von deviceState regele ich über eine Anwesenheitssimulation. Das ganze hat auch schon mal besser funktioniert. Möglicherweise funktioniert es sporadisch schlechter, seit ich die Anwesenheit über ROOMMATE registriere, aber da bin ich nicht ganz sicher.

DasProblem ist, dass mein Handy nun manchmal spricht, wenn es "anwesend" wird, obwohl es sicherlich nicht eine Minute vor dem Weckerläuten ist.

Ich bin auf der aktuellen Version von FHEM.

Hier ist mein List auf dem DOIF.


Internals:
   DEF        ([([LG_G3_Smartphone:nextAlarmTime]-[00:01])] and [LG_G3_Smartphone:deviceState] eq "online") (
  ({Log 3,"MorningSayTempDieterHandy Ereignisse von $DEVICE: $EVENTS"})
  (set LG_G3_Smartphone volume 8)
  (set LG_G3_Smartphone ttsMsg 'Außentemperatur [gt_Temperatur:temperature] Grad Celsius. [AgrarWetterBobingen:fc0_weatherMorning]')
)
   NAME       MorningSayTempDieterHandy
   NR         839
   NTFY_ORDER 50-MorningSayTempDieterHandy
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-02-28 11:43:24   Device          LG_G3_Smartphone
     2016-02-28 11:43:13   cmd_event       LG_G3_Smartphone
     2016-02-28 11:43:13   cmd_nr          1
     2016-02-28 11:43:24   e_LG_G3_Smartphone_deviceState online
     2016-02-28 11:43:13   state           cmd_1
     2016-02-28 11:43:24   timer_1_c1      29.02.2016 05:32:00
     2016-02-27 10:34:04   wait_timer      no timer
   Condition:
     0          DOIF_time_once($hash,$hash->{timer}{0},$wday,"") and ReadingValDoIf($hash,'LG_G3_Smartphone','deviceState','','',AttrVal($hash->{NAME},'notexist',undef)) eq "online"
   Days:
   Devices:
     0           LG_G3_Smartphone
     all         LG_G3_Smartphone
   Do:
     0:
       0            ({Log 3,"MorningSayTempDieterHandy Ereignisse von $DEVICE: $EVENTS"})  (set LG_G3_Smartphone volume 8)  (set LG_G3_Smartphone ttsMsg 'Außentemperatur [gt_Temperatur:temperature] Grad Celsius. [AgrarWetterBobingen:fc0_weatherMorning]')
     1:
   Helper:
     event      lastSetCommandState: cmd_done
     globalinit 1
     last_timer 1
     sleeptimer -1
     timerdev   LG_G3_Smartphone
     timerevent lastSetCommandState: cmd_done
     triggerDev LG_G3_Smartphone
     timerevents:
       lastSetCommandState: cmd_done
     triggerEvents:
       lastSetCommandState: cmd_done
   Internals:
   Itimer:
     all         LG_G3_Smartphone
   Localtime:
     0          1456720320
   Readings:
     0           LG_G3_Smartphone:deviceState
     all         LG_G3_Smartphone:deviceState
   Realtime:
     0          05:32:00
   Regexp:
     0:
     All:
   State:
   Time:
     0          ([LG_G3_Smartphone:nextAlarmTime]-[00:01])
   Timecond:
     0          0
   Timer:
     0          1
   Timers:
     0           0
   Trigger:
   Triggertime:
     1456720320:
       localtime  1456720320
       Hash:
Attributes:
   wait       0,5,20


Im Log kommt folgendes:


2016.02.28 11:43:12 2: ROOMMATE set rr_Dieter home
2016.02.28 11:43:13 3: MorningSayTempDieterHandy Ereignisse von LG_G3_Smartphone: deviceState: online
2016.02.28 11:43:13 3: DieterStatusSteuerung home Ereignisse von rr_Dieter: lastState: absent,home,mood: calm,presence: present,location: home,lastArrival: 2016-02-28 11:43:12,lastDurAbsence: 00:00:24,lastDurAbsence_cr: 0


"DieterStatusSteuerung" ist auch ein DOIF (ohne Attribute):

define DieterStatusSteuerung DOIF ([rr_Dieter:state] eq "home") (\
   set LG_G3_Smartphone deviceState online,\
   {Log 3,"DieterStatusSteuerung home Ereignisse von $DEVICE: $EVENTS"}\
) DOELSEIF ([rr_Dieter:state] eq "absent") (\
   set LG_G3_Smartphone deviceState offline,\
   {Log 3,"DieterStatusSteuerung absent Ereignisse von $DEVICE: $EVENTS"}\
)


Was mache ich nur falsch? Was übersehe ich?


Dieter
Raspbian (Buster) auf Raspberry Pi 4 /  CUL + RFXTRX + TCM / FS20, FHT 80B, S300TH, Intertechno, DMX, Milight, EnOcean, Homematic, AMAD, Home Connect, MiSmartHome, Yeelight, ...

Damian

Zitat von: RockFan am 28 Februar 2016, 12:02:13
Hallo Damian,

Erstmal vielen Dank für DOIF. Es erleichtert und ersetzt so viele Dinge in FHEM. Einfach Mega-Super-Geil  :) 8)

Da die Fragestellung dieses Threads genau mein derzeitiges Problem beschreibt, möchte ich mich mal hier anhängen.
Mein DOIF soll, wenn mein Handy in meinem Heimnetzwerk anwesend ist kurz vor dem läuten des Weckers ein paar Wetterinfos sprechen. Dazu verwende ich u.a. AMAD (LG_G3_Smartphone). Das setzen von deviceState regele ich über eine Anwesenheitssimulation. Das ganze hat auch schon mal besser funktioniert. Möglicherweise funktioniert es sporadisch schlechter, seit ich die Anwesenheit über ROOMMATE registriere, aber da bin ich nicht ganz sicher.

DasProblem ist, dass mein Handy nun manchmal spricht, wenn es "anwesend" wird, obwohl es sicherlich nicht eine Minute vor dem Weckerläuten ist.

Ich bin auf der aktuellen Version von FHEM.

Hier ist mein List auf dem DOIF.


Internals:
   DEF        ([([LG_G3_Smartphone:nextAlarmTime]-[00:01])] and [LG_G3_Smartphone:deviceState] eq "online") (
  ({Log 3,"MorningSayTempDieterHandy Ereignisse von $DEVICE: $EVENTS"})
  (set LG_G3_Smartphone volume 8)
  (set LG_G3_Smartphone ttsMsg 'Außentemperatur [gt_Temperatur:temperature] Grad Celsius. [AgrarWetterBobingen:fc0_weatherMorning]')
)
   NAME       MorningSayTempDieterHandy
   NR         839
   NTFY_ORDER 50-MorningSayTempDieterHandy
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-02-28 11:43:24   Device          LG_G3_Smartphone
     2016-02-28 11:43:13   cmd_event       LG_G3_Smartphone
     2016-02-28 11:43:13   cmd_nr          1
     2016-02-28 11:43:24   e_LG_G3_Smartphone_deviceState online
     2016-02-28 11:43:13   state           cmd_1
     2016-02-28 11:43:24   timer_1_c1      29.02.2016 05:32:00
     2016-02-27 10:34:04   wait_timer      no timer
   Condition:
     0          DOIF_time_once($hash,$hash->{timer}{0},$wday,"") and ReadingValDoIf($hash,'LG_G3_Smartphone','deviceState','','',AttrVal($hash->{NAME},'notexist',undef)) eq "online"
   Days:
   Devices:
     0           LG_G3_Smartphone
     all         LG_G3_Smartphone
   Do:
     0:
       0            ({Log 3,"MorningSayTempDieterHandy Ereignisse von $DEVICE: $EVENTS"})  (set LG_G3_Smartphone volume 8)  (set LG_G3_Smartphone ttsMsg 'Außentemperatur [gt_Temperatur:temperature] Grad Celsius. [AgrarWetterBobingen:fc0_weatherMorning]')
     1:
   Helper:
     event      lastSetCommandState: cmd_done
     globalinit 1
     last_timer 1
     sleeptimer -1
     timerdev   LG_G3_Smartphone
     timerevent lastSetCommandState: cmd_done
     triggerDev LG_G3_Smartphone
     timerevents:
       lastSetCommandState: cmd_done
     triggerEvents:
       lastSetCommandState: cmd_done
   Internals:
   Itimer:
     all         LG_G3_Smartphone
   Localtime:
     0          1456720320
   Readings:
     0           LG_G3_Smartphone:deviceState
     all         LG_G3_Smartphone:deviceState
   Realtime:
     0          05:32:00
   Regexp:
     0:
     All:
   State:
   Time:
     0          ([LG_G3_Smartphone:nextAlarmTime]-[00:01])
   Timecond:
     0          0
   Timer:
     0          1
   Timers:
     0           0
   Trigger:
   Triggertime:
     1456720320:
       localtime  1456720320
       Hash:
Attributes:
   wait       0,5,20


Im Log kommt folgendes:


2016.02.28 11:43:12 2: ROOMMATE set rr_Dieter home
2016.02.28 11:43:13 3: MorningSayTempDieterHandy Ereignisse von LG_G3_Smartphone: deviceState: online
2016.02.28 11:43:13 3: DieterStatusSteuerung home Ereignisse von rr_Dieter: lastState: absent,home,mood: calm,presence: present,location: home,lastArrival: 2016-02-28 11:43:12,lastDurAbsence: 00:00:24,lastDurAbsence_cr: 0


"DieterStatusSteuerung" ist auch ein DOIF (ohne Attribute):

define DieterStatusSteuerung DOIF ([rr_Dieter:state] eq "home") (\
   set LG_G3_Smartphone deviceState online,\
   {Log 3,"DieterStatusSteuerung home Ereignisse von $DEVICE: $EVENTS"}\
) DOELSEIF ([rr_Dieter:state] eq "absent") (\
   set LG_G3_Smartphone deviceState offline,\
   {Log 3,"DieterStatusSteuerung absent Ereignisse von $DEVICE: $EVENTS"}\
)



Was mache ich nur falsch? Was übersehe ich?


Dieter

Du musst das Attribut do always setzen, wenn es jedes mal ohne Zustandswechsel funktionieren soll.

Gruß

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

RockFan

Hallo Damian,

Danke für die schnelle Antwort. Leider verstehe ich das nicht so ganz: Es löst ja zu oft aus. Es löst aus, obwohl nur die Bedingung [LG_G3_Smartphone:deviceState] eq "online" erfüllt ist.

Dazu habe ich jetzt vielleicht klärende Verständnisfragen:
Wenn das Eintreten einer Uhrzeit eine Bedingung ist, brauche ich dann do always, damit es jeden Tag auslöst? Ist die Uhrzeit in meinem Fall eigentlich immer gleich oder gehört auch das Datum dazu? Das sieht zumindest in meinem List vorhin so aus.


Viele Grüße
Dieter
Raspbian (Buster) auf Raspberry Pi 4 /  CUL + RFXTRX + TCM / FS20, FHT 80B, S300TH, Intertechno, DMX, Milight, EnOcean, Homematic, AMAD, Home Connect, MiSmartHome, Yeelight, ...

Damian

ja, das ist dieses Problem http://forum.fhem.de/index.php/topic,49482.0.html

Nimm schon mal diese Version http://forum.fhem.de/index.php/topic,49756.msg417274.html#msg417274, das ist die aktuellste mit Fehlerbereinigung.  Sie wird bald eingecheckt.

Gruß

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

RockFan

Hallo Damian,

ja, der Jalousie-Fall klingt nach dem gleichen Problem. Da ich jetzt 2 Tage dienstlich unterwegs bin und unter der Woche ohnehin kaum Zeit ist, freue ich mich schon mal auf den Fix im offiziellen Update  ;)

Vielen Dank für Deine Hilfe!

Viele Grüße
Dieter
Raspbian (Buster) auf Raspberry Pi 4 /  CUL + RFXTRX + TCM / FS20, FHT 80B, S300TH, Intertechno, DMX, Milight, EnOcean, Homematic, AMAD, Home Connect, MiSmartHome, Yeelight, ...

Damian

Zitat von: RockFan am 28 Februar 2016, 18:58:34
Hallo Damian,

ja, der Jalousie-Fall klingt nach dem gleichen Problem. Da ich jetzt 2 Tage dienstlich unterwegs bin und unter der Woche ohnehin kaum Zeit ist, freue ich mich schon mal auf den Fix im offiziellen Update  ;)

Vielen Dank für Deine Hilfe!

Viele Grüße
Dieter

Ich habe dieser Version eingecheckt.

Gruß

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

RockFan

Hallo Damian,

ich wollte noch Danke sagen.

Seit Mittwoch läuft die neue Version und es funktiniert nun so wie es soll  :)

Viele Grüße
Dieter
Raspbian (Buster) auf Raspberry Pi 4 /  CUL + RFXTRX + TCM / FS20, FHT 80B, S300TH, Intertechno, DMX, Milight, EnOcean, Homematic, AMAD, Home Connect, MiSmartHome, Yeelight, ...