Heizungsthermostatscript V2.0

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

Moderator: Co-Administratoren

Franzens
Beiträge: 147
Registriert: 18.04.2014, 17:11
Hat sich bedankt: 15 Mal

Re: Heizungsthermostatscript V2.0

Beitrag von Franzens » 11.02.2016, 20:44

Cash hat geschrieben: ...
Für Urlaub zu Hause und Feiertage lasse ich auch über eine Variable die Heizung von hinterlegten Programm1 in der Heizungsgruppe auf Programm2 wechseln. Das geht dann aber nur über Script aber das Script ist sehr übersichtlich (keine 10 Zeilen)

Hallo Cash,

ich benutze aktuell das hier heiß diskutierte Heizungsthermostatskript in allen Räumen. Kombiniert mit Feiertags und Urlaub Skript eine rundum gelungene Sache. Ich gebe euch jedoch recht, dass die neuen Thermostaten über 90% dessen was im Normalfall benötigt wird völlig autark bewältigen können. Mich stört im Moment nur, dass ich über ein CCU Programm aktuell z.B. nicht direkt an einem Feiertag das Sonntagsprogramm oder die zweite Zeitleiste aufrufen kann. Mich würde deshalb das von dir erwähnte 10 Zeilen Skript interessieren, mit Hilfe dessen du die zweite Zeitleiste direkt aufrufst. Geht damit auch die Anwahl eines bestimmten Tagesprogramms wie Samstag oder Sonntag. Könntest du die 10 Zeilen hier posten?

Danke franzens
RasberryMatic auf Synology-VM - Sonos - pocket Control HM - CuL V2 868mHz & Somfy RTS Anbindung - Pushover - hm-pdetect - homebridge - homeassistant - Alexa - Netatmo - Shelly - hue...; 373 Kanäle in 100 Geräten und 209 CUxD-Kanäle in 18 CUxD-Geräten

Cash
Beiträge: 1184
Registriert: 09.01.2016, 17:42
Wohnort: Sauerland
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Heizungsthermostatscript V2.0

Beitrag von Cash » 11.02.2016, 21:57

Wenn das Script läuft würde es bei mir heißen: Never touch a running system :-)

Ansonsten habe ich alles hier aus dem Forum. Ich habe das Heiz- und Wandthermostat in einer Gruppe.

http://homematic-forum.de/forum/viewtop ... 26&t=20875

Diesen Code in ein Script ausführen. Wenn Variable Feiertag = ja dann Script

Code: Alles auswählen

! Stellt das Wochenprogramm der Heizung ein
! Wochenprogramm setzen 0 = WP1, 1 = WP2, 2 = WP3; Gerätennamen in addr setzen.
! Pointer int 0 = normales Wochenprogramm
! Pointer int 1 = Urlaub oder Feiertagsprogramm
! INT0000001 = Schlafzimmer
! INT0000002 = Badezimmer
! INT0000003 = Küche
! INT0000004 = Wohnzimmer
string cmd = "tclsh /usr/local/setparam_virtdev.tcl INT0000004 WEEK_PROGRAM_POINTER int 1";
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(cmd);

per ftp in das Verzeichnis /usr/local der CCU kopieren und auf "Ausführbar" setzen.

Dateiname: setparam_virtdev.tcl:

Code: Alles auswählen

#!/bin/tclsh
#
# Aufruf für ein putParamset (z.B. über CUxD.CMD_EXEC)
# ====================================================
#
# tclsh setparam_virtdev <addresse> <item> <datentyp> <wert>
# z.B.
# tclsh /usr/local/setparam_virtdev.tcl INT0000001 WEEK_PROGRAM_POINTER int 1
#
load tclrpc.so
set item [lindex $argv 1]
set datatype [lindex $argv 2]
set val [lindex $argv 3]
set cmd "{$item {$datatype $val}}"
xmlrpc http://127.0.0.1:9292/groups putParamset [list string [lindex $argv 0]] [list string "MASTER"] [list struct $cmd]
Zuletzt geändert von Cash am 12.02.2016, 13:47, insgesamt 1-mal geändert.

Xel66
Beiträge: 14148
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 583 Mal
Danksagung erhalten: 1497 Mal

Re: Heizungsthermostatscript V2.0

Beitrag von Xel66 » 11.02.2016, 22:26

Franzens hat geschrieben:Mich stört im Moment nur, dass ich über ein CCU Programm aktuell z.B. nicht direkt an einem Feiertag das Sonntagsprogramm oder die zweite Zeitleiste aufrufen kann.
Was unterscheidet den Feiertag von einem normalen Arbeitstag bezüglich der Heizzeiten? Meistens ist man tagsüber anwesend und möchte deshalb ganztägig heizen. Lösung: Einfach per Programm die Solltemperatur zu einem bestimmten Zeitpunkt (der nach dem eventuellen vormittäglichen Heizzeitraum liegt) auf die gewünschte Temperatur setzen (nicht auf manuell schalten). Fertig. Diese Temperatur wird dann bis zum Abend (dem nächsten Absenkzeitraum) gehalten. Kein Script, nur ein Programm, welches auf eine Zeit reagiert und eine gesetzte Systemvariable (Feiertag) prüft und dann die Solltemperaturen setzt. Kein Script und keine Profilumschaltung notwendig. Es werden nur das interne Profil und ein zusätzliches Programm genutzt. Solltest Du am Feiertag abwesend sein und später nach Hause kommen, kann das Programm auch in Abhängigkeit von den gesetzten Variablen bei Erkennung der Rückkehr die Solltemperatur setzen. Kommt einem in den Sinn, die Funktion auch an einem Urlaubstag zu nutzen, einfach als ODER in das Programm. Oder man will es bei Gästen im Haus nutzen: einfach verODERn uswusf.

