Wandthermostat zur Steuerung einer Elektroheizung verwenden

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

Moderator: Co-Administratoren

Antworten
sambasamba
Beiträge: 1602
Registriert: 16.08.2009, 23:18
Wohnort: Landau/Südpfalz
Hat sich bedankt: 21 Mal
Danksagung erhalten: 4 Mal

Wandthermostat zur Steuerung einer Elektroheizung verwenden

Beitrag von sambasamba » 26.09.2010, 15:06

Die ELV-Raumthermostate eignen sich auch gut zur Steuerung von Elektro- oder Gasheizungen mit Zweipunktregelung (das heißt nur 2 Schaltzustände EIN und AUS).
Benötigt wird ein RT, irgendein Schaltaktor, eine CCU, Stellantriebe natürlich nicht.
So gehts:

1. WebUI-Programm:
image1302.gif
image1302.gif (15.35 KiB) 17413 mal betrachtet
HEIZSTATUS ist bei mir eine Systemvariable, die im Sommer auf AUS steht.

"Auslösen auf Aktualisierung": jedesmal wenn ein neuer Meßwert an die CCU übertragen wird (alle paar Minuten), wird das Script ausgelöst.
"Auslösen auf Änderung" geht hier nicht: nicht bei Änderung des Werts vom Sensor wird ausgelöst, sondern bei Änderung der Bedingung von WAHR auf FALSCH oder umgekehrt.
Dann würde also das Script nur bei bei Temparaturänderung von -10,5 auf -9,5° und zurück (oder so) ausgelöst. Das kommt aber eher selten vor :wink: .

2. Das Script steuert den Aktor:

