Guten Morgen,
als absoluter Anfänger und ohne Ahnung von perl, tue ich mir doch etwas schwer...
Aber immerhin läuft schon was :-)
Alles was ich bisher mache ist Spielerei um mit dem System "warm" zu werden.
Also zum Thema:
Ich habe mir einen Dummy Schatler gebastelt: "Boost_30min".
Sobald dieser angeschaltet wird, soll ein anderer Schalter "Sparmodus_Kueche" ausgeschaltet werden,
die "boostDuration" meines MAX-Thermostats ausgelesen werden, das Thermostat in den boost Modus gehen,
gewartet werden (sleep "boostDuration" * 60) und anschließend der Schalter wieder "off" gesetzt werden.
Eigentlich nicht viel, dachte ich....
Hier der Code:
define n_Boost30_an notify Boost_30min:on \
my $boosttime= ReadingsVal("Kueche", "boostDuration", 30);; \
set Sparmodus_Kueche off ;; \
set Kueche desiredTemperature boost ;; \
sleep ($boosttime *60) ;; \
set Boost_30min off
Problem ist, die "sleep" Zeit. Das Log gibt mir: Cannot interpret ($boosttime as seconds
Leider weiß ich nicht, was er ausgelesen hat, daher die Frage, wie kontrolliere ich den Wert $boosttime ?
Eine Ausgabe im Log, Web oder EventMonitor wäre schön.
Ist denn eine Deklaration mit Berechnung so "sleep ($boosttime *60)" überhaupt möglich ?
Helft mir doch mal bitte auf die Sprünge.
Gruß
Florian
return "Cannot interpret $sec as seconds" if($sec !~ m/^[0-9\.]+$/);
Das heißt, sleep (das ist ein fhem Befehl und keine Funktion!) kann nur direkt mit Zahlenwerten aufgerufen werde und nicht mit Rechenergebnissen.
Heißt im Klartext, keine Variable möglich ?!
Schade....
dein problem ist das du an mehreren stellen die fhem und die perl ebene mischst.
my ... ist perl
$boosttime *60 ist perl
sleep(...) ist perl
dein notify ist aber nicht in {} eingeschlossen und deshalb stehen dir dort 'nur' die fhem kommandos zur verfügung.
eine möglichkeit das zu lösen ist ein notify auf perl ebene zu verwenden um dort rechnen zu können und dann fhem aus der perl ebene mit dem ergebniss aufzurufen.
also z.b. etwas in der art:
Boost_30min:on {
my $boosttime= ReadingsVal("Kueche", "boostDuration", 30) * 60;
fhem( "set Sparmodus_Kueche off;set Kueche desiredTemperature boost;sleep $boosttime; set Boost_30min off" );
}
gruss
andre
ps: du machst es dir einfacher wenn du es im DEF bereich eingibst. das notify ist langsam lang genug um es in 99_myUtils.pm auszulagern. du musst aufpassen das du das richtige sleep verwendest. perl sleep blockiert fhem. nur fhem sleep ist ok.
Oh, ich mische schon :-\
define n_Boost30_an notify Boost_30min:on {\
my $boosttime= ReadingsVal("Kueche", "boostDuration", 30) * 60;
fhem( "set Sparmodus_Kueche off;set Kueche desiredTemperature boost;sleep $boosttime; set Boost_30min off" );
}
führt zu
Error messages while initializing FHEM:
configfile: Unknown command fhem(, try help.
Cannot interpret $boosttime as seconds
Unknown command }, try help.
beim Start.
nicht ins config file eintragen sondern im DEF bereich im web frontend editieren.
wenn du es selber ins config file einträgst musst du dich selber um das maskieren von zeilenenden und ; kümmern.
gruss
andre
Okay, das klappt !
Schön zu sehen, was er dann im config-File macht.
Das hilft um die Syntax zu verstehen:
define n_Boost30_an notify Boost_30min:on {\
my $boosttime= ReadingsVal("Kueche", "boostDuration", 30) * 60;;\
fhem( "set Sparmodus_Kueche off;;set Kueche desiredTemperature boost;;sleep $boosttime;; set Boost_30min off" );;\
}\
Kannst du mir auf einfachem Wege auch erklären, wie
ich diese Variable "$boosttime" irgendwo ausgeben kann?
Am liebsten im WebInterface.
was meinst du mit ausgeben?
ins log schreibst du z.b. mit Log 3, "boosttime: $boosttime";
ins web interface kannst du nicht einfach etwas ausgeben. aber der wert steht doch in deinem reading.
gruss
andre
Das mit dem Log ist schon mal hilfreich, danke.
Es geht mir jetzt nicht speziell um diese Variable, eher allgemein.
Kann ich denn einen Dummy anlegen, der statt ein Schalter eben eine Dezimale Ausgabe hat
und diesen im Web sichtbar machen?
schau dir stateFormat und setList an.
Danke, werde ich tun.
Manchmal ist es schwer, die richtigen Befehle zu finden :-[