FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Alex am 01 Februar 2014, 00:58:10

Titel: at mit variablen
Beitrag von: Alex am 01 Februar 2014, 00:58:10
Hallo,

nachdem mein letztes Problem ja recht leich zu lösen war habe ich auch schon eine neue Frage:

ich habe ein notify, welches ein at erzeugt:

Zitat

define Act_on notify Button01:on {
   fhem ("define job at *07:00:05 { if ($wday == $Tag)  { fhem('set Schalter on')}   }   "
   ) 
}


Das fuktioniert soweit auch. Allerdings werden die Variablen wday und Tag beim Erzeugen des at (natürlich) durch die aktuellen Zahlenwerte ersetzt.
Ich möchte aber eigentlich, dass die Variablen stehen bleiben und erst beim Ausführen überprüft werden. Gibt es da eine möglichkeit? oder ein Work around?


Titel: Antw:at mit variablen
Beitrag von: maxritti am 01 Februar 2014, 13:37:56
Du könntest die beiden $wday und $Tag zum Zeitpunkt der Erzeugung des at' in zwei Dummies schreiben und dann bei dem if die Dummies auswerten.

http://fhem.de/commandref.html#dummy
Titel: Antw:at mit variablen
Beitrag von: Alex am 01 Februar 2014, 14:32:42
gute Idee!
Zitat
define wtag dummy
set wtag $wday

define Act_on notify Button01:on {\
   my $wday2 = ReadingsVal("wtag", "state", "");;\
   fhem ("define job at *07:00:05 { if ($wday2 == $Tag)  { fhem('set Schalter on')}   }   "
   )
}

hats gebracht! Das ist zwar ein bisschen komplizierter aber funktioniert! Vielen Dank!

tolle Comunity hier!
Titel: Antw:at mit variablen
Beitrag von: maxritti am 01 Februar 2014, 14:44:55
Kompliziert ist halt relativ, je nachdem was man möchte  ;D

Wobei das glaube ich nicht so funktioniert wie du möchtest.
Wo steht denn der Code?

Das Dummy wird ja zum Zeitpunkt des define ... gesetzt und mit $wday gefüllt.
Aber wenn ich Dich richtig verstehe, möchtest Du wenn Button01 auf on geht, der dummy mit $wday gefüllt wird, aber erst um 7:00:05 ausgewertet wird oder?

Eventuell ein wenig mehr erläutern, was du überhaupt möchtest.
Titel: Antw:at mit variablen
Beitrag von: Alex am 01 Februar 2014, 16:23:10
Eigentlich funktioniert es. Soweit ich das bis jetzt beurteilen kann :-)

Mein Ziel ist:

mit ein at an einem zuvor festgelegten Wochentag zu einer bestimmten Zeit (und anderen Parametern) auszuführen. Praktisch eine Art Wecker. Dazu stelle ich im Webfrontend in verschiedenen Dummies die Parameter (Zeit, wochentag etc) ein und übergebe diese dann mit dem klick auf Button01:on.

Dann soll mit Hilfe eines notify auf Button01 ein at angelegt werden. Dieses at kann ich zur angegeben Zeit ausführen. Leider kann ich aber keinen bestimmten Tag (zB. Freitag) angeben. Daher lege ich das at für jeden Tag an und überprüfe dann ob heute (wday) der vorher festgelegte Tag ist ($Tag). Wenn nicht passiert nichts; wenn die IF anweisung true ergibt wird mit "Schalter" eine Reihe von Aktionen ausgelöst.

Mein Problem war:
Zitatfhem ("define job at *07:00:05 { if ($wday == $Tag)  { fhem('set Schalter on')}   }   "
   ) 

erzeugt ein at mit zb

Zitat*07:00:05 { if ( 4 == 6) { fhem('set Schalter on')}}
was natürlich niemals ausgeführt wird.

zur Lösung:

Der Dummy wird einfach irgendwo in der cfg definiert und bekommt mit set dauerhaft den wert "$wday" .

Zitatdefine wtag dummy
set wtag $wday

Dann wird im notify der Wert des Dummy ("$wday") ausgelesen und in die variable $wday2 geschrieben ohne jedoch durch die Zahl ersetzt zu werden.
Es wird damit das folgende at erzeugt.


Zitat*07:00:05 { if ( $wday == 6) { fhem('set Schalter on')}}



Jetzt wird $wday wird also erst morgens um  7 mit dem aktuellen wochentag ausgefüllt und verglichen.
Titel: Antw:at mit variablen
Beitrag von: maxritti am 01 Februar 2014, 17:17:25
Zitat von: Alex am 01 Februar 2014, 16:23:10
Eigentlich funktioniert es. Soweit ich das bis jetzt beurteilen kann :-)

Dann ist ja alles prima  :D