Hi!
ich baue gerade für meine Heizung einen Winter-Sommer-Taster (also An-Aus)
ich habe mich dazu dieses Codes hier bedient und für mich angepasst:
http://forum.fhem.de/index.php/topic,10153.msg56915.html#msg56915
#****** WinterSommerschaltung ***** Anfang ****
define HeizungWinterSommer dummy
attr HeizungWinterSommer alias Heizung einschalten (Winter)
attr HeizungWinterSommer devStateIcon on:sani_heating@green off:sani_heating@red
attr HeizungWinterSommer group Heizung
attr HeizungWinterSommer room Heizung
attr HeizungWinterSommer setList on off
define FileLog_HeizungWinterSommer FileLog ./log/HeizungWinterSommer-%Y.log HeizungWinterSommer
attr FileLog_HeizungWinterSommer logtype text
define WinterChecker notify HeizungWinterSommer {\
if ("%" eq "on") {\
fhem ("define HeizWS1 at +00:00:10 set Heizung.1_ClimRT_tr,Raum2 controlMode auto");;\
}\
else {\
fhem ("define HeizWS6 at +00:00:10 set Heizung.1_ClimRT_tr controlManu on");;\
fhem ("define HeizWS8 at +00:00:10 set Heizung.1_ClimRT_tr desired-temp 5.5");;\
}\
}
# ******* WinterSommerschaltung***** Ende ****
in der fhem.conf läuft dieser Code so, jetzt würde ich aber gerne den IF teil als Parameter in die myUtils "verschieben" allerdings bekomm ichs nicht hin!
wie muss ich jetzt den winterchecker umbauen, damit ich den if befehl auf der config raus hab und im myutils aufrufen kann?[/code]
Hallo,
hier
http://www.fhemwiki.de/wiki/99_myUtils_anlegen (http://www.fhemwiki.de/wiki/99_myUtils_anlegen)
hat es ein paar Tipps dazu.
Du musst eigentlich nur sicherstellen das dein Code in einer SUB ist und aus dem notify passend aufgerufen wird.
Grüße
Zum Beispiel so:
in der fhem.cfg:
#****** WinterSommerschaltung ***** Anfang ****
define HeizungWinterSommer dummy
attr HeizungWinterSommer alias Heizung einschalten (Winter)
attr HeizungWinterSommer devStateIcon on:sani_heating@green off:sani_heating@red
attr HeizungWinterSommer group Heizung
attr HeizungWinterSommer room Heizung
attr HeizungWinterSommer setList on off
define FileLog_HeizungWinterSommer FileLog ./log/HeizungWinterSommer-%Y.log HeizungWinterSommer
attr FileLog_HeizungWinterSommer logtype text
define WinterChecker notify HeizungWinterSommer {WinterChecker("%")}
# ******* WinterSommerschaltung***** Ende ****
in der 99_myUtils.pm:
sub WinterChecker($)
{
my ($event) = @_;
if ($event eq "on")
{
fhem ("define HeizWS1 at +00:00:10 set Heizung.1_ClimRT_tr,Raum2 controlMode auto");
}
else {
fhem ("define HeizWS6 at +00:00:10 set Heizung.1_ClimRT_tr controlManu on");
fhem ("define HeizWS8 at +00:00:10 set Heizung.1_ClimRT_tr desired-temp 5.5");
}
}
Gruß
Markus
super, danke!
das my ($event) = @_; hat mir gefehlt! was macht dieser befehl?
ich verstehe die zuordnung von variablen noch nicht so ganz, in fhem.conf rufe ich mit {WinterChecker("%")} den entsprechenden code aus myutils ab, und gebe den parameter % mit. Wofür steht %, denn das wird in myutils dann mit dem Winterchecker-$ weiterverwendet und dann bin ich raus, was die logik angeht :)
Ganz einfach:
Bei der Definition deiner SUB gibts du an wieviele Parameter die SUB hat:
WeatherChecker($) - heist 1 Parameter
WeatherChecker($$) - sind 2 Parameter
WeatherChecker($$$) - sind 3 Parameter
WeatherChecker($$;$) - sind mindestens 2 Parameter und optional ein dritter Parameter
Wenn die SUB startet, stehen die Parameter in @_ zur Verfügung (ein Array, welches nacheinander alle Argumente enthält.
In Perl kann man bei der Variablendeklaration mit Klammern arbeiten und so ein Array direkt auf mehrere Variablen aufteilen.
Dazu basierend auf den oben aufgeführten Beispielen also:
my ($arg1) = @_;
my ($arg1,$arg2) = @_;
my ($arg1,$arg2,$arg3) = @_;
Und damit hast du deine Übergabeparameter in der Funktion als Variablen verfügbar.
Viele Grüße
Markus
Das % in WeatherChecker("%") ist ein Platzhalter innerhalb von notify, welcher ein Teil des auslösenden Events darstellt. Das % wird also, wenn ein Notify ausgelöst wird, mit einem Wert ersetzt.
Es gibt mehrere solcher Platzhalter die genauer in der Commandref zu notify dokumentiert sind: http://fhem.de/commandref.html#notify
Gruß
Markus
Hallo,
ich muss trotzdem nochmal meinen Senf dazu geben ;D
@ sollte gegen $NAME und
% gegen $EVENT getauscht werden.
Grüße
cool! Danke!
von selber programmieren noch weit entfernt, aber verstanden! das ist der erste schritt!
warum sollte man das austauschen?
Deswegen
http://forum.fhem.de/index.php/topic,11886.0.html (http://forum.fhem.de/index.php/topic,11886.0.html)
Da muss ich zustimmen.
ok, verstehe!
wenn ich my ($event) = $NAME; nehme, mault er aber wieder:
Global symbol "$NAME_" requires explicit package name at ./FHEM/99_myUtils.pm line 43.
wäre gut zu wissen, wie ich das umsetzen muss, habe auch noch in meinem code für die Heizungssteuerung mittels readingsgroup @_ drin. dann würde ich das gleich mit umschreiben!
Also irgendwas scheint doch an meiner installation auch falsch zu sein.... Der meckert doch dass er den namen der heizung1 nicht bekommt... Obwohl er es eigentlich sollte...
Lightscenes funktioniert auch nicht, irgendwas ist doch da faul!!
In der Perl-Funktion brauchst du nichts zu verändern, die bleibt so, wie ich sie gepostet hatte
Diese Sache die Puschel erwähnt hat bezieht sich nur auf das notify.
Sein Vorschlag bezieht sich darauf das % in der Notify-Definition durch $EVENT zu tauschen, also:
# ALT:
define WinterChecker notify HeizungWinterSommer {WinterChecker("%")}
# NEU:
define WinterChecker notify HeizungWinterSommer {WinterChecker("$EVENT")}
mit $EVENT kann man einfacher erkennen worum es sich handelt als nur ein bloßes %-Zeichen.
Achso, das war mir nicht klar! Hätte ich mir aber denken können... man ändert ja nicht die programmiersprache sondern die interpretation innerhalb der software :-/
das hatte ich schon gemacht und hat auch funktioniert!
Danke euch beiden!!
PS: offtopic-> das lightscene funktioniert jetzt auch, hatte libjson-perl nicht installiert