[Gelöst] DOIF Schaltuhr kein Einschalten nach der eingestellten Zeit

Begonnen von butaluk, 14 Juli 2019, 11:21:05

Vorheriges Thema - Nächstes Thema

butaluk

Hallo Zusammen.

Ich habe den Beispiel aus dem Wiki https://wiki.fhem.de/wiki/DOIF/Ein-_und_Ausgabe_in_FHEMWEB_und_Tablet-UI_am_Beispiel_einer_Schaltuhr etwas abgeändert.
Es wurde ein weiterer Modus Auto hinzugefügt.
Mit dem Ein bzw. Aus Taster soll die Lampe direkt angesteuert werden und im Auto Modus soll die Lampe nach der eingestellten Zeit eingeschaltet werden.

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"])\
   (set lamp_Labor000 on)\
DOELSEIF (["$SELF:P_mybutton: auto"] and [[$SELF:P_mybegin,"10:50"]])\
(set lamp_Labor000 on)\
DOELSEIF (["$SELF:P_mybutton: off"])\
   (set lamp_Labor000 off)
attr time_switch_Labor alias Schaltuhr
attr time_switch_Labor cmdState on|auto|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,auto,off P_mybegin:time P_myend:time
attr time_switch_Labor webCmd P_mybutton:P_mybegin:P_myend
attr time_switch_Labor stateFormat [$name:P_mybutton]
attr time_switch_Labor devStateIcon on:rc_RED auto:rc_REPEAT off:rc_GREEN


Das mit dem Ein oder Ausschalten funktioniert.
Aber im Automatik Modus wird die Lampe nicht nach der eingestellten Zeit geschaltet.

Was fehlt noch?

Danke!

Ellert

Zitat von: butaluk am 14 Juli 2019, 11:21:05
im Auto Modus soll die Lampe nach der eingestellten Zeit eingeschaltet werden
Die Zeitangabe ist kein Countdown, der nach einer bestimmten Zeit schaltet, sondern ein Zeitpunkt an dem geschaltet wird.
Zitat von: butaluk am 14 Juli 2019, 11:21:05
Was fehlt noch?
Ein Listing vom Fehlerfall.

booster

Ich kenne das Problem auch und habs leider auch nicht zum laufen gebracht. Bei mir triggert er auch nicht auf die Zeit.

mein Code:
defmod IFWecker DOIF (([?$SELF:myfunction,"off"] eq "on") and (([$SELF:myWDtime,"06:00:00"] and [!$we]) or ([$SELF:myWEtime,"07:00:00"] and [$we]))) (set Telegram message IFWecker Test ON;; define IFWeckerOff at +01:15:00 set Telegram message IFWecker Test OFF)\
DOELSEIF (["$SELF:off"])(delete IFWeckerOff;; set Telegram message IFWecker Test manual OFF)
attr IFWecker alias Wecker
attr IFWecker disable 0
attr IFWecker do always
attr IFWecker icon clock
attr IFWecker readingList myfunction myWDtime myWEtime
attr IFWecker room _automation
attr IFWecker setList myfunction:off,on myWDtime:time myWEtime:time
attr IFWecker webCmd myfunction:myWDtime:myWEtime:off
attr IFWecker webCmdLabel Modus:Wochentags:Wochenende:_

setstate IFWecker initialized
setstate IFWecker 2018-09-02 12:46:44 Device IFWecker
setstate IFWecker 2018-09-02 12:36:23 cmd 0
setstate IFWecker 2018-09-02 12:46:43 e_IFWecker_myWDtime 05:00
setstate IFWecker 2018-09-02 12:46:44 e_IFWecker_myWEtime 13:00
setstate IFWecker 2018-09-02 12:36:23 mode enabled
setstate IFWecker 2018-09-02 12:46:43 myWDtime 05:00
setstate IFWecker 2018-09-02 12:46:44 myWEtime 13:00
setstate IFWecker 2018-04-02 21:30:56 myfunction on
setstate IFWecker 2018-09-02 12:36:23 state initialized
setstate IFWecker 2019-07-13 12:03:22 timer_01_c01 error: Wrong timespec !$we: either HH:MM:SS or {perlcode}



Damian

#3
Zitat von: booster am 15 Juli 2019, 21:43:16
Ich kenne das Problem auch und habs leider auch nicht zum laufen gebracht. Bei mir triggert er auch nicht auf die Zeit.

mein Code:
defmod IFWecker DOIF (([?$SELF:myfunction,"off"] eq "on") and (([$SELF:myWDtime,"06:00:00"] and [!$we]) or ([$SELF:myWEtime,"07:00:00"] and [$we]))) (set Telegram message IFWecker Test ON;; define IFWeckerOff at +01:15:00 set Telegram message IFWecker Test OFF)\
DOELSEIF (["$SELF:off"])(delete IFWeckerOff;; set Telegram message IFWecker Test manual OFF)
attr IFWecker alias Wecker
attr IFWecker disable 0
attr IFWecker do always
attr IFWecker icon clock
attr IFWecker readingList myfunction myWDtime myWEtime
attr IFWecker room _automation
attr IFWecker setList myfunction:off,on myWDtime:time myWEtime:time
attr IFWecker webCmd myfunction:myWDtime:myWEtime:off
attr IFWecker webCmdLabel Modus:Wochentags:Wochenende:_

