hier stelle ich Euch kurz und knackig vor, wie ich meine alte Gasheizung in HM (CCU2) eingebunden habe.
Nach einiger Recherche habe ich mich von 2 Projekten inspirieren lassen.
• viewtopic.php?f=18&t=15539
• https://homematic-guru.de/homematic-hei ... tgesteuert
Der VKS ist ein Gas-Heizkessel der entweder Warmwasser aufbereiten oder die Heizung befeuern kann.
Die Grundidee
Kanal 1 bzw. Schaltaktor 1 soll die Heizung schalten und Kanal 2 bzw. Schaltaktor 2 soll die Warmwasseraufbereitung schalten.
Als Regelung ist ein VRC CBBW verbaut der durch eine digitale Schaltuhr geschaltet wird.
Da ich an der Regelung nichts verändern wollte, blieb mir nichts anderes überig als die Schaltuhr zu überbrücken.
(Vaillant digitale Schaltuhr 253209 96-1246 VRC9566)
Ich entschied mich für den Aktor HmIP-PCBS2. Nach etwas Messen und überbrücken, habe ich die Funktionsweise verstanden.
Da die Uhr mit 12V läuft war die Spannungsversorgung für den HmIP-PCBS2 kein Problem.
3+4 nur Heizungspumpe
4+5 Heizung
6+7 WW aus
7+8 WW an
Installation
Weil die Platine etwas zu groß für das Gehäuse der Schaluhr war, habe ich das Stück mit den Relais abgetrennt.
Zudem habe ich das IC ausgelötet, um die Funktion der Schaltuhr zu deaktivieren. Für einen eventuellen Rückbau habe ich dafür einen Sockel eingelötet. Das Ganze dann wieder in die Schaltuhr gesteckt, und ein Stück Hartschaum als quick&dirty Isolierung passend geschnitten.
Deckel drauf und fertig. Alles eingebaut und die Heizung eingeschaltet. Da der Aktor nach dem Einschalten für 3 Min in den Anlernmodus geht, war auch das Anlernen kein Problen.
Funktionstest durchgeführt: Heizung An/Aus ok, WW An/Aus, ok.
Einstellung an der Regelung
Damit die Heizung auch in der Übergangszeit anspricht habe ich die Einstellung an der Regelung geändert.
• Heizkurve erhöhen (7,5)
• Vorlauftemperatur begrenzen (3)
Systemvariablen
Anwesenheit oder Zone Svens iPhone (PocketControl) (Logikwert)
Die Variable Anwesenheit oder Zone Svens iPhone (PocketControl) wird benötigt, damit die Skripte über An und Abwesenheit gesteuert werden können.
Heizperiode (Logikwert)
Die Variable Heizperiode wird benötigt, damit das komplette Programm während der Sommerzeit deaktiviert werden kann.
Heizautomatik (Logikwert)
Die Variable Heizungsautomatik wird benötigt, damit man im Winter bei Abwesenheit die Automatik deaktivieren kann. So bleiben die Thermostate auch bei Abwesenheit im Auto-Modus. (Kurze Einkäufe, Person/Tier anwesend)
HZ_Status (Integer)
Die Variable HZ_Status wird benötigt, damit das Heizungsskript übermitteln kann welcher Raum Wärme anfordert. 1= Wohnzimmer, 10= Büro, 11= Wohnzimmer&Büro, 111= Wohnzimmer&Büro&Schlafzimmer, pro angezeigter 1 = Wärmeanforderung durch einen Raum.
Warmwasserautomatik (Logikwert)
Die Variable Warmwasserautomatik wird benötigt, damit die automatische Warmwasseraufbereitung z.B. während eines Urlaubs deaktiviert werden kann.
Programme & Skripte
Die automatische Heizung bzw. das Wärmeanforderung Skript ist das Kernstück der Steuerung
Quelle: viewtopic.php?f=18&t=15539
Anbei das Skript für die Wärmeanforderung. Zudem prüfe ich ob die Warmwasseraufbereitung läuft. Warmwasseraufbereitung hat Prio1!
Das Programm läuft unter der Berücksichtigung, dass die Systemvariable Heizperiode true bzw. ein ist.
Code: Alles auswählen
! Thermostate abfragen
! ----------------------------------------------------
integer HzRaum1=0;
integer HzWhz=0;
integer HzSchlaf=0;
real toleanz_Temp = 0;
integer HZ_Status=0;
object ThermostatRaum1;
string sRegler = "MEQ1111111";
! aktueller Istwert von HM-CC-RT-DN ermitteln
object ThermostatRaum1= dom.GetObject("BidCos-RF." # sRegler # ":4.ACTUAL_TEMPERATURE");
real akt_TempRaum1= ThermostatRaum1.Value();
! Eingestellten Sollwert von HM-CC-RT-DN ermitteln
object ThermostatRaum1= dom.GetObject("BidCos-RF." # sRegler # ":4.SET_TEMPERATURE");
real soll_TempRaum1 = ThermostatRaum1.Value();
! Aktuelle Ventiloeffnung (%) von HM-CC-RT-DN ermitteln
object ThermostatRaum1 = dom.GetObject("BidCos-RF." # sRegler # ":4.VALVE_STATE");
real akt_VentilRaum1 = ThermostatRaum1.Value();
! ----------------------------------------------------
! Kontrolle ob Heizung benötigt
! ----------------------------------------------------
if ((akt_TempRaum1 > soll_TempRaum1) && (akt_VentilRaum1<15))
{HzRaum1=0;}
if ((akt_TempRaum1 < (soll_TempRaum1 - toleanz_Temp)) || (akt_VentilRaum1>95))
{HzRaum1=10;}
! ----------------------------------------------------
! Thermostat Schlaf abfragen
! ----------------------------------------------------
object ThermostatSchlaf;
string sSchlafRegler = "MEQ2222222";
! aktueller Istwert von HM-CC-RT-DN ermitteln
object ThermostatSchlaf= dom.GetObject("BidCos-RF." # sSchlafRegler # ":4.ACTUAL_TEMPERATURE");
real akt_TempSchlaf = ThermostatSchlaf.Value();
string strAkt_TempSchlaf = ThermostatSchlaf.Value();
! Eingestellten Sollwert von HM-CC-RT-DN ermitteln
object ThermostatSchlaf= dom.GetObject("BidCos-RF." # sSchlafRegler # ":4.SET_TEMPERATURE");
real soll_TempSchlaf = ThermostatSchlaf.Value();
! Aktuelle Ventiloeffnung (%) von HM-CC-RT-DN ermitteln
object ThermostatSchlaf = dom.GetObject("BidCos-RF." # sSchlafRegler # ":4.VALVE_STATE");
real akt_VentilSchlaf = ThermostatSchlaf.Value();
! ----------------------------------------------------
! Kontrolle ob Heizung benötigt
! ----------------------------------------------------
if ((akt_TempSchlaf > soll_TempSchlaf) && (akt_VentilSchlaf <20))
{HzRaum2=0;}
if ((akt_TempSchlaf < (soll_TempSchlaf - toleanz_Temp)) || (akt_VentilSchlaf>95))
{HzSchlaf=100;}
! ----------------------------------------------------
! Thermostate Whz abfragen
! ----------------------------------------------------
object ThermostatWhz;
string sRegler = "INT3333333";
string sValve = "KEQ4444444";
! aktueller Istwert von HM-TC-IT-WM-W-EU ermitteln
object ThermostatWhz = dom.GetObject("VirtualDevices." # sRegler # ":1.ACTUAL_TEMPERATURE");
real akt_TempWhz = ThermostatWhz.Value();
string strAkt_TempWhz = ThermostatWhz.Value();
! Eingestellten Sollwert von HM-TC-IT-WM-W-EU ermitteln
object ThermostatWhz = dom.GetObject("VirtualDevices." # sRegler # ":1.SET_TEMPERATURE");
real soll_TempWhz = ThermostatWhz.Value();
! Aktuelle Ventiloeffnung (%) von HM-CC-RT-DN ermitteln
object ThermostatWhz = dom.GetObject("BidCos-RF." # sValve # ":4.VALVE_STATE");
real akt_VentilWhz = ThermostatWhz.Value();
! ----------------------------------------------------
! Kontrolle ob Heizung benötigt
! ----------------------------------------------------
if ((akt_TempWhz > soll_TempWhz) && (akt_VentilWhz<15))
{HzWhz=0;}
if ((akt_TempWhz < (soll_TempWhz - toleanz_Temp)) || (akt_VentilWhz>95))
{HzWhz=1;}
! ----------------------------------------------------
! Kontrolle aller Heizungen und prüfen ob Gaskessel einschalten/ausschalten
! Prüfen on Warmwasseraufbereitung läuft. Warmwasseraufbereitung hat Prio1
! ----------------------------------------------------
! HmIP-RF.00555555555555:4 ist der Schalter für die Heizung am Gaskessel
var WW_HZ = dom.GetObject("HmIP-RF.00555555555555:8.STATE").Value().ToInteger();
if (((HzRaum1 + HzWhz + HzSchlaf)>0) && (WW_HZ == 0))
{
var switch=dom.GetObject("HmIP-RF.00555555555555:4.STATE");
switch.State(1);
}
else
{
var switch=dom.GetObject("HmIP-RF.00555555555555:4.STATE");
switch.State(0);
}
! ----------------------------------------------------------------------------------
! Variable HZ_Status setzen
!
object sysHZ_Zustand=dom.GetObject('HZ_Status').State();
HZ_Status=(HzRaum1 + HzWhz + HzSchlaf);
dom.GetObject('HZ_Status').State(HZ_Status);
Fortsetzung folgt ...