Heizungsthermostatscript

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

erik
Beiträge: 776
Registriert: 31.10.2007, 13:32
Hat sich bedankt: 6 Mal
Danksagung erhalten: 6 Mal

Re: [BETA] Heizungsthermostatscript

Beitrag von erik » 02.01.2010, 16:59

Zauberlehrling hat geschrieben:kurze Frage wie setzt Du die Globalen Variablen (Uraub, Gaeste, usw) und wie vergebe ich da Default-Werte?

und Du schreibst in Deiner Anleitung
[*] manuell eingestellte Temperatur wird x Minuten lang nicht durch Script verändert
Der Wert setdelta wir aber als Sekunden behandelt oder irre ich mich da?
Ich habe es etwas erweitert jetzt kann man den Wert deltaStdMin mit "hh:mm" setzten.
Hi,

yep, da habe ich mich verschrieben, es muß natürlich x Sekunden heißen. Werde Deine Idee mit hh:mm in das Script einbauen.

Die Variablen setze ich übrigens mittels kleiner Script Programme, die ich auf einer 19er Fernbedienung gesetzt, bzw. auf virtuelle Tasten der CCU (Heizperiode, usw.) gelegt habe. Habe mir dann eine Favortien Seite gebaut, wo ich die Heizung überwachen und im oberen Bereich die wichtigsten Variablen mittels Buttons steuern kann.

Grüße

Erik

Petrus
Beiträge: 135
Registriert: 13.01.2010, 20:53
Hat sich bedankt: 1 Mal
Danksagung erhalten: 25 Mal

Re: [BETA] Heizungsthermostatscript

Beitrag von Petrus » 13.01.2010, 22:10

Hallo eric,

zunächst einmal mein besonderer Dank für die Bereitstelung deines Heizungsthermostatscriptes. Ich habe es an meine Bedürfnisse angepasst und es funktioniert hervorragend. Die Idee zu prüfen, ob aktuell ein Feiertag ist und diesen Zustand mit im Script auszuwerten finde ich super. Da ich jedoch einfach zu faul bin, immer wieder die Feiertage herauszusuchen und diese in das Script zu tippen, habe ich mir einmal die Mühe gemacht, ein eigenes Script zu schreiben. Hierbei berechnet die Homematiczentrale selbstständig alle Feiertage des aktuellen Jahres. Alle Infos dazu findest du hier: http://homematic-forum.de/forum/viewtop ... =27&t=4058

So, nun mein Fragen zu deinem Script.

1. Am Ende des Scriptes, nach der Debug Zeile, setzt du eine Variable, die im Script keine Verwendung findet (integer regler_gesetzt = 1). Wofür nutzt du diese Variable?

2. In der If-Anweisung, bei der die Solltemperatur gesetzt wird, hast du in der aktuellen Version die Bedingung (diff_aa <= 30) hinzugefügt. Da in Sekunden gerechnet wird, wie bei setdelta, wären dies ja 30 Sekunden. Die Logik erschließt sich mir im Moment nicht. Um das nachvollziehen zu können, könntest du mich bitte aufklären?

Da ich erst seit kurzem eine Homematiczentrale besitze und auch erst genau so lange programmiere, noch 2 Fragen zur Programmierung.

1. Die Variable Heizwert ist vom Typ string. Bei den If-Anweisungen werden die Werte jedoch nicht in Anführungsstrich gesetzt. Obwohl das Script funktioniert, wäre es richtig diese in Anführungsstriche zu setzen oder ist dies bei der Programmierung grundsätzlich egal?

2. Bei der Zuweisung der "zeitleiste_heute", wird diese zum einen als string definiert und zum anderen der entsprechendn Wert, je nach Wochentag, zugewiesen. Danach wird, wenn ein Feiertag ist, die Variable "zeitleiste_heute" erneut als string definiert und ein entsprechender Wert zugewiesen. Könnte man hier nicht die String-Definition weglassen und nur den Wert zuweisen, oder ist die Homematic beim programmieren auch hierbei ziemlich tolerant?

Gruß
Peter

