Hauptmenü

Zeitschaltuhr mit DOIF

Begonnen von Home_Fhem, 02 Dezember 2017, 09:23:25

Vorheriges Thema - Nächstes Thema

Home_Fhem

Guten Morgen, ich würde gerne meine Weihnachtsbeleuchtung über DOIF ein/aus Schalten.
Bin bisher wie folgt vorgegangen:
Lampe definiert


  • define lampe IT FF0000000F FF F0
    attr lampe IODev CUL1
    attr lampe model itswitch
Die Lampe lässt sich nun mit on/off per Hand schalten

Doif definiert

  • define lampensteuerung DOIF ([20:00|Mo Di Mi Do Fr Sa So]) (set lampe on) DOELSEIF ([23:00|Mo Di Mi Do Fr Sa So]) (set lampe off)
Ich sehe wie DOIF schaltet aber die Lampe geht nicht an.
Habe ich einen Befehl falsch eingegeben oder etwas vergessen?

Danke für die Hilfe!

Damian

Zitat von: Home_Fhem am 02 Dezember 2017, 09:23:25
Guten Morgen, ich würde gerne meine Weihnachtsbeleuchtung über DOIF ein/aus Schalten.
Bin bisher wie folgt vorgegangen:
Lampe definiert


  • define lampe IT FF0000000F FF F0
    attr lampe IODev CUL1
    attr lampe model itswitch
Die Lampe lässt sich nun mit on/off per Hand schalten

Doif definiert

  • define lampensteuerung DOIF ([20:00|Mo Di Mi Do Fr Sa So]) (set lampe on) DOELSEIF ([23:00|Mo Di Mi Do Fr Sa So]) (set lampe off)
Ich sehe wie DOIF schaltet aber die Lampe geht nicht an.
Habe ich einen Befehl falsch eingegeben oder etwas vergessen?

Danke für die Hilfe!

Wenn set lampe on in der Kommandozeile funktioniert, dann funktioniert es auch im DOIF, so wie du es angegeben hast (ohne do always Attribut allerdings nur wenn sich der Zustand von DOIF ändert)

Warum gibst du Wochentage an, wenn du jeden Tag meinst?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Home_Fhem

@Damian danke für die Antwort. Es hat mit set Lampe on leider nicht funktioniert. Nun habe ich die Lampe nochmal neu definiert und es geht...

Bin neu in FHEM und natürlich auch mit DOIF was muss ich eingeben bzw. weglassen wenn ich die Zeitschaltuhr jeden Tag schalten lassen möchte? Einfach die Wochentage weglassen oder sieht dann die Funktion anders aus?

Damian

define lampensteuerung DOIF ([20:00]) (set lampe on) DOELSEIF ([23:00]) (set lampe off)

Funktioniert ohne do always, weil ja der Status des Moduls immer zwischen cmd_1 und cmd_2 wechselt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Home_Fhem


en-trust

Ich versuche meine Weihnachtsbeleichtung zu bestimmten Zeiten zu schalten. Allerdings schaltet er nicht.

hier mal das list#

Save config
upCam
Tablet-UI
Smartphone-UI
System
3.2_Anwesenheit
9.3_Watchdog
90_sys.batteries
Arbeitszimmer
Auskunft
Automation
Badezimmer
Büro
CUL_HM
CUL_TCM97001
CUL_TX
FHEM
FS20
Flur
Fritzbox
Garten
Gerätestatus
Gäste-WC
Hardware
icoHaus Haus
Heizungskeller
IT
Kinderzimmer
Klima
Küche
LaCrosse
Plots
Schlafzimmer
Sensoren
Spritpreise
Status
TV-Programm
Unsorted
Verkehrsinfo
Vorratsraum
Weather
Wetter
Wettervorhersage
Wohnzimmer
icoEverything Everything
Logfile
Commandref
Remote doc
Edit files
Select style
Event monitor

Internals:
   CFGFN      ./FHEM/fhem_multimedia.cfg
   DEF        ([Modus_RL] eq "XMas" and ([6:30-9:00] or [13:00-22:15]) and [Twilight:light] < 5) (set Weihnachtsbeleuchtung on)
