HomeMatic CCU2 bei ELV bestellen

Einbinden Luxtronik 1 Wärmepumpensteuerung

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Werbung


Einbinden Luxtronik 1 Wärmepumpensteuerung

Beitragvon Forelleblau » 10.09.2017, 00:03

Die Luxtronik 1 Steuerung meiner Wärmepumpe kann via serieller Schnittstelle erschlossen werden.
Es können darüber sämtliche Werte und Stati ausgelesen werden. Es können ebenfalls Einstellungen vorgenommen werden. Realisiert habe ich das Auslesen, das Setzen des Sollwertes für Warmwasser und das Setzen des Betriebsmodus für Heizung und Warmwasser.

Hardware

Serielle Schnittstelle der Luxtronik 1.
Serielles Kabel, eigenbau, nur PINS 2, 3 und 5 verbinden (wenns nicht funktioniert, erst mal 2 und 3 tauschen)
RS232 to LAN Converter: USR TCP232 – 302.
Einstellungen Serielle Schnittstelle : 57600/8/N/1 , Modus :TCP-Server
Reset Timeout:0
Referenz für die Verbindung: https://wiki.fhem.de/wiki/Luxtronik_1_in_FHEM

Auslesen mit Befehl «1800»
Die Befehle an die Serielle Schnittstelle sind ASCII – Zahlenkombinationen, gefolgt von einem <CR>.
Da ich es nicht geschafft habe, diese Kombinationen direkt aus dem HM-Script mit Netcat an die Schnittstelle zu senden, habe ich alle Befehle in Textfiles auf der CCU2 gepackt.
In Putty habe ich die Datei für «1800» so angelegt: echo -e "1800\r" > 1800.txt
Dazu HM-Script zum Auslesen und zuordnen der Werte zu den definierten Systemvariablen:
Code: Alles auswählen
dom.GetObject("CUxD.CUX2801001:10.CMD_SETS").State("{ cat /usr/local/addons/1800.txt; sleep 1; }|/usr/local/addons/tools/nc -c 192.168.1.117 8899");
dom.GetObject("CUxD.CUX2801001:10.CMD_QUERY_RET").State(1);
string wpraw = dom.GetObject("CUxD.CUX2801001:10.CMD_RETS").State();
string wptempVL = ((wpraw.StrValueByIndex(";", 3).ToFloat()) / 10).ToString(1);
string wptempRL = ((wpraw.StrValueByIndex(";", 4).ToFloat()) / 10).ToString(1);
string wptempAT = ((wpraw.StrValueByIndex(";", 7).ToFloat()) / 10).ToString(1);
string wptempBW = ((wpraw.StrValueByIndex(";", 8).ToFloat()) / 10).ToString(1);
string wptempBWs = ((wpraw.StrValueByIndex(";", 9).ToFloat()) / 10).ToString(1);
integer wpStatus = (wpraw.StrValueByIndex(";",164).ToInteger());
if (wpraw != "")
{
dom.GetObject("Heizung VL").State(wptempVL.ToFloat());
dom.GetObject("Heizung RL").State(wptempRL.ToFloat());
dom.GetObject("Aussentemperatur").State(wptempAT.ToFloat());
dom.GetObject("Heizung BW Ist").State(wptempBW.ToFloat());
dom.GetObject("Heizung BW Soll").State(wptempBWs.ToFloat());
dom.GetObject("CUxD.CUX9002001:1.SET_TEMPERATURE").State(wptempBW.ToFloat());
if (wpStatus == 0) {dom.GetObject("Heizung Betriebszustand").State("Heizung");}
if (wpStatus == 1) {dom.GetObject("Heizung Betriebszustand").State("Warmwasser");}
if (wpStatus == 5) {dom.GetObject("Heizung Betriebszustand").State("Bereitschaft");}
}

Dazu müssen natürlich die im letzten Teil des Scripts beschickten Systemvariablen vorher angelegt werden.
Ich lese nur die für mich wichtigsten Variablen aus der Rückmeldung der Steuerung aus. Was in den Zahlen sonst noch alles versteckt ist, findet man hier: https://github.com/christophgysin/heatp ... ic_V24.png

Weitere Befehle/Funktionen
    Auslesen Betriebsart Heizung und Betriebsart Warmwasser
    Setzen Betriebsart Heizung und Betriebsart Warmwasser
    Setzen Sollwert Warmwasser
Werde ich an dieser Stelle veröffentlichen, sobald ich Zeit dazu finde.

Möglich (Programmiercodes vorhanden) wären auch:
    Setzen der Heizkurve
    Ansteuerung der Pumpen
    Setzen der Prioritäten (Heizung/WW/…)


Mit besten Grüssen
Forelleblau
Forelleblau
 
Beiträge: 7
Registriert: 23.12.2016, 15:27

Re: Einbinden Luxtronik 1 Wärmepumpensteuerung

Beitragvon Forelleblau » 13.09.2017, 04:56

Das Auslesen geht jetzt auch ohne Textfiles - es ist alles eine Frage des Timings!

Auslesen der Daten mit 1800:

Wenn die entsprechenden Systemvariablen angelegt sind ein Programm mit folgendem HM-Script:

