Schalten in einem Zeitraum, Zeiten per Dummy definiert

Begonnen von KnoPPerS, 02 Juli 2018, 22:21:41

Vorheriges Thema - Nächstes Thema

KnoPPerS

Hallo,

ich stehe gerade mächtig auf dem Schlauch und das bereits seit Stunden.

Ich schalte derzeit einige Leuchten per Bewegungsmelder in einem bestimmten Zeitraum. Dieser Zeitraum soll nun Simpel über Dummy's definiert werden (quasi Frauensicher).

Mein derzeitiges Notify zum Schalten sieht so aus:
Bw_Flur2:dim.* { if ( (($hour >= 22 || $hour < 5)) && Value("rr_Bastian") eq "home" && Value("Bew_Automatik") eq "an" && Value("LED_Kuehlschrank") eq "off" ) { {fhem ("set LED_Kuehlschrank hue 45942 2")} {fhem ("define at_Bw_Flur2_KuecheA at +00:00:50 trigger Bw_Flur2_KuecheA")} } }

Nun hab ich 2 Dummy's definiert, über welche man per Schieberegler den Zeitraum definieren kann:

  • Zeit_BWLicht_An
  • Zeit_BWLicht_Aus

Ich bekomme es allerdings einfach nicht hin, den Zeitraum mithilfe der Dummy korrekt festzulegen. Meine jetzige, nicht lauffähige Lösung sieht so aus:


Bw_Flur2:dim.* { if ( (({Value("Zeit_BWLicht_An")} || {Value("Zeit_BWLicht_Aus")})) && Value("rr_Bastian") eq "home" && Value("Bew_Automatik") eq "an" && Value("LED_Kuehlschrank") eq "off" ) { {fhem ("set LED_Kuehlschrank hue 45942 2")} {fhem ("define at_Bw_Flur2_KuecheA at +00:00:50 trigger Bw_Flur2_KuecheA")} } }

Der Wert der Zeitdummy's sind korrekt


list Zeit_BWLicht_An

Internals:
   CFGFN     
   NAME       Zeit_BWLicht_An
   NR         13797
   STATE      23:20
   TYPE       dummy
   READINGS:
     2018-07-02 21:39:22   state           23:20
Attributes:
   room       Dashboard
   setList    state:time
   webCmd     state


FHEM Log

PERL WARNING: Odd number of elements in anonymous hash at (eval 4386095) line 1.2018.07.02 22:28:15 3 : eval: my $EVENT='dim100%';my $SELF='Bw_Flur2_Kueche';my $TYPE='FS20';my $NAME='Bw_Flur2';my $EVTPART0='dim100%';{ if ((({Value("Zeit_BWLicht_An")} || {Value("Zeit_BWLicht_Aus")})) && Value("rr_Bastian") eq "home" && Value("Bew_Automatik") eq "an" && Value("LED_Kuehlschrank") eq "off" ) { {fhem ("set LED_Kuehlschrank hue 45942 2")} {fhem ("define at_Bw_Flur2_KuecheA at +00:00:50 trigger Bw_Flur2_KuecheA")} } }2018-07-02 22:28:15 at at_Bw_Flur2_KuecheA Next: 22:29:05


Hab schon diverse Themen durch, leider aber keine Themen gefunden welche sich auf einen Zeitraum definieren.

Liebe Grüße
Bastian

Ellert

ZitatHab schon diverse Themen
Falls Du DOIF verwenden möchtest, geht es auch ohne Perl-Kenntnisse, s. https://fhem.de/commandref_DE.html#DOIF_Indirekten_Zeitangaben

Der Vergleich
(({Value("Zeit_BWLicht_An")} || {Value("Zeit_BWLicht_Aus")}))
ist nicht korrekt formuliert, letztlich verknüpfst Du 2 Zeichen Ketten mit ||.

Wenn Du {"22:30"||"05:00"} in der FHEM-Befehlszeile ausführst siehst Du das Problem.

{Value("Zeit_BWLicht_An")} versucht Perl als "anonymous hash" zu interpretieren und schlägt fehl weil die Syntax unvollständig ist.

KnoPPerS

Hey Ellert,

vielen Dank für deinen Hinweis. Ich habe mich gestern nun (endlich) mit der DOIF Funktion auseinandergesetzt. Schiebe ich schon seit langem vor mir her.

Ich habe es mithilfe der Zeitangabe umgesetzt bekommen ->

https://wiki.fhem.de/wiki/DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erl%C3%A4uterungen#Zeitangaben

Für alle, welche vor dem gleichen Problem stehen sollten hier meine funktionierende Lösung:

([Bw_Flur2:"dim100%"] and [rr_Bastian:state] eq "home" and [Bew_Automatik:state] eq "an" and [LED_Kuehlschrank:state] eq "off" and [?[Zeit_BWLicht_An]-[Zeit_BWLicht_Aus]]) ((set LED_Kuehlschrank hue 45942),(set LED_Kuehlschrank pct 75),(define at_Bw_Flur2_KuecheA at +00:00:50 trigger Bw_Flur2_KuecheA)) DOELSE (setstate Bw_Flur2 off)

Viele Grüße
Bastian


Damian

Wenn du deine ersten Schritte mit DOIF gemacht hast, dann kannst du auch gleich die entsprechenden DOIF-Features nutzen:
aus

((set LED_Kuehlschrank hue 45942),(set LED_Kuehlschrank pct 75),(define at_Bw_Flur2_KuecheA at +00:00:50 trigger Bw_Flur2_KuecheA))

besser definieren:

(set LED_Kuehlschrank hue 45942, set LED_Kuehlschrank pct 75)(trigger Bw_Flur2_KuecheA)

attr wait 0,50


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

KnoPPerS

Ja cool, wieder was gelernt.
Deinen Teil zum Zusammenfassen der zwei Befehle hab ich gleich übernommen. Danke!

Was ich nicht so ganz verstehe ist das Wait Attribut. Mit dem "at" Device setze ich ja den Timer zum Abschalten der Leuchte nach 50Sek. Wenn ich nun dein Wait Attribut setze, wirkt sich das doch ebenso auf den Einschaltbefehl aus, oder nicht?

betateilchen

Zitat von: KnoPPerS am 02 Juli 2018, 22:21:41
Dieser Zeitraum soll nun Simpel über Dummy's definiert werden (quasi Frauensicher).

Es gibt kein frauensicheres FHEM.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

KnoPPerS

Zitat von: betateilchen am 04 Juli 2018, 14:08:53
Es gibt kein frauensicheres FHEM.

Stimmt, aber man kann versuchen es so Simpel wie möglich zu halten  :)