FHEM commands vs. Perl commands

Begonnen von rallye, 03 Mai 2021, 09:24:00

Vorheriges Thema - Nächstes Thema

rallye

Ich möchte mein Gartenlicht mit einem DOIF bei Sonnenuntergang bis zu einem gewissen Zeitpunkt einschalten. Dafür verwende ich folgendes DOIF
Internals:
   DEF        ([{sunset_abs("HORIZON=3",0,"14:30","20:00")}])
   (set Licht.Garten on-till 20:45)

   FUUID      5e189785-f33f-55a1-c485-9709b0f9897d5e79
   MODEL      FHEM
   NAME       GartenlichtOnOff
   NOTIFYDEV  global
   NR         226
   NTFY_ORDER 50-GartenlichtOnOff
   STATE      cmd_1
   TYPE       DOIF
   VERSION    24274 2021-04-18 16:40:42
   READINGS:
     2021-05-02 19:45:27   cmd             1
     2021-05-02 19:45:27   cmd_event       timer_1
     2021-05-02 19:45:27   cmd_nr          1
     2021-05-02 11:01:15   mode            enabled
     2021-05-02 19:45:27   state           cmd_1
     2021-05-02 19:45:27   timer_01_c01    03.05.2021 19:45:27
   Regex:
     accu:
     collect:
   attr:
     cmdState:
     waitdel:
   condition:
     0          ::DOIF_time_once($hash,0,$wday)
   days:
   do:
     0:
       0          set Licht.Garten on-till 20:45
     1:
   helper:
     DEVFILTER  ^global$
     NOTIFYDEV  global
     event      timer_1
     globalinit 1
     last_timer 1
     sleeptimer -1
     timerdev   
     timerevent timer_1
     triggerDev
     timerevents:
       timer_1
     timereventsState:
       timer_1
     triggerEvents:
       timer_1
     triggerEventsState:
       timer_1
   interval:
   intervalfunc:
   localtime:
     0          1620063927
   perlblock:
   realtime:
     0          19:45:27
   time:
     0          {sunset_abs("HORIZON=3",0,"14:30","20:00")}
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   triggertime:
     1620063927:
       localtime  1620063927
       hash:
   uiState:
   uiTable:

Num möchte ich das Licht nicht zu einem bestimmten Zeitpunkt ausschalten, sondern "variabel". Ich habe mir zu diesem Zweck eine Sub im 99_myUtils.pm geschrieben die so aussieht:
sub sub_randomtime($$){
  my ($MeH,$MeM,$MeS) = split(":", shift);
  my ($MeMp,$MeSp) = split(":", shift);
  my $ZtA = int($MeH*3600 + $MeM*60 + rand($MeMp*60) + $MeSp);
  my $ZtH = int($ZtA/3600);
  my $ZtM = int(($ZtA-$ZtH*3600)/60);
  my $ZtS = int($ZtA-($ZtH*3600+$ZtM*60));
  return sprintf("%2.2d:%2.2d:%2.2d",$ZtH,$ZtM,$ZtS);
und mir eine zufällige Zeit im Bereich der übergebenen Zeit zurück liefert. Diese Sub funktioniert für mich einwandfrei auch bei Aufrufen an anderer Stelle. Nur, wenn ich das eingangs erwähnte DOIF so umstelle
DEF        ([{sunset_abs("HORIZON=3",0,"14:30","20:00")}])
   (set Licht.Garten on-till {sub_randomtime('20:30:00','29:00')})

   FUUID      5e189785-f33f-55a1-c485-9709b0f9897d5e79
   MODEL      FHEM
   NAME       GartenlichtOnOff
   NOTIFYDEV  global
   NR         226
   NTFY_ORDER 50-GartenlichtOnOff
   STATE      initialized
   TYPE       DOIF
   VERSION    24274 2021-04-18 16:40:42
   READINGS:
     2021-05-03 09:22:13   cmd             0
     2021-05-03 09:22:13   mode            enabled
     2021-05-03 09:22:13   state           initialized
     2021-05-03 09:22:13   timer_01_c01    03.05.2021 19:46:47
   Regex:
     accu:
     collect:
   attr:
     cmdState:
     waitdel:
   condition:
     0          ::DOIF_time_once($hash,0,$wday)
   days:
   do:
     0:
       0          set Licht.Garten on-till {sub_randomtime('20:30:00','29:00')}
     1:
   helper:
     DEVFILTER  ^global$
     NOTIFYDEV  global
     globalinit 1
     last_timer 1
     sleeptimer -1
   intervalfunc:
   localtime:
     0          1620064007
   realtime:
     0          19:46:47
   time:
     0          {sunset_abs("HORIZON=3",0,"14:30","20:00")}
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   triggertime:
     1620064007:
       localtime  1620064007
       hash:
   uiState:
   uiTable:

schaltet sich das Gartenlicht erst gar nicht ein. Muss ich das DOIF auf Perl umstellen ? Und wenn ja: warum ?
RaspiPi v4, HM-LGW, 6x HM-TC-IT-WM-W-EU, 11x HM-CC-RT-DN, 1x HUE Bridge, 4x HUE-RC, 5x HUE White&Color, 15xHUE White, 3xHM-LC-SW1-FM, 1xHM-LC-SW2-FM, 1x ConBeeII, 15x Shelly1, 5xShellyplug, Aquara: 2x Temp-Sensor, 1x Vibrationssensor, 2x Lichtsensor, 19x Tür/Fenstersensor

Otto123

Hi,

was Du machen willst nennt sich set magic - wenn Du da mal in die Doku schaust wirst Du sehen -> nicht {Perl} sondern {(Perl)}

Also zwei Klammern und es funktioniert bestimmt :) - hat nichts mit DOIF zu tun (obwohl es da sicher eine besondere Lösung gibt)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rallye

Danke, wieder etwas gelernt. Ich bin zuversichtlich, dass das heute abends funktioniert ! Dass das mit DIOF nichts zu tun hat war mir schon klar aber hinbekommen hab ich es trotzdem ohne Hilfe nicht  8)
RaspiPi v4, HM-LGW, 6x HM-TC-IT-WM-W-EU, 11x HM-CC-RT-DN, 1x HUE Bridge, 4x HUE-RC, 5x HUE White&Color, 15xHUE White, 3xHM-LC-SW1-FM, 1xHM-LC-SW2-FM, 1x ConBeeII, 15x Shelly1, 5xShellyplug, Aquara: 2x Temp-Sensor, 1x Vibrationssensor, 2x Lichtsensor, 19x Tür/Fenstersensor