hier noch mein Script für den Datenempfang:
Serial RS485: 9600 8N1
Cutter auf Eingabelänge: 6 und Sync Zeichen: 01 HEX
<?
$ID_Betrieb = 56270 /*[Scripte\Helios KWL\Wohnraumbelüftung\Betrieb]*/;
$CO2_Status = 34275 /*[Scripte\Helios KWL\Wohnraumbelüftung\CO2 Status]*/;
$Luftfeuchte_Status = 36549 /*[Scripte\Helios KWL\Wohnraumbelüftung\%RH Status]*/;
$Heizung_Status = 44493 /*[Scripte\Helios KWL\Wohnraumbelüftung\Heizung Status]*/;
$Filter_Status = 15183 /*[Scripte\Helios KWL\Wohnraumbelüftung\Filterwechsel]*/;
$Heizung_Indikator = 21099 /*[Scripte\Helios KWL\Wohnraumbelüftung\Heizung indicator]*/;
$Fehler_Indikator = 16917 /*[Scripte\Helios KWL\Wohnraumbelüftung\Fehler Indicator]*/;
$Service = 12524 /*[Scripte\Helios KWL\Wohnraumbelüftung\Service]*/;
$ID_Luefterstufe = 35107 /*[Scripte\Helios KWL\Wohnraumbelüftung\Lüfterstufe]*/;
$ID_Aussenluft =23300 /*[Scripte\Helios KWL\Wohnraumbelüftung\Außenluft]*/;
$ID_Fortluft =33790 /*[Scripte\Helios KWL\Wohnraumbelüftung\Fortluft]*/;
$ID_Abluft =15875 /*[Scripte\Helios KWL\Wohnraumbelüftung\Abluft]*/;
$ID_Zuluft =11353 /*[Scripte\Helios KWL\Wohnraumbelüftung\Zuluft]*/;
$ID_Temp = 59745 /*[Scripte\Helios KWL\KNX\Zwischenspeicher]*/;
// 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", "10", "11", "11",
"11", "12", "12", "12", "13", "13", "13", "14", "14", "14", "15", "15", "15",
"16", "16", "16", "17", "17", "18", "18", "18", "19", "19", "19", "20", "20",
"21", "21", "21", "22", "22", "22", "23", "23", "24", "24", "24", "25", "25",
"26", "26", "27", "27", "27", "28", "28", "29", "29", "30", "30", "31", "31",
"32", "32", "33", "33", "34", "34", "35", "35", "36", "36", "37", "37", "38",
"38", "39", "40", "40", "41", "41", "42", "43", "43", "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,6);// Funktion ausfiltern
switch($Funktion)
{
case "\x01\x11\x10\x29\x01\x4C": // Lüfterstufe 1
SetValue($ID_Luefterstufe , 1);
$Stufe = GetValue (43355 /*[Scripte\Helios KWL\KNX\KWL Lüfterstufe Status\Value]*/);
if ($Stufe <> 1)
{
EIB_Scale(40372 /*[Scripte\Helios KWL\KNX\KWL Lüfterstufe Status]*/, 1);
}
break;
case "\x01\x11\x10\x29\x03\x4E": // Lüfterstufe 2
SetValue($ID_Luefterstufe , 2);
$Stufe = GetValue (43355 /*[Scripte\Helios KWL\KNX\KWL Lüfterstufe Status\Value]*/);
if ($Stufe <> 2)
{
EIB_Scale(40372 /*[Scripte\Helios KWL\KNX\KWL Lüfterstufe Status]*/, 2);
}
break;
case "\x01\x11\x10\x29\x07\x52": // Lüfterstufe 3
SetValue($ID_Luefterstufe , 3);
$Stufe = GetValue (43355 /*[Scripte\Helios KWL\KNX\KWL Lüfterstufe Status\Value]*/);
if ($Stufe <> 3)
{
EIB_Scale(40372 /*[Scripte\Helios KWL\KNX\KWL Lüfterstufe Status]*/, 3);
}
break;
case "\x01\x11\x10\x29\x0F\x5A": // Lüfterstufe 4
SetValue($ID_Luefterstufe , 4);
$Stufe = GetValue (43355 /*[Scripte\Helios KWL\KNX\KWL Lüfterstufe Status\Value]*/);
if ($Stufe <> 4)
{
EIB_Scale(40372 /*[Scripte\Helios KWL\KNX\KWL Lüfterstufe Status]*/, 4);
}
break;
case "\x01\x11\x10\x29\x1F\x6A": // Lüfterstufe 5
SetValue($ID_Luefterstufe , 5);
$Stufe = GetValue (43355 /*[Scripte\Helios KWL\KNX\KWL Lüfterstufe Status\Value]*/);
if ($Stufe <> 5)
{
EIB_Scale(40372 /*[Scripte\Helios KWL\KNX\KWL Lüfterstufe Status]*/, 5);
}
break;
case "\x01\x11\x10\x29\x3F\x8A": // Lüfterstufe 6
SetValue($ID_Luefterstufe , 6);
$Stufe = GetValue (43355 /*[Scripte\Helios KWL\KNX\KWL Lüfterstufe Status\Value]*/);
if ($Stufe <> 6)
{
EIB_Scale(40372 /*[Scripte\Helios KWL\KNX\KWL Lüfterstufe Status]*/, 6);
}
break;
case "\x01\x11\x10\x29\x7F\xCA": // Lüfterstufe 7
SetValue($ID_Luefterstufe , 7);
$Stufe = GetValue (43355 /*[Scripte\Helios KWL\KNX\KWL Lüfterstufe Status\Value]*/);
if ($Stufe <> 7)
{
EIB_Scale(40372 /*[Scripte\Helios KWL\KNX\KWL Lüfterstufe Status]*/, 7);
}
break;
case "\x01\x11\x10\x29\xFF\x4A": // Lüfterstufe 8
SetValue($ID_Luefterstufe , 8);
$Stufe = GetValue (43355 /*[Scripte\Helios KWL\KNX\KWL Lüfterstufe Status\Value]*/);
if ($Stufe <> 8)
{
EIB_Scale(40372 /*[Scripte\Helios KWL\KNX\KWL Lüfterstufe Status]*/, 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
$Zuluft=substr($data,4,1);// Temperatur ausfiltern
$ZuluftTemp = ord($Zuluft); // Chr in Dezimal umwandeln
SetValue($ID_Temp , $Temperatur[$ZuluftTemp]); // Wert in temporäre Variable schreiben
$Status = GetValue($ID_Temp); //
$Status1 = GetValue(53141 /*[Scripte\Helios KWL\KNX\KWL Zuluft\Value]*/); //
if ($Status <> $Status1)
EIB_Value(46912 /*[Scripte\Helios KWL\KNX\KWL Zuluft]*/, $Status);
break;
case "\x01\x11\x20\x34": // Abluft Temperatur
$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(26671 /*[Scripte\Helios KWL\KNX\KWL Abluft\Value]*/); //
if ($Status <> $Status1)
EIB_Value(47246 /*[Scripte\Helios KWL\KNX\KWL Abluft]*/, $Status);
break;
case "\x01\x11\x20\x33": // Fortluft Temperatur
$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(46295 /*[Scripte\Helios KWL\KNX\KWL Fortluft\Value]*/); //
if ($Status <> $Status1)
EIB_Value(13665 /*[Scripte\Helios KWL\KNX\KWL Fortluft]*/, $Status);
break;
case "\x01\x11\x20\x32": // Außenluft Temperatur
$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(38797 /*[Scripte\Helios KWL\KNX\KWL Außenluft\Value]*/); //
if ($Status <> $Status1)
EIB_Value(30455 /*[Scripte\Helios KWL\KNX\KWL Außenluft]*/, $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
{
if (getValue(53528 /*[Scripte\Helios KWL\KNX\KWL Betrieb\Value]*/) == false)
EIB_Switch(48079 /*[Scripte\Helios KWL\KNX\KWL Betrieb]*/, true);
}
else
{
if (getValue(53528 /*[Scripte\Helios KWL\KNX\KWL Betrieb\Value]*/) == true)
EIB_Switch(48079 /*[Scripte\Helios KWL\KNX\KWL 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
{
if (getValue(17603 /*[Scripte\Helios KWL\KNX\KWL Heizung Status\Value]*/) == false)
EIB_Switch(33368 /*[Scripte\Helios KWL\KNX\KWL Heizung Status]*/, true);
}
else
{
if (getValue(17603 /*[Scripte\Helios KWL\KNX\KWL Heizung Status\Value]*/) == true)
EIB_Switch(33368 /*[Scripte\Helios KWL\KNX\KWL Heizung Status]*/, false);
}
if (getBitState($StatusDez, 4)) // KWL Filterguard indicator an Bit4 auslesen
{
if (getValue(13257 /*[Scripte\Helios KWL\KNX\KWL Filterwechsel\Value]*/) == false)
EIB_Switch(35334 /*[Scripte\Helios KWL\KNX\KWL Filterwechsel]*/, true);
}
else
{
if (getValue(13257 /*[Scripte\Helios KWL\KNX\KWL Filterwechsel\Value]*/) == true)
EIB_Switch(35334 /*[Scripte\Helios KWL\KNX\KWL Filterwechsel]*/, false);
}
if (getBitState($StatusDez, 5)) // KWL Heating indicator an Bit5 auslesen
{
if (getValue(57091 /*[Scripte\Helios KWL\KNX\KWL Heizung indicator\Value]*/) == false)
EIB_Switch(43957 /*[Scripte\Helios KWL\KNX\KWL Heizung indicator]*/, true);
}
else
{
if (getValue(57091 /*[Scripte\Helios KWL\KNX\KWL Heizung indicator\Value]*/) == true)
EIB_Switch(43957 /*[Scripte\Helios KWL\KNX\KWL Heizung indicator]*/, false);
}
if (getBitState($StatusDez, 6)) // KWL Fault indicator an Bit6 auslesen
{
if (getValue(41986 /*[Scripte\Helios KWL\KNX\KWL Fehler Indicator\Value]*/) == false)
EIB_Switch(13399 /*[Scripte\Helios KWL\KNX\KWL Fehler Indicator]*/, true);
}
else
{
if (getValue(41986 /*[Scripte\Helios KWL\KNX\KWL Fehler Indicator\Value]*/) == true)
EIB_Switch(13399 /*[Scripte\Helios KWL\KNX\KWL Fehler Indicator]*/, false);
}
if (getBitState($StatusDez, 7)) // KWL Service reminder an Bit7 auslesen
{
if (getValue(52845 /*[Scripte\Helios KWL\KNX\KWL Service\Value]*/) == false)
EIB_Switch(59077 /*[Scripte\Helios KWL\KNX\KWL Service]*/, true);
}
else
{
if (getValue(52845 /*[Scripte\Helios KWL\KNX\KWL Service\Value]*/) == true)
EIB_Switch(59077 /*[Scripte\Helios KWL\KNX\KWL Service]*/, false);
}
break;
}
}
function getBitState($Value, $BitNo)
{
return (($Value & pow(2, $BitNo)) != 0);
}
?>