Hallo Leute,
ich bin seit kurz vor Weihnachten 2014/15 ganz frisch im Thema Homematic und habe meine elektrischen Rollen jetzt alle in eine zeitabhängige Steuerung umgesetzt. Das war ja einfach!!
Im nächsten Schritt möchte ich jetzt meine alte Veltamat KR Fussbodenheizungsregelung auf Homematic Steuerung umbauen. Die vorhandene Einzelraumregelung funktioniert nicht mehr und da muss was neues her. Ich habe allerdings immense Startschwierigkeiten in Thema "FBH" und leider gibt es hier auch kein wirkliches Schritt für Schritt Tutorial für Anfänger wie mich.
Im ersten Schritt habe ich mir nun folgendes gekauft:
4x Wandthermostate HM-TC-IT-WM-W-EU
1x 4 Kanal Hutschienen Schaltaktor HM-LC-Sw4-DR
Alle Geräte sind mit aktueller Firmware bespielt, an der CCU2 angelernt und ich kann alle erreichen.
Jetzt ist natürlich die Frage nach der Vorgehensweise und dem Umfang der Steuerung also den Regelmöglichkeiten. Ein schlankes Beispiel habe ich im Netz gefunden bei http://www.kriwanek.de/homematic/367-ho ... izung.html an dem ich mich langhangeln möchte.
(für Alternativ-Vorschläge bin ich natürlich offen)
Ziel wäre für mich ein wirkliches Schritt für Schritt Tutorial zu erstellen was auch Anfänger nachvollziehen können und was auch funktioniert. Das hilft dann sicherlich nicht nur mir besser ins Thema zu kommen.
Also, beginnen wir mal mit dem ersten Schritt und den ersten Fragen:
1.) Im ersten Teil des Scriptes steht, das zuerst einmal Systemvariablen angelegt werden müssen um die Werte auslesen bzw. darauf zurückgreifen zu können.
... im Script:: "Systemvariablen (String) anlegen: FBH EG-Diele ... etc."
Also habe ich jetzt eine Systemvariable für mich mit dem Namen "FBH_Küche" angelegt: Nun stellen sich mir folgende Fragen:
- ist "String" überhaupt korrekt, es ist ja keine Zahl mit der gerechnet werden kann ?
- ist das richtig so ohne Kanalzuordnung ?? (was liest er aus und wie)
- sobald ich eine Kanalzuordnung vornehme ist die Systemvariable unter "Status und Bedienung >> Systemvariable" nicht mehr sichtbar und fehlt dort komplett. Warum, das versteh ich überhaupt nicht ??
2.) Im zweiten Schritt habe ich nach Vorbild das Programm erstellt welches täglich alle 10 Minuten ausgeführt wird. Ich habe das Script jetzt mal auf meine Gerätebezeichnungen umgeschrieben (hoffentlich ohne Fehler) und dies sieht wie folgt aus:
Code: Alles auswählen
!-------------------------------------------------------------------------------------------
! HM-Skript Fußbodenheizung Rev.0.6, 15.12.2013 / 03:11 A. Kriwanek
!-------------------------------------------------------------------------------------------
! Systemvariablen (String) anlegen:
! FBH_Kueche Thermostat=LEQ0595667:1 Schaltaktor=LEQ0627547:1
! FBH_Buero Thermostat=LEQ0997282:1 Schaltaktor=LEQ0627547:2
! FBH_Esszimmer Thermostat=LEQ0998328:1 Schaltaktor=LEQ0627547:3
! FBH_Wohnzimmer Thermostat=LEQ0997294:1 Schaltaktor=LEQ0627547:4
!
! Systemvariablen (Boolean) anlegen:
! Heizperiode
!
!-------------------------------------------------------------------------------------------
! Globale Variablen definieren:
!-------------------------------------------------------------------------------------------
real THyst = 0.2; ! Hysterese für Ventilschluß in °C vorgeben
boolean PumpValue = 1; ! Set pump 1=off, 0=on
real TIst; ! Aktuelle Raumtemperatur
real TSoll; ! Solltemperatur
integer NachkommaStellen = 1; ! Anzahl Nachkommastellen bei Temperaturen
string stringPart = ""; ! Zwischenstring eines float-Wertes
string stringResult = ""; ! Kompletter Ergebnisstring eines Heizkreises
integer DotPos; ! Position des Dezimalpunktes
var Valve; ! FBH-Ventilstellung
!-------------------------------------------------------------------------------------------
! FBH Kueche:
!-------------------------------------------------------------------------------------------
!WriteLine("<<< FBH_Kueche >>>");
! >>> Ist-Temperatur auslesen:
TIst = dom.GetObject("BidCos-RF.LEQ0595667:1.TEMPERATURE");
stringPart = TIst.Value().ToString();
DotPos = stringPart.Find(".");
stringResult = stringPart.Substr(0, DotPos + NachkommaStellen + 1) # "°C (Soll ";
!Write("Ist-Temperatur:"); !WriteLine(TIst.Value());
! >>> Soll-Temperatur auslesen:
TSoll = dom.GetObject("BidCos-RF.LEQ0595667:2.SETPOINT");
stringPart = TSoll.Value().ToString();
DotPos = stringPart.Find(".");
stringResult = stringResult # stringPart.Substr(0, DotPos + NachkommaStellen + 1) # "°C), ";
!Write("Soll-Temperatur:"); !WriteLine(TSoll.Value());
! >>> Heizkreisventil ansteuern:
Valve = dom.GetObject("BidCos-RF.LEQ0627547:1.STATE");
! Neuen Ventilstatus berechnen und setzen:
var mySysVar = dom.GetObject('FBH_Kueche');
if(TIst.Value() < TSoll.Value()) {
Valve.State(0);
PumpValue = 0;
stringResult = stringResult # "EIN";
mySysVar.Variable(stringResult);
!WriteLine("Heizkreis ein!");
}
if(TIst.Value() > (TSoll.Value() + THyst)) {
Valve.State(1);
stringResult = stringResult # "AUS";
mySysVar.Variable(stringResult);
!WriteLine("Heizkreis aus!");
}
!-------------------------------------------------------------------------------------------
! FBH_Buero
!-------------------------------------------------------------------------------------------
!WriteLine("<<< FBH_Buero >>>");
! >>> Ist-Temperatur auslesen:
TIst = dom.GetObject("BidCos-RF.LEQ0997282:1.TEMPERATURE");
stringPart = TIst.Value().ToString();
DotPos = stringPart.Find(".");
stringResult = stringPart.Substr(0, DotPos + NachkommaStellen + 1) # "°C (Soll ";
!Write("Ist-Temperatur:"); !WriteLine(TIst.Value());
! >>> Soll-Temperatur auslesen:
TSoll = dom.GetObject("BidCos-RF.LEQ0997282:2.SETPOINT");
stringPart = TSoll.Value().ToString();
DotPos = stringPart.Find(".");
stringResult = stringResult # stringPart.Substr(0, DotPos + NachkommaStellen + 1) # "°C), ";
!Write("Soll-Temperatur:"); !WriteLine(TSoll.Value());
! >>> Heizkreisventil ansteuern:
Valve = dom.GetObject("BidCos-RF.LEQ0627547:2.STATE");
! Neuen Ventilstatus berechnen und setzen:
var mySysVar = dom.GetObject('FBH_Buero');
if(TIst.Value() < TSoll.Value()) {
Valve.State(0);
PumpValue = 0;
stringResult = stringResult # "EIN";
mySysVar.Variable(stringResult);
!WriteLine("Heizkreis ein!");
}
if(TIst.Value() > (TSoll.Value() + THyst)) {
Valve.State(1);
stringResult = stringResult # "AUS";
mySysVar.Variable(stringResult);
!WriteLine("Heizkreis aus!");
}
!-------------------------------------------------------------------------------------------
! FBH_Esszimmer
!-------------------------------------------------------------------------------------------
!WriteLine("<<< FBH_Esszimmer >>>");
! >>> Ist-Temperatur auslesen:
TIst = dom.GetObject("BidCos-RF.LEQ0998328:1.TEMPERATURE");
stringPart = TIst.Value().ToString();
DotPos = stringPart.Find(".");
stringResult = stringPart.Substr(0, DotPos + NachkommaStellen + 1) # "°C (Soll ";
!Write("Ist-Temperatur:"); !WriteLine(TIst.Value());
! >>> Soll-Temperatur auslesen:
TSoll = dom.GetObject("BidCos-RF.LEQ0998328:2.SETPOINT");
stringPart = TSoll.Value().ToString();
DotPos = stringPart.Find(".");
stringResult = stringResult # stringPart.Substr(0, DotPos + NachkommaStellen + 1) # "°C), ";
!Write("Soll-Temperatur:"); !WriteLine(TSoll.Value());
! >>> Heizkreisventil ansteuern:
Valve = dom.GetObject("BidCos-RF.LEQ0627547:3.STATE");
! Neuen Ventilstatus berechnen und setzen:
var mySysVar = dom.GetObject('FBH_Esszimmer');
if(TIst.Value() < TSoll.Value()) {
Valve.State(0);
PumpValue = 0;
stringResult = stringResult # "EIN";
mySysVar.Variable(stringResult);
!WriteLine("Heizkreis ein!");
}
if(TIst.Value() > (TSoll.Value() + THyst)) {
Valve.State(1);
stringResult = stringResult # "AUS";
mySysVar.Variable(stringResult);
!WriteLine("Heizkreis aus!");
}
!-------------------------------------------------------------------------------------------
! FBH_Wohnzimmer
!-------------------------------------------------------------------------------------------
!WriteLine("<<< FBH_Wohnzimmer >>>");
! >>> Ist-Temperatur auslesen:
TIst = dom.GetObject("BidCos-RF.LEQ0997294:1.TEMPERATURE");
stringPart = TIst.Value().ToString();
DotPos = stringPart.Find(".");
stringResult = stringPart.Substr(0, DotPos + NachkommaStellen + 1) # "°C (Soll ";
!Write("Ist-Temperatur:"); !WriteLine(TIst.Value());
! >>> Soll-Temperatur auslesen:
TSoll = dom.GetObject("BidCos-RF.LEQ0997294:2.SETPOINT");
stringPart = TSoll.Value().ToString();
DotPos = stringPart.Find(".");
stringResult = stringResult # stringPart.Substr(0, DotPos + NachkommaStellen + 1) # "°C), ";
!Write("Soll-Temperatur:"); !WriteLine(TSoll.Value());
! >>> Heizkreisventil ansteuern:
Valve = dom.GetObject("BidCos-RF.LEQ0627547:4.STATE");
! Neuen Ventilstatus berechnen und setzen:
var mySysVar = dom.GetObject('FBH_Wohnzimmer');
if(TIst.Value() < TSoll.Value()) {
Valve.State(0);
PumpValue = 0;
stringResult = stringResult # "EIN";
mySysVar.Variable(stringResult);
!WriteLine("Heizkreis ein!");
}
if(TIst.Value() > (TSoll.Value() + THyst)) {
Valve.State(1);
stringResult = stringResult # "AUS";
mySysVar.Variable(stringResult);
!WriteLine("Heizkreis aus!");
}
! ----- Ende Skript -----
Nun stellt sich mir die Frage, wie kann ich den Fehler einkreisen bzw. finden?
Woran kann es liegen ??
Wäre prima wenn Ihr Cracks Euch das einmal ansehen könntet und mir einen Tipp oder gar eine Lösung geben könnten.
Ich will im ersten Schritt ja ersteinmal nur sehen dass Werte übergeben werden und der Schaltaktor korrekt schaltet. Das werd ich dann mit den letzten funktionierenden 12V Stellantrieben testen. Wenn das alles zur Zufriedenheit läuft investiere ich in neue Stellantriebe fürs ganze Haus.
Besten Dank im Voraus
Gruss Peter