Einbinden Luxtronik 1 Wärmepumpensteuerung

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

Moderator: Co-Administratoren

Antworten
Forelleblau
Beiträge: 10
Registriert: 23.12.2016, 15:27

Einbinden Luxtronik 1 Wärmepumpensteuerung

Beitrag von Forelleblau » 10.09.2017, 01: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: 10
Registriert: 23.12.2016, 15:27

Re: Einbinden Luxtronik 1 Wärmepumpensteuerung

Beitrag von Forelleblau » 13.09.2017, 05: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:viewtopic.php?f=26&t=13299


Schönen Tag

Forelleblau

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

Auslesen und Setzen Betriebsmodus Heizung und Warmwasser

Beitrag von Forelleblau » 14.09.2017, 22: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

Gebercher
Beiträge: 2
Registriert: 18.11.2018, 14:50

Re: Einbinden Luxtronik 1 Wärmepumpensteuerung

Beitrag von Gebercher » 23.05.2019, 21:29

Hallo,
ich würde dieses Thema gerne mal nach oben holen.

Gibt es an dieser Steuerung auch die Möglichkeit ein Signal abzugreifen das die Lux auf Störung ist ohne den RS232 Adapter ?

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“