Code: Alles auswählen

    string VentilSchalterKanal = "HM-LC-Sw4-SM DEQ0000000:1";
    string Raumregler = "HM-CC-TC GEQ0000000";

    if( ! dom.GetObject(Raumregler # ":1") )
    {
       WriteLine("Raumreglername Kanal 1 ist nicht korrekt");
    }
    if( ! dom.GetObject(Raumregler # ":2") )
    {
       WriteLine("Raumreglername Kanal 2 ist nicht korrekt");
    }
    if( ! dom.GetObject(VentilSchalterKanal) )
    {
       WriteLine("VentilSchalterKanal ist nicht korrekt");
    }
    real aktuelleTemperatur = dom.GetObject(Raumregler # ":1").DPByHssDP("TEMPERATURE").Value();
    real zielTemperatur = dom.GetObject(Raumregler # ":2").DPByHssDP("SETPOINT").Value();
    object ventilAktorDP = dom.GetObject(VentilSchalterKanal).DPByHssDP("STATE");
    real hysterese = 0.5;

    if( aktuelleTemperatur < ( zielTemperatur - hysterese ) )
    {
    ! WriteLine("temperatur zu niedrig");
       if( ! ventilAktorDP.Value() )
       {
    ! WriteLine("Aktor einschalten");
          ventilAktorDP.State(1);
       }
    }
    else
    {
       if( aktuelleTemperatur > ( zielTemperatur + hysterese ) )
       {
       ! WriteLine("temperatur zu hoch");
          if( ventilAktorDP.Value() )
          {
       ! WriteLine("Aktor ausschalten");
             ventilAktorDP.State(0);
          }
       }
    }
Das Script ist nicht von mir, aber ich denke ich darf es hier trotzdem veröffentlichen.

Die ganzen debug-Infos (WriteLines) besser aus dem Script rauszuschmeißen, die CCU hat auch so schon genug zu tun. Der Übersichtlichkeit hab ichs hier im Beitrag aber drin gelassen.
Volkmar

EDIT 12/11: die Sache hat einen Haken. Wenn sich wegen des im RT gespeicherten Programms die Solltemperatur ändert (anscheinend nur dann), wird diese an die CCU übertragen. Wenn die CCU den 'Funkspruch' nicht mitbekommt bleibt die bisherige Temperatur weiter gültig - und es wird die Nacht über durchgeheizt oder morgens nicht eingeschaltet. Nachdem es ganz sporadisch solche Fehler gab hab ich einfach bei einer Temperaturänderung im RT zwei oder drei Schaltzeitpunkte dicht hintereinander gesetzt - seitdem keine Probleme mehr.
Ob ein dummy-Programm was zeitgesteuert alle 5 Minuten die SOLLtemperatur der RT in eine Variable einliest Funkverkehr erzwingt hab ich mir noch nicht weiter überlegt.

EDIT 2/12: nach einem CCU-Neustart ist für die CCU die SOLLtemp. solange Null, bis der RT das nächste Mal was sendet. Je nach Mode kann das aber dauern... solange wird die Heizung nicht gesteuert. Hier: http://homematic-forum.de/forum/viewtop ... 258#p57994 ist ein schöner workaround beschrieben.

Hier noch ein kompaktes Script für einen wired-Aktor:

Code: Alles auswählen

!Heizung Versand steuern ..................                 

   var TempSensorSN = "GEQ0022222";
    var SchaltaktorSN = "GEQ0033333:13";

    var istTemperatur = dom.GetObject("BidCos-RF."+TempSensorSN+":1.TEMPERATURE").Value();
    var sollTemperatur = dom.GetObject("BidCos-RF."+TempSensorSN+":2.SETPOINT").Value();

    if( (istTemperatur < sollTemperatur) || (sollTemperatur == 100.0) ){
      dom.GetObject("BidCos-Wired."+SchaltaktorSN+".STATE").State(true);
    } else {
      dom.GetObject("BidCos-Wired."+SchaltaktorSN+".STATE").State(false);
    }
V.

chaoszwerg
Beiträge: 12
Registriert: 17.01.2010, 21:36

Re: Wandthermostat zur Steuerung einer Elektroheizung verwen

Beitrag von chaoszwerg » 11.10.2011, 23:06

Hallo,

ich habe das jetzt mal so versucht, leider klappt das nicht :(
Was mache ich falsch?

WebUI
webui.jpg
Skript:

Code: Alles auswählen

string SchalterKanal = "HM-LC-Sw4-DR IEQ0023923:1";string Raumregler = "HM-WDS40-TH-I IEQ0022810";

real aktuelleTemperatur = dom.GetObject(Raumregler # ":1").DPByHssDP("TEMPERATURE").Value();
real zielTemperatur = dom.GetObject(Raumregler # ":2").DPByHssDP("SETPOINT").Value();
object ventilAktorDP = dom.GetObject(SchalterKanal).DPByHssDP("STATE");
real hysterese = 0.5;

    if( aktuelleTemperatur < ( zielTemperatur + hysterese ) )
    {
    ! WriteLine("temperatur zu niedrig");
       if( ! ventilAktorDP.Value() )
       {
    ! WriteLine("Aktor einschalten");
          ventilAktorDP.State(1);
       }
    }
    else
    {
       if( aktuelleTemperatur > ( zielTemperatur - hysterese ) )
       {
       ! WriteLine("temperatur zu hoch");
          if( ventilAktorDP.Value() )
          {
       ! WriteLine("Aktor ausschalten");
             ventilAktorDP.State(0);
          }
       }
    }

Basic
Beiträge: 941
Registriert: 07.03.2010, 11:39
Wohnort: Deutschland
Danksagung erhalten: 14 Mal

Re: Wandthermostat zur Steuerung einer Elektroheizung verwen

Beitrag von Basic » 11.10.2011, 23:18

Im WebUI steht "Sonst Wenn" und nix dahinter, das muss weg. Am besten das Programm löschen und nochmal neu schreiben.

michaz
Beiträge: 7
Registriert: 05.01.2011, 18:32

Re: Wandthermostat zur Steuerung einer Elektroheizung verwen

Beitrag von michaz » 01.11.2011, 22:34

Hallo zusammen!
Kann man das Script so umschreiben, dass die IST-Temperatur aus einem Funkthermometer (HM-WDS40-TH-I) und die SOLL-Temperatur aus einer Systemvariable (Werteliste) ausgelesen wird? Habe nämlich keine Wandthermostate im Einsatz.

Code: Alles auswählen

string VentilSchalterKanal = "HM-LC-Sw4-SM DEQ0000000:1";
    string Raumregler = "HM-CC-TC GEQ0000000";

    if( ! dom.GetObject(Raumregler # ":1") )
    {
       WriteLine("Raumreglername Kanal 1 ist nicht korrekt");
    }
    if( ! dom.GetObject(Raumregler # ":2") )
    {
       WriteLine("Raumreglername Kanal 2 ist nicht korrekt");
    }
    if( ! dom.GetObject(VentilSchalterKanal) )
    {
       WriteLine("VentilSchalterKanal ist nicht korrekt");
    }
    real aktuelleTemperatur = dom.GetObject(Raumregler # ":1").DPByHssDP("TEMPERATURE").Value();
    real zielTemperatur = dom.GetObject(Raumregler # ":2").DPByHssDP("SETPOINT").Value();
    object ventilAktorDP = dom.GetObject(VentilSchalterKanal).DPByHssDP("STATE");
    real hysterese = 0.5;

    if( aktuelleTemperatur < ( zielTemperatur + hysterese ) )
    {
    ! WriteLine("temperatur zu niedrig");
       if( ! ventilAktorDP.Value() )
       {
    ! WriteLine("Aktor einschalten");
          ventilAktorDP.State(1);
       }
    }
    else
    {
       if( aktuelleTemperatur > ( zielTemperatur - hysterese ) )
       {
       ! WriteLine("temperatur zu hoch");
          if( ventilAktorDP.Value() )
          {
       ! WriteLine("Aktor ausschalten");
             ventilAktorDP.State(0);
          }
       }
    }
--------------------------------------------
49 Kanäle in 12 Geräten:
2x HM-Sec-MDIR, 1x HM-LC-Dim1L-CV, 1x HM-LC-Dim1L-Pl, 1x HM-RC-12-B, 1x HM-CCU-1, 3x HM-Sec-SD, 1x HM-LC-Sw4-DR, 1x HM-LC-Sw4-PCB, 1x HM-PB-4Dis-WM
--------------------------------------------

Antworten

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