Hier werden nur banalste logische Abfragen getätigt (Systemvariablen geprüft) und auf einfachste Trigger reagiert (z.B. Zeiten). Genau dafür sind die logischen Verknüpfungen in den Programmen der WebGUI der CCU vorgesehen. Für Berechnungen, Vergleiche, rekursive Abfragen und externe Kommunikationen sind Scripte unersetzlich. Bei logischen Verknüpfungen ohne jegliche Berechnungen sind sie Overkill, belasten das System nur unnötig und bergen nur die Gefahr der Destabilisierung der CCU. Gerade beim Einsatz des Heizungsthermostatscripts ist man zwingend auf die stabile Funktion der CCU angewiesen, da man ansonsten in der kalten oder überheizten Bude sitzt. Beides kein Beinbruch, aber das System kann es mit Bordmitteln besser. Beispiel: Es geht ein Thermostat kaputt und ich muss es austauschen. Bei Benutzung der Programmfunktionen kann ich ein neues anlernen und das defekte automatisch in allen Programmen durch die integrierte Funktion ersetzen lassen (zugegeben, bei einem Thermostat musste ich das noch nicht probieren, bei anderen Geräten hat der Austausch aber problemlos geklappt). Beim Script muss man selbst Hand anlegen, weil hier die Geräteadressen hardgecodet sind. Es ist zwar nur eine einzige Stelle zu edititeren, aber ich muss ein Script anfassen. Nicht dass ich eine Phobie davor hätte. Nein, ich setze auch Scripte ein. Aber eben nur dort, wo ich mit den Bordmitteln nicht weiterkomme. Meine CCU dankt es mir mit einigermaßen stabilem Betrieb. Probleme hatte ich bisher übrigens nur im Scriptbereich.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Franzens
Beiträge: 147
Registriert: 18.04.2014, 17:11
Hat sich bedankt: 15 Mal

Re: Heizungsthermostatscript V2.0

Beitrag von Franzens » 12.02.2016, 18:11

Ehrlich gesagt hatte ich bisher nie den Eindruck, dass es mit dem Skript Probleme gibt. Ich habe es für 7 Räume seit über 2 Jahren konstant im Einsatz. Sowohl zuerst auf meiner CCU2 als auch jetzt auf der RaspberryMatic. D.h. ich bin in der dritten Heizsaison ohne Probleme. Auch der Austausch oder die Ergänzung von Komponenten (Wandthermostat / Heizkörperthermostat / Fensterkontakte ...etc) war bisher nie ein Problem.
Es ist alles so übersichtlich geschrieben, dass auch jemand wie ich, der nicht groß in der Skriptmaterie daheim ist das problemlos machen kann. Die Anpassung von Schaltzeiten mag etwas komplizierter sein - ist aber nicht wirklich ein Problem und brauch ich auch nur äußerst selten.
Für mich ist das Thema Heizung mit DIE wesentliche Komponente für ein sog. Smarthome. Und ich halte jetzt auch 48 Durchgänge für einen im 7/24 Betrieb laufenden Raspi2 nicht wirklich für übertrieben.
Aber ich gebe Dir insoweit recht, dass die Thermostaten, die ja auch kleine Computer sind all das autark machen sollen, was Sie können. Aber auch diese bieten schon 7 verschiedene Tagesprogramme an und in Verbindung mit dem Wandthermostaten das ganze nochmals in 3 Wochenvarianten.
Und wahrscheinlich kann vieles was im Skript gelöst ist auch über die CCU-Programmlogiken gelöst werden. Für mich ist die Nutzung des Sonntagsprogramms am Feiertag anders als offensichtlich für andere schon eine sehr feine Sache und kann wohl bisher so über die Thermostaten nicht gelöst werden. Auch die Nutzung der alternativen Wochenprogramme funktioniert ja eben nur dort wo zusätzlich Wandthermostate sind - bei mir nur in 2 von 7 Räumen.
Ich steh jetzt tatsächlich vor der Entscheidung "change a running system?"

Franzens
RasberryMatic auf Synology-VM - Sonos - pocket Control HM - CuL V2 868mHz & Somfy RTS Anbindung - Pushover - hm-pdetect - homebridge - homeassistant - Alexa - Netatmo - Shelly - hue...; 373 Kanäle in 100 Geräten und 209 CUxD-Kanäle in 18 CUxD-Geräten

Xel66
Beiträge: 14148
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 583 Mal
Danksagung erhalten: 1497 Mal

Re: Heizungsthermostatscript V2.0

Beitrag von Xel66 » 12.02.2016, 18:44

Franzens hat geschrieben:Ich steh jetzt tatsächlich vor der Entscheidung "change a running system?"
Wenn's stabil läuft, warum? Man muss es eben nur im Hinterkopf behalten. Und Einsteiger sollten sich vorher darüber klar werden, was sie wirklich brauchen. Viele lesen "Heizungsscript" und wollen ihre Heizung steuern. Da ist es eben nicht weit, auf das Script aufzuspringen, weil es schon viele nutzen. Sollen sie ja tun, wenn sie es wirklich brauchen, aber um ein Standardablauf (täglich zwei Heizzeiten und am Wochenende etwas anders) damit zu steuern, ist es eben nicht unbedingt notwendig und birgt Probleme, mit deren Handling gerade Einsteiger massiv überfordert sind. Dafür haben die Entwickler der Hardware die lokalen Profile in den Thermostaten vorgesehen. Und die werden dann vor lauter Scripting total "übersehen". Ich will auch weder gegen das Script bashen oder es schlecht reden und ziehe den Hut vor der Arbeit daran. Nichtsdesdotrotz möchte ich bezüglich möglicher Probleme bei der Verwendung von Scripten mit massiver Nutzung interner Variablen unter den aktuellen Umständen (max. 200 interne Scritpvariablen in Summe in allen Scripten auf der CCU) sensibilisieren.

Gruß Xel66


