Hauptmenü

DOIF - Zeit über Dummy

Begonnen von gloob, 26 Januar 2017, 11:04:19

Vorheriges Thema - Nächstes Thema

gloob

Hallo,

Ich versuche gerade einen Wecker mit DOIF zu realisieren. Die Zeiten der Ausführung würde ich gerne in einem Dummy haben. Folgendermaßen ist mein DOIF definiert:

define PflanzenlampeOn DOIF ([[Pflanzenlampe_time_on]]) (set teleBot message "on")
attr PflanzenlampeOn do always


der Dummy sieht so aus:


Internals:
   NAME       Pflanzenlampe_time_on
   NR         549
   STATE      10:58
   TYPE       dummy
   Readings:
     2017-01-26 10:57:28   Minute          58
     2017-01-26 10:54:16   Stunde          10
     2017-01-26 10:57:28   state           10:58
Attributes:
   room       Pflanzen
   stateFormat state
   userReadings Stunde {()},Minute {()},


Wenn ich jetzt den Dummy anpasse, wird die neue Zeit nicht im DOIF übernommen. Es wird immer der vorher gehende Wert aus dem Dummy genutzt.
Stelle ich 10:00 im Dummy ein und danach 11:00, wird das DOIF um 10:00 ausgeführt.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

Damian

Dann erzeugt die Änderung des Dummys offenbar kein Event, welches das DOIF aufweckt - könnte evtl. an FHEM2FHEM liegen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

gloob

Im Event Monitor sehe ich folgende Events wenn ich die Minute Ändere:


2017-01-26 11:24:33 dummy Pflanzenlampe_time_on Minute: 26
2017-01-26 11:24:33 dummy Pflanzenlampe_time_on 11:26



Der State des Dummys erzeugt also scheinbar ein Event. Daran kann es nicht liegen.
Es läuft kein FHEM2FHEM.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

gloob

Gibt es eine Möglichkeit das DOIF manuell dazu zu bewegen sich die Uhrzeit neu aus dem Dummy zu holen?
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

Amenophis86

mit einem at und set initialize zB
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...

Damian

Zitat von: gloob am 26 Januar 2017, 11:47:10
Gibt es eine Möglichkeit das DOIF manuell dazu zu bewegen sich die Uhrzeit neu aus dem Dummy zu holen?

Da sollte man die Ursache finden, ansonsten würden tausende von DOIF-Modulen nicht richtig funktionieren und das bezweifle ich.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

igami

kann es daran liegen, dass STATE ausgewertet wird und nicht state?
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Damian

Zitat von: igami am 26 Januar 2017, 12:55:59
kann es daran liegen, dass STATE ausgewertet wird und nicht state?

Das wird es wohl sein. Daher [[Pflanzenlampe_time_on:state]] ausprobieren.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

gloob

Damit funktioniert es leider auch nicht.

Ich versuche daher gerade den Ansatz über interne readings:

Internals:
   DEF        ([[$SELF:_timeOn,"12:00"]]) (set teleBot message "Pflanzenlampe Test on") DOELSEIF ([[$SELF:_timeOff,"12:00"]]) (set teleBot message "Pflanzenlampe Test off")
   NAME       PflanzenLampeDoif
   NR         578
   NTFY_ORDER 50-PflanzenLampeDoif
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-01-26 12:05:50   _einaus         on
     2017-01-26 13:26:32   _timeOff        13:28
     2017-01-26 13:26:26   _timeOn         13:27
     2017-01-26 13:28:00   cmd             1
     2017-01-26 13:28:00   cmd_event       timer_1
     2017-01-26 13:28:00   cmd_nr          1
     2017-01-26 13:28:00   state           cmd_1
     2017-01-26 13:28:00   timer_01_c01    27.01.2017 13:27:00
     2017-01-26 13:28:00   timer_02_c02    27.01.2017 13:28:00
   Condition:
     0          DOIF_time_once($hash,0,$wday)
     1          DOIF_time_once($hash,1,$wday)
   Days:
   Devices:
   Do:
     0:
       0          set teleBot message "Pflanzenlampe Test on"
     1:
       0          set teleBot message "Pflanzenlampe Test off"
   Helper:
     event      timer_1
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev
     timerevent timer_1
     timereventsState
     triggerDev
     timerevents:
       timer_1
     triggerEvents:
       timer_1
   Internals:
   Interval:
   Itimer:
     all         PflanzenLampeDoif
   Localtime:
     0          1485520020
     1          1485520080
   Readings:
   Realtime:
     0          13:27:00
     1          13:28:00
   Regexp:
   State:
   Time:
     0          [PflanzenLampeDoif:_timeOn,"12:00"]
     1          [PflanzenLampeDoif:_timeOff,"12:00"]
   Timecond:
     0          0
     1          1
   Timer:
     0          1
     1          1
   Timers:
     0           0
     1           1
   Triggertime:
     1485520020:
       localtime  1485520020
       Hash:
     1485520080:
       localtime  1485520080
       Hash:
