at mit variablen

Begonnen von Alex, 01 Februar 2014, 00:58:10

Vorheriges Thema - Nächstes Thema

Alex

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?



maxritti

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

Alex

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!

maxritti

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.

Alex

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.

maxritti

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