Anbindung von Helios KWL 370 Pro

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