FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: FLOK am 06 November 2015, 09:31:31

Titel: [Gelöst] Syntaxprobleme / Rechnen mit Variablen / Variablen ausgeben
Beitrag von: FLOK am 06 November 2015, 09:31:31
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
Titel: Antw:Syntaxprobleme / Rechnen mit Variablen / Variablen ausgeben
Beitrag von: betateilchen am 06 November 2015, 09:47:38
  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.
Titel: Antw:Syntaxprobleme / Rechnen mit Variablen / Variablen ausgeben
Beitrag von: FLOK am 06 November 2015, 09:58:47
Heißt im Klartext, keine Variable möglich ?!
Schade....

Titel: Antw:Syntaxprobleme / Rechnen mit Variablen / Variablen ausgeben
Beitrag von: justme1968 am 06 November 2015, 09:58:59
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.
Titel: Antw:Syntaxprobleme / Rechnen mit Variablen / Variablen ausgeben
Beitrag von: FLOK am 06 November 2015, 10:04:27
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.
Titel: Antw:Syntaxprobleme / Rechnen mit Variablen / Variablen ausgeben
Beitrag von: justme1968 am 06 November 2015, 10:09:34
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
Titel: Antw:Syntaxprobleme / Rechnen mit Variablen / Variablen ausgeben
Beitrag von: FLOK am 06 November 2015, 10:25:19
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.
Titel: Antw:Syntaxprobleme / Rechnen mit Variablen / Variablen ausgeben
Beitrag von: justme1968 am 06 November 2015, 10:27:55
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
Titel: Antw:Syntaxprobleme / Rechnen mit Variablen / Variablen ausgeben
Beitrag von: FLOK am 06 November 2015, 10:30:33
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?
Titel: Antw:Syntaxprobleme / Rechnen mit Variablen / Variablen ausgeben
Beitrag von: justme1968 am 06 November 2015, 10:33:17
schau dir stateFormat und setList an.
Titel: Antw:Syntaxprobleme / Rechnen mit Variablen / Variablen ausgeben
Beitrag von: FLOK am 06 November 2015, 10:36:38
Danke, werde ich tun.
Manchmal ist es schwer, die richtigen Befehle zu finden  :-[