Anbindung von Helios KWL 370 Pro

Hallo Zusammen,

ich denke habe die Temperaturen gefunden. Der Ersatzwert für einen nicht vorhandenen Sensor scheint 0x2709 zu sein (dezimal 9990 also 999,0 °C). Steht das Bedienelement auf Temperaturanzeige, dann wird aus 0x13 0x01 im Präfix eine 0x13 0x00, demenstrechend könnte dieses byte die Senderichtung indizieren (Temp Werte werden von KWL gesendet). Darauf folgen dann noch ein paar Bytes die ich (noch) nicht zuordnen kann.
Die erste Temperatur ist ein Ersatzwert ( ich habe kein Heizung, keine CO Fühler…)…
die 1. Temperatur 0x0021 (deziamal 33 -> 3,3°C) müsste die Ansaug Luft sein.
die 2. Temperatur 0x00c3 (deziamal 195-> 19,5°C) müsste die Abluft sein.
die 3. Temperatur 0x0051 (deziamal 166-> 16,6°C) müsste die Zuluft sein.
die 4. Temperatur 0x00a6 (deziamal 81-> 8,1°C) müsste die Fortluft sein.
alle nachfolgenden Temperaturen sind Ersatzwerte in meiner Konfiguration. Insgesamt also 10 Temperaturen bzw Sensorwerte wie in der Bedieneinheit.

0.098: 0xff 0xff 0x17 0x1a 0x5 0xc 0xf 0xa 0x27 0x2 0x0 0x0 0x0 0x1 0x0 0xe 0x0 0xa5 0x0 0x14 0x0 0x2 0x3 0x0 0x0 0x3c 0x8c 0x0
0.100: 0x13 0x0 0x0 0x14 0xc0 0x13 0x0 0x1 0x3a 0x4f 0x0 0x13 0x1 0x15 0x3a 0x6 0x27 0x21 0x0 0xc3 0x0 0x51 0x0 0xa6 0x0 0x6 0x27 0x6 0x27 0x6 0x27 0x6 0x27 0x6 0x27 0x4d 0x0
0

Viele Grüsse Molla

Hi molla,

es geht also weiter:-)

wenn du das hier „\x13\x00\x01\x3A\x4F“ in den Bus sendest liest er wohl die Temperaturen aus:-)
temp1.jpg und temp2.jpg sind von der Bedienung an der Fernbedienung von Helios…
temp3.jpg ist wenn man o.g. Befehlszeile einfach in den Bus sendet… die Stelle an der er die Anfrage bekommt
scheint dann wohl egal zu sein… es reagiert so, dass man das Ergebnis in einem Skript zum Temperaturauslesen verarbeiten könnte? oder?

vg
chrissi

temp1.jpg

@chrissi: cool! So langsamm wird es :wink:
fürs erste baue ich einmal ein Python script um es bei mir zu testen, das ganze dann in PHP umzusetzen ist kein Problem!

ich denke ich habe den Checksummen Algorithmus rausgefunden.

(1+ (byte[0] + byte[1] + … + byte[n]) % 256
hat bisher für alle Packete gepasst die ich getestet habe.
das Erklärt auch die Rahmenpakete:
0x12 0x0 0x0 0x13

Gruss Molla

hallo molla,

beim Programmieren kann ich leider nicht viel helfen:-( Für mich interessant wäre Lüfterstufe einstellen und aktuelle Lüfterstufe auslesen (wenn am Bedienteil was verstellt wurde) und Temperaturen auslesen…

Gibts noch eine Funktion die dich interessieren würde?

vg
chrissi

Hi Chrissi,

ja das würde mir für s erste auch reichen, setze mich heute Nachmittag mal hin aund schaue was dabei raus kommt, ich denke das sollte machbar sein, mit den bisherigen infos…

Gruss molla

hallo - ich schon wieder:-)

könnte das hier die Stufenanzeige sein? Siehe Bilder jeweils mit vorheriger Stufenumschaltung durch die Skriptzeilen wie gestern beschrieben…

vg
chrissi

Hallo,
ich kann Vollzug vermelden. Ich konnte als 2. Bedienteil mit Adresse 2 die Temperaturen anfragen und auch auswerten.:):slight_smile:
Morgen kommt dann noch die Lüfterstufe, sollte kein Problem mehr sein.

Gruss molla

super Sache… wenn du noch eine kleine Formel einbaust könnte man sich auch noch die sogenannte Rückwärmezahl mit anzeigen lassen:-)

Rückwärmezahl nach VDI 2071 = (tZU - tAU)/(tAB - tAU)

