[Gelöst] Defmod mit Value-Abfrage

Begonnen von Sascha.K, 26 August 2018, 09:07:41

Vorheriges Thema - Nächstes Thema

Sascha.K

Hallo zusammen,

ich habe momentan eine Zufallszeit gesteuerte Tischlampe "WZ_Essecke_Tisch", bei der jeden Tag  die Ein- und Ausschaltzeit neu generiert wird ...


define WZ_Essecke_Tisch_Zufall_an_temp at *00:10:00 {\
if (!$we) {\
  my $EZ1 = ReadingsVal("WZ_Essecke_Tisch_Zufall_an_WT_Auswahlst","state","?");;\
  my $Zufallszahl = int(rand(40) +11 );;\
  my $Uhr = $EZ1.":".$Zufallszahl.":".$Zufallszahl;;\
fhem("defmod WZ_Essecke_Tisch_Zufall_an at *".$Uhr."  { fhem('set WZ_Essecke_Tisch on') }");;\
}else{\
  my $EZ2 = ReadingsVal("WZ_Essecke_Tisch_Zufall_an_WE_Auswahlst","state","?");;\
  my $Zufallszahl = int(rand(40) +11 );;\
  my $Uhr = $EZ2.":".$Zufallszahl.":".$Zufallszahl;;\
fhem("defmod WZ_Essecke_Tisch_Zufall_an at *".$Uhr."  { fhem('set WZ_Essecke_Tisch on') }");;\
}\
}


Jetzt will ich zusätzlich in der DEFMOD-Zeile eine Value-Abfrage einbauen, damit die Lampe nur an- oder ausgeht, wenn der Button "EssZTisch.Zeitautomatik.Licht"gesetzt ist...

folgende Zeile brachte keinen Erfolg...

fhem("defmod WZ_Essecke_Tisch_Zufall_an at *".$Uhr." { if ( Value ("EssZTisch.Zeitautomatik.Licht") eq "on") { fhem('set WZ_Essecke_Tisch on') }}");;\


Da mir immer noch die Integration von Pearl- und FHEM-Code untereinander schwer fällt hoffe ich auf einen Lösungsvorschlag...

Mehrere Perl-Handbücher haben mir an dieser Stelle leider nichts gebracht...  >:(

Vielen Dank im voraus...






thgorjup

Hallo Sascha,

ich weiß zwar nicht ob es dir hilft, aber warum verpackst du deine Aktionen nicht in einem DOIF und verwendest als "EssZTisch.Zeitautomatik.Licht" einfach nur den "disable" Modus? Wenn disable = 1 dann EssZTisch.Zeitautomatik.Licht = 'aus' und anders herum.

Gruß
Thomas
FHEM auf Ubuntu 18.04LTS, 2x nanoCUL, JeeLink, nanoPIR, MQTT, ESP-Easy, HUE.
Sensoren+Aktoren: HM, IT, Lacrosse, Multitrade-PIR, VU+, Somfy

Otto123

#2
Moin,

Du unterbrichst in deinem if die Textkette  mit " ".
Dein String im Befehl fhem("") darf nicht mit " zwischendrin unterbrochen werden. Dein altes Konstrukt:
fhem("String1".$Uhr."String2")
Dein neues Konstrukt:
fhem("String1".$Uhr."String2"String3"String4"String5") Ohne Concatenation dazwischen.


Wenn das andere wirklich geht, brauchst Du nur im if die " gegen ' tauschen.

if ( Value ('EssZTisch.Zeitautomatik.Licht') eq 'on')

Verstanden?

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

Sascha.K

@ Otto123: Super... sobald ich heute zu Hause bin werde ich das mal gleich ausprobieren....

@ thgorjup: DOIF hatte ich noch gar nicht dem Schirm.... werde ich auch mal im CommandREF nachlesen und ausprobieren... dadurch wird das ganze etwas kürzer ..?


Mfg
Sascha

Sascha.K

Hallo,


@ thgorjup: das könnte dann so aussehen ..?


define WZ_Essecke_Tisch_Zufall_WE DOIF ([([WZ_Essecke_Tisch_Zufall_an_WE_Auswahlst]+[01:00]-int(rand(3500))) - ([WZ_Essecke_Tisch_Zufall_aus_WE_Auswahlst]+[01:00]+int(rand(3500)))]|7]) (set lampe on) DOELSE (set lampe off)           

define WZ_Essecke_Tisch_Zufall_WT DOIF ([([WZ_Essecke_Tisch_Zufall_an_WT_Auswahlst]+[01:00]-int(rand(3500))) - ([WZ_Essecke_Tisch_Zufall_aus_WT_Auswahlst]+[01:00]+int(rand(3500)))]|1 2 3 4 5]) (set lampe on) DOELSE (set lampe off)

define n_WZ_Essecke_Tisch_Zeitautomatik_Licht_WE ([WZ_Essecke_Tisch_Zeitautomatik_Licht] eq "on") (set WZ_Essecke_Tisch_Zufall_WE enable) DOELSEIF ([WZ_Essecke_Tisch_Zeitautomatik_Licht] eq "off") (set WZ_Essecke_Tisch_Zufall_WE disable)

define n_WZ_Essecke_Tisch_Zeitautomatik_Licht_WT ([WZ_Essecke_Tisch_Zeitautomatik_Licht] eq "on") (set WZ_Essecke_Tisch_Zufall_WT enable) DOELSEIF ([WZ_Essecke_Tisch_Zeitautomatik_Licht] eq "off") (set WZ_Essecke_Tisch_Zufall_WT disable)



bin mal gespannt wenn ich wieder zu Hause bin ... :)

Mfg
Sascha

Sascha.K

Hallo,


habe den Tipp von Otto123 ausprobiert....  habe aber anscheinend noch weitere Fehler eingebaut...  ::)

Bin nun auf DOIf umgestiegen. Funktioniert nach ein bisschen Einarbeitung sehr gut ... ;) Kann ich jeden empfehlen...

Mfg
Sascha