DOELSEIF ([Modus_RL] eq "XMas" and [22:20]) (set Weihnachtsbeleuchtung off)
   NAME       XMasLights.Auto
   NR         839
   NTFY_ORDER 50-XMasLights.Auto
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2017-12-12 06:30:01   cmd             1
     2017-12-12 06:30:01   cmd_event       timer_1
     2017-12-12 06:30:01   cmd_nr          1
     2017-12-12 06:30:01   state           cmd_1
     2017-12-12 09:00:00   timer_01_c01    13.12.2017 06:30:00
     2017-12-12 09:00:00   timer_02_c01    13.12.2017 09:00:00
     2017-12-11 22:15:00   timer_03_c01    12.12.2017 13:00:00
     2017-12-11 22:15:00   timer_04_c01    12.12.2017 22:15:00
     2017-12-11 22:20:01   timer_05_c02    12.12.2017 22:20:00
     2017-12-12 13:00:00   warning         condition c01: Argument "" isn't numeric in numeric lt (<)

   condition:
     0          InternalDoIf($hash,'Modus_RL','STATE') eq "XMas" and (DOIF_time($hash,0,1,$wday,$hms) or DOIF_time($hash,2,3,$wday,$hms)) and ReadingValDoIf($hash,'Twilight','light') < 5
     1          InternalDoIf($hash,'Modus_RL','STATE') eq "XMas" and DOIF_time_once($hash,4,$wday)
   days:
   devices:
     0           Modus_RL Twilight
     1           Modus_RL
     all         Modus_RL Twilight
   do:
     0:
       0          set Weihnachtsbeleuchtung on
     1:
       0          set Weihnachtsbeleuchtung off
     2:
   helper:
     event      timer_3
     globalinit 1
     last_timer 5
     sleeptimer -1
     timerdev
     timerevent timer_3
     timereventsState
     triggerDev
     timerevents:
       timer_3
     triggerEvents:
       timer_3
   internals:
     0           Modus_RL:STATE
     1           Modus_RL:STATE
     all         Modus_RL:STATE
   interval:
     0          -1
     1          0
     2          -1
     3          2
   itimer:
   localtime:
     0          1513143000
     1          1513152000
     2          1513080000
     3          1513113300
     4          1513113600
   readings:
     0           Twilight:light
     all         Twilight:light
   realtime:
     0          06:30:00
     1          09:00:00
     2          13:00:00
     3          22:15:00
     4          22:20:00
   regexp:
     all:
   state:
     STATE:
   time:
     0          6:30
     1          9:00
     2          13:00:00
     3          22:15:00
     4          22:20:00
   timeCond:
     0          0
     1          0
     2          0
     3          0
     4          1
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   timers:
     0           0  1  2  3
     1           4
   triggertime:
     1513113300:
       localtime  1513113300
       hash:
     1513113600:
       localtime  1513113600
       hash:
     1513143000:
       localtime  1513143000
       hash:
     1513152000:
       localtime  1513152000
       hash:
Attributes:
   group      Zeitschaltuhr
   room       Automation


und der Code...
#
# Steuerung Weihnachtsbeleuchtung (XMas)
#
define Weihnachtsbeleuchtung structure room GT.Gartenhaus_CUL KU.Fensterleuchte_CUL SZ.Fensterleuchte_CUL
attr Weihnachtsbeleuchtung clientstate_behavior relative
attr Weihnachtsbeleuchtung clientstate_priority an|on aus|off
attr Weihnachtsbeleuchtung group Zeitschaltuhr
attr Weihnachtsbeleuchtung room Automation

define XMasLights.Auto DOIF ([Modus_RL] eq "XMas" and ([6:30-9:00] or [13:00-22:15]) and [Twilight:light] < 5) (set Weihnachtsbeleuchtung on) \
DOELSEIF ([Modus_RL] eq "XMas" and [22:20]) (set Weihnachtsbeleuchtung off)
attr XMasLights.Auto group Zeitschaltuhr
attr XMasLights.Auto room Automation


Der Modus steht auf XMas...
Jemand eine Idee ?

