Guten Abend,
ich habe vorhin im Haus in einem at, was du Rollläden herunterfährt, alle fixen Prozent zahlen auf "{Rollladen_Winter_Sommer}". Dies ist eine Subroutine, die entweder die Zahl "0" oder "35" ausgibt.
Somit will ich erreichen, dass im Winter die Rollläden ganz herunter fahren und im Sommer nur auf 35%.
Im Log wird mir gesagt, dass es keine dezimal zahl ist. Anscheinend wird die Subroutine nicht aufgerufen und berechnet, sondern nur als string genommen?!
Zitatset EG.Esszimmer dim {Rollladen_Winter_Sommer} : Error: {Rollladen_Winter_Sommer} is not a decimal number
Meine at definition:
Internals:
COMMAND set UG.Schlafzimmer dim {Rollladen_Winter_Sommer};set 1OG.Bad dim {Rollladen_Winter_Sommer};sleep 3 quiet;set 1OG.Flur dim {Rollladen_Winter_Sommer};set 1OG.Martina dim {Rollladen_Winter_Sommer};sleep 4 quiet;set 1OG.Rolf_Links dim {Rollladen_Winter_Sommer};set 1OG.Rolf_Rechts dim {Rollladen_Winter_Sommer};sleep 3 quiet;set EG.Wohnzimmer_Rechts dim {Rollladen_Winter_Sommer};set EG.Wohnzimmer_Mitte_Rechts dim {Rollladen_Winter_Sommer};sleep 3 quiet;set EG.Wohnzimmer_Mitte_Links dim {Rollladen_Winter_Sommer};set EG.Wohnzimmer_Links dim {Rollladen_Winter_Sommer};sleep 4 quiet;set EG.Kueche dim {Rollladen_Winter_Sommer};set EG.Bad dim {Rollladen_Winter_Sommer};set EG.Flur dim {Rollladen_Winter_Sommer};sleep 60 quiet;{ if (((ReadingsVal("FDGK_Wohnzimmer","state","") eq "closed") || (ReadingsVal("FDGK_Wohnzimmer","state","") eq "tilted")) && (ReadingsVal("Esszimmer_Rollladen_dummy","state","") eq "on")) {fhem ("set EG.Esszimmer dim {Rollladen_Winter_Sommer}") }};set Markise_Links rein;set Markise_Rechts rein
DEF *{sunset(-1200)} set UG.Schlafzimmer dim {Rollladen_Winter_Sommer};set 1OG.Bad dim {Rollladen_Winter_Sommer};sleep 3 quiet;set 1OG.Flur dim {Rollladen_Winter_Sommer};set 1OG.Martina dim {Rollladen_Winter_Sommer};sleep 4 quiet;set 1OG.Rolf_Links dim {Rollladen_Winter_Sommer};set 1OG.Rolf_Rechts dim {Rollladen_Winter_Sommer};sleep 3 quiet;set EG.Wohnzimmer_Rechts dim {Rollladen_Winter_Sommer};set EG.Wohnzimmer_Mitte_Rechts dim {Rollladen_Winter_Sommer};sleep 3 quiet;set EG.Wohnzimmer_Mitte_Links dim {Rollladen_Winter_Sommer};set EG.Wohnzimmer_Links dim {Rollladen_Winter_Sommer};sleep 4 quiet;set EG.Kueche dim {Rollladen_Winter_Sommer};set EG.Bad dim {Rollladen_Winter_Sommer};set EG.Flur dim {Rollladen_Winter_Sommer};sleep 60 quiet;{ if (((ReadingsVal("FDGK_Wohnzimmer","state","") eq "closed") || (ReadingsVal("FDGK_Wohnzimmer","state","") eq "tilted")) && (ReadingsVal("Esszimmer_Rollladen_dummy","state","") eq "on")) {fhem ("set EG.Esszimmer dim {Rollladen_Winter_Sommer}") }};set Markise_Links rein;set Markise_Rechts rein
NAME Sonnenuntergang
NR 142
NTM 16:41:51
PERIODIC yes
RELATIVE no
REP -1
STATE Next: 16:41:51
TIMESPEC {sunset(-1200)}
TRIGGERTIME 1513611711
TRIGGERTIME_FMT 2017-12-18 16:41:51
TYPE at
READINGS:
2017-07-14 13:05:41 Uhrzeit sunset()
2017-12-17 16:41:32 state Next: 16:41:51
Attributes:
room ZWave
und meine Subroutine in MyUtils.pm:
sub Rollladen_Winter_Sommer(){
use Time::Local;
my ($Sekunde, $Minute, $Stunde, $Monatstag, $Monat,
$Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
$Jahr += 1900;
$Monat +=1;
my $temperature = ReadingsVal("Aussen_Thermometer", "temperature", "");
my $Winter_Sommer = 0; #0 ist Winter, Sommer ist 1
my $Rollladenhoehe = "";
if ($Monat == 9 || $Monat == 10 || $Monat == 11 || $Monat == 12 || $Monat == 1 || $Monat == 2 || $Monat == 3 || $Monat == 4 || $Monat == 5) {
$Winter_Sommer = 0;
}
elsif ($Monat == 2 || $Monat == 3 || $Monat == 4 || $Monat == 5 || $Monat == 6 || $Monat == 7 || $Monat == 8 || $Monat == 9 || $Monat == 10) {
$Winter_Sommer = 1;
}
if ($temperature <= 10 && $Winter_Sommer == 0) {
$Rollladenhoehe = "0";
}
if ($temperature >= 10 && $Winter_Sommer == 1) {
$Rollladenhoehe = "35";
}
return $Rollladenhoehe;
}
War ehrlich gesagt recht stolz auf mich, dass diese Berechnung an sich klappt. Wenn ich "{Rollladen_Winter_Sommer}" in die FHEM command line eingebe, bekomme ich auch die richtige Rückmeldung.
Wieso geht das bei dem at nicht?
Würde mich freuen, wenn mir das jemand etwas näher bringen könnte. :o
Danke und Gruß,
Fixel
Hallo Fixel,
ganz schnell geschaut, das hier
$Rollladenhoehe = "35"
Wird ein String! "<Zahl>"Zitatis not a decimal number
$Bla = <Zahl>
$Rollladenhoehe = 35
wäre eine Zahl -> decimal number 8)Gruß Otto
Du versuchst, einen fhem Befehl und perl Code zu vermischen. So einfach geht das aber nicht.
{fhem(,,set EG.Esszimmer dim".Rolladen_Winter_Sommer())}
sollte funktionieren. Die Hochkomma müssen immer oben stehen, das hat mein ipad grade vermurkstö
@Otto du liegst mal wieder komplett falsch. Schau doch nochmal die Fehlermeldung genau an, es geht doch gar nicht um die Zahl. Und perl wäre es an dieser Stelle völlig egal, ob da 35 oder ,,35" steht.
Du musst den Perlteil bei set zusätzlich in runde Klammern setzen, damit er als solcher erkannt wird, also:
set UG.Schlafzimmer dim {(Rollladen_Winter_Sommer)}...
Das ist obskure FHEM Syntax...
Vielem Dank an alle!
Damians Lösung konnte ich am besten in mein bestehenden Code einarbeiten. Funktioniert nun super!
Danke und Gruß,
Fixel