EDIT: Ein paar Postings weiter hatte ich mal Gelegenheit, die Anzahl der notwendigen Systemvariablen für diesen Scriptlauf zu zählen. Wenn ich mich nicht verzählt habe, dann sind das 60 Variablen für eine Funktionalität, die in ihren wesentlichen Funktionen schon in der originalen Firmware jedes Wand- oder Heizkörperthermostaten hinterlegt ist (Zeitplan). Lediglich die von diesem Plan abweichenden anlassbedingten Heizzeiten sind dort nicht abgedeckt. Diese ließen sich aber mit Bordmitteln mit einfachsten Programmen realisieren. Die auslösenden Systemvarianblen (Urlaub, Feiertag usw. braucht man ja sowieso). Man verbrät also für einen begrenzten Effekt ca. ein Drittel der Anzahl der im gesamten System zur Verfügung stehenden Systemvariablen. Unter den derzeitigen Gegebenheiten mit den auf 200 begrenzten systemweiten internen Variablen (NICHT Systemvariablen!) kann ich mir nicht vorstellen, dass das System auf Dauer stabil läuft, wenn man eventuell noch einige andere Scripts implementieren will. Wenn die CCU keine anderen aufwändigen Scipts laufen hat, dann kann es durchaus längerfristig funktionieren. Und wenn eQ-3 das Problem fixt, dann läuft es sicher auch. Bis dahin, Hmmmmm.....
Zuletzt geändert von Xel66 am 25.02.2016, 13:39, insgesamt 1-mal geändert.
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Cash
Beiträge: 1184
Registriert: 09.01.2016, 17:42
Wohnort: Sauerland
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Heizungsthermostatscript V2.0

Beitrag von Cash » 12.02.2016, 20:17

Wenn es bei Dir zwei Jahre ohne Probleme läuft würde ich es wohl eher nicht ändern. Aber es zeigt auch wie gut das Script ist.

Aber ich denke auch Neueinsteiger lesen Heizungsscript und nutzen es dann obwohl es auch anders geht.

Mir ging es ähnlich als ich vor vier Wochen auf Homematic gewechselt bin. Weil ich aber sehr viel gelesen habe hatte ich mich dann für meine Lösung entschieden.

Wie ich schon schrieb ist das schon top bei Homematic. Es gibt nicht die Lösung. Jeder mus seine eigene finden die zu den eigenen Anforderungen passt.

Grüße

Thomas

youngster91
Beiträge: 16
Registriert: 13.02.2015, 08:17

Re: Heizungsthermostatscript V2.0

Beitrag von youngster91 » 20.02.2016, 15:12

