Ein Hallo an die erfahrenen FHEM-Nutzer!
Ich bin - noch - absoluter Einsteiger, und weiß mir einfach keinen Rat mehr:(!
Irgendwie nervt die Syntax oder ich habe einfach nur Denkfehler.
Ich versuche krampfhaft das Heizungs-Script - in leicht abgeänderter Form, da ich einen InterTechno-Schalter verwenden möchte - für meine Heizung einzubinden, doch ich erhalte immer wieder:
"n_heizung return value: Unknown command {my, try help
Unknown command my, try help"
Das Script:
define n_heizung notify n_heizung {\
my $brauche_waerme=0;;\
my $ventile_im_leerlauf=0;;\
my @@fhts=devspec2array("TYPE=FHT");;\
foreach(@@fhts) {\
my $ventil=ReadingsVal($_, "actuator", "101%");;\
$ventil=(substr($ventil, 0, (length($ventil)-1)));;\
if ($ventil > 10) {brauche_waerme=1};;\
if ($ventil < 5) {$ventile_im_leerlauf++}};;\
if ($brauche_waerme != 0) {Log(3,"Wärme benoetigt. Vorheriger Heizungsstatus: " . $heizung_status);; fhem("set heizung on")} else {if ($ventile_im_leerlauf == @@fhts) {Log(3,"Keine Wärme (mehr) benoetigt. Vorheriger Heizungsstatus: " . $heizung_status);;fhem("set heizung off")} else {Log(3,"Heizbedarf: " . $ventile_im_leerlauf . " von " . @@fhts . " Heizkörper im Leerlauf.")}}}\
Also das Script soll bei mir in eine heizung.cfg, welche auch schon korrekt in die fhem.cfg includiert ist.
Wo ist mein Fehler?? Was mache ich falsch??
Schon mal Danke!
Internette Grüße
Andy
Hi!
Eine "}" war zumindestens zuviel:if ($ventil < 5) {$ventile_im_leerlauf++}};;\
define n_heizung notify n_heizung {\
my $brauche_waerme=0;;\
my $ventile_im_leerlauf=0;;\
my @@fhts=devspec2array("TYPE=FHT");;\
foreach(@@fhts) {\
my $ventil=ReadingsVal($_, "actuator", "101%");;\
$ventil=(substr($ventil, 0, (length($ventil)-1)));;\
if ($ventil > 10) {brauche_waerme=1};;\
if ($ventil < 5) {$ventile_im_leerlauf++};;\
if ($brauche_waerme != 0) {\
Log(3,"Wärme benoetigt. Vorheriger Heizungsstatus: " . $heizung_status);;\
fhem("set heizung on");;\
} else {\
if ($ventile_im_leerlauf == @@fhts) {\
Log(3,"Keine Wärme (mehr) benoetigt. Vorheriger Heizungsstatus: " . $heizung_status);;\
fhem("set heizung off");; \
} else {\
Log(3,"Heizbedarf: " . $ventile_im_leerlauf . " von " . @@fhts . " Heizkörper im Leerlauf.");;\
}\
}\
}
MfG,MisterEltako
Hallo,
wenn ich mir auf die schnelle deine { und } durchzähle hast du eine } am Schluss zu viel.
Lösch mal eine Klammer weg und versuchs nochmal.
Grüße
Edith: Zu langsam ;-)
...na das muss ich doch gleich noch mal probieren:)!
Danke erst einmal!!
P.S. Also diese PERL-Syntax ist aber auch ein Fall für sich;)...
Kleiner Tipp wegen des Syntax Checks:
Wenn ich so ein Problem habe kopiere ich mir das Perl Script in eine Datei und lasse dann perl im Syntax-Check-Modus drüberlaufen. Damit bekomme ich aussagekräftigere Meldungen da mir Perl die entsprechende Zeilennummer ausgibt...
also script mit cut&paste z.B in bla.pl ablegen
danach perl -c bla.pl
und dann die Fehler rauspicken..
Viel Spass,
Uwe
Ja also Syntax-Fehler habe ich nun nicht mehr, das ist ja schon mal schön:).
ABER:
n_heizung return value: Can't modify constant item in scalar assignment at (eval 881) line 1, at EOF
Bareword "brauche_waerme" not allowed while "strict subs" in use at (eval 881) line 1.
Was sollten mir diese Zeilen sagen:(????
Hallo,
das soll $brauche_waerme heissen.
Hier fehlt das $
Grüße
Das gibt es doch nicht;)!
Also ich Programmiere ja nun auch schon so einige Jahre, allerdings mehr PHP & Co....
Vielleicht sollte ich ja mal meine Augen prüfen lassen;)!
DANKE!
Hallo,
gern geschehen.
Ich kenn das mit dem "Augen prüfen" auch ;-)
Keine Panik. Sowas passiert ab und an mal.
Bin ja froh das ich auch mal helfen konnte.
Grüße
@Puschel74
DANKE!!
Es läuft endlich ohne Fehler:)!
...so, nun auf zu weiteren Taten;)...