erik
Beiträge: 776
Registriert: 31.10.2007, 13:32
Hat sich bedankt: 6 Mal
Danksagung erhalten: 6 Mal

Re: [BETA] Heizungsthermostatscript

Beitrag von erik » 13.01.2010, 23:41

Hi Petrus,

vielen Dank für die Lorbeeren. :-)
Petrus hat geschrieben:Hierbei berechnet die Homematiczentrale selbstständig alle Feiertage des aktuellen Jahres. Alle Infos dazu findest du hier: http://homematic-forum.de/forum/viewtop ... =27&t=4058
Muß ich mir gleich mal anscheuen und dann mein Script aktualisieren, bzw. auf Deines verlinken....

Petrus hat geschrieben: 1. Am Ende des Scriptes, nach der Debug Zeile, setzt du eine Variable, die im Script keine Verwendung findet (integer regler_gesetzt = 1). Wofür nutzt du diese Variable?
Die Variable regler_gesetz hat absolut keine wirkliche Programmfunktion und ist für das Debuggen im Script Debugger. So kann im XML Output gesehen werden, ob gerade der Wert an das Thermostat gesendet wurde.
Petrus hat geschrieben: 2. In der If-Anweisung, bei der die Solltemperatur gesetzt wird, hast du in der aktuellen Version die Bedingung (diff_aa <= 30) hinzugefügt. Da in Sekunden gerechnet wird, wie bei setdelta, wären dies ja 30 Sekunden. Die Logik erschließt sich mir im Moment nicht. Um das nachvollziehen zu können, könntest du mich bitte aufklären?
Die Idee dahinter ist folgende.
Ich überprüfe im Browser Script die Variable außer_Haus und lasse bei Änderung die neue Temeratur an die Thermostate schreiben. Dazu schaue ich, ob die Variable außer_Haus in den letzten 30 Sekunden verändert wurde. So ist sicher gestellt, das auch wirklich die Thermostate die neue Temperatur bekommen und nicht noch gewartet wird, bis die nächste Updates gesetzt werden sollen.
Ich überlege, ob dies auch bei der Variablen Gäste sinnvoll ist, so daß auc bei einer Änderung diese schnell an die THemostate weiter gereicht wird.
Petrus hat geschrieben: Da ich erst seit kurzem eine Homematiczentrale besitze und auch erst genau so lange programmiere, noch 2 Fragen zur Programmierung.
Deine Fragen kann ich nicht wirklich beantworten. Im Script steckt bestimmt noch optimierungpotential. Habe das Script in mehreren Schritten entwickelt und im debugger getestet. Ob da einige Syntaxfehler drin sind, die der CCU Compiler tolleriert, kann ich nicht sagen.

Grüße

Erik

erik
Beiträge: 776
Registriert: 31.10.2007, 13:32
Hat sich bedankt: 6 Mal
Danksagung erhalten: 6 Mal

Re: [BETA] Heizungsthermostatscript

Beitrag von erik » 05.02.2010, 16:43

sambasamba hat geschrieben:Moin Erik,
hast Du Lust Dir zu überlegen ob es eine Möglichkeit gibt die Schaltzeiten/Temperaturen in Deinem script so komfortabel einstellen zu können wie die RT im webUI?
... Vielleicht über Dirchs nagelneuen Touchscreen... :?: :wink:
Hi sambasamba,

wie genau soll das aussehen. Kannst Du mir bitte nähere Infos geben?

Grüße

Erik

erik
Beiträge: 776
Registriert: 31.10.2007, 13:32
Hat sich bedankt: 6 Mal
Danksagung erhalten: 6 Mal

Re: Heizungsthermostatscript

Beitrag von erik » 05.02.2010, 16:45

Hallo zusammen,

es sind nun fast über 1000 hits auf den Forumsbeitrag.
Mich würde interessieren, wievielen Leute das Script nun nutzen und wie deren Erfahrung ist.

Grüße

Erik

Petrus
Beiträge: 135
Registriert: 13.01.2010, 20:53
Hat sich bedankt: 1 Mal
Danksagung erhalten: 25 Mal