Hallo zusammen,
ich habe vor kurzem die leicht abgewandelte Anpassung des Heizungsscripts von spitzlbergerj in meine Scriptsammlung aufgenommen (siehe : http://homematic-forum.de/forum/viewtop ... &start=320)

Mit folgenden Code:

Code: Alles auswählen

string raum = "Raum Schlafzimmer" ; 

! ----------------------------------------------------------------------
! Raumheizung
! homematic-forum.de Script von Erik Groennerud - 8.2009- MM.2010
! Ergaenzung von Zauberlehrling
! Version 1.0
! Optimiert und ergaenzt von Petrus (Peter)
! ergänzt von BPoHVoodoo
! ----------------------------------------------------------------------

! --------------------------------------------------------------
! Debuglevel lesen; Skriptname protokollieren
! --------------------------------------------------------------
integer debug = 0;
debug = dom.GetObject('SysVar-Debuglevel').State();

if (debug >= 1) { dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug 'SKRIPTSTART Raumheizung für Raum: " # raum # "'");}


! ----------------------------------------------------------------------
! Temperaturen 8-30 Grad, 0 = OFF, 100=ON
! ----------------------------------------------------------------------
real grad_0 = 16.0;
real grad_1 = 18.0;
real grad_2 = 29.0;
real grad_3 = 20.0;
real grad_4 = 20.5;
real grad_5 = 21.0;
real grad_6 = 21.5;
real grad_7 = 22.0;
real grad_8 = 23.0;
real grad_9 = 24.0;

real grad_fenster = 12.0;		! Temperatur bei offenem Fenster -1 = off
real grad_auf_Reisen  = 16.0;		! Temperatur im Urlaub -1 = off
real grad_gaeste  = 23.0;		! Temperatur fuer Gaeste -1 = off
real grad_abwesend = 18.0;		! Temperatur ausser haus, wird als Absenkung benutzt, -1 = OFF (Anwesenheit)

! ----------------------------------------------------------------------
! Temperatursteuerung pro Tag
! ----------------------------------------------------------------------
integer wochenschema = 0;		! wochenschema == 0:	nimm pro Tage die jeweilige Zeile Mo = "mon"-Zeile, ...
					! wochenschema == 1:	nimm für Mo - Fr die "mon"-Zeile und nimm für Sa und So die "sam"-Zeile
					! wochenschema == 2:	nimm für alle Tage die "mon"-Zeile
					! wochenschema == 3:	nimm für Mo - Fr die "mon"-Zeile und nimm für Sa die "sam"-Zeile und für So die "son"-Zeile

integer leiste = 1;			! Welche Zeitleiste aktiv ist: 1: Gondelzimmer nicht belegt

! Falls im Urlaub auf Balkonie, Leiste 5 verwenden
if (dom.GetObject('SysVar-Urlaub').State()) { leiste = 5; }

! Falls das Gondelzimmer heute vormittags belegt ist, dann Leiste 3 setzen
!if (dom.GetObject('SysVar-GZ-vorm').State()) { leiste = 3; }

! Falls das Gondelzimmer heute nachmittags belegt ist, dann Leiste 4 setzen
!if (dom.GetObject('SysVar-GZ-nachm').State()) { leiste = 4; }

! Wenn das Gondelzimmer gestern belegt war und heute nicht belegt ist, dann Leiste 5
!if ((dom.GetObject('SysVar-GZ-gestern').State())  && ( ! dom.GetObject('SysVar-GZ-heute').State()))	{ leiste = 5; }


if (leiste == 1){
! Zeitleiste 1 Arbeit
! Uhrzeit                0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2|
!                        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3|
string zeitleiste_mon = "111111111111355541111111111335555777774422111111";
string zeitleiste_die = "111111111111355541111111111335555777774422111111";
string zeitleiste_mit = "111111111111355541111111111335555777774422111111";
string zeitleiste_don = "111111111111355541111111111335555777774422111111";
string zeitleiste_fre = "111111111111355541111111111335555777774422111111";
string zeitleiste_sam = "111111111111111344444555555555555577777774444411";
string zeitleiste_son = "111111111111111344444555555555555777774422111111";
};
if (leiste == 2){
! Zeitleiste 2 ganztags jemand da
! Uhrzeit                0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2|
!                        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3|
string zeitleiste_mon = "111111111111234433333333333333333333334444443332";
string zeitleiste_die = "111111111111234433333333333333333333334444443321";
string zeitleiste_mit = "111111111111234433333333333333333333334444443321";
string zeitleiste_don = "111111111111234433333333333333333333334444443321";
string zeitleiste_fre = "111111111111234433333333333333333333334444443321";
string zeitleiste_sam = "111111111111234433333333333333333333334444443321";
string zeitleiste_son = "111111111111234433333333333333333333334444443321";
};

if (leiste == 3){
! Zeitleiste 3 vormittags jemand da
! Uhrzeit                0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2|
!                        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3|
string zeitleiste_mon = "111111111111244333333333321000000000000000000000";
string zeitleiste_die = "111111111111244333333333321000000000000000000000";
string zeitleiste_mit = "111111111111244333333333321000000000000000000000";
string zeitleiste_don = "111111111111244333333333321000000000000000000000";
string zeitleiste_fre = "111111111111244333333333321000000000000000000000";
string zeitleiste_sam = "111111111111244333333333321000000000000000000000";
string zeitleiste_son = "111111111111244333333333321000000000000000000000";
};

if (leiste == 4){
! Zeitleiste 4 Nachmittag s jemand da
! Uhrzeit                0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2|
!                        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3|
string zeitleiste_mon = "000000000000000000000000000001112223334444443332";
string zeitleiste_die = "000000000000000000000000000001112223334444443332";
string zeitleiste_mit = "000000000000000000000000000001112223334444443332";
string zeitleiste_don = "000000000000000000000000000001112223334444443332";
string zeitleiste_fre = "000000000000000000000000000001112223334444443332";
string zeitleiste_sam = "000000000000000000000000000001112223334444443332";
string zeitleiste_son = "000000000000000000000000000001112223334444443332";
};

if (leiste == 5){
! Zeitleiste 5 gestern und übernacht war jemand da. Morgens noch heizen
! Uhrzeit                0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2|
!                        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3|
string zeitleiste_mon = "111111111111111344444555555555555577777774444411";
string zeitleiste_die = "111111111111111344444555555555555577777774444411";
string zeitleiste_mit = "111111111111111344444555555555555577777774444411";
string zeitleiste_don = "111111111111111344444555555555555577777774444411";
string zeitleiste_fre = "111111111111111344444555555555555577777774444411";
string zeitleiste_sam = "111111111111111344444555555555555577777774444411";
string zeitleiste_son = "111111111111111344444555555555555577777774444411";
};

! ----------------------------------------------------------------------
! weitere Variable
! ----------------------------------------------------------------------
string deltaStdMin = "02:00";	! deltaStdMin mit "hh:mm" setzten (Std / Min immer zweistellig) Differenzzeit, die manuelle Temperatur erhalten bleibt bis überschrieben wird.
integer man_temp;
integer diff;

boolean reise_relevant = true;	! Ist die Einstellung Reise relevant? Falls wir (Eltern) unterwegs sind, dann aber z.B. dennoch Kinderzimmer heizen

!******************************************************
! Ab hier Script CODE - Do not change behind this line
!******************************************************

! Umwandeln deltaStdMin in Sekunden
integer stunde = deltaStdMin.Substr(0, 2).ToInteger();
integer minute = deltaStdMin.Substr(3, 2).ToInteger();
integer minSekToChange = (stunde * 3600) + (minute * 60);

object regler;					! Datenobjekt des Reglers für die Solltemperatur (Kanal 2)

real soll_neu;					! Die neue Solltemperatur fuer den Raumthermostaten (Regler).
real soll_alt;					! Die alte Solltemperatur der Zeitleiste, die zuletzt aktuell war.
real soll_aktuell;				! Die aktuelle Solltemperatur im Raumthermostat (Regler).

time timestampOfSysVar;				! Zeitstempel der Systemvariablen, die zuletzt geändert worden ist (Wert in Sekunden).
boolean prioritaet = false;			! Ist prioritaet = true, dann wird die neue Solltemperatur auf jeden Fall in den Regler geschrieben.

integer offen = 0;				! Anzahl geöffneter Schließkontakte im Raum

 
! -----------------------------------------------------------------------------
! Geräte im Raum durchsuchen
! Wandthermostate, Heizkoerperthermostate: Devices merken; (letztes) soll_aktuell setzen
! Schließerkontakte: zählen der geöffneten
! -----------------------------------------------------------------------------
 
var myRaum;

var device;
var item;
var devAddresses = ";";

var devWandThermostat;
var reglerWandThermostat;
real WT_soll_aktuell = -1;
time WT_timestamp = 0;				! Zeitstempel, wann die Solltemperatur im Wandthermostat zuletzt gesetzt wurde.

var devHeizkoerperT1;
var devHeizkoerperT2;
var devHeizkoerperT3;
var devHeizkoerperT4;
var reglerHeizkoerperT1;
var reglerHeizkoerperT2;
var reglerHeizkoerperT3;
var reglerHeizkoerperT4;
real HT_soll_aktuell = -1;
integer nrHT = 0;
time HT_timestamp = 0;				! Zeitstempel, wann die Solltemperatur im Heizkoerperthermostat zuletzt gesetzt wurde.
time zw_timestamp;

string itemID;
 
myRaum = dom.GetObject(raum);

foreach(itemID, myRaum.EnumUsedIDs()) 
{
	item = dom.GetObject(itemID);
	
	! Nur Kanäle betrachten
	if (item.IsTypeOf(OT_CHANNEL)) {
		device = dom.GetObject(item.Device());


		! Wenn Raumthermostat gefunden wurde
		if ((device.HssType() == "HM-CC-TC") || (device.HssType() == "HM-TC-IT-WM-W-EU")){

			!  Gibt es den Datenpunkt "SET_TEMPERATURE" bzw. "SETPOINT"?
			if ( item.DPByHssDP("SET_TEMPERATURE") || item.DPByHssDP("SETPOINT") )
			{
				! dann aktuelle Solltemperatur auslesen
				if (device.HssType() == "HM-CC-TC") {
					regler = dom.GetObject("BidCos-RF." # device.Address() # ":2.SETPOINT");
				} else {
					regler = dom.GetObject("BidCos-RF." # device.Address() # ":2.SET_TEMPERATURE");
				}
				WT_soll_aktuell = regler.Value();
				
				!... und device merken
				devWandThermostat = device;
				reglerWandThermostat = regler;
				
				! ... und timestamp merken
				WT_timestamp = regler.Timestamp();
				
				if (debug >= 3) {
					dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug 'RT gemerkt itemID: " # itemID # ", Adresse: " # device.Address() # ", HssType: " # device.HssType() # "'");
				}
			}

		}
		else 
		{	
			! oder falls Heizungsthermostat gefunden wurde...
			if ((device.HssType() == "HM-CC-RT-DN"))
			{
			
				!  Gibt es den Datenpunkt "SET_TEMPERATURE"?
				if ( item.DPByHssDP("SET_TEMPERATURE"))
				{
					! ...dann aktuelle Solltemperatur auslesen.
					regler = dom.GetObject("BidCos-RF." # device.Address() # ":4.SET_TEMPERATURE");
					
					HT_soll_aktuell = regler.Value(); ! die Soll-Temperatur des zuletzt gefundenen Heizkoerperthermostats bleibt schlussendlich in der Variable
					
					!... und devices merken; max. 4 Heizkoerperthermostate pro Raum
					nrHT = nrHT +1;
					if (nrHT == 1) {devHeizkoerperT1 = device; reglerHeizkoerperT1 = regler; };
					if (nrHT == 2) {devHeizkoerperT2 = device; reglerHeizkoerperT2 = regler; };
					if (nrHT == 3) {devHeizkoerperT3 = device; reglerHeizkoerperT3 = regler; };
					if (nrHT == 4) {devHeizkoerperT4 = device; reglerHeizkoerperT4 = regler; };
					
					zw_timestamp = regler.Timestamp();
					if (zw_timestamp > HT_timestamp) { HT_timestamp = zw_timestamp; };
					
					if (debug >= 3) {
						dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug 'HT " # nrHT # " gemerkt itemID: " # itemID # ", Adresse: " # device.Address() # ", HssType: " # device.HssType() # "'");
					}
				}
			}
			else 
			{
				! Pruefen, ob Verschluss offen
				! Testen, ob Fenster Dachluken, usw. offen sind. Diese müssen dem jeweiligen Raum und dem Gewerk "Verschluss" zugeordnet sein
				! Alle Gewerke dem Raum zugeordneten Geräte untersuchen
				! Andere als die aufgeführten Sensoren oder Aktoren, die als Verschluss dienen, einfach in nachfolgender IF-Anweisung ändern oder ergänzen.

				! 		Türfensterkontakte                 Jalousienaktor / Dachluken Funk         Jalousienaktor / Dachluken Wired      Schließerkontakt-Sensor Hutschienenmontage        Fenster-Drehgriffsensoren
				if ((device.HssType() == "HM-Sec-SC") || (device.HssType() == "HM-LC-Bl1-FM") || (device.HssType() == "HMW-LC-Bl1-DR")  || (device.HssType() == "HMW-Sen-SC-12-DR") || (device.HssType() == "HM-Sec-RHS")) {
					var myChannel = dom.GetObject(item);
					string id;
					foreach(id, myChannel.ChnFunction()) {
						var func = dom.GetObject(id);
						if (func.Name() == "Gewerk Verschluss") {
							if (item.State() > 0) { offen = offen + 1.00; }
						}
					}
				}
			}
		}
	} ! if Kanal
} ! foreach


! --------------------------------------------------------------------------------------
! Prüfen, ob ein Thermostat gefunden wurde
! --------------------------------------------------------------------------------------

soll_aktuell = -1;

! Wandthermostat geht vor Heizkoerperthermostaten

! Gibt es ein Wandthermostat?
if ( WT_soll_aktuell >= 0 )
{
	! Ein Wandthermostat wurde gefunden und hat geantwortet.
	soll_aktuell = WT_soll_aktuell; 
}
else 
{
	! Im Raum gibt es kein Wandthermostat! Gibt es Heizkoerperthermostate?
	if ( HT_soll_aktuell >= 0 )
	{
		! Mindestens ein Heizkoerperthermostat wurde gefunden und hat geantwortet
		soll_aktuell = HT_soll_aktuell; 
	}
}



! --------------------------------------------------------------------------------------
! neue Soll-Temperatur in Abhängigkeit von Systemvariablen und Scriptvariablen setzen
!
! und gleichzeitig ermitteln, wann zuletzt eine relevate SystemVariable gesetzt wurde
! Die neue Soll-Temperatur wird nur dann gesetzt, wenn das letzte Setzen einer 
! SystemVariablen länger her ist, als die vorgegebene Wartezeit delteStdMin
! --------------------------------------------------------------------------------------

! Falls  Zentralheizung aus, dann alle Ventile maximal auf
if (!dom.GetObject('SysVar-Heizperiode').State()) 
{
    soll_neu = 100;
    prioritaet = true;
}

else 
{
	! Falls irgendein Schließer offen ist, dann Soll-Temperatur auf grad_fenster setzen
	if (offen > 0) 
	{
		if (soll_aktuell <= grad_fenster) { 
			! Wenn soll_aktuell niedriger als grad_fenster (z.B. Ventile zu -> soll_aktuell = 0), dann nichts machen
			soll_neu = soll_aktuell;
		} else {
			soll_neu = grad_fenster;
			prioritaet = true;
		}
	}
	else 
	{
		! --------------------------------------------------------------------------------------
		! Systemvariable prüfen
		! --------------------------------------------------------------------------------------

		! --------------------------------------------------------------------------------------
		! wurde manuelle Temperatur per Handy gesetzt?
		! --------------------------------------------------------------------------------------

		! Timestamp "MAN_Temp" festhalten
		timestampOfSysVar = dom.GetObject('SysVar-MAN_Temp').Timestamp();

		! MAN_Temp testen und einstellen, 0 = deaktiviert
		man_temp = dom.GetObject('SysVar-MAN_Temp').State();
		if (man_temp > 0)
		{ 
			! SysVar-Partytemperatur wurde auf einen Temperaturwert gesetzt, diesen einstellen
			soll_neu = man_temp;
		} 
		
		
		else 
		{
			! --------------------------------------------------------------------------------------
			! Ist heute ein Reisetag?
			! --------------------------------------------------------------------------------------

			! Prüfen ob Timestamp "Reise" jünger ist als "MAN_Temp" => Wenn ja, merken
			time settime = dom.GetObject('SysVar-Reise').Timestamp();
			if (settime > timestampOfSysVar) {timestampOfSysVar = settime;}
	  
			! Reise testen und einstellen, -1 = deaktiviert
			if ((dom.GetObject('SysVar-Reise').State()) && (grad_auf_Reisen > -1))
			{ 
				! Falls auf Reisen und Variable grad_auf_Reisen nicht -1 (deaktiviert)
				soll_neu = grad_auf_Reisen;
			}
			
			
			else 
			{
				! --------------------------------------------------------------------------------------
				! Wurde Systemvariable Anwesenheit manuell umgesetzt?
				! --------------------------------------------------------------------------------------

				! Prüfen ob Timestamp "Anwesenheit" jünger ist bisherige Systemvariable => Wenn ja, merken
				settime = dom.GetObject('SysVar-Anwesenheit').Timestamp();
				if (settime > timestampOfSysVar) {timestampOfSysVar = settime;}

				! Anwesenheit testen und einstellen, -1 = deaktiviert
				if ((!dom.GetObject('SysVar-Anwesenheit').State()) && (grad_abwesend > -1))
				{ 
					! Falls Anwesenheit auf FALSE gesetzt wurde und grad abwesend nicht deaktiviert
					soll_neu = grad_abwesend;
				} 
				
				
				
				else 
				{
					! --------------------------------------------------------------------------------------
					! Sind heute Gäste da?
					! --------------------------------------------------------------------------------------

					! Prüfen ob Timestamp "Gaeste" jünger ist als bisherige Timestamps => Wenn ja, merken
					settime = dom.GetObject('SysVar-Gaeste').Timestamp();
					if (settime > timestampOfSysVar) {timestampOfSysVar = settime;}

					! Gaeste testen und einstellen, -1 = deaktiviert
					if ((  dom.GetObject('SysVar-Gaeste').State()) && (grad_gaeste > -1))
					{
						! Falls Gaeste im Haus sind und grad_gaeste nicht -1 (deaktiviert)
						soll_neu = grad_gaeste;
					}

					
					
					else 
					{
						! --------------------------------------------------------------------------------------
						! ansonsten ist also ein "normaler" Tag
						! --------------------------------------------------------------------------------------

						string zeitleiste_heute;        ! Die Temperaturleiste fuer den aktuellen Tag.
						string zeitleiste_gestern;      ! Die Temperaturleiste von gestern.
						string heizwert;                ! Enthaelt den Wert, der in der Zeitleiste zum jetzigen Zeitpunkt gilt.

						! --------------------------------------------------------------------------------------
						! auswerten, welche zeitleiste für heute gültig ist
						! --------------------------------------------------------------------------------------

						integer tag = system.Date("%u");
						if ((tag == 1) && (wochenschema == 0)) {zeitleiste_heute = zeitleiste_mon;} else {
						if ((tag == 2) && (wochenschema == 0)) {zeitleiste_heute = zeitleiste_die;} else {
						if ((tag == 3) && (wochenschema == 0)) {zeitleiste_heute = zeitleiste_mit;} else {
						if ((tag == 4) && (wochenschema == 0)) {zeitleiste_heute = zeitleiste_don;} else {
						if ((tag == 5) && (wochenschema == 0)) {zeitleiste_heute = zeitleiste_fre;} else {
						if ((tag == 6) && ((wochenschema == 0) || (wochenschema == 3))) {zeitleiste_heute = zeitleiste_sam;} else {
						if ((tag == 7) && ((wochenschema == 0) || (wochenschema == 3))) {zeitleiste_heute = zeitleiste_son;} else {
						if ((tag >= 1) && (tag <= 5) && ((wochenschema == 1) || (wochenschema == 3))) {zeitleiste_heute = zeitleiste_mon;} else {
						if ((tag >= 6) && (tag <= 7) && (wochenschema == 1)) {zeitleiste_heute = zeitleiste_sam;} else {
						if (wochenschema == 2) {zeitleiste_heute = zeitleiste_mon;} }}}}}}}}}

						! An Feiertagen gilt die Temperatur von Samstag bzw. Sonntag
						if (dom.GetObject('SysVar-Feiertag_heute').State() && ((wochenschema == 0) || (wochenschema == 3))) {zeitleiste_heute = zeitleiste_son;} else {
						if (dom.GetObject('SysVar-Feiertag_heute').State() && (wochenschema == 1)) {zeitleiste_heute = zeitleiste_sam;}}

						! --------------------------------------------------------------------------------------
						! auswerten, welche Ziffer zur aktuellen Zeit gehört 
						! --------------------------------------------------------------------------------------

						! Position der Zeitleiste bestimmen
						! als 2. Hälfte der Stunde(%M = Minute), dann rechte Zahl nehmen
						if (system.Date("%M").ToInteger() > 29) {integer add = 1;} else {integer add = 0;}
						integer sTime = (system.Date("%H").ToInteger()*2)+add;
						heizwert = zeitleiste_heute.Substr(sTime, 1);

						! Temperatur bestimmen, die gesetzt werden soll
						if (heizwert == "0") {soll_neu = grad_0;} else {
						if (heizwert == "1") {soll_neu = grad_1;} else {
						if (heizwert == "2") {soll_neu = grad_2;} else {
						if (heizwert == "3") {soll_neu = grad_3;} else {
						if (heizwert == "4") {soll_neu = grad_4;} else {
						if (heizwert == "5") {soll_neu = grad_5;} else {
						if (heizwert == "6") {soll_neu = grad_6;} else {
						if (heizwert == "7") {soll_neu = grad_7;} else {
						if (heizwert == "8") {soll_neu = grad_8;} else {
						if (heizwert == "9") {soll_neu = grad_9;} }}}}}}}}}

						! letzte Solltemeratur bestimmen, dabei muß der wert von 00:00 beachtet werden - der letzte Wert war gestern
						if (sTime == 0) 
						{
							if ((tag == 1) && ((wochenschema == 0) || (wochenschema == 3))) {zeitleiste_gestern = zeitleiste_son;} else {
							if ((tag == 2) && (wochenschema == 0)) {zeitleiste_gestern = zeitleiste_mon;} else {
							if ((tag == 3) && (wochenschema == 0)) {zeitleiste_gestern = zeitleiste_die;} else {
							if ((tag == 4) && (wochenschema == 0)) {zeitleiste_gestern = zeitleiste_mit;} else {
							if ((tag == 5) && (wochenschema == 0)) {zeitleiste_gestern = zeitleiste_don;} else {
							if ((tag == 6) && (wochenschema == 0)) {zeitleiste_gestern = zeitleiste_fre;} else {
							if ((tag == 7) && ((wochenschema == 0) || (wochenschema == 3))) {zeitleiste_gestern = zeitleiste_sam;} else {
							if ((tag >= 2) && (tag <= 6) && ((wochenschema == 1) || (wochenschema == 3))) {zeitleiste_gestern  = zeitleiste_mon;} else {
							if (((tag == 1) || (tag == 7)) && (wochenschema == 1)) {zeitleiste_gestern = zeitleiste_sam;} else {
							if (wochenschema == 2) {zeitleiste_gestern = zeitleiste_mon;} }}}}}}}}}

							heizwert = zeitleiste_gestern.Substr(47, 1);
						} else {
							heizwert = zeitleiste_heute.Substr((sTime-1), 1);
						}

						! Temperatur bestimmen, die in der letzten 30 Minuten gesetzt war
						if (heizwert == "0") {soll_alt = grad_0;} else {
						if (heizwert == "1") {soll_alt = grad_1;} else {
						if (heizwert == "2") {soll_alt = grad_2;} else {
						if (heizwert == "3") {soll_alt = grad_3;} else {
						if (heizwert == "4") {soll_alt = grad_4;} else {
						if (heizwert == "5") {soll_alt = grad_5;} else {
						if (heizwert == "6") {soll_alt = grad_6;} else {
						if (heizwert == "7") {soll_alt = grad_7;} else {
						if (heizwert == "8") {soll_alt = grad_8;} else {
						if (heizwert == "9") {soll_alt = grad_9;} }}}}}}}}}
					} 
				} 
			} 
		} 
	}
}


if (debug >= 3) {
	dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug 'Soll vorheriger Zyklus: " # soll_alt # ", Soll aktuell eingestellt: " # soll_aktuell # ", zu setzendes Soll: " # soll_neu # "'");
}



! --------------------------------------------------------------------------------------
! Setzen der Temperatur 
! --------------------------------------------------------------------------------------

if (soll_aktuell >= 0) 
{ 
	! --------------------------------------------------------------------------------------------------
	! Wandthermostat bzw. Heizkoerperthermostate wurden gefunden und Sollwert konnte ausgelesen werden
	! --------------------------------------------------------------------------------------------------
	
    ! prüfen ob neue Solltemperatur in RT geschrieben werden muss.
    ! Wenn aktuelle Solltemperatur = neue Solltemp., dann nichts machen
	if (soll_aktuell <> soll_neu)
	{ 
		! --------------------------------------------------------------------------------------------------
		! Wieviele Minuten sind seit dem letzten manuellen Temperatursetzen vergangen?
		! --------------------------------------------------------------------------------------------------
		! wie spät ist es jetzt?
		time now = system.Date("%Y-%m-%d %H:%M:%S").ToTime();

		diff = 0;
		if (WT_timestamp > 0)
		{
			diff = now.ToInteger() - WT_timestamp.ToInteger();
		}
		else
		{
			diff = now.ToInteger() - HT_timestamp.ToInteger();
		}
		
		! --------------------------------------------------------------------------------------------------
		! Temperatur setzen nur dann, wenn
		! - Mindestwartezeit seit manueller Änderung bereits verstrichen ist oder
		! - Priorität gesetzt wurde (keine Heizperiode, Sxhließer offen, ...)
		! - die aktuelle Temperatur auf der Offene-Fenster-Temperatur steht
		! - eine der SystemVariablen später gesetzt wurde als die Thermostat-Timestamps
		! - aktuelle Soll-Temp gleich der vorhergehenden Soll-Temp und die neue Soll-Temp anders als die alte ist
		! --------------------------------------------------------------------------------------------------
		if (	(diff >= minSekToChange) || 
				(prioritaet) || 
				(soll_aktuell == grad_fenster) || 
				(timestampOfSysVar >= WT_timestamp) || (timestampOfSysVar >= HT_timestamp) || 
				((soll_aktuell == soll_alt) && (soll_alt <> soll_neu))
			) 
		{
			! --------------------------------------------------------------------------------------------------
			! Temperatur setzen ...
			! --------------------------------------------------------------------------------------------------

			if ( WT_soll_aktuell >= 0 )
			{
				! --------------------------------------------------------------------------------------------------
				! ... am Wandthermostat
				! --------------------------------------------------------------------------------------------------
				
				reglerWandThermostat.State(soll_neu);

				if (debug >= 2) { dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug 'Am WT neue Temp " # soll_neu # " gesetzt!'");}
			}

			else
			{
				! --------------------------------------------------------------------------------------------------
				! ... an allen Heizkoerperthermostaten
				! --------------------------------------------------------------------------------------------------
				
				integer laufvar = 1;
				while ( laufvar <= nrHT )
				{
					if (laufvar == 1) {reglerHeizkoerperT1.State(soll_neu); };
					if (laufvar == 2) {reglerHeizkoerperT2.State(soll_neu); };
					if (laufvar == 3) {reglerHeizkoerperT3.State(soll_neu); };
					if (laufvar == 4) {reglerHeizkoerperT4.State(soll_neu); };
					
					if (debug >= 2) { dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug 'Am HT neue Temp " # soll_neu # " gesetzt!'");}
					
					laufvar = laufvar + 1;
				}
			}
		} 
		else
		{
			if (debug >= 3) { dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug 'Temperatur nicht neu gesetzt - Zeitdiff:" # diff # " (min. " # minSekToChange # "), Prio: " # prioritaet # ", Timestap SysVar: " # timestampOfSysVar # ", WT: " # WT_timestamp # ", HT: " # HT_timestamp # "'");}
		}
    }
} else {
	if (debug >= 1) {
		dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug 'Thermostate in " # raum # " antworten nicht!'");
	}
}
Und folgenden Geräten:
Zur Hardware ich nutze eine CCU2 mit Firmware 2.15.5 mit einem Wandthermostat (HM-TC-IT-WM-W-EU) einem Heizungsaktor (HM-CC-RT-DN) und zwei Fensterkontakten (HM-Sec-RHS). Alle zusammen sind per Direktverknüpfung versehen.

Nun zum Problem:
Jetzt wird das Wandthermostat per Script gesetzt, aber alle paar Mintuten (5-10 Minuten) überschreibt mein Wandthermostat im Manu Modus die Skript Werte mit seiner manuell eingestellten Temperatur, selbst wenn diese Einstellung von vor 5 Std ist. Dies bleibt solange bestehen bis das Skript durch periodisches Aufrufen (bei mir alle 2 Minuten) wieder die Werte überschreibt. Kennt einer das Problem oder weiß zufällig woran das liegen könnte? Weil ist halt bisschen doof, wenn der Manu Wert über dem Skript eingestellten Wert liegt, dann boostet der Aktor ja sozusagen 2 Minuten lang und außerdem denke ich ist die Belastung für CCU usw auch erhöht wenn sich beide Dinge gegenseitig hin und her überschreiben.

Über eure Hilfe wäre ich mehr als dankbar! :)

Schöne Grüße

Stefan

bummbumm
Beiträge: 2
Registriert: 25.02.2016, 09:59

Thermostat reagiert nicht

Beitrag von bummbumm » 25.02.2016, 10:11

moin erstmal....
bin neu hier und habe versucht das script zum laufen zu bekommen.
das thermostat in meinem fall kueche wird auch gefunden und beim ändern der variabeln z.b. gaeste werden im script die zeiten auch verändert, aber das thermostat ändert leider seine
tmeperatur nicht... wo liegt mein fehler?
hier die ausgabe von hm_script_executor:

{
"sessionId": "",
"deltaStdMin": "02:00",
"regler": "null",
"stunde": "2",
"tag": "0",
"offen": "0",
"debug": "1",
"zeitleiste_gestern": "",
"soll_alt": "0.000000",
"zeitleiste_mon": "000000000000012210000000000000000011222233321110",
"stderr": "",
"zeitleiste_heute": "",
"woche": "0",
"soll_ist": "-1",
"partytemperatur": "-1.000000",
"heizwert": "",
"stdout": "",
"STDOUT": "",
"prioritaet": "false",
"grad_0": "19",
"id": "",
"grad_1": "20.500000",
"grad_2": "21.000000",
"grad_aa": "19",
"grad_3": "21.500000",
"grad_urlaub": "16",
"add": "0",
"grad_4": "22.500000",
"grad_5": "23",
"grad_6": "25",
"zeitleiste_mit": "000000000000012210000000000000000011111133321110",
"grad_7": "27",
"raum": "Kueche",
"grad_8": "0",
"httpUserAgent": "",
"grad_9": "100",
"myChannel": "null",
"grad_fenster": "6",
"sv_timestamp": "2016-02-25 09:36:57",
"grad_gaeste": "23.500000",
"zeitleiste_fre": "000000000000012110000000000000000011111133321110",
"setdelta": "7200",
"myAssembly": "Kueche",
"device": "H_Kueche",
"soll_neu": "23.500000",
"rt_timestamp": "1970-01-01 00:59:59",
"settime": "2016-02-25 09:36:57",
"now": "1970-01-01 00:59:59",
"regler_gesetzt": "0",
"leiste": "1",
"item": "HM-CC-RT-DN LEQ0644956:4",
"zeitleiste_son": "000000000000001211111111111111111111223333221110",
"zeitleiste_don": "000000000000012211111111111111111111111133321110",
"zeitleiste_sam": "000000000000001222222221111111111112223333221110",
"zeitleiste_die": "000000000000012210000000000000000011111133321110",
"itemID": "1507",
"diff": "0",
"sTime": "0",
"minute": "0",
"func": "null"
}

bummbumm
Beiträge: 2
Registriert: 25.02.2016, 09:59

Re: Heizungsthermostatscript V2.0

Beitrag von bummbumm » 25.02.2016, 16:00

hab den fehler gefunden...
lag an dem neueren thermostattyp...

Rais
Beiträge: 43
Registriert: 25.12.2015, 13:48
Hat sich bedankt: 2 Mal

Re: Heizungsthermostatscript V2.0

Beitrag von Rais » 10.03.2016, 20:28

Hi zusammen,
mich würde interessieren ob das Script auch mit den neuen IP Geräten zusammen arbeitet und ob es zwingend erforderlich ist ein Thermostat zu verwenden.

Antworten

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