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