Morgen,
ich versuchs mal (bei mir läuft es noch (problemlos)):
Der Cutter:
Hier mein auslesescript:
<?php
// *****************************************************************************
//
// *****************************************************************************
// ** Stand: 25.05.2016 9:35Uhr **
// *****************************************************************************
Include('ComfoAir.ips.php'); // Funktionen für ComfoAir-Auslesung inkludieren
$IDRegVar=26492;
// SendCommandTCP(array(0x00,0xDB),array(1,0,0,0),$IDRegVar); // Reset der Fehlermeldungen
// return;
/*
Sonstige wichteige Steuerkommandos:
// SendCommandTCP(array(0x00,0xDB),array(0,0,0,1),$IDRegVar); // Reset des Filters
// SendCommandTCP(array(0x00,0xDB),array(1,0,0,0),$IDRegVar); // Reset der Fehlermeldungen
// SendCommandTCP(array(0x00,0xDB),array(0,1,0,0),$IDRegVar); // CAVE komplett Reset möglichst NIE unbedacht !!!!!
// SendCommandTCP(array(0x00,0xDB),array(0,0,1,0),$IDRegVar); // Selbsttest
*/
/*
$IDcomPort=IPS_GetInstanceListByModuleID("{6DC3D946-0D31-450F-A8C6-C42DB8D7D4F1}")[0]; // ID des ComPortsSuchen
// Serialport öffnen (nur wenn geschlossen)
IPS_SetProperty ($IDcomPort, "Open", TRUE );
if(IPS_HasChanges($IDcomPort)) // nur wenn Konfig. der INstanz sich ändern würde ...
{
$ok=@IPS_ApplyChanges($IDcomPort); // ... dann ändern
If ($ok==FALSE) {SetValue(16900,"COM-Port nicht auslesebar!"); return;} else {SetValue(16900,"");}
/* sleep(1);
}
*/
if (IPS_GetInstance(13558)['InstanceStatus']<>102) // Wenn IO-Instanz fehlerhaft
{
Setvalue(33062,0);
return;
} else {Setvalue(33062,1);}
// ********************* Folgender Absatz reagiert auf Rückmeldung der ComfoAir über die RegisterVar 26492
if ($_IPS['SENDER'] == "RegisterVariable") {
$RawData = $_IPS['VALUE'];
if(startsWith($RawData,"\x00\x9C")) //RS232 Modus
{
//echo "WRL :: RS232 Modus :: 0x00 0x9C";
// SetValueInteger(33879,GetValueInteger(33879)+1);
Extract_C9C($RawData,27308);
}
else if(startsWith($RawData,"\x00\xCE")) //Ventilationssufe abrufen
{
//echo "WRL :: Ventilationssufe :: 0x00 0xCE";
// SetValueInteger(31316,GetValueInteger(31316)+1);
Extract_CCE($RawData,29424);
}
else if(startsWith($RawData,"\x00\xE0")) //Bypassregelung
{
//echo "WRL :: Bypassregelung :: 0x00 0xE0";
// SetValueInteger(17398,GetValueInteger(17398)+1);
Extract_CE0($RawData,55491,16977,47643);
}
else if(startsWith($RawData,"\x00\xD2")) //Temperaturen abrufen
{
//echo "WRL :: Temperaturen abrufen :: 0x00 0xD2";
// SetValueInteger(12079,GetValueInteger(12079)+1);
Extract_CD2($RawData,11048,45812 );
}
else if(startsWith($RawData,"\x00\x98")) //Sensordaten
{
//echo "WRL :: Sensordaten :: 0x00 0x98";
// SetValueInteger(21927,GetValueInteger(21927)+1);
Extract_C98($RawData,23216);
}
else if(startsWith($RawData,"\x00\xD6")) //Status abrufen
{
echo "WRL :: Status abrufen :: ";
Extract_CD5($RawData,38967);
}
else if(startsWith($RawData,"\x00\xDA")) //Störungen und Filterstatus abrufen
{
echo "WRL :: Störungen und Filterstatus abrufen :: ";
Extract_CDA($RawData,50027,45968,16900);
}
else if(startsWith($RawData,"\x00\x68")) //Bootloader Version
{
echo "WRL :: Bootloader Version :: ";
Extract_C68($RawData,53470);
}
else if(startsWith($RawData,"\x00\x6A")) //Abfrage des Gerättytps
{
echo "WRL :: Firmware Version :: ";
Extract_C6A($RawData,58001);
}
else if(startsWith($RawData,"\x00\xA2")) //Abfrage Konnektorplatine
{
echo "WRL :: Konnektorplatine :: ";
Extract_CA2($RawData,58539);
}
else if(startsWith($RawData,"\x00\x04")) //Eingänge abrufen
{
echo "WRL :: Eing?nge abrufen :: ";
Extract_C04($RawData,50121);
}
else if(startsWith($RawData,"\x00\x0C")) //Ventilatorstatus, Drehzahl und Stufe
{
echo "WRL :: Ventilatorstatus :: ";
Extract_C0C($RawData,59110 ,25005,17864,24043,42133,56190);
}
else if(startsWith($RawData,"\x00\x0E")) //Klappenstatus
{
echo "WRL :: Klappenstatus :: ";
Extract_C0E($RawData,31479);
}
else if(startsWith($RawData,"\x00\x10")) //Temperaturstatus
{
echo "WRL :: Temperaturstatus :: ";
Extract_C10($RawData,21743,23022,58578,25089);
}
else if(startsWith($RawData,"\x00\x12")) //Tastenstatus
{
echo "WRL :: Tastenstatus :: ";
// Extract_C12($RawData,31671); //??????????????????????????
}
else if(startsWith($RawData,"\x00\x14")) //Analoge Eingänge
{
echo "WRL :: Analoge Eingaenge :: ";
Extract_C14($RawData,51809);
}
else if(startsWith($RawData,"\x00\xCA")) //Zeitverzögerung
{
echo "WRL :: Zeitverzoegerung :: ";
Extract_CCA($RawData,59802);
}
else if(startsWith($RawData,"\x00\xDE")) //Betriebsstunden
{
echo "WRL :: Betriebsstunden :: ";
Extract_CDE($RawData,39716,18586);
}
// SetValueInteger(42752,GetValueInteger(42752)+1);
}
// ********************* Folgender Absatz reagiert auf Manuelle aus dem WF
else if ($_IPS['SENDER'] == "WebFront") {
if($_IPS['VARIABLE'] == 25005) { // Lüfterstufe per wahlschalter einstellen
SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
switch($_IPS['VALUE']) {
case 0:
//SendCommand(array(0x00,0x99),array(0x01),$IDcomPort);
SendCommandTCP(array(0x00,0x99),array(0x01),$IDRegVar);
break;
case 1:
// SendCommand(array(0x00,0x99),array(0x02),$IDcomPort);
SendCommandTCP(array(0x00,0x99),array(0x02),$IDRegVar);
break;
case 2:
//SendCommand(array(0x00,0x99),array(0x03),$IDcomPort);
SendCommandTCP(array(0x00,0x99),array(0x03),$IDRegVar);
break;
case 3:
//SendCommand(array(0x00,0x99),array(0x04),$IDcomPort);
SendCommandTCP(array(0x00,0x99),array(0x04),$IDRegVar);
break;
default:
echo "Keine gueltige Stufe!";
//SendCommandTCP(array(0x00,0xDB),array(0x04),$IDRegVar);
break;
}
}
else if($_IPS['VARIABLE'] == 15222) {
//Komfort Temperatur setzen
SetValue($_IPS['VARIABLE'],$_IPS['VALUE']);
switch($_IPS['VALUE'])
{
case 0:
$temp=GetValue(45812);
if ($temp>15) $temp=$temp-1;
Setvalue(45812,$temp);
IPS_SetVariableProfileAssociation("TempAuswahl2", 1, $temp." °C", "", 0xFFFFFF);
Setvalue($_IPS['VARIABLE'],1);
//SendCommand(array(0x00,0xD3),array(($temp+20)*2),$IDcomPort);
SendCommandTCP(array(0x00,0xD3),array(($temp+20)*2),$IDRegVar);
break;
case 2:
$temp=GetValue(45812);
if ($temp<24) $temp=$temp+1;
Setvalue(45812,$temp);
IPS_SetVariableProfileAssociation("TempAuswahl2", 1, $temp." °C", "", 0xFFFFFF);
Setvalue($_IPS['VARIABLE'],1);
//SendCommand(array(0x00,0xD3),array(($temp+20)*2),$IDcomPort);
SendCommandTCP(array(0x00,0xD3),array(($temp+20)*2),$IDRegVar);
break;
}
}
} else {
echo "only nix";
}
?>
Und hier das includierte php-script:
<?
// Funktion ist nötig wenn Request via SeriellPort erfolgen soll
/*
function SendCommand($byteArr,$dataArr,$SerialPortID) {
$request = CreateRequest($byteArr,$dataArr);
$requestStr="";
foreach($request as $byte) {
$requestStr = $requestStr . chr($byte);
}
COMPort_SendText($SerialPortID,$requestStr);
return $requestStr;
}
*/
// Funktion ist nötig wenn Request via LAN/TCP auf RS232- Adapter erfolgen soll
function SendCommandTCP($byteArr,$dataArr,$IDRegVar) {
$request = CreateRequest($byteArr,$dataArr);
$requestStr="";
foreach($request as $byte) {
$requestStr = $requestStr . chr($byte);
}
RegVar_SendText($IDRegVar,$requestStr);
return $requestStr;
}
function CreateRequest($byteArr,$dataArr) {
if($dataArr == null)
array_push($byteArr,0);
else {
array_push($byteArr,dechex(count($dataArr)));
$byteArr = array_merge($byteArr,$dataArr);
}
$crc = CalcCRC($byteArr);
array_push($byteArr,$crc);
$byteArr = array_merge(array(0x07,0xF0),$byteArr);
$byteArr = array_merge($byteArr,array(0x07,0x0F));
return $byteArr;
}
// Bootloader Version abrufen
function Extract_C68($rawDataStr,$varID) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 13) {
$Arr["Major"] = array_shift($dataArr);
$Arr["Minor"] = array_shift($dataArr);
$Arr["Beta"] = array_shift($dataArr);
$Arr["Geraetename"] = Arr2String($dataArr);
} else {
$str = "Bootloader :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
//$Arr["RawData"] = String2Hex($rawDataStr);
//$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($varID,$str);
return $str;
}
// Firmware Version abrufen
function Extract_C6A($rawDataStr,$varID) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 13) {
$Arr["Major"] = array_shift($dataArr);
$Arr["Minor"] = array_shift($dataArr);
$Arr["Beta"] = array_shift($dataArr);
$Arr["Geraetename"] = Arr2String($dataArr);
} else {
$str = "Bootloader :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
//$Arr["RawData"] = String2Hex($rawDataStr);
//$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($varID,$str);
return $str;
}
// Konnektorplatine Version abrufen
function Extract_CA2($rawDataStr,$varID) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 14) {
$Arr["Major"] = array_shift($dataArr);
$Arr["Minor"] = array_shift($dataArr);
$CCLuxeVer = array_pop($dataArr);
$CCEaseVer = array_pop($dataArr);
$Arr["Geraetename"] = Arr2String($dataArr);
$CCEaseMajor = ($CCEaseVer & bindec('11110000')) >> 4;
$CCEaseMinor = $CCEaseVer & bindec('00001111');
$CCLuxeMajor = ($CCLuxeVer & bindec('11110000')) >> 4;
$CCLuxeMinor = $CCLuxeVer & bindec('00001111');
$Arr["CC-Ease"] = $CCEaseMajor . "." . $CCEaseMinor;
$Arr["CC-Luxe"] = $CCLuxeMajor . "." . $CCLuxeMinor;
} else {
$str = "Konnektorplatine :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
//$Arr["RawData"] = String2Hex($rawDataStr);
//$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($varID,$str);
return $str;
}
// Eingänge abrufen
function Extract_C04($rawDataStr,$varID) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 2) {
$Schalteingaenge = array_pop($dataArr);
$Stufenschalter = array_pop($dataArr);
$Arr["Stufenschalter-L1"] = $Stufenschalter & bindec('00000001');
$Arr["Stufenschalter-L2"] = ($Stufenschalter & bindec('00000010')) >> 1;
$Arr["Schalteingang-Kueche"] =($Schalteingaenge & bindec('00000010')) >> 1;
$Arr["Schalteingang-Bad1"] = $Schalteingaenge & bindec('00000001');
$Arr["Schalteingang-Bad2"] = ($Schalteingaenge & bindec('00010000')) >> 4;
$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
} else {
$str = "Eingänge :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
//$Arr["RawData"] = String2Hex($rawDataStr);
$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($varID,$str);
return $str;
}
//Ventilatorstatus
function Extract_C0C($rawDataStr,$varID,$varIDstufe,$IDvHZuluft,$IDvHAbluft,$IDDZZuluft,$IDDZAbluft) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 6) {
$Arr["Zuluft"] = array_shift($dataArr) ." %";
$Arr["Abluft"] = array_shift($dataArr) ." %";
$Arr["Drehzahl-Zuluft"] = round(1875000 / ((array_shift($dataArr) * 255 + array_shift($dataArr)) -4),2) . " U/Min";
$Arr["Drehzahl-Abluft"] = round(1875000 / ((array_shift($dataArr) * 255 + array_shift($dataArr)) -4),2) . " U/Min";
SetValue($IDvHZuluft,(int)$Arr["Zuluft"]);
SetValue($IDvHAbluft,(int)$Arr["Abluft"]);
SetValue($IDDZZuluft,(int)$Arr["Drehzahl-Zuluft"]);
SetValue($IDDZAbluft,(int)$Arr["Drehzahl-Abluft"]);
if ((int)$Arr["Zuluft"]==15) SetValue($varIDstufe,0);
if ((int)$Arr["Zuluft"]==35) SetValue($varIDstufe,1);
if ((int)$Arr["Zuluft"]==50) SetValue($varIDstufe,2);
if ((int)$Arr["Zuluft"]==75) SetValue($varIDstufe,3);
} else {
$str = "Eingaenge :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
//$Arr["RawData"] = String2Hex($rawDataStr);
$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($varID,$str);
return $str;
}
//Klappenstatus
function Extract_C0E($rawDataStr,$varID) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 4) {
$BypassInProzent = array_shift($dataArr) ." %";
$Arr["Bypass"] = $BypassInProzent;
$vorheizung = array_shift($dataArr);
$Arr["Vorheizung"] = $vorheizung . " ";
switch($vorheizung) {
case 0:
$Arr["Vorheizung"] .= " - Offen";
break;
case 1:
$Arr["Vorheizung"] .= " - Zu";
break;
case 2:
$Arr["Vorheizung"] .= " - Unbekannt";
break;
}
$Arr["Motorstrom-Bypass"] = array_shift($dataArr);
$Arr["Motorstrom-Vorheizung"] = array_shift($dataArr);
} else {
$str = "Klappenstatus :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
//$Arr["RawData"] = String2Hex($rawDataStr);
$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($varID,$str);
return $str;
}
//Temperaturstatus abrufen
function Extract_C10($rawDataStr,$ID_T1,$ID_T2,$ID_T3,$ID_T4) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
if(count($dataArr) == 4) {
SetValueFloat($ID_T1,array_shift($dataArr) / 2 - 20);
SetValueFloat($ID_T2,array_shift($dataArr) / 2 - 20);
SetValueFloat($ID_T3,array_shift($dataArr) / 2 - 20);
SetValueFloat($ID_T4,array_shift($dataArr) / 2 - 20);
} else {
LogMsg(__FUNCTION__,"Temperaturstatus :: more then 4 Data Bytes received");
}
return $dataArr;
}
//Tastenstatus abrufen
function Extract_C12($rawDataStr,$varID) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 1) {
$tastenStatus = array_shift($dataArr);
switch ($tastenStatus) {
case 0:
$Arr["Taste"] = "nichts gedrückt";
break;
case 255:
$Arr["Taste"] = "Fehler";
break;
default:
$Arr["Taste"] = $TastenStatus;
break;
}
} else {
$str = "Tastenstatus :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
// $Arr["RawData"] = String2Hex($rawDataStr);
$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($varID,$str);
return $str;
}
//Analoge Eingänge abrfufen
function Extract_C14($rawDataStr,$varID) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 4) {
$analog1 = array_shift($dataArr);
$analog2 = array_shift($dataArr);
$analog3 = array_shift($dataArr);
$analog4 = array_shift($dataArr);
$Arr["Analog-1"] = $analog1 . " :: " . number_format($analog1*10/255,2) . "V";
$Arr["Analog-2"] = $analog2 . " :: " . number_format($analog2*10/255,2) . "V";
$Arr["Analog-3"] = $analog3 . " :: " . number_format($analog3*10/255,2) . "V";
$Arr["Analog-4"] = $analog4 . " :: " . number_format($analog4*10/255,2) . "V";
} else {
$str = "Analoge Eingaenge :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
//$Arr["RawData"] = String2Hex($rawDataStr);
$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($varID,$str);
return $str;
}
//Sensordaten abrufen
function Extract_C98($rawDataStr,$varID) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 17) {
$Arr["EnthalpieSensor-Temperatur"] = array_shift($dataArr) / 2 - 20 ." °C";
$Arr["EnthalpieSensor-Feuchtigkeit"] = array_shift($dataArr)." %";
$Arr["Analog-1"] = array_shift($dataArr) ." %";
$Arr["Analog-2"] = array_shift($dataArr)." %";
$Arr["Enthalpie-Koeffizient"] = array_shift($dataArr) ." %";
$Arr["Enthalpie-Time"] = array_shift($dataArr) * 12 . " min";
$Arr["0x00"] = array_shift($dataArr);
$Arr["Analog-1_ZuGewuenscht"] = array_shift($dataArr) ." %";
$Arr["Analog-1_AbGewuenscht"] = array_shift($dataArr) ." %";
$Arr["Analog-2_ZuGewuenscht"] = array_shift($dataArr) ." %";
$Arr["Analog-2_AbGewuenscht"] = array_shift($dataArr) ." %";
$Arr["Analog-3"] = array_shift($dataArr) ." %";
$Arr["Analog-4"] = array_shift($dataArr) ." %";
$Arr["Analog-3_ZuGewuenscht"] = array_shift($dataArr) ." %";
$Arr["Analog-3_AbGewuenscht"] = array_shift($dataArr) ." %";
$Arr["Analog-4_ZuGewuenscht"] = array_shift($dataArr) ." %";
$Arr["Analog-4_AbGewuenscht"] = array_shift($dataArr) ." %";
} else {
$str = "Sensordaten :: no valid Data received";
$Arr["ERROR"] = $str;
//LogMsg(__FUNCTION__,$str);
}
//$Arr["RawData"] = String2Hex($rawDataStr);
$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($varID,$str);
return $str;
}
//RS232 Modus
function Extract_C9C($rawDataStr,$varID) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 1) {
$data = array_shift($dataArr);
switch($data ) {
case 0:
$Arr["RS232 Modus"] = "Ohne Verbindung";
break;
case 1:
$Arr["RS232 Modus"] = "Nur PC";
break;
case 2:
$Arr["RS232 Modus"] = "Nur CC-Ease";
break;
case 3:
$Arr["RS232 Modus"] = "PC Master";
break;
case 4:
$Arr["RS232 Modus"] = "PC Logmodus";
break;
default:
$arr["RS232"]["Modus"] = $data . " (unknown)";
break;
}
} else {
$str = "RS232 Modus :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
//$Arr["RawData"] = String2Hex($rawDataStr);
$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($varID,$str);
return $str;
}
//Zeit Verzögerungen
function Extract_CCA($rawDataStr,$varID) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 8) {
$Arr["Badezimmer Einschaltverzoegerung"] = array_shift($dataArr) . " min";
$Arr["Badezimmer Ausschaltverzoegerung"] = array_shift($dataArr) . " min";
$Arr["L1 Ausschaltverzoegerung"] = array_shift($dataArr) . " min";
$Arr["Stosslueftung"] = array_shift($dataArr) . " min";
$Arr["Filter Zaehler"] = array_shift($dataArr) . " Wochen";
$Arr["RF hoch Zeit kurz"] = array_shift($dataArr) . " min";
$Arr["RF hoch Zeit lang"] = array_shift($dataArr) . " min";
$Arr["Kuechenhaube Ausschaltverzoegerung"] = array_shift($dataArr) . " min";
} else {
$str = "Zeit-Verz?gerungen :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
//$Arr["RawData"] = String2Hex($rawDataStr);
$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($varID,$str);
return $str;
}
//Ventilationsstufe abrufen
function Extract_CCE($rawDataStr,$varID) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 14) {
$AbluftAbwesend = array_shift($dataArr);
$AbluftStufe1 = array_shift($dataArr);
$AbluftStufe2 = array_shift($dataArr);
$ZuluftAbwesend =array_shift($dataArr);
$ZuluftStufe1 =array_shift($dataArr);
$ZuluftStufe2 = array_shift($dataArr);
//SetValueInteger(33407,array_shift($dataArr)); // abluft in %
$aktuelleStufe = array_shift($dataArr);
//SetValueInteger(37081,$aktuelleStufe); // zuluft in %
//SetValueInteger(52520,array_shift($dataArr)-1); // vent stufe
$AbluftStufe3 =array_shift($dataArr);
$ZuluftStufe3 = array_shift($dataArr);
$Arr["Abluft-Abwesend"] = $AbluftAbwesend . " %";
$Arr["Abluft-Stufe1"] = $AbluftStufe1 . " %";
$Arr["Abluft-Stufe2"] = $AbluftStufe2 . " %";
$Arr["Abluft-Stufe3"] = $AbluftStufe3 . " %";
$Arr["Zuluft-Abwesend"] = $ZuluftAbwesend . " %";
$Arr["Zuluft-Stufe1"] = $ZuluftStufe1 . " %";
$Arr["Zuluft-Stufe2"] = $ZuluftStufe2 . " %";
$Arr["Zuluft-Stufe3"] = $ZuluftStufe3 . " %";
} else {
$str = "Ventilationsstufe :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
//$Arr["RawData"] = String2Hex($rawDataStr);
$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($varID,$str);
return $str;
}
//Temperaturen abrufen
function Extract_CD2($rawDataStr,$varID,$ID_KomfortTemp) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 9) {
$Arr["KomfortTemperatur"] = number_format(array_shift($dataArr) / 2 - 20,1) ." °C";
SetValue($ID_KomfortTemp,(int)$Arr["KomfortTemperatur"]);
$Arr["T1-Aussenluft"] = number_format(array_shift($dataArr) / 2 - 20,1) ." °C";
$Arr["T2-Zuluft"] = number_format(array_shift($dataArr) / 2 - 20,1) ." °C";
$Arr["T3-Abluft"] = number_format(array_shift($dataArr) / 2 - 20,1) ." °C";
$Arr["T4-Fortluft"] = number_format(array_shift($dataArr) / 2 - 20,1) ." °C";
$Fuehler = array_shift($dataArr);
$FuehlerT1 = $Fuehler & hexdec(0x01);
$FuehlerT2 = ($Fuehler & hexdec(0x02)) >> 1;
$FuehlerT3 = ($Fuehler & hexdec(0x04)) >> 2;
$FuehlerT4 = ($Fuehler & hexdec(0x08)) >> 3;
$FuehlerEWT = ($Fuehler & hexdec(0x10)) >> 4;
$FuehlerNachheizung = ($Fuehler & hexdec(0x20)) >> 5;
$FuehlerKuechenhaube = ($Fuehler & hexdec(0x40)) >> 6;
$Arr["Fuehler-T1"] = $FuehlerT1;
$Arr["Fuehler-T2"] = $FuehlerT2;
$Arr["Fuehler-T3"] = $FuehlerT3;
$Arr["Fuehler-T4"] = $FuehlerT4;
$Arr["Fuehler-EWT"] = $FuehlerEWT;
$Arr["Fuehler-Nachheizung"] = $FuehlerNachheizung;
$Arr["Fuehler-Kuechenhaube"] = $FuehlerKuechenhaube;
if($FuehlerEWT) { $Arr["EWT"] = number_format(array_shift($dataArr) / 2 - 20,1) ." °C"; } else { $Arr["EWT"] = "-";}
if($FuehlerNachheizung) { $Arr["Nachheizung"] = number_format(array_shift($dataArr) / 2 - 20,1) ." °C"; } else { $Arr["Nachheizung"] = "-";}
if($FuehlerKuechenhaube) { $Arr["Kuechenhaube"] = number_format(array_shift($dataArr) / 2 - 20,1) ." °C"; } else { $Arr["Kuechenhaube"] = "-";}
} else {
$str = "Temperaturen :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
//$Arr["RawData"] = String2Hex($rawDataStr);
$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($varID,$str);
return $str;
}
//Status abrufen
function Extract_CD5($rawDataStr,$varID) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 11) {
if(array_shift($dataArr)) { $Arr["Vorheizung"] = "vorhanden"; } else { $Arr["Vorheizung"] = "nicht vorhanden"; };
if(array_shift($dataArr)) { $Arr["Bypass"] = "vorhanden"; } else { $Arr["Bypass"] = "nicht vorhanden"; };
if(array_shift($dataArr)) { $Arr["Typ"] = "rechts"; } else { $Arr["Typ"] = "links"; };
if(array_shift($dataArr)) { $Arr["Groesse"] = "gross"; } else { $Arr["Typ"] = "klein"; };
$Optionen = array_shift($dataArr);
$Feuerstaette = $Optionen & hexdec(0x01);
$Kuechenhaube = ($Optionen & hexdec(0x02)) >> 1;
$Nachheizung = ($Optionen & hexdec(0x04)) >> 2;
if($Feuerstaette) { $Arr["Option-Feuerstaette"] = "vorhanden"; } else { $Arr["Option-Feuerstaette"] = "nicht vorhanden"; };
if($Kuechenhaube) { $Arr["Option-Kuechenhaube"] = "vorhanden"; } else { $Arr["Option-Kuechenhaube"] = "nicht vorhanden"; };
if($Nachheizung) { $Arr["Option-Nachheizung"] = "vorhanden"; } else { $Arr["Option-Nachheizung"] = "nicht vorhanden"; };
$xx = array_shift($dataArr);
$P10_17 = array_shift($dataArr);
$Arr["Status-P10"] = ($P10_17 & hexdec(0x01));
$Arr["Status-P11"] = ($P10_17 & hexdec(0x02)) >> 1;
$Arr["Status-P12"] = ($P10_17 & hexdec(0x04)) >> 2;
$Arr["Status-P13"] = ($P10_17 & hexdec(0x08)) >> 3;
$Arr["Status-P14"] = ($P10_17 & hexdec(0x10)) >> 4;
$Arr["Status-P15"] = ($P10_17 & hexdec(0x20)) >> 5;
$Arr["Status-P16"] = ($P10_17 & hexdec(0x40)) >> 6;
$Arr["Status-P17"] = ($P10_17 & hexdec(0x80)) >> 7;
$P18_19 = array_shift($dataArr);
$Arr["Status-P18"] = ($P18_19 & hexdec(0x01));
$Arr["Status-P19"] = ($P18_19 & hexdec(0x02)) >> 1;
$P90_96 = array_shift($dataArr);
$Arr["Status-P90"] = ($P90_96 & hexdec(0x01));
$Arr["Status-P91"] = ($P90_96 & hexdec(0x02)) >> 1;
$Arr["Status-P92"] = ($P90_96 & hexdec(0x04)) >> 2;
$Arr["Status-P93"] = ($P90_96 & hexdec(0x08)) >> 3;
$Arr["Status-P94"] = ($P90_96 & hexdec(0x10)) >> 4;
$Arr["Status-P95"] = ($P90_96 & hexdec(0x20)) >> 5;
$Arr["Status-P96"] = ($P90_96 & hexdec(0x40)) >> 6;
$Enthalpie = array_shift($dataArr);
switch($Enthalpie) {
case 0:
$Arr["Enthalpie"] = "abwesend";
break;
case 1:
$Arr["Enthalpie"] = "anwesend";
break;
case 2:
$Arr["Enthalpie"] = "ohne Fühler";
break;
default:
$Arr["Enthalpie"] = "???";
break;
}
$EWT = array_shift($dataArr);
switch($EWT) {
case 0:
$Arr["EWT"] = "abwesend";
break;
case 1:
$Arr["EWT"] = "geregelt";
break;
case 2:
$Arr["EWT"] = "ungeregelt";
break;
default:
$Arr["EWT"] = "???";
break;
}
} else {
$str = "Status :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
//$Arr["RawData"] = String2Hex($rawDataStr);
$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($varID,$str);
return $str;
}
//Störungen und Filter abrufen
function Extract_CDA($rawDataStr,$varID,$varIDFilter,$varIDError) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
$Arr["Filter"] = "";
$Arr["ERROR"]="";
$Arr["AktuellerFehler-A"] = "";
$Arr["AktuellerFehler-E"] = "";
$Arr["LetzterFehler-A"] = "";
$Arr["LetzterFehler-E"] = "";
$Arr["VorletzterFehler-A"] = "";
$Arr["VorletzterFehler-E"] = "";
$Arr["VorvorletzterFehler-A"] = "";
$Arr["VorvorletzterFehler-E"] = "";
$Arr["AktuellerFehler-EA"] = "";
$Arr["LetzterFehler-EA"] = "";
$Arr["VorletzterFehler-EA"] = "";
$Arr["VorvorletzterFehler-EA"] = "";
$Arr["AktuellerFehler-A_high"] = "";
$Arr["LetzterFehler-A_high"] = "";
$Arr["VorletzterFehler-A_high"] = "";
$Arr["VorvorletzterFehler-A_high"] = "";
if(count($dataArr) == 17) {
$Arr["ERROR"]="";
$Arr["AktuellerFehler-A"] = array_shift($dataArr);
$Arr["AktuellerFehler-E"] = array_shift($dataArr);
$Arr["LetzterFehler-A"] = array_shift($dataArr);
$Arr["LetzterFehler-E"] = array_shift($dataArr);
$Arr["VorletzterFehler-A"] = array_shift($dataArr);
$Arr["VorletzterFehler-E"] = array_shift($dataArr);
$Arr["VorvorletzterFehler-A"] = array_shift($dataArr);
$Arr["VorvorletzterFehler-E"] = array_shift($dataArr);
if(array_shift($dataArr)) { $Arr["Filter"] = "voll"; } else { $Arr["Filter"] = "OK"; };
$Arr["AktuellerFehler-EA"] = array_shift($dataArr);
$Arr["LetzterFehler-EA"] = array_shift($dataArr);
$Arr["VorletzterFehler-EA"] = array_shift($dataArr);
$Arr["VorvorletzterFehler-EA"] = array_shift($dataArr);
$Arr["AktuellerFehler-A_high"] = array_shift($dataArr);
$Arr["LetzterFehler-A_high"] = array_shift($dataArr);
$Arr["VorletzterFehler-A_high"] = array_shift($dataArr);
$Arr["VorvorletzterFehler-A_high"] = array_shift($dataArr);
} else {
$str = "Stoerungen :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
// $Arr["RawData"] = String2Hex($rawDataStr);
$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
setValue($varIDFilter,$Arr["Filter"]);
setValue($varIDError,"");
if ($Arr["ERROR"]=="Stoerungen :: no valid Data received") $Arr["ERROR"]="";
if (($Arr["ERROR"]<>"") or ($Arr["AktuellerFehler-A"]<>"") or ($Arr["AktuellerFehler-E"]<>"") or ($Arr["AktuellerFehler-A_high"]<>""))
{
setValue($varIDError,"ComfoBoxFEHLER: ".$Arr["ERROR"]." FehlerA: ".$Arr["AktuellerFehler-A"]." / FehlerE: ".$Arr["AktuellerFehler-E"]." / FehlerA_high: ".$Arr["AktuellerFehler-A_high"]);}
else
{setValue($varIDError,"");}
SetValue($varID,$str);
return $str;
}
//Betriebsstunden
function Extract_CDE($rawDataStr,$varID,$FilterCountdown) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 20) {
$Abwesend = array_shift($dataArr)*256*256 + array_shift($dataArr) * 256 + array_shift($dataArr);
$Stufe1 = array_shift($dataArr)*256*256 + array_shift($dataArr) * 256 + array_shift($dataArr);
$Stufe2 = array_shift($dataArr)*256*256 + array_shift($dataArr) * 256 + array_shift($dataArr);
$Frostschutz = array_shift($dataArr) * 256 + array_shift($dataArr);
$Vorheizung = array_shift($dataArr) * 256 + array_shift($dataArr);
$Bypass = array_shift($dataArr) * 256 + array_shift($dataArr);
$Filter = array_shift($dataArr) * 256 + array_shift($dataArr);
$Stufe3 = array_shift($dataArr)*256*256 + array_shift($dataArr) * 256 + array_shift($dataArr);
$Arr["Abwesend"] = $Abwesend . " h -> " . number_format((float)$Abwesend/24/360,2) . " Jahre";
$Arr["Stufe-1"] = $Stufe1 . " h -> ". number_format((float)$Stufe1/24/360,2) . " Jahre";
$Arr["Stufe-2"] = $Stufe2 . " h -> ". number_format((float)$Stufe2/24/360,2) . " Jahre";
$Arr["Stufe-3"] = $Stufe3 . " h -> ". number_format((float)$Stufe3/24/360,2) . " Jahre";
$Arr["Gesamtlaufzeit"] = ($Abwesend+$Stufe1+$Stufe2+$Stufe3) . " h -> ". number_format((float)($Abwesend+$Stufe1+$Stufe2+$Stufe3)/24/360,2) . " Jahre";
$Arr["Bypass"] = $Bypass . " h -> ". number_format((float)$Bypass/24/360,2) . " Jahre";
$Arr["Filter"] = $Filter . " h -> ". number_format((float)$Filter/24/360,2) . " Jahre";
SetValue($FilterCountdown,182-(int)number_format((float)$Filter/24,2));
$Arr["Frostschutz"] = $Frostschutz . " h -> ". number_format((float)$Frostschutz/24/360,2) . " Jahre";
$Arr["Vorheizung"] = $Vorheizung . " h -> ". number_format((float)$Vorheizung/24/360,2) . " Jahre";
} else {
$str = "Betriebsstunden :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
//$Arr["RawData"] = String2Hex($rawDataStr);
$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($varID,$str);
return $str;
}
//Bypassregelung abrufen
function Extract_CE0($rawDataStr,$VisID,$BypassStufe,$BypassModus) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 7) {
array_shift($dataArr);
array_shift($dataArr);
$Arr["Bypass-Faktor"] = array_shift($dataArr);
$Arr["Bypass-Stufe"] = array_shift($dataArr);
$Arr["Bypass-Korrektur"] = array_shift($dataArr);
array_shift($dataArr);
$Arr["Modus"] = array_shift($dataArr);
if($Arr["Modus"]==1) { $Arr["Modus"] = "Sommermodus"; } else { $Arr["Modus"] = "Wintermodus"; };
SetValue($BypassStufe,(int)$Arr["Bypass-Stufe"]);
SetValue($BypassModus,$Arr["Modus"]);
} else {
$str = "Bypassregelung :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
//$Arr["RawData"] = String2Hex($rawDataStr);
$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($VisID,$str);
return $str;
}
// Vorheizung abrufen => in meinem Fall uninteressant, da kein Frostschutz eingebaut !!
function Extract_CE2($rawDataStr,$varID) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 6) {
switch(array_shift($dataArr)) {
case 0:
$Arr["StatusKlappe"] = "geschlossen";
break;
case 1:
$Arr["StatusKlappe"] = "offen";
break;
case 2:
$Arr["StatusKlappe"] = "unbekannt";
break;
default:
$Arr["StatusKlappe"] = "???";
break;
}
if(array_shift($dataArr)) {$Arr["Frostschutz"] = "aktiv";} else {$Arr["Frostschutz"] = "inaktiv";}
if(array_shift($dataArr)) {$Arr["Vorheizung"] = "aktiv";} else {$Arr["Vorheizung"] = "inaktiv";}
$Arr["Frostminuten"] = array_shift($dataArr) * 256 + array_shift($dataArr) . " min";
if(array_shift($dataArr)) {$Arr["Frostsicherheit"] = "extra sicher";} else {$Arr["Frostsicherheit"] = "sicher";}
} else {
$str = "Vorheizung :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
//$Arr["RawData"] = String2Hex($rawDataStr);
$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($varID,$str);
return $str;
}
// RF Status abrufen, uninteressant, da nicht verbaut
function Extract_CE6($rawDataStr,$varID) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 7) {
$RF_Adr4 = array_shift($dataArr);
$RF_Adr3 = array_shift($dataArr);
$RF_Adr2 = array_shift($dataArr);
$RF_Adr1 = array_shift($dataArr);
$RF_ID = array_shift($dataArr);
$Arr["RF Adresse"] = dechex($RF_Adr1) ." ". dechex($RF_Adr2) ." ". dechex($RF_Adr3) ." ". dechex($RF_Adr4);
$Arr["RF ID"] = dechex($RF_ID);
} else {
$str = "RF Status :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
$Arr["RawData"] = String2Hex($rawDataStr);
$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($varID,$str);
return $str;
}
// Letzte 8 mal Vorheizung => in meinem Fall uninteressant
function Extract_CEA($rawDataStr,$varID) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 8) {
$Arr["Wert 8 (Neuster Wert)"] = array_pop($dataArr) . " ?C";
$Arr["Wert 7"] = array_pop($dataArr) . " ?C";
$Arr["Wert 6"] = array_pop($dataArr) . " ?C";
$Arr["Wert 5"] = array_pop($dataArr) . " ?C";
$Arr["Wert 4"] = array_pop($dataArr) . " ?C";
$Arr["Wert 3"] = array_pop($dataArr) . " ?C";
$Arr["Wert 2"] = array_pop($dataArr) . " ?C";
$Arr["Wert 1 (Aeltester Wert)"] = array_pop($dataArr) . " ?C";
} else {
$str = "Letzte 8 mal Vorheizung :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
$Arr["RawData"] = String2Hex($rawDataStr);
$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($varID,$str);
return $str;
}
// EWT Nachheizung => in meinem Fall uninteressant, da nicht eingebaut !!
function Extract_CEC($rawDataStr,$varID) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
$Arr = array();
if(count($dataArr) == 8) {
$Arr["EWT-niedrig"] = array_shift($dataArr) . " °C";
$Arr["EWT-hoch"] = array_shift($dataArr) . " °C";
$Arr["EWT-speedUp"] = array_shift($dataArr) . " %";
$Arr["Kuechenhaube-speedUp"] = array_shift($dataArr) . " %";
$Arr["NachheizungLeistung"] = array_shift($dataArr);
$Arr["NachheizungLeistung_I-Parameter"] = array_shift($dataArr) . " " . array_shift($dataArr);;
$Arr["NachheizungTempGewuenscht"] = array_shift($dataArr) . " °C";
} else {
$str = "EWT Nachheizung :: no valid Data received";
$Arr["ERROR"] = $str;
LogMsg(__FUNCTION__,$str);
}
$Arr["RawData"] = String2Hex($rawDataStr);
$Arr["Update-TimeStamp"] = date('d-m-Y H:i:s',time());
$str = Array2HtmlTable($Arr);
SetValue($varID,$str);
return $str;
}
function Extract_Unknown($rawDataStr) {
$rawDataStr = str_replace("\x07\x07","\x07",$rawDataStr);
$str = "WRL WARNING :: unknown Command received -> " . String2Hex($RawData) . "((" . $RawData;
LogMsg(__FUNCTION__,$str);
return $str;
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function ExtractString($rawDataStr) {
$rawDataArr = String2Arr($rawDataStr);
$dataArr = ExtractData($rawDataArr);
return Arr2String($dataArr);
}
function ExtractData($byteArr) {
$crc = array_pop($byteArr);
//echo "\r\ncrc: " . $crc;
//print_r($byteArr);
$crcOK = CheckCRC($byteArr,$crc);
if($crcOK) {
//print_r($byteArr);
//echo "\r\nlen: " . dechex($byteArr[2]);
return array_slice($byteArr,3,ord($byteArr[2]));
} else {
return array ("\x00");
}
}
function CheckCRC($byteArr,$crc) {
$crcCalculated = CalcCRC($byteArr);
//echo "\r\ncrc: " .$crc;
//echo "\r\ncrcCalculated: " . $crcCalculated;
if ($crc == $crcCalculated) {
//echo "\r\nCRC OK";
return true;
} else {
//echo "\r\nCRC !not! OK";
LogMsg(__FUNCTION__,"CRC NOT OK :>: " . String2Hex(Arr2String($byteArr)));
return false;
}
}
function CalcCRC($byteArr) {
$crc = 0;
$cnt07 =0;
foreach($byteArr as $byte) {
//echo "\r\n Byte: " . $byte . " :: " . dechex($byte) . " :: " . chr($byte);
/*
if(($byte == 07) AND ($cnt07==0)) {
$cnt07++;
} else {
$cnt07 =0;
$crc = $crc + $byte;
}
*/
$crc = $crc + $byte;
}
$crc = $crc + 173;
$crc = $crc & 255;
return $crc;
}
function String2Hex($string){
$hex='';
for ($i=0; $i < strlen($string); $i++){
//$hex .= dechex(ord($string[$i]));
$hex .= "0x" . sprintf("%02X", ord($string[$i])) . " ";
}
return $hex;
}
function String2Arr($string){
$arr = array();
for ($i=0; $i < strlen($string); $i++){
$arr[] = ord($string[$i]);
}
return $arr;
}
function Arr2String($arr){
$str = '';
foreach ($arr as $arrElem) {
$str .= chr($arrElem);
}
return $str;
}
function DebugArray($arr) {
foreach ($arr as $arrElem) {
echo "\r\n Byte: " . $arrElem . " :: " . dechex($arrElem) . " :: " . chr($arrElem);
}
}
function startsWith($haystack, $needle)
{
return !strncmp($haystack, $needle, strlen($needle));
}
function LogMsg($functionName,$logMessage) {
$logEntry = date('Y-m-d H:i:s', time()) . " : " . $functionName . " : " . $logMessage;
$Path1 = IPS_GetKernelDir();
$Path2 = "logs\\";
$File = "ComfoAir550.log"; //date("Y-m-d His",time())
$Filename = $Path1 . $Path2 . $File;
$datei = fopen($Filename , "a+");
fwrite($datei, $logEntry . "\r\n");
fclose($datei);
}
function Array2HtmlTable($Arr) {
//print_r($Arr);
$html = "<table width='100%' cellspacing='0'>";
$keys = array_keys($Arr);
for($i=0;$i<count($keys);$i++)
{
$html.= "<tr>";
switch ($keys[$i]) { // spezellie farbdarstellungen im htmlbox
case "Gesamtlaufzeit":
$html.= "<td><font color='#7E7979'>" . $keys[$i] . "</font></td><td align='right'><font color='#7E7979'>" . $Arr[$keys[$i]] ."</font></td>";
break;
case "Update-TimeStamp":
$html.= "<td><font size=2 color='#7E7979'>" . $keys[$i] . "</font></td><td align='right'><font size=2 color='#7E7979'>" . $Arr[$keys[$i]] ."</font></td>";
break;
case "RawData":
$html.= "<td><font size=2 color='#7E7979'>" . $keys[$i] . "</td><td align='right'><font size=2 color='#7E7979'>" . $Arr[$keys[$i]] ."</font></td>";
break;
default:
$html.= "<td>" . $keys[$i] . "</td><td align='right'>" . $Arr[$keys[$i]] ."</td>";
break;
}
$html.= "</tr>";
}
$html .= "</table>";
return $html;
}
?>
Gruß
hardlog