tZU = Zulufttemperatur nach der WRG
tAU = Außenlufttemperatur
tAB = Ablufttemperatur

Wenn wir dann mal irgendwann etwas weiter sind und z.B. die zugehörige Spannung zur Lüfterstufe (eingestellt im Servicemenü des Bedienteils) und damit den theoretisch geförderten Volumenstrom auslesen - könnten wir uns überschlägig mit

Q = V x c x dt

die aktuell zurückgewonnene Wärmeleistung berechnen:-)

z.B.
V = 140 m³/h
tZU = 16°C
tAU = -10°C

140 m³/h * 0,35 Wh/m³xk * (tZu - tAU) = 1,274 kW

Da man denke ich nicht ständig die Spannungen der Lüfterstufen verstellt könnte man jeder Stufe natürlich auch direkt einen Luftvolumenstrom zuordnen.

vg
chrissi

Gefällt mir:D:D!

Hallo,

anbei ein Screenshot der ersten lauffähigen Version:
Dad Interface zur KWL läuft als Server Prozess. Die Komunikation mit dem Server Prozess erfolgt via Netzwerk auf Port 5432. In der ersten Version ist es möglich die Temperaturen auszulesen und die Lüfterstufe einzustellen. Die SW gibt sich gegenüber der KWL als zusätzliches Bedienteil aus und muss demensprechend auch eine Addresse bekommen ( default 1 ). Wer die SW testen möchte bitte bei mir melden (Raspi/linux).

Gruss Molla

Hallo,

ich habe die Wärmeleistung mal mitberechnet, sollte passen das das Ergebniss negtaiv ist oder?

Auf Stufe 3 habe ich 228 cm^3:

Intake Temp: 2.50 °C
Inlet Temp: 16.50 °C
Outlet Temp: 19.70 °C
Exit Temp: 8.30 °C
Fan Stage : 3
Heat Capp : -1333.34 W

Gruss molla

ne, immer positiv… (Zulufttemperatur nach der WRG - Außenlufttemperatur vor der Wärmerückgewinnung)
x 0,34 x 228 = +xxxxx

die Zulufttemperatur ist immer positiv und wenn die Außenlufttemperatur negativ sein sollte ergibt sich ein + aus –
Negativ könnte es nur im Sommer, wenn die Außenlufttemperatur über der Zulufttemperatur wäre („Kälterückgewinnung“) werden…

vg
chrissi

ich hatte die falschen Temperaturen in der Brechnung verwendet,
jetzt scheint es zu passen, auf Stufe 3 mehr als 1 KW :eek::eek: Hätte ich nicht gedacht…

Hallo,

ich habe ja folgendes Skript genutzt um meine 4 Stufen verstellen zu können…
Hab mir eine Integervariable angelegt und das Skript damit verknüpft…
Umschaltung funktioniert auch aber er schreibt die Stufe in Webfront nicht um.

Mit welchen PHP-Befehlen bekomme ich denn jetzt die Stufe von der seriellen Schnittstelle ausgelesen und in die Variable eingetragen?

Kann mir hier bitte jemand mal einen Tipp geben? Oder benötige ich eine Register Variable? oderoder?

Die Stufe steht im 10ten Byte in der FF FF Zeile…
01 = Lüfterstufe 1
02 = Lüfterstufe 2
03 = Lüfterstufe 3
04 = Lüfterstufe 4

Danke im Voraus…

vg
chrissi

<?

#####################################################

Lüfterstufe Senden

#####################################################

$id_Helios =40391 /[Serial Port KWL]/;

if($IPS_SENDER == „WebFront“);
{
switch($IPS_VALUE)
{
case 1: // Lüfterstufe 1
$Stufe = „\x13\x01\x03\x35\x01\xBB\x09\x05\x02\x35\x55\xA5“;
break;
case 2: // Lüfterstufe 2
$Stufe = „\x13\x01\x03\x35\x02\xBB\x0A\x05\x02\x35\x55\xA5“;
break;
case 3: // Lüfterstufe 3
$Stufe = „\x13\x01\x03\x35\x03\xBB\x0B\x05\x02\x35\x55\xA5“;
break;
case 4: // Lüfterstufe 4
$Stufe = „\x13\x01\x03\x35\x04\xBB\x0C\x05\x02\x35\x55\xA5“;
break;

}

}

COMPort_SendText($id_Helios,$Stufe);
?>

Konfig Variable.jpg

Hat denn keiner mal einen guten Tipp?

Hatte ich Dir schon mal hier aufgezeigt, versuche es einfach mal.
Gruß Helmut