Attributes:
   do         always
   readingList _einaus _timeOn _timeOff
   room       Pflanzen
   selftrigger all
   setList    _einaus:on,off _timeOn:time _timeOff:time


Leider wird zu beiden Zeiten der CMD1 ausgelöst und ich bekomme immer

Pflanzenlampe Test on
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

gloob

#9
Leider lauft das Sample von hier

https://wiki.fhem.de/wiki/DOIF/Ein-_und_Ausgabe_in_FHEMWEB_und_Tablet-UI_am_Beispiel_einer_Schaltuhr

(["$SELF:P_mybutton: on"] or [[$SELF:P_mybegin,"00:00"]])\
   (set lamp_Labor000 on)\
DOELSEIF (["$SELF:P_mybutton: off"] or [[$SELF:P_myend,"00:01"]])\
   (set lamp_Labor000 off)

readingList P_mybutton P_mybegin P_myend
setList P_mybutton:on,off P_mybegin:time P_myend:time
webCmd P_mybutton:P_mybegin:P_myend



auch nicht richtig.

Folgende Ausgaben erhalte ich im Log:

2017.01.26 13:52:00 2: TestDoif: set lamp_Labor000 on: Please define lamp_Labor000 first
2017.01.26 13:53:00 2: TestDoif: set lamp_Labor000 on: Please define lamp_Labor000 first

Es scheint als wird CMD 2 nicht ausgeführt.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

kumue

denn dummy aus dem Beispiel hattes du angelegt.. ?
define lamp_Labor000 dummy
attr lamp_Labor000 alias Lampe
attr lamp_Labor000 group Labor: Zeitsteuerung mit manuell Ein/Aus
attr lamp_Labor000 room DOIF_Labor

gloob

Den Dummy habe ich danach auch angelegt und auch mit getestet.

Hier ist die vollständige Konfiguration:


define lamp_Labor000 dummy
attr lamp_Labor000 alias Lampe
attr lamp_Labor000 group Labor: Zeitsteuerung mit manuell Ein/Aus
attr lamp_Labor000 room DOIF_Labor

define time_switch_Labor DOIF (["$SELF:P_mybutton: on"] or [[$SELF:P_mybegin,"00:00"]])\
   (set lamp_Labor000 on)\
DOELSEIF (["$SELF:P_mybutton: off"] or [[$SELF:P_myend,"00:01"]])\
   (set lamp_Labor000 off)
attr time_switch_Labor alias Schaltuhr
attr time_switch_Labor cmdState on|off
attr time_switch_Labor group Labor: Zeitsteuerung mit manuell Ein/Aus
attr time_switch_Labor readingList P_mybutton P_mybegin P_myend
attr time_switch_Labor room DOIF_Labor
attr time_switch_Labor setList P_mybutton:uzsuSelectRadio,on,off P_mybegin:time P_myend:time
attr time_switch_Labor webCmd P_mybutton:P_mybegin:P_myend

defmod rg_time_switch_Labor readingsGroup time_switch_Labor:+STATE,<P_mybutton>,P_mybutton,<P_mybegin>,P_mybegin,<P_myend>,P_myend
attr rg_time_switch_Labor commands {"P_mybutton"=>"P_mybutton:","P_mybegin"=>"P_mybegin:","P_myend"=>"P_myend:",}
attr rg_time_switch_Labor group Labor: Zeitsteuerung mit manuell Ein/Aus
attr rg_time_switch_Labor noheading 1
attr rg_time_switch_Labor room DOIF_Labor


Das Schalten über den Button funktioniert allerdings nicht über die Zeiten.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

gloob

Jemand eine Idee ob es ein Bug im DOIF ist?
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

Damian

Teste erst mal:

define test_d dummy
set test_d 10:00
define test_di DOIF ([[test_d]])(set bla on)
set test_d 11:00


Wenn das schon nicht funktioniert, dann würde ich das ganze System neu aufsetzen. Einen so banalen Fehler in DOIF würde ich ausschließen - dafür gibt es zu viele DOIF-Benutzer, die dann schon längst auf die Barrikaden gingen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

gloob

ich habe es jetzt mit dem Code von dir getestet und damit funktioniert es.


Hast du eine Idee, warum das Sample mit den DOIF internen Readings nicht richtig funktioniert. Es wird zwar zu den richtigen Zeitpunkten getriggert, aber nicht der richtige Command ausgeführt.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway