Heizungsthermostatscript V2.0

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: Heizungsthermostatscript V2.0

Beitrag von erik » 24.01.2014, 12:51

Hallo Vvogt,

Freut mich, das Du mein Heizungsscript erfolgreich einsetzt.

Habe selber persönlich nicht mit dem 4% Bug zu kämpfen und kann daher nur schwer das Feature in das Script einbauen, da mir keine wirkliche Testumgebung zur Verfügung steht. Auch würde ich gerne die neuen Thermostate und wenn die neuen Heizungsregler lieferbar sond, diese auch implementieren. Derzeit fehlt es mir aber auch etwas an Zeit.

Wenn jemand das Feature einbaut, teste ich gerne und veröffentliche dies natürlich hier.

Grüße

Erik

Benutzeravatar
SHC
Beiträge: 202
Registriert: 24.10.2007, 13:57

Re: Heizungsthermostatscript V2.0

Beitrag von SHC » 24.01.2014, 19:54

Hallo Erik,

mit den neuen Thermostaten ist ja leider die Deltazeit nicht mehr nutzbar, weil der diff-Wert nicht über 3min. geht. Gibt es da noch eine Möglichkeit das anders zu lösen?

Viele Grüße,
SHC

kidbuster
Beiträge: 28
Registriert: 16.10.2012, 20:54

Re: Heizungsthermostatscript V2.0

Beitrag von kidbuster » 27.01.2014, 21:13

das würde mich auch interessieren, ob es irgendeine möglichkeit gibt die Deltazeit wieder zu verwenden.

Pyco
Beiträge: 20
Registriert: 12.12.2013, 07:44

Re: Heizungsthermostatscript V2.0

Beitrag von Pyco » 06.02.2014, 21:48

Ich denke das hängt mit der neuen Logik des Thermostats "HM-CC-RT-DN" zusammen. Er erkennt, dass er noch nicht die IST-Temperatur erreicht hat und reguliert sich selbst und setzt dabei den/alle Zeitstempel neu oder es ist einfach ein Fehler... So oder so, falls dass nicht korrigiert wird, muss man sich den Zeitstempel halt in eine Variable schreiben. Da man dann auch keinen Trigger mehr hat, wann manuell verstellt wurde muss man die Soll Temperatur aus dem Skript auch abspeichern und bei Abweichung zur Temp. im Thermostat kann man auf eine manuelle Änderung schließen.

Ich habe mal den letzten Abschnitt des Skriptes entsprechend angepasst, kann es aber nicht testen.

2 neue Systemvariablen pro Regler mit dem Namen SollTempHEQ0XXX612 (Zahl) und SetZeitTempHEQ0XXX612 (Zeichenkette). Der Reglername muss entsprechend angepasst werden.
Hoffe es hilft euch weiter und funktioniert und schöner geht das wahrscheinlich auch noch :D ...

Code: Alles auswählen

if (soll_ist >= 0) { ! Wenn RT geantwortet hat (Sollwert konnte ausgelesen werden)...

!NEU Prüfung ob Temperatur manuell verstellt, dann setzen eines Zeitstempels
    if (soll_ist != dom.GetObject('SollTemp' & sRegler).State()) {
          dom.GetObject('SollTemp' & sRegler).State(soll_ist);
          dom.GetObject('SetZeitTemp' & sRegler).State(system.Date("%Y-%m-%d %H:%M:%S").ToTime());
    }

    ! ...dann prüfen ob neue Solltemperatur in RT geschrieben werden muss.
    if (soll_ist <> soll_neu) { ! Wenn aktuelle Solltemperatur = neue Solltemp., dann nichts machen
				
    	regler = dom.GetObject("BidCos-RF." # sRegler # ":4.SET_TEMPERATUR");
        time now = system.Date("%Y-%m-%d %H:%M:%S").ToTime(); ! wie spät ist es jetzt?
        ! rt_timestamp = regler.Timestamp();
        rt_timestamp = dom.GetObject('SetZeitTemp' & sRegler).Timestamp() !NEU Es wird nun der Zeitstempel aus der Systemvariable verwendet
        integer diff = now.ToInteger() - rt_timestamp.ToInteger();

        if ((diff >= setdelta) || (prioritaet) || (soll_ist == grad_fenster) || (sv_timestamp >= rt_timestamp) || ((soll_ist == soll_alt) && (soll_alt <> soll_neu))) {
				
            ! Temperatur setzen                       
            regler.State(soll_neu);
	    dom.GetObject('SollTemp' & sRegler).State(soll_neu); !NEU Abspeichern der neues Soll-Temperatur zum Vergleich bei manueller Änderung
            integer regler_gesetzt = 1;
            if (debug) {
                string stdout;
                string stderr;
                system.Exec("logger -t script -p user.debug Raumthermostat " # raum # " neu gesetzt!\n", &stdout, &stderr);
                system.Exec("logger -t script -p user.debug alte_Solltemperatur: " # soll_ist # " neue_Solltemperatur: " # soll_neu # "\n", &stdout, &stderr);
                system.Exec("logger -t script -p user.debug Letzte_Aenderung: " # rt_timestamp # " Zeitdifferenz:_" # diff # "sek.", &stdout, &stderr);
                system.Exec("logger -t script -p user.debug Offene_Luken: " # offen , &stdout, &stderr);
            }
        }  
    }
} else {
    string stdout;
    string stderr;
    system.Exec("logger -t script -p user.debug Raumthermostat " # raum # " antwortet nicht!", &stdout, &stderr);
}

Benutzeravatar
SHC
Beiträge: 202
Registriert: 24.10.2007, 13:57

Re: Heizungsthermostatscript V2.0

Beitrag von SHC » 10.02.2014, 10:30

Hallo Pyco,

vielen Dank für Deine Mühe! Ich werde das in den nächsten Tagen ausprobieren und melde mich wieder!

Viele Grüße,
SHC

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

Re: Heizungsthermostatscript V2.0

Beitrag von erik » 10.02.2014, 22:17

Hallo,

Nachdem leider die Delta ueit nicht mit den neuen Termostaten funktioniert, wie sieht es denn mit dem neuen Wandther ostat aus?

Gruesse

Erik

nicx
Beiträge: 307
Registriert: 18.05.2013, 22:31
Hat sich bedankt: 4 Mal

Re: Heizungsthermostatscript V2.0

Beitrag von nicx » 05.03.2014, 21:56

hi,

habe die anpassung von pyco mal getestet... und ein paar fehler im script gefunden. aber mit dieser bereinigten version funktioniert es nun auch mit der delta-zeit und den neuen thermostaten :)

Code: Alles auswählen

if (soll_ist >= 0) { ! Wenn RT geantwortet hat (Sollwert konnte ausgelesen werden)...

!NEU Pruefung ob Temperatur manuell verstellt, dann setzen eines Zeitstempels
    if (soll_ist != dom.GetObject('SollTemp' # sRegler).State()) {
          dom.GetObject('SollTemp' # sRegler).State(soll_ist);
          dom.GetObject('SetZeitTemp' # sRegler).State(system.Date("%Y-%m-%d %H:%M:%S").ToTime());
    }

    ! ...dann pruefen ob neue Solltemperatur in RT geschrieben werden muss.
    if (soll_ist <> soll_neu) { ! Wenn aktuelle Solltemperatur = neue Solltemp., dann nichts machen
            
       regler = dom.GetObject("BidCos-RF." # sRegler # ":4.SET_TEMPERATURE");
        time now = system.Date("%Y-%m-%d %H:%M:%S").ToTime(); ! wie spaet ist es jetzt?
        ! rt_timestamp = regler.Timestamp();
        rt_timestamp = dom.GetObject('SetZeitTemp' # sRegler).Timestamp(); !NEU Es wird nun der Zeitstempel aus der Systemvariable verwendet
        integer diff = now.ToInteger() - rt_timestamp.ToInteger();

        if ((diff >= setdelta) || (prioritaet) || (soll_ist == grad_fenster) || (sv_timestamp >= rt_timestamp) || ((soll_ist == soll_alt) && (soll_alt <> soll_neu))) {
            
            ! Temperatur setzen                       
            regler.State(soll_neu);
       dom.GetObject('SollTemp' # sRegler).State(soll_neu); !NEU Abspeichern der neues Soll-Temperatur zum Vergleich bei manueller Aenderung
            integer regler_gesetzt = 1;
            if (debug) {
                string stdout;
                string stderr;
                system.Exec("logger -t script -p user.debug Raumthermostat " # raum # " neu gesetzt!\n", &stdout, &stderr);
                system.Exec("logger -t script -p user.debug alte_Solltemperatur: " # soll_ist # " neue_Solltemperatur: " # soll_neu # "\n", &stdout, &stderr);
                system.Exec("logger -t script -p user.debug Letzte_Aenderung: " # rt_timestamp # " Zeitdifferenz:_" # diff # "sek.", &stdout, &stderr);
                system.Exec("logger -t script -p user.debug Offene_Luken: " # offen , &stdout, &stderr);
            }
        }  
    }
} else {
    string stdout;
    string stderr;
    system.Exec("logger -t script -p user.debug Raumthermostat " # raum # " antwortet nicht!", &stdout, &stderr);
}
danke pyco :)

gruss
nicx...

JensAC
Beiträge: 11
Registriert: 17.01.2014, 14:29
System: CCU

Re: Heizungsthermostatscript V2.0

Beitrag von JensAC » 07.03.2014, 20:00

Hallo zusammen,

ich versuche mich gerade am Heizungsthermostatscript 2.0 und rätsle gerade, welchen "Datenpunkt" ich für den Regler bzw. Fensterkontakt angeben soll.

Ich habe folgende Geräte im Einsatz:
FHT80 Ventilantrieb über CUxD
FHT80 Wandthermostat über CUxD

und ein Fensterkontakt HM-Sec-SC-2

Kann man das überhaupt so ansteuern? Ich habe schon den erweiterten Scriptparser im Einsatz, brauche aber noch einen Hinweis, welche der zahlreichen Werte mich da weiterbringen würde.

Viele Grüße
Jens

MartinS
Beiträge: 18
Registriert: 09.03.2014, 19:21

Re: Heizungsthermostatscript V2.0

Beitrag von MartinS » 09.03.2014, 20:01

Nachdem ich nun am Wochenende auch eine CCU2 mit HM-CC-RT-DN Heizkörperthermostaten, dem neuen HM-TC-IT-WM-W-EU Wandthermostat und HM-Sec-SC-2 Kontakten installiert habe, bin ich nach einiger Suche bzgl. einer sinnvollen Lösung auf diesen Thread gestoßen.

Erstmal vielen Dank für das Skript was sich als hervoragende Vorlage für meine eigene Anpassungen erwiesen hat.
Auch wenn ich absoluter Neuling bzgl. Homematic bin, habe ich etwas Programmiererfahrung und habe daher mal für mich ein paar Anpassungen eingebaut.

* Sonderzeichen raus
* Komfort_Config komplett raus rausgenommen (Performance, Komplexität, Übersichtlichkeit)
* direkte Angabe der Geräte mit Kanal und Datenpunkt (hat ja doch jedes Gerät andere Einstellungen)
* HM-CC-RT-DN / HM-TC-IT-WM-W-EU Unterstützung (mit ersten Punkt trivial)
* Workaround für Zeitstempel Problem bei neuen Thermostaten

Den Workaround habe ich mit nur einer Systemvariablen "LastChg_<seriennummer>" (Zeichenkette) gelöst und solange die nicht angelegt ist, bleibt das Handling wie beim Original-Skript.

Vieleicht hilft es ja dem Einen oder Anderen ...
Dateianhänge
Heizung_20a_ms.txt
(16.15 KiB) 1662-mal heruntergeladen

nicx
Beiträge: 307
Registriert: 18.05.2013, 22:31
Hat sich bedankt: 4 Mal

Re: Heizungsthermostatscript V2.0

Beitrag von nicx » 21.03.2014, 15:16

hi,

ich setze das script nun schon eine weile erfolgreich ein. inzwischen habe ich zudem eine abwesenheitserkennung per geofency laufen, dabei ist mir nun im zusammenhang mit der heizungssteuerung eines aufgefallen:

die abwesenheits-temperatur ist ja fix pro raum vorgegeben, und in meinem falle ist diese z.b. 19 grad. wenn ich nun tagsüber das haus verlasse und normalerweise 21 grad eingestellt sind funktioniert die absenkung auch wie sie soll, alle thermostaten gehen auf 19 grad. komme ich zurück, springen diese wieder auf 21 grad.

verlasse ich nun aber abends/nachts das haus wo normalerweise 17 grad eingestellt sind, dann ist die absenkung höher als die eingestellte temperatur. das ist ja eigentlich nicht sinn der sache. jetzt könnte ich natürlich die absenktemp generell auf 17 grad stellen, aber dann wäre tagsüber die differenz zwischen absenktemperatur und normaltemperatur mit 4 grad recht gross.

meine idee: die absenkungstemperatur sollte als differenz zur aktuell eingestellten temperatur konfigurierbar sein und nicht als absolute temperatur (statt "19 grad" also z.b. "2 grad"). dann könnte man z.b. immer um 2 grad absenken, maximal aber natürlich auf die 0-stellung im script, bei mir also 17 grad.

ist das möglich? ist das sinnvoll? oder habe ich vielleicht auch etwas funktional missverstanden? ;)

gruss
nicx...

Antworten

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