Schau mal da: https://www.symcon.de/forum/threads/28210-IP-Symcon-Wie-kann-ich-2-0?p=259928#post259928

SetValue($_IPS[‚VARIABLE‘], $_IPS[‚VALUE‘]);

hm ich bin gerade dabei auf den raspberry pi umzusteigen. Leider läuft dort modpoll nicht mehr und mit ip-symcon klappt es nicht modbus befehle für die helios kwl zu schicken :frowning:

könnte nicht jemand mal ein script veröffentlichen dass per modbus tcp rtu befehle zur helios schicken kann?
oder eine lösung über ip für den raspberry pi aufzeigen könnte…? :slight_smile:

Hallo,

ich versuche gerade meine Vallox KWL in IPS einzubinden.
Habe erst mit der Konfiguration und Einarbeitung in IPS gestartet und meine Heizungsaktoren konfiguriert.
Somit bin ich eigentlich noch blutiger Anfänger und scheitere gerade anscheinend gerade etwas an den Basics und hoffe Ihr könnt mir kurz auf die Sprünge helfen.

Was ich bisher gemacht / ausprobiert habe.
USB - RS485 Konverter installiert, mit der KWL verkabelt, I/O und Splitter Instanz in IPS konfiguriert.
Soweit so gut. Ich bekomme schon einmal Daten vom Adapter und Splitter (siehe Cutter_Debug.jpg).
Zudem habe ich die Dummy Variablen und das Skript angelegt und angepasst (siehe Bilder).
Aktueller Code:

<?

$ID_Betrieb = 29006 /*[KWL\KWL Betrieb]*/;
//$CO2_Status = 49064; 
//$Luftfeuchte_Status = 26466; 
$Heizung_Status = 59659 /*[KWL\KWL Heizung Status]*/; 
//$Filter_Status = 54659; 
//$Heizung_Indikator = 24032; 
//$Fehler_Indikator = 15439; 
//$Service = 26131; 

$ID_Luefterstufe = 29800 /*[KWL\KWL Lüfterstufe]*/; 
$ID_Aussenluft = 49487 /*[KWL\KWL Temp Aussenluft\Aussenluft]*/; 
$ID_Fortluft = 49457 /*[KWL\KWL Temp Fortluft\Fortluft aussen]*/; 
$ID_Abluft = 46630 /*[KWL\KWL Temp Abluft\Abluft innen]*/; 
$ID_Zuluft = 52439 /*[KWL\KWL Temp Zuluft\Temp Zuluft innen]*/; 

$ID_Temp = 27841 /*[KWL\Speicher]*/; 

// Tabelle zur Temperatur Umrechnung 
$Temperatur = array( 
"-74", "-70", "-66", "-62", "-59", "-56", "-54", "-52", "-50", "-48", "-47", 
"-46", "-44", "-43", "-42", "-41", "-40", "-39", "-38", "-37", "-36", "-35", 
"-34", "-33", "-33", "-32", "-31", "-30", "-30", "-29", "-28", "-28", "-27", 
"-27", "-26", "-25", "-25", "-24", "-24", "-23", "-23", "-22", "-22", "-21", 
"-21", "-20", "-20", "-19", "-19", "-19", "-18", "-18", "-17", "-17", "-16", 
"-16", "-16", "-15", "-15", "-14", "-14", "-14", "-13", "-13", "-12", "-12", 
"-12", "-11", "-11", "-11", "-10", "-10", "-9", "-9", "-9", "-8", "-8", "-8", 
"-7", "-7", "-7", "-6", "-6", "-6", "-5", "-5", "-5", "-4", "-4", "-4", "-3", 
"-3", "-3", "-2", "-2", "-2", "-1", "-1", "-1", "-1", "0", "0", "0", "1", "1", 
"1", "2", "2", "2", "3", "3", "3", "4", "4", "4", "5", "5", "5", "5", "6", "6", 
"6", "7", "7", "7", "8", "8", "8", "9", "9", "9", "10", "10.3", "10.6", "11", "11.3", 
"11.6", "12.0", "12.3", "12.6", "13.0", "13.3", "13.6", "14.0", "14.3", "14.6", "15.0", "15.3", "15.6", 
"16.0", "16.3", "16.6", "17.3", "17.6", "18.0", "18.3", "18.6", "19.0", "19.3", "19.6", "20.0", "20.5", 
"21.0", "21.3", "21.6", "22.0", "22.3", "22.6", "23.0", "23.5", "24.0", "24.3", "24.6", "25.0", "25.5", 
"26.0", "26.5", "27.0", "27.3", "27.6", "28.0", "28.5", "29.0", "29.5", "30.0", "30.5", "31.0", "31.5", 
"32.0", "32.5", "33.0", "33.5", "34.0", "34.5", "35.0", "35.5", "36.0", "36.5", "37.0", "37.5", "38.0", 
"38.5", "39", "40.0", "40.5", "41.0", "41.5", "42", "43.0", "43.5", "44", "45", "45", "46", 
"47", "48", "48", "49", "50", "51", "52", "53", "53", "54", "55", "56", "57", 
"59", "60", "61", "62", "63", "65", "66", "68", "69", "71", "73", "75", "77", 
"79", "81", "82", "86", "90", "93", "97", "100", "100", "100", "100", "100", 
"100", "100", "100", "100"); 

// wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist 
if ($_IPS['SENDER'] == "RegisterVariable") 
{ 
    // bereits im Puffer der Instanz vorhandene Daten in $data kopieren 
    $data  = RegVar_GetBuffer($_IPS['INSTANCE']); 
    // neu empfangene Daten an $data anhängen 
    $data .= $_IPS['VALUE']; 

// Befehle zum Regeln der Lüfterstufe 
#Stufe1 | "\01\x11\x10\x29\x01\x4C" 
#Stufe2 | "\01\x11\x10\x29\x03\x4E" 
#Stufe3 | "\01\x11\x10\x29\x07\x52" 
#Stufe4 | "\01\x11\x10\x29\x0F\x5A" 
#Stufe5 | "\01\x11\x10\x29\x1F\x6A" 
#Stufe6 | "\01\x11\x10\x29\x3F\x8A" 
#Stufe7 | "\01\x11\x10\x29\x7F\xCA" 
#Stufe8 | "\01\x11\x10\x29\xFF\x4A" 

// Lüfterstufe Status auslesen 

$Funktion=substr($data,0,5);// Funktion ausfiltern 

switch($Funktion) 
{ 
case "\x01\x11\x21\x29\x01": // Lüfterstufe 1 
 SetValue($ID_Luefterstufe, 1); 
break; 
case "\x01\x11\x21\x29\x03": // Lüfterstufe 2 
  SetValue($ID_Luefterstufe, 2); 
break; 
case "\x01\x11\x21\x29\x07": // Lüfterstufe 3 
  SetValue($ID_Luefterstufe, 3); 
break; 
case "\x01\x11\x21\x29\x0F": // Lüfterstufe 4 
  SetValue($ID_Luefterstufe, 4); 
break; 
case "\x01\x11\x21\x29\x1F": // Lüfterstufe 5 
  SetValue($ID_Luefterstufe, 5); 
break; 
case "\x01\x11\x21\x29\x3F": // Lüfterstufe 6 
  SetValue($ID_Luefterstufe, 6); 
break; 
case "\x01\x11\x21\x29\x7F": // Lüfterstufe 7 
  SetValue($ID_Luefterstufe, 7); 
break; 
case "\x01\x11\x21\x29\xFF": // Lüfterstufe 8 
  SetValue($ID_Luefterstufe, 8); 
break; 
} 

############## 
#KWL schreibt zu allen Zuluft Temperatur 35 
#01 11 20 35 9E 05 

#KWL schreibt zu allen Abluft Temperatur 34 
#01 11 20 34 A0 06 

#KWL schreibt zu allen Fortluft Temperatur 33 
#01 11 20 33 8E F3 

#KWL schreibt zu allen Außenluft Temperatur 32 
#01 11 20 32 87 EB 

#return; 
// Temperaturen auslesen 

$Funktion1=substr($data,0,4);// Funktion ausfiltern 
switch($Funktion1) 
{ 
case "\x01\x11\x20\x35": // Zuluft Temperatur in die Wohnung 

    $Zuluft=substr($data,4,1);// Temperatur ausfiltern 
    $ZuluftTemp = ord($Zuluft); // Chr in Dezimal umwandeln 
    SetValue($ID_Temp , $Temperatur[$ZuluftTemp]); 
    $Status = GetValue($ID_Temp); // 
    $Status1 = GetValue(23488 /*[KWL\KWL Temp Zuluft]*/); // aktuelle Temperatur auslesen 
    if ($Status <> $Status1) // Temperatur nur bei änderung schreiben 
    SetValue(52439 /*[KWL\KWL Temp Zuluft\Temp Zuluft innen]*/, $Status); 
break; 

case "\x01\x11\x20\x34": // Abluft Temperatur aus der Wohnung 
    $Abluft=substr($data,4,1);// Temperatur ausfiltern 
    $AbluftTemp = ord($Abluft); // Chr in Dezimal umwandeln 
    SetValue($ID_Temp , $Temperatur[$AbluftTemp]); 
    $Status = GetValue($ID_Temp); // 
    $Status1 = GetValue(32992 /*[KWL\KWL Temp Abluft]*/); // 
    if ($Status <> $Status1) 
    SetValue(46630 /*[KWL\KWL Temp Abluft\Abluft innen]*/, $Status); 
break; 

/*case "\x01\x11\x20\x33": // Fortluft Temperatur nach draussen 
    $Fortluft=substr($data,4,1);// Temperatur ausfiltern 
    $FortluftTemp = ord($Fortluft); // Chr in Dezimal umwandeln 
    SetValue($ID_Temp , $Temperatur[$FortluftTemp]); 
    $Status = GetValue($ID_Temp); // 
    $Status1 = GetValue(45564); // 
    if ($Status <> $Status1) 
    SetValue(45899, $Status); 
break; 

case "\x01\x11\x20\x32": // Außenluft Temperatur zum Gerät 
    $Aussenluft=substr($data,4,1);// Temperatur ausfiltern 
    $AussenluftTemp = ord($Aussenluft); // Chr in Dezimal umwandeln 
    SetValue($ID_Temp , $Temperatur[$AussenluftTemp]); 
    $Status = GetValue($ID_Temp); // 
    $Status1 = GetValue(30834); // 
    if ($Status <> $Status1) 
    SetValue(21161, $Status); 
break; 

case "\x01\x11\x21\xA3": // Anlagen Status 
    $Status=substr($data,4,1);// Status ausfiltern 
    $StatusDez = ord($Status); 

if (getBitState($StatusDez, 0))  // KWL Betriebsstatus an Bit0 auslesen 
    SetValueBoolean($ID_Betrieb , true); 
  else 
    SetValueBoolean($ID_Betrieb , false); 

if (getBitState($StatusDez, 1))  // KWL CO2 adjust state an Bit1 auslesen 
    SetValueBoolean($CO2_Status , true); 
  else 
    SetValueBoolean($CO2_Status , false); 

if (getBitState($StatusDez, 2))  // KWL %RH adjust state an Bit2 auslesen 
    SetValueBoolean($Luftfeuchte_Status , true); 
  else 
    SetValueBoolean($Luftfeuchte_Status , false); 

if (getBitState($StatusDez, 3))  // KWL Heating state an Bit3 auslesen 
    SetValueBoolean($Heizung_Status , true); 
  else 
    SetValueBoolean($Heizung_Status , false); 

if (getBitState($StatusDez, 4))  // KWL Filterguard indicator an Bit4 auslesen 
    SetValueBoolean($Filter_Status , true); 
  else 
    SetValueBoolean($Filter_Status , false); 

if (getBitState($StatusDez, 5))  // KWL Heating indicator an Bit5 auslesen 
    SetValueBoolean($Heizung_Indikator , true); 
  else 
    SetValueBoolean($Heizung_Indikator , false); 

if (getBitState($StatusDez, 6))  // KWL Fault indicator an Bit6 auslesen 
    SetValueBoolean($Fehler_Indikator , true); 
  else 
    SetValueBoolean($Fehler_Indikator , false); 

if (getBitState($StatusDez, 7))  // KWL Service reminder an Bit7 auslesen 
    SetValueBoolean($Service , true); 
  else 
    SetValueBoolean($Service , false); 
     
break; 
*/
} 


} 

  function getBitState($Value, $BitNo) 
  { 
    return (($Value & pow(2, $BitNo)) != 0); 
  } 

?>

Jetzt scheitere ich gerade etwas daran, die Variablen über das Skript zu aktualisieren.
Eigentlich habe ich es so verstanden, dass mit den angelegten Instanzen, Variablen und Skripten die Variablen aus dem Datenstream automatisch ausgelesen und geschrieben werden.
Jedoch passiert bei mir nichts.
Kann ich das Sript irgendwie testen?
Wenn ich auf Ausführen drücke passiert auch nichts…nicht einmal eine Fehlermeldung.
Anscheinend habe ich noch nicht das Grundverständnis für IPS und scheitere an den Basics.

Wäre spitze, wenn mir hier jemand auf die Sprünge helfen könnte.

Danke und Gruß
Stettler

Das Helios Modul steht ab sofort zur Verfügung :slight_smile:

[b][Modul] Helios (KWL mit easyControls Steuerung)[/b]

Viele Grüße,
Chris