Re: Heizungsthermostatscript

Beitrag von Petrus » 06.02.2010, 18:37

Hallo erik,

wie immer eine resektable Leistung von dir. Verwende das Script "fast" unverändert und es funktioniert prima. Die einzige Änderung ist die, das ich noch zwischen "Urlaub" (muss nicht arbeiten) und "Reise" (bin auf Reisen) unterscheide. Da ich werktags, wenn ich auf Arbeit bin, mit einer Absenkung fahre und wenn ich "Urlaub" habe und nicht auf "Reise"n bin, dann die zeitleiste_sam gilt. Könnte zwar die Auswertung von "Anwesenheit" nutzen, nur möchte ich das die Wohnung bereits aufgeheizt wird, bevor ich wieder zu Hause bin.

Wenn meine grauen Zellen richtig funktionieren, dann habe ich einen kleinen Bug im Script entdeckt. Und zwar bei der Definition der zeitleiste_gestern.

Denn: Wenn Tag = 1 (Montag) oder Tag = 7 (Sonntag) und Woche = 1, dann zeitleiste_gestern = zeitleiste_sam

Code: Alles auswählen

! Der alte Code
if (((tag == 1) || (tag == 6)) && (woche == 1)) {string zeitleiste_gestern = zeitleiste_son;}

! Der korrigierte Code:
if (((tag == 1) || (tag == 7)) && (woche == 1)) {string zeitleiste_gestern = zeitleiste_sam;}
Das einzige was ich noch gerne einbauen würde - habe bis jetzt aber noch keine Lösung gefunden - wäre, wenn ich manuell am Wandthermostat die Temperatur verstelle, möchte ich das diese auch erst nach "setdelta" vom Script geändert wird. Leider wird "setdelta" jedoch ignoriert, sobald sich die Solltemperatur innerhalb der Deltazeit per zeitleiste ändert. Wenn dir eine Lösung dafür einfällt, lass es mich bitte wissen.

Viele Grüße und mach weiter so
Peter

Petrus
Beiträge: 135
Registriert: 13.01.2010, 20:53
Hat sich bedankt: 1 Mal
Danksagung erhalten: 25 Mal

Re: Heizungsthermostatscript

Beitrag von Petrus » 06.02.2010, 21:31

Hallo erik,

ich will mal noch einen nachlegen. Sollte ich gedanklich ein wenig auf der Leitung stehen, dann kläre mich bitte auf.

Wenn ich es richtig verstehe, sollen nur die Reglerwerte (Kanal 2) verändert werden. Anstatt im Script eine Integer Variable "Heizung" zu setzen, könnte man doch den Teil zum setzen der Reglerwerte direkt in die If-Anweisung einfügen. Zum Verständnis was ich meine, habe ich nachfolgend den geänderten Teil angefügt.

Gruß
Peter

Code: Alles auswählen

        ! Testen, ob es sich um den Regler im Gewerk "Heizung" handelt. (Kanal 2)
          var myChannel = dom.GetObject(item);
          
          string id;
          foreach(id, myChannel.ChnFunction())
          {
             var func = dom.GetObject(id);
             if (func.Name() == "Heizung") {

             ! Hier nun für den Thermostat.Regler die Werte setzen und bearbeiten
               
             }
          }

erik
Beiträge: 776
Registriert: 31.10.2007, 13:32
Hat sich bedankt: 6 Mal
Danksagung erhalten: 6 Mal

Re: Heizungsthermostatscript

Beitrag von erik » 07.02.2010, 15:05

Petrus hat geschrieben:wie immer eine resektable Leistung von dir.
Hi Petrus,

