Hallo Zusammen,
aufgrund der Resonanz auf das Alpha Innotec Wärmepumpen Gateway für die Steuerung Luxtronik 1.0 mit RS232 Schnittstelle, würde ich den Code auch gerne an die Luxtronik 2.0 anpassen.
Viele besitzen schon die neuere Wärmepumpensteuerung, welche eine Ethernet-Schnittstelle und einen integrierten Java Webserver besitzt.
Der aufwendige Parser-Teil kann leicht angepaßt werden.
Ich benötige jedoch Hilfe beim Start Procedere, das wie folgt abläuft:
1. TCP Verbindung zum Port 8888 der Luxtronik öffnen
2. Request 3004 (4 Bytes) senden (da die Codierung im Big Endian Format erfolgt, Dezimal 3004 entspricht 0x00 0x00 0x0b 0xbc)
3. Request mit 0 (1 Byte) abschließen
4. Wärmepumpe bestätigt den Request mit 3004 (4 Byte), wenn dieser korrekt empfangen wurde
5. Wärmepumpe sendet eine Information ob sich die Datenwerte geändert haben (4 Byte)
6. Wärmepumpe sendet die Anzahl der folgenden 4Byte Datenwerte, max. 158
7. Wärmepumpe sendet die 4 Byte Datenwerte, max. also 158 x 4 Byte
Mir ist vor allem nicht klar wie ich die einzelnen Empfangsschritte 4. bis 7. sauber voneinander abgrenze (event oder after) und wie ich auf eine fehlerhafte Bestätigung des Request durch die Wärmepumpe reagiere.
Hier der 1. Entwurf für das Start Procedere:
[highlight=epc]
// Variablen definieren
WP_Port=8888u16
WP_IP=0u32
TCP_Session=0b0
Request1=0b0
Request2=0b0
Rawdata1=$$
Rawdata2=$$
Rawdata3=$$
RequestFeedback=$$
Datenstatus=$$
Datenanzahl=$$
Daten=$$
StartPos=0u16
EndPos=0u16
// TCP Verbindung zu Port 8888 alle 5 Minuten öffnen
if cycle(5,0) then \\
TCP_Session=EIN;\\
connecttcp(WP_Port,WP_IP) \\
endif
// TCP Request senden (Dezimal: 3004, also 4 Bytes)
if (after(Startabfrage,1000u64) == EIN) then \\
Request1=EIN; \\
sendtcp(WP_Port, WP_IP,0x00,0x00,0x0b,0xbc) \\
endif
// TCP Request senden (Dezimal: 0, also 1 Byte)
if (after(Request1,1000u64) == EIN) then \\
Request2=EIN; \\
sendtcp(WP_Port, WP_IP,0x00) \\
endif
// Empfang der Request Bestätigung (Dezimal: 3004, also 4 Bytes, wenn Request korrekt empfangen wurde)
if event(readtcp(WP_Port, WP_IP,Rawdata1)) then \\
RequestFeedback=Rawdata1; \\
/* Prüfen, ob der 3400er Request von der WP korrekt bestätigt wurde */
<tbd>
else
/* wenn nicht korrekt, dann <tbd> */
<tbd>
endif
// Empfang des Datenstatus (4 Bytes, gibt an ob sich Werte verändert haben)
if event(readtcp(WP_Port, WP_IP,Rawdata2)) then \\
Datenstatus==Rawdata2 \\
endif
// Empfang der Datenanzahl (Datenanzahl gibt die Anzahl der folgenden 4 Byte Werte an, max. 158 x 4Byte)
if event(readtcp(WP_Port, WP_IP,Rawdata3)) then \\
Datenanzahl==Rawdata3 \\
endif
// Empfang des TCP Pakets
if event(readtcp(WP_Port, WP_IP,Rawdata)) then \\
Buffer=Rawdata
endif
// TCP Verbindung schliessen
if after(TCP_Session,10000u64) then \\
closetcp(WP_Port, WP_IP); \\
TCP_Session=AUS \\
endif
// Parsen der einzelnen Informationsblöcke der Wärmepumpendaten
<tbd>
[/highlight]
Möglicherweise hilft für Anregungen auch die Umsetzung eines anderen AI Wärmepumpenbesitzers in C (siehe Anhang).
Freue mich über jede Anregung.
Ebenso benötige ich Hilfe beim Testen, da ich bisher nur die Luxtronik 1.0 besitze.
Viele Grüße
Michael
aufgrund der Resonanz auf das Alpha Innotec Wärmepumpen Gateway für die Steuerung Luxtronik 1.0 mit RS232 Schnittstelle, würde ich den Code auch gerne an die Luxtronik 2.0 anpassen.
Viele besitzen schon die neuere Wärmepumpensteuerung, welche eine Ethernet-Schnittstelle und einen integrierten Java Webserver besitzt.
Der aufwendige Parser-Teil kann leicht angepaßt werden.
Ich benötige jedoch Hilfe beim Start Procedere, das wie folgt abläuft:
1. TCP Verbindung zum Port 8888 der Luxtronik öffnen
2. Request 3004 (4 Bytes) senden (da die Codierung im Big Endian Format erfolgt, Dezimal 3004 entspricht 0x00 0x00 0x0b 0xbc)
3. Request mit 0 (1 Byte) abschließen
4. Wärmepumpe bestätigt den Request mit 3004 (4 Byte), wenn dieser korrekt empfangen wurde
5. Wärmepumpe sendet eine Information ob sich die Datenwerte geändert haben (4 Byte)
6. Wärmepumpe sendet die Anzahl der folgenden 4Byte Datenwerte, max. 158
7. Wärmepumpe sendet die 4 Byte Datenwerte, max. also 158 x 4 Byte
Mir ist vor allem nicht klar wie ich die einzelnen Empfangsschritte 4. bis 7. sauber voneinander abgrenze (event oder after) und wie ich auf eine fehlerhafte Bestätigung des Request durch die Wärmepumpe reagiere.
Hier der 1. Entwurf für das Start Procedere:
[highlight=epc]
// Variablen definieren
WP_Port=8888u16
WP_IP=0u32
TCP_Session=0b0
Request1=0b0
Request2=0b0
Rawdata1=$$
Rawdata2=$$
Rawdata3=$$
RequestFeedback=$$
Datenstatus=$$
Datenanzahl=$$
Daten=$$
StartPos=0u16
EndPos=0u16
// TCP Verbindung zu Port 8888 alle 5 Minuten öffnen
if cycle(5,0) then \\
TCP_Session=EIN;\\
connecttcp(WP_Port,WP_IP) \\
endif
// TCP Request senden (Dezimal: 3004, also 4 Bytes)
if (after(Startabfrage,1000u64) == EIN) then \\
Request1=EIN; \\
sendtcp(WP_Port, WP_IP,0x00,0x00,0x0b,0xbc) \\
endif
// TCP Request senden (Dezimal: 0, also 1 Byte)
if (after(Request1,1000u64) == EIN) then \\
Request2=EIN; \\
sendtcp(WP_Port, WP_IP,0x00) \\
endif
// Empfang der Request Bestätigung (Dezimal: 3004, also 4 Bytes, wenn Request korrekt empfangen wurde)
if event(readtcp(WP_Port, WP_IP,Rawdata1)) then \\
RequestFeedback=Rawdata1; \\
/* Prüfen, ob der 3400er Request von der WP korrekt bestätigt wurde */
<tbd>
else
/* wenn nicht korrekt, dann <tbd> */
<tbd>
endif
// Empfang des Datenstatus (4 Bytes, gibt an ob sich Werte verändert haben)
if event(readtcp(WP_Port, WP_IP,Rawdata2)) then \\
Datenstatus==Rawdata2 \\
endif
// Empfang der Datenanzahl (Datenanzahl gibt die Anzahl der folgenden 4 Byte Werte an, max. 158 x 4Byte)
if event(readtcp(WP_Port, WP_IP,Rawdata3)) then \\
Datenanzahl==Rawdata3 \\
endif
// Empfang des TCP Pakets
if event(readtcp(WP_Port, WP_IP,Rawdata)) then \\
Buffer=Rawdata
endif
// TCP Verbindung schliessen
if after(TCP_Session,10000u64) then \\
closetcp(WP_Port, WP_IP); \\
TCP_Session=AUS \\
endif
// Parsen der einzelnen Informationsblöcke der Wärmepumpendaten
<tbd>
[/highlight]
Möglicherweise hilft für Anregungen auch die Umsetzung eines anderen AI Wärmepumpenbesitzers in C (siehe Anhang).
Freue mich über jede Anregung.
Ebenso benötige ich Hilfe beim Testen, da ich bisher nur die Luxtronik 1.0 besitze.
Viele Grüße
Michael
Kommentar