Code: Alles auswählen
dom.GetObject("CUxD.CUX2801001:10.CMD_SETS").State("/usr/local/addons/wp1800.sh");
dom.GetObject("CUxD.CUX2801001:10.CMD_QUERY_RET").State(1);
string wpraw = dom.GetObject("CUxD.CUX2801001:10.CMD_RETS").State();
string wptempVL = ((wpraw.StrValueByIndex(";", 3).ToFloat()) / 10).ToString(1);
string wptempRL = ((wpraw.StrValueByIndex(";", 4).ToFloat()) / 10).ToString(1);
string wptempAT = ((wpraw.StrValueByIndex(";", 7).ToFloat()) / 10).ToString(1);
string wptempBW = ((wpraw.StrValueByIndex(";", 8).ToFloat()) / 10).ToString(1);
string wptempBWs = ((wpraw.StrValueByIndex(";", 9).ToFloat()) / 10).ToString(1);
integer wpStatus = (wpraw.StrValueByIndex(";",164).ToInteger());
if (wpraw != "")
{
dom.GetObject("Heizung VL").State(wptempVL.ToFloat());
dom.GetObject("Heizung RL").State(wptempRL.ToFloat());
dom.GetObject("Aussentemperatur").State(wptempAT.ToFloat());
dom.GetObject("Heizung BW Ist").State(wptempBW.ToFloat());
dom.GetObject("Heizung BW Soll").State(wptempBWs.ToFloat());
dom.GetObject("CUxD.CUX9002001:1.SET_TEMPERATURE").State(wptempBW.ToFloat());
if (wpStatus == 0) {dom.GetObject("Heizung Betriebszustand").State("Heizung");}
if (wpStatus == 1) {dom.GetObject("Heizung Betriebszustand").State("Warmwasser");}
if (wpStatus == 5) {dom.GetObject("Heizung Betriebszustand").State("Bereitschaft");}
}


anlegen. Dieses greift auf die wp1800.sh zu, die wie folgt aussieht:

Code: Alles auswählen
#!/bin/sh
{ echo -e "1800\r"; sleep 1; } | /usr/local/addons/tools/nc -i 1 -c 192.168.1.117 8899


Eine Bedingung, dass das ganze Läuft, ist natürlich auch, dass netcat (nc) auf der CCU vorhanden ist.
Bei Bedarf verdankenswerterweise hier zu finden:https://homematic-forum.de/forum/viewtopic.php?f=26&t=13299


Schönen Tag

Forelleblau
Forelleblau
 
Beiträge: 7
Registriert: 23.12.2016, 15:27

Auslesen und Setzen Betriebsmodus Heizung und Warmwasser

Beitragvon Forelleblau » 14.09.2017, 21:14

Auslesen und Setzen Betriebsmodus Heizung und Warmwasser

Der Steuerbefehl für das Auslesen des aktuellen Betriebsmodus der Heizung ist 3405<CR>.

Entsprechend hier das Shellscript zum auslesen:
Code: Alles auswählen
#!/bin/sh
{ echo -e "3405\r"; sleep 1; } | /usr/local/addons/tools/nc -i 1 -c 192.168.1.117 8899


Dieses wird mit einem HM-Skript (das ich in das selbe Programm wie das «1800» - Script oben gepackt habe) aufgerufen:

Code: Alles auswählen
dom.GetObject("CUxD.CUX2801001:15.CMD_SETS").State("/usr/local/addons/wp3405.sh");
dom.GetObject("CUxD.CUX2801001:15.CMD_QUERY_RET").State(1);
string wpModHeizraw = dom.GetObject("CUxD.CUX2801001:15.CMD_RETS").State();
integer wpModusHeiz = (wpModHeizraw.StrValueByIndex(";", 2).ToInteger());
if (wpModHeizraw != "")
{
dom.GetObject("Heizung Modus Heizung").State(wpModusHeiz);
}


Dazu wird die Systemvariable «Heizung Modus Heizung» benötigt. Diese ist vom Typ Werteliste und umfasst AUTO;ZWE;Party;Ferien;Aus. Bitte Werte in dieser Reihenfolge eintragen, sonst funktioniert die Zuordnung mit obigem Skript nicht richtig.

Um die Heizung ein- und auszuschalten (Modus ändern) verwende ich eine analoge Variable «Heizung Modus Heizung Soll». Wird diese verändert (Variable für alle Werte «bei Anderung auslösen» als Wenn – Bedinung setzen) wird folgendes Programm (Script) angestossen:

Code: Alles auswählen
integer WPModHeizs = dom.GetObject("Heizung Modus Heizung Soll").State().ToInteger();
dom.GetObject("CUxD.CUX2801001:12.CMD_EXEC").State("/usr/local/addons/wpsetHeiz.sh " #WPModHeizs);


die dazugehörige wpsetHeiz.sh sieht innen so aus:

Code: Alles auswählen
#!/bin/sh
WPModHeizs=$1
{ echo -e "3406\r"; sleep 2; echo -e "3406;1;""$WPModHeizs""\r\n"; sleep 2; echo -e "999\r"; sleep 3; }|/usr/local/addons/tools/nc -c 192.168.1.117 8899



Das Analoge kann für den Betriebsmodus für das Warmwasser gemacht werden. Der Befehl für das Auslesen des WW-Modus ist 3505, jener für die Programmierung 3506. Es sind lediglich die beiden Zahlen in den .sh – Scripts zu ersetzen und analoge Systemvariablen/Variablen und Programme anzulegen.

Viel Freude

Marcel
Forelleblau
 
Beiträge: 7
Registriert: 23.12.2016, 15:27


Zurück zu Entwicklung für die HomeMatic CCU

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast







© homematic-forum.de & Lizenzgebern. Alle Rechte vorbehalten. Alle Bilder & Texte auf dieser Seite sind Eigentum
der jeweiligen Besitzer und dürfen ohne deren Einwilligung weder kopiert noch sonstwie weiter verwendet werden.