vielen Dank für die Lorbeeren und finden des Bugs. Werde das in kürze einpflegen. Auch Deine Scriptoptimierung baue ich ein. Eine If-Zeile weniger... :D
Petrus hat geschrieben: Das einzige was ich noch gerne einbauen würde - habe bis jetzt aber noch keine Lösung gefunden - wäre, wenn ich manuell am Wandthermostat die Temperatur verstelle, möchte ich das diese auch erst nach "setdelta" vom Script geändert wird. Leider wird "setdelta" jedoch ignoriert, sobald sich die Solltemperatur innerhalb der Deltazeit per zeitleiste ändert. Wenn dir eine Lösung dafür einfällt, lass es mich bitte wissen.
In dem Bereich versuche ich auch noch eine Optimierung zu finden. Wenn z.B. Variable Gäste (oder Partytymperatur, usw.) gesetzt ist und in der Zeit eine manuelle Korrektur ab Wandthermostat gesetzt wird, wird diese immer wieder überschrieben.
Hier habe ich schon überlegt, ob ich die Änderungszeiten der Systemvariablen mit einbeziehe und diese mit der Änderungszeit des Wandthermostats vergleiche. Ist die Änderungszeit des Thermostats jünger, als die der Variablen, so wird die Temperatur für eine gewisse Zeit nicht überschrieben.

Werde hier mal schauen, was sinnvoll ist und wie man das einbauen kann - jedoch werden Deine zwei Infos vorab eingebaut...

Bis später

Erik

Petrus
Beiträge: 135
Registriert: 13.01.2010, 20:53
Hat sich bedankt: 1 Mal
Danksagung erhalten: 25 Mal

Re: Heizungsthermostatscript

Beitrag von Petrus » 08.02.2010, 18:18

Hallo erik,
eric hat geschrieben:
In dem Bereich versuche ich auch noch eine Optimierung zu finden. Wenn z.B. Variable Gäste (oder Partytymperatur, usw.) gesetzt ist und in der Zeit eine manuelle Korrektur ab Wandthermostat gesetzt wird, wird diese immer wieder überschrieben.
Petrus hat geschrieben:
Das einzige was ich noch gerne einbauen würde - habe bis jetzt aber noch keine Lösung gefunden - wäre, wenn ich manuell am Wandthermostat die Temperatur verstelle, möchte ich das diese auch erst nach "setdelta" vom Script geändert wird. Leider wird "setdelta" jedoch ignoriert, sobald sich die Solltemperatur innerhalb der Deltazeit per zeitleiste ändert.
ich glaube für beide Probleme eine Lösung gefunden zu haben. Darüber hinaus habe ich das Script etwas optimiert, um Resourcen zu sparen. Konnte bis jetzt keinen Fehler feststellen. Nun möchte ich das geänderte Script hier nicht einfach komplett posten, da es zum einen dein Beitrag ist, die Übersichtlichkeit stören würde und ich es dir - wenn du einverstanden bist - zum testen per PN zusenden würde. Wenn es dann wie gewünscht funktioniert, könntest du es wie gewohnt veröffentlichen.

Gib mir kurz Bescheid.

Grüße
Peter

erik
Beiträge: 776
Registriert: 31.10.2007, 13:32
Hat sich bedankt: 6 Mal
Danksagung erhalten: 6 Mal

Re: Heizungsthermostatscript

Beitrag von erik » 09.02.2010, 23:41

Hi,

hat jemand eine Idee, warum das schreiben der Debug Information nicht ausführlich ist.

Die Zeile:

Code: Alles auswählen

if (debug) {system.Exec("logger -t script -p user.debug Thermostat " # raum # " neu gesetzt: alt : " # aktemp # " Solltemp: " # solltemperatur # " Letzte Aenderung: " # settime # " Time diff: " # diff # " Sekunden");}
Bringt als Ergebnis im Syslog nur:

Code: Alles auswählen

2010-02-09 23:30:16	User.Debug	homematic	script: Thermostat Buero neu gesetzt:
2010-02-09 23:30:21	User.Debug	homematic	script: Thermostat Esszimmer neu gesetzt:
2010-02-09 23:30:28	User.Debug	homematic	script: Thermostat Bad neu gesetzt:
Temperaturwerte und weitere Details tauchen bei mir leider nicht auf. Liegt das am Syslog, oder ist hier irgendwo anders der Haus begraben. Hat jemand eine Idee? Wie sieht es bei Euch aus?

Grüße

Erik

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“