setstate IFWecker initialized
setstate IFWecker 2018-09-02 12:46:44 Device IFWecker
setstate IFWecker 2018-09-02 12:36:23 cmd 0
setstate IFWecker 2018-09-02 12:46:43 e_IFWecker_myWDtime 05:00
setstate IFWecker 2018-09-02 12:46:44 e_IFWecker_myWEtime 13:00
setstate IFWecker 2018-09-02 12:36:23 mode enabled
setstate IFWecker 2018-09-02 12:46:43 myWDtime 05:00
setstate IFWecker 2018-09-02 12:46:44 myWEtime 13:00
setstate IFWecker 2018-04-02 21:30:56 myfunction on
setstate IFWecker 2018-09-02 12:36:23 state initialized
setstate IFWecker 2019-07-13 12:03:22 timer_01_c01 error: Wrong timespec !$we: either HH:MM:SS or {perlcode}



Die Meldung sagt, dass die Angabe "!$we" keine korrekte Zeit darstellt.

... and [!$we]) muss ... and !$we) heißen
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

butaluk

ZitatDie Zeitangabe ist kein Countdown, der nach einer bestimmten Zeit schaltet, sondern ein Zeitpunkt an dem geschaltet wird.
Habe das auch gemeint. ;D
ZitatEin Listing vom Fehlerfall.
Es gibt keinen Eintrag in dem Event monitor.
Habe die Bedingungen einzeln ausprobiert.
Mal so:
DOELSEIF ([[$SELF:P_mybegin,"00:00"]]
(set lamp_Labor000 on)

Mal so:
DOELSEIF (["$SELF:P_mybutton: auto"])
(set lamp_Labor000 on)

In beiden Fällen funktioniert es.
Setze ich die beiden Bedingungen mit einem "or" zusammen,
([[$SELF:P_mybegin,"00:00"]] or ["$SELF:P_mybutton: auto"])
(set lamp_Labor000 on)

Funktioniert es auch.
Setze ich die beiden Bedingungen mit einem "and" zusammen,
([[$SELF:P_mybegin,"00:00"]] and ["$SELF:P_mybutton: auto"])
(set lamp_Labor000 on)

klappt es nicht.

amenomade

["$SELF:P_mybutton: auto"]ist eine Ereignissteuerung: es wird nur wahr, wenn das "mybutton" auf "auto" springt. Da Fhem die Events nacheinander bearbeitet, ist es unmöglich, dass sowas mit der andere Bedingung gleichzeitig  wahr wird.

Zitat von: CommandRefDie logische Verknüpfung "and" mehrerer Ereignisse ist nicht sinnvoll, da zu einem Zeitpunkt immer nur ein Ereignis zutreffen kann.

Was Du brauchst ist:
DOELSEIF ([[$SELF:P_mybegin,"10:50"]] and [$SELF:P_mybutton] eq "auto")
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

butaluk

Zitat von: amenomade am 16 Juli 2019, 02:07:06

Was Du brauchst ist:
DOELSEIF ([[$SELF:P_mybegin,"10:50"]] and [$SELF:P_mybutton] eq "auto")
Danke, jetzt klappt es.

butaluk

Ich habe noch eine Frage bezüglich DOIF.
Und zwar... Ist es möglich den Status von dem [$SELF:P_mybutton] eines DOIF's von Extern ändern?
z.B. mit einem anderen DOIF?

Per


butaluk


booster


Frank6320

Hallo,

ich bin dabei eine Zeitschaltuhr (An und Aus) mit 2 Zeiten zu bauen. Das Beispiel von oben habe ich erweitert zu
define Aussen.Vordach.Steckdose.Zeitschaltuhr DOIF (["$SELF:Enable: on"]) (set Aussen.Vordach.Steckdose on)\
DOELSEIF ([[$SELF:MyStart1,"00:00"]] and [$SELF:Enable] eq "auto") (set Aussen.Vordach.Steckdose on)\
DOELSEIF ([[$SELF:MyStart2,"00:00"]] and [$SELF:Enable] eq "auto") (set Aussen.Vordach.Steckdose on)\
DOELSEIF ([[$SELF:MyStop1,"00:01"]] and [$SELF:Enable] eq "auto") (set Aussen.Vordach.Steckdose off)\
DOELSEIF ([[$SELF:MyStop2,"00:01"]] and [$SELF:Enable] eq "auto") (set Aussen.Vordach.Steckdose off)\
DOELSEIF (["$SELF:Enable: off"]) (set Aussen.Vordach.Steckdose off)
setuuid Aussen.Vordach.Steckdose.Zeitschaltuhr 5fc54e52-f33f-d9f2-4172-44c80bf3bcc338c0
attr Aussen.Vordach.Steckdose.Zeitschaltuhr alias Steckdose Zeitschaltuhr
attr Aussen.Vordach.Steckdose.Zeitschaltuhr group Vordach
attr Aussen.Vordach.Steckdose.Zeitschaltuhr readingList Enable MyStart MyStop
attr Aussen.Vordach.Steckdose.Zeitschaltuhr room Außen
attr Aussen.Vordach.Steckdose.Zeitschaltuhr setList Enable:on,auto,off MyStart1:time MyStop1:time MyStart2:time MyStop2:time
attr Aussen.Vordach.Steckdose.Zeitschaltuhr webCmd Enable:MyStart1:MyStop1:MyStart2:MyStop2


Wenn ich jetzt Zeiten vergebe und denn mit dem On Schalter spiele springen die Zeiten auf 00:00 und 00:01 zurück. Wieso passiert das?