Hallo Zusammen,
ich habe gefühlt alle Themen 99_MyUtils gelesen finde aber irgendwie die Lösung auf meine Frage nicht. Eigentlich ist mir das fast schon ein wenig peinlich aber der Groschen will nicht fallen. Ich habe in der 99_MyUtil eine Prozedur hinterlegt um die Zeitschaltung bzw. Temperatureinstellung an meinem Wandthermostad zu steuer.
# UG Thermostat Temperatur setzen
# Aufruf: {SetTempList_WT_01()}
sub
SetTempList_WT_01()
{
{ fhem ("set WT_01_Climate tempListMon prep 06:30 12.0 20:00 21.0 24:00 12.0")};
{ fhem ("set WT_01_Climate tempListTue prep 06:30 12.0 20:00 21.0 24:00 12.0")};
{ fhem ("set WT_01_Climate tempListWed prep 06:30 12.0 20:00 21.0 24:00 12.0")};
{ fhem ("set WT_01_Climate tempListThu prep 06:30 12.0 20:00 21.0 24:00 12.0")};
{ fhem ("set WT_01_Climate tempListFri prep 06:30 12.0 21:00 21.0 24:00 12.0")};
{ fhem ("set WT_01_Climate tempListSat prep 06:30 12.0 21:00 21.0 24:00 12.0")};
{ fhem ("set WT_01_Climate tempListSun exec 06:30 12.0 21:00 21.0 24:00 12.0")};
}
Jetzt wollte ich diese Funktion der FHEM.cfg aufrufen habe einen keinen blassen schimmer wie ich das mache. Ich habe die Foren gelesen aber nicht verstanden denke ich. Was müsste ich den in der FHEM.cfg schreiben damit die routine Funktioniert oder ist das sogar gar nicht notwendig?
Dank
Ist nicht notwendig. So lange du dich an die Beispieldatei gehalten hast geht es alleine beim Starten von FHEM. Oder du machst ein reload Modulnamen.
Du solltest garnichts in die fhem.cfg schreiben.
Wieso verwendest du überhaupt eine Perl sub? Das sind alles FHEM Befehle die du problemlos aus einem notify/ar/doif aufrufen kannst.
1. Die Datei heißt 99_myUtils.pm
2. Du hast viel zuviele Klammern
# UG Thermostat Temperatur setzen
# Aufruf: {SetTempList_WT_01()}
sub SetTempList_WT_01() {
fhem ("set WT_01_Climate tempListMon prep 06:30 12.0 20:00 21.0 24:00 12.0");
fhem ("set WT_01_Climate tempListTue prep 06:30 12.0 20:00 21.0 24:00 12.0");
fhem ("set WT_01_Climate tempListWed prep 06:30 12.0 20:00 21.0 24:00 12.0");
fhem ("set WT_01_Climate tempListThu prep 06:30 12.0 20:00 21.0 24:00 12.0");
fhem ("set WT_01_Climate tempListFri prep 06:30 12.0 21:00 21.0 24:00 12.0");
fhem ("set WT_01_Climate tempListSat prep 06:30 12.0 21:00 21.0 24:00 12.0");
fhem ("set WT_01_Climate tempListSun exec 06:30 12.0 21:00 21.0 24:00 12.0");
}
3. Der Aufruf erfolgt wie jeder andere Funktionsaufruf in fhem auch.
define bla_notify notify irgendeinDevice:irgendeinEvent {SetTempList_WT_01()}
@KernSani: Deine Antwort ist wenig sinnvoll.
@DanielP: sorry, wenn ich Unfug geschrieben habe.
@betateilchen: Bitte im Aufklärung - Wieso macht es in diesem Fall Sinn eine Reihe von Fhem-Befehlen in eine sub auszulagern?
Hi,
danke für den Hinweis mit dem Aufruf und den Klammern. Habe die Anpassungen durchgeführt. Vielleicht könnt Ihr mir noch kurz helfen die Syntax zu verstehen
#99_myUtil.pm
define bla_notify notify WT_01:irgendeinEvent {SetTempList_WT_01()}
was müsste den in meinem Fall als "bla_notify" eingetragen werden und was für ein "Event" müsste man verweden. Mir ist nicht ganz klar wo ich die möglichen Events finde bzw. was man dort eintragen sollte.
Danke :)
Zitat von: DanielP am 01 Oktober 2016, 11:13:21
helfen die Syntax zu verstehen
Was ist denn daran nicht zu verstehen?
"bla_notify" ist der Name, unter dem das notify in Deinem fhem angelegt wird. Da könntest Du auch "Donnerstag" oder "Fritz" schreiben, den Namen bestimmst Du ganz alleine selbst. Es macht Sinn, notifies irgendwie "sinnvoll" zu benennen.
Die Syntax eines notify oder ist in der commandref beschrieben (gib mal "help notify" in die Befehlszeile ein), events findest Du m Event-Monitor
Ich weiss doch gar nicht, was Du überhaupt bewirken willst
Zitat von: KernSani am 01 Oktober 2016, 11:12:35
@betateilchen: Bitte im Aufklärung - Wieso macht es in diesem Fall Sinn eine Reihe von Fhem-Befehlen in eine sub auszulagern?
Es macht in Bezug auf die Lesbarkeit eines notify/at/oderwasauchimmer meistens Sinn, eine Reihe von fhem Befehlen oder Funktionsaufrufen in eine sub auszulagern.
define bla_notify notify irgendeinDevice:irgendeinEvent {SetTempList_WT_01()}
ist doch viel einfacher zu lesen als
define bla_notify notify irgendeinDevice:irgendeinEvent set WT_01_Climate tempListMon prep 06:30 12.0 20:00 21.0 24:00 12.0;;
set WT_01_Climate tempListTue prep 06:30 12.0 20:00 21.0 24:00 12.0;; set WT_01_Climate tempListWed prep 06:30 12.0 20:00 21.0 24:00 12.0;;
set WT_01_Climate tempListThu prep 06:30 12.0 20:00 21.0 24:00 12.0;; set WT_01_Climate tempListFri prep 06:30 12.0 21:00 21.0 24:00 12.0;;
set WT_01_Climate tempListSat prep 06:30 12.0 21:00 21.0 24:00 12.0;; set WT_01_Climate tempListSun exec 06:30 12.0 21:00 21.0 24:00 12.0;;
Zitat von: KernSani am 01 Oktober 2016, 11:12:35
@DanielP: sorry, wenn ich Unfug geschrieben habe.
@betateilchen: Bitte im Aufklärung - Wieso macht es in diesem Fall Sinn eine Reihe von Fhem-Befehlen in eine sub auszulagern?
Weil eine sub dazu da ist komplexe Befehle die "über eine" Notify Zeile hinausgehen auf zu nehmen. Da gehören auch fhem Befehle dazu. So kannst du zum Beispiel eine komplexe Berechnung durch führen und das Ergebnis dann in ein Dummy schreiben ALS FHEM BEFEHL!
@cooltux, betateilchen: ist zwar jetzt off-topic, aber: Komplexe Berechnungen in eine sub auszulagern ist klar, eine Reihe von FHEM-Befehlen ohne Berechnung packe ich aber lieber in ein formatiertes DOIF. Gerade für einen Anfänger denke ich, ist das auch wesentlich verständlicher, als sich auch noch mit Perl subs herum zu schlagen
Hi,
eigentlich dachte ich, das mein Vorhaben ziemlich simpel ist. Ich habe mir ein Heizungskörper und ein Wandthermostat gekauft um erstmal das Thema komplett zu testen und Erfahrungen zu sammeln bevor ich mich mit Hardware eindecke.
In der 99_myUtil wollte ich für das Wandthermostat für Montag bis Sonntag die Temperatur über den Tageslauf hinweg steuern. Die Empfehlung aus einem anderen Beitrag war dies über den Perl Code zu realisieren was ich auch sehr gut finde da ich vorhabe weitere Geräte anzuschaffen. Ich versuche also mein Wandthermostat über den Code zu parametrisieren. Und aus Übersichtlichkeitsgründen versuche ich das gleich in der 99_myUtil zu machen und natürlich auch um zu lernen wie ich damit umgehe. Es sollten anschließend natürlich noch weitere Funktion folgen.
#99_myUtil.pm
define WT_01_Zeitsteuerung notify WT_01:WT_01_Climate {SetTempList_WT_01()}
Das ist der momentan in der FHEM.cfg hinterlegte Aufruf. Ich glaube nur dass, das Event das falsche ist.
Danke
Hi,
du solltest dir erst mal überlegen "WIE/durch WAS" das Setzen der Templisten ausgelöst werden soll:
Taster
Button in der Weboberfläche
Automatisch alle x Stunden/Tage/Wochen/...
Dann das entsprechende Ereignis finden (bzw. bei zeitlicher Steuerung: 'at' definieren) und dann den entsprechenden Notify definieren.
Du kannst den Befehl bei Bedarf auch einfach durch Eingabe in das "Command-Fenster" auslösen...
Gruß, Joachim
P.S.: der aktuelle Notify würde schlimmstenfalls bei jedem Event des ClimaChannels (ca. alle 3min) die Templiste neu setzen, ganz schlecht!! Du musst auch die Funklast im Auge behalten und ein dauerndes Setzen der Templist auf immer die selben Werte macht keinen Sinn (die bleiben ja gespeichert)...
Ok hier müssen wir nun mal langsam etwas spalten und überlegen.
Ganz kurz zum OffTopic.
Im Grunde haben wir alle Recht, denn es obliegt jedem User selbst zu entscheiden wie er es machen will. Ich persönlich habe das setzen der Templisten auch in ein DOIF.
Bei meinen Antworten habe ich aber nicht hinterfragt wieso weshalb, sondern versucht dem TE die Funktionsweise einer myUtils Sub zu erklären.
So nun zum setzen der Templisten.
Sofern es sich um Homematic Geräte handelt.
http://www.fhemwiki.de/wiki/HomeMatic_HMInfo_TempList/Weekplan
Bitte einmal lesen und den allerersten Eintrag ToDo mit dazu. Bei fragen neuer Thread oder PM.
Zitat von: MadMax-FHEM am 01 Oktober 2016, 11:56:50
Hi,
du solltest dir erst mal überlegen "WIE/durch WAS" das Setzen der Templisten ausgelöst werden soll:
Taster
Button in der Weboberfläche
Automatisch alle x Stunden/Tage/Wochen/...
Da muss ich dir absolut zustimmen. Über die Möglichkeiten habe ich noch gar nicht nachgedacht. Da es sich um ein einmaliges schreiben einer Information auf das Gerät handelt wäre es vermutlich am besten dies über eine Button in der Weboberfläche zu realisieren. Allerdings wüsste ich nicht wie ich das Anfangen sollte :(
Zitat von: MadMax-FHEM am 01 Oktober 2016, 11:56:50
Dann das entsprechende Ereignis finden (bzw. bei zeitlicher Steuerung: 'at' definieren) und dann den entsprechenden Notify definieren.
Du kannst den Befehl bei Bedarf auch einfach durch Eingabe in das "Command-Fenster" auslösen...
Wie würde ich denn den Befehl im "Command-Fenster" auslösen? Ich hatte es versucht aber ohne Erfolg bisher. Wie müsste der Aufruf den aussehen?
Gruß, Joachim
Zitat von: MadMax-FHEM am 01 Oktober 2016, 11:56:50
P.S.: der aktuelle Notify würde schlimmstenfalls bei jedem Event des ClimaChannels (ca. alle 3min) die Templiste neu setzen, ganz schlecht!! Du musst auch die Funklast im Auge behalten und ein dauerndes Setzen der Templist auf immer die selben Werte macht keinen Sinn (die bleiben ja gespeichert)...
Vielen Dank für den Hinweis, hast du absolut recht. Ist natürlich nicht im Sinne des "Erfinders".
Hallo Zusammen,
also soweit hat alles jetzt funktioniert und Verstanden. Falls ähnliche Fragen kommen sollten hier meine Zusammenfassung
Ganz wichtig ist, das man sich in die Grundlagen einarbeitet siehe auch: http://fhem.de/Heimautomatisierung-mit-fhem.pdf
Der Aufruf der Sub (PERL) im FHEM Eingabefenster erfolgt durch einsetzen in "{ Name der Routine }"
Danke für die Hilfe.