Ellert

Zitat von: en-trust am 12 Dezember 2017, 17:14:50
Jemand eine Idee ?
Ja, es gibt eine Warnung, die solltest Du beseitigen indem Du die Ursache findest und beseitigst. Hast Du selbst das Listing nicht angesehen?

en-trust

Doch nur habe ich den Code so von hier übernommen und mir ist nicht klar was fhem damit mir sagen will.

warning         condition c01: Argument "" isn't numeric in numeric lt (<)

Esjay

Zitat von: en-trust am 13 Dezember 2017, 07:42:49
Doch nur habe ich den Code so von hier übernommen und mir ist nicht klar was fhem damit mir sagen will.

warning         condition c01: Argument "" isn't numeric in numeric lt (<)

"Irgendwo" hast du im code einen Vergleich kleiner als (<) aber das Argument ist keine Zahl sondern ein String, also eine Zeichenkette.

Jetzt deutlicher?

en-trust

diese warning kommt von der XMasLights. Aber da gibt es nur das Twilight:light < 5.

define Weihnachtsbeleuchtung structure room GT.Gartenhaus_CUL KU.Fensterleuchte_CUL SZ.Fensterleuchte_CUL
attr Weihnachtsbeleuchtung clientstate_behavior relative
attr Weihnachtsbeleuchtung clientstate_priority an|on aus|off
attr Weihnachtsbeleuchtung group Zeitschaltuhr
attr Weihnachtsbeleuchtung room Automation

define XMasLights.Auto DOIF ([Modus_RL] eq "XMas" and ([6:30-9:00] or [13:00-22:00]) and [Twilight:light] < 5) (set Weihnachtsbeleuchtung on) \
DOELSEIF ([Modus_RL] eq "XMas" and [22:00]) (set Weihnachtsbeleuchtung off)
attr XMasLights.Auto group Zeitschaltuhr
attr XMasLights.Auto room Automation


Woher soll es also kommen ? Oder ist die 5 von Light etwa Alphanumerisch ?

Ellert

Zitat von: en-trust am 13 Dezember 2017, 15:36:34
diese warning kommt von der XMasLights. Aber da gibt es nur das Twilight:light < 5.

define Weihnachtsbeleuchtung structure room GT.Gartenhaus_CUL KU.Fensterleuchte_CUL SZ.Fensterleuchte_CUL
attr Weihnachtsbeleuchtung clientstate_behavior relative
attr Weihnachtsbeleuchtung clientstate_priority an|on aus|off
attr Weihnachtsbeleuchtung group Zeitschaltuhr
attr Weihnachtsbeleuchtung room Automation

define XMasLights.Auto DOIF ([Modus_RL] eq "XMas" and ([6:30-9:00] or [13:00-22:00]) and [Twilight:light] < 5) (set Weihnachtsbeleuchtung on) \
DOELSEIF ([Modus_RL] eq "XMas" and [22:00]) (set Weihnachtsbeleuchtung off)
attr XMasLights.Auto group Zeitschaltuhr
attr XMasLights.Auto room Automation


Woher soll es also kommen ? Oder ist die 5 von Light etwa Alphanumerisch ?
Von der anderen Seite des Vergleichsoperators, steht doch in der Meldung.
Zitat"" isn't numeric

en-trust

und für einen Anfänger woher weiß ich welches die Gegenseite ist ? Steht nicht in der Warning.

Damian

Ich vermute, dass [Twilight:light] nicht existiert, denn dann wird per Default "" zurückgegeben und "" < 5 führt zu einer Warnung.

Mit list Twilight in der Kommandozeile kannst du überprüfen, ob es das Device gibt und ob light darin vorkommt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Zitat von: en-trust am 13 Dezember 2017, 18:59:31
und für einen Anfänger woher weiß ich welches die Gegenseite ist ? Steht nicht in der Warning.
Du verwendest nur einen Vergleichsoperator "<".

en-trust

Ich habe den Fehler gefunden. Er lag bei [Twilight:light]. Ich hatte Twilight aber als twilight definiert. Was so ein upcase ausrichten kann :(

Danke.