set 0 to disable ////////////////////////////////////////////////////////////////////////////////// $ChangeManagement=array(); $PM=array(); //read statuses of signals from all controllers - we want keep all status variables kept globaly for all subsystems $decode=1; //disable globally all controllers full decoding - we will process all necesarry signals manualy @ onChangeEvent - as fast as possible $debugTime=0; //display time for testing - statuses must be copied locally into status array for processing $debugAll=0; //production environment no debuging info $ProcessChangedOnly=1; //we only process changed statuses marked with * $DisplayToFilesOnlyPro=1; //logging are send to files only (not the screen or eHouse.PRO server) - For PRO $DisplayToFilesOnlyWiFi=1; //for WiFi $DisplayToFilesOnlyLan=1; //for Lan $DisplayToFilesOnlyOne=1; //for eHouse One (RS485/422) $DEBUG_PRO=$debugAll; //display and write status to the screen - manual debug only mode $ENABLE_PRO_SATEL=1; //enable ehouse.pro + satel decoding/processing $ENABLE_PRO_FULL_DECODE=$decode; //enable full decoding for pro/satel $DEBUG_LAN=$debugAll; //display status to the screen - manual debug only mode $ENABLE_LAN=1; //enable eHouseLan Processing $ENABLE_ALL_LAN_FULL_DECODE=$decode; //ENABLE eHouseLan Full Decode of oll controllers $ENABLE_LAN_FULL_DECODE=$decode; //Enable eHouseLan Full Decode $DEBUG_WIFI=$debugAll; //display status to the screen - manual debug only mode $ENABLE_WIFI=1; //enable eHouseWiFi Processing $ENABLE_ALL_WIFI_FULL_DECODE=$decode; //ENABLE eHouseWiFi Full Decode of oll controllers $ENABLE_WIFI_FULL_DECODE=$decode; //Enable eHouseWiFi Full Decode $DEBUG_ONE=$debugAll; //display status to the screen - manual debug only mode $ENABLE_ONE=1; $ENABLE_ALL_ONE_FULL_DECODE=$decode; //ENABLE eHouseOne Full Decode of oll controllers $ENABLE_ONE_FULL_DECODE=$decode; //Enable eHouseOne Full Decode $ENABLE_CAN=0; //for B2B/E2E partners only $ENABLE_RF=0; //for B2B/E2E partners only $ENABLE_GSM=0; //for B2B/E2E partners only $ENABLE_LoRaWAN=0; //for B2B/E2E partners only $MAX_EHOUSE_ONE=20; //controllers limit for optimal processing $MAX_EHOUSE_LAN=15; $MAX_EHOUSE_WIFI=100; $INITIAL_LAN_ADDR=200; //EHM-200 ,ERM 201..,EPM 249, CM/LM 250..253 $INITIAL_WIFI_ADDR=200; //index $INITIAL_WIFI_ADDR-addrL $tottime=-microtime(true); $decodeprotime=-microtime(true); //Load Decoders for each system variant if ($ENABLE_LAN) { //eHouse LAN Decoder if (file_exists("eHouseLanDecoder.php")) include_once("eHouseLanDecoder.php"); } if ($ENABLE_WIFI) { //eHouse WIFI Decoder if (file_exists("eHouseWiFiDecoder.php")) include_once("eHouseWiFiDecoder.php"); } if ($ENABLE_PRO_SATEL) { //eHouse PRO (central) and Satel Integra Decoder if (file_exists("eHouseProDecoder.php")) include_once("eHouseProDecoder.php"); } if ($ENABLE_CAN) { //eHouse CAN Decoder if (file_exists("eHouseCanDecoder.php")) include_once("eHouseCanDecoder.php"); } if ($ENABLE_RF) { //eHouse RF Decoder if (file_exists("eHouseRfDecoder.php")) include_once("eHouseRfDecoder.php"); } if ($ENABLE_ONE) { //eHouse ONE Decoder (RS485/422) if (file_exists("eHouseOneDecoder.php")) include_once("eHouseOneDecoder.php"); } $eHouseLan=array(); //store arrays with indexes = $AddrL-$INITIAL_LAN_ADDR $LanAddrLow=array(); //we store LSB for eHouse.LAN controller here $eHouseWiFi=array(); //store arrays with indexes = $AddrL-$INITIAL_WIFI_ADDR $WiFiAddrLow=array(); //we store LSB for eHouse.WiFi controller here $eHouseRf=array(); //store arrays with indexes = $AddrL $LanAddrRf=array(); //we store LSB for eHouse.RF controller here $eHouseOne=array(); //store arrays with indexes = $AddrL (for RM, 0 for HM, MAX_EHOUSE_ONE for EM) $OneAddrLow=array(); //we store LSB for eHouse.One controller here $OneAddrHigh=array(); //we store MSB for eHouse.One controller here for ($i=0;$i<=$MAX_EHOUSE_LAN;$i++) //empty initialization { $eHouseLan[$i]=NULL; $LanAddrLow[$i]=0; } for ($i=0;$i<=$MAX_EHOUSE_WIFI;$i++) //empty initialization { $eHouseWiFi[$i]=NULL; $WiFiAddrLow[$i]=0; } for ($i=0;$i<=$MAX_EHOUSE_ONE;$i++) //empty initialization { $eHouseOne[$i]=NULL; $OneAddrLow[$i]=0; $OneAddrHigh[$i]=0; } $status=array("","",""); $eHousePro = NULL; //we support only one eHouse.PRO (local) $k=0; if ($argc>1) { $decode=1; //disable all controllers full decoding - we will process all necesarry signals manualy @ onChangeEvent - as fast as possible $debugTime=0; //display time for testing - statuses must be copied locally into status array $debugAll=1; //production environment no debuging info $ProcessChangedOnly=1; //we only process changed statuses marked with * $DEBUG_PRO=$debugAll; //display and write status - manual debug only mode $ENABLE_PRO_SATEL=1; //enable ehouse.pro + satel decoding $ENABLE_PRO_FULL_DECODE=$decode; //enable full decoding for pro/satel $DEBUG_LAN=$debugAll; //display status to the screen - manual debug only mode $ENABLE_LAN=1; //enable eHouseLan Processing $ENABLE_ALL_LAN_FULL_DECODE=$decode; //ENABLE eHouseLan Full Decode of oll controllers $ENABLE_LAN_FULL_DECODE=$decode; //Enable eHouseLan Full Decode $DEBUG_WIFI=$debugAll; //display status to the screen - manual debug only mode $ENABLE_WIFI=1; //enable eHouseWiFi Processing $ENABLE_ALL_WIFI_FULL_DECODE=$decode; //ENABLE eHouseWiFi Full Decode of oll controllers $ENABLE_LAN_WIFI_DECODE=$decode; //Enable eHouseWiFi Full Decode $DEBUG_ONE=$debugAll; //display status to the screen - manual debug only mode $ENABLE_ONE=1; $ENABLE_ALL_ONE_FULL_DECODE=$decode; //ENABLE eHouseOne Full Decode of oll controllers $ENABLE_ONE_FULL_DECODE=$decode; //Enable eHouseOne Full Decode for ($i=1;$i<$argc;$i++) { if ($ProcessChangedOnly) { if ((stripos($argv[$i],"*")!==FALSE)) // || (stripos($argv[$i],"|")!==FALSE)) {$status[$k++]=trim($argv[$i]);} } else { $status[$k++]=trim($argv[$i]); } } //ChangeDecode(); } else //debuging mode status copied from real results { $decode=1; //disable all controllers full decoding - we will process all necesarry signals manualy @ onChangeEvent - as fast as possible $debugTime=1; //display time for testing - statuses must be copied locally into status array $debugAll=1; //production environment no debuging info $ProcessChangedOnly=1; //we only process changed statuses marked with * $DEBUG_PRO=$debugAll; //display and write status - manual debug only mode $ENABLE_PRO_SATEL=1; //enable ehouse.pro + satel decoding $ENABLE_PRO_FULL_DECODE=$decode; //enable full decoding for pro/satel $DEBUG_LAN=$debugAll; //display status to the screen - manual debug only mode $ENABLE_LAN=1; //enable eHouseLan Processing $ENABLE_ALL_LAN_FULL_DECODE=$decode; //ENABLE eHouseLan Full Decode of oll controllers $ENABLE_LAN_FULL_DECODE=$decode; //Enable eHouseLan Full Decode $DEBUG_WIFI=$debugAll; //display status to the screen - manual debug only mode $ENABLE_WIFI=1; //enable eHouseWiFi Processing $ENABLE_ALL_WIFI_FULL_DECODE=$decode; //ENABLE eHouseWiFi Full Decode of oll controllers $ENABLE_LAN_WIFI_DECODE=$decode; //Enable eHouseWiFi Full Decode $DisplayToFilesOnlyPro=0; //we are debuging here we want all information available $DisplayToFilesOnlyWiFi=0; $DisplayToFilesOnlyLan=0; $DisplayToFilesOnlyOne=0; echo "PROCESSING DEMO DATA - For Real data please iterate all controller statuses for script arguments\r\n"; //$status[0]="FF55FF55003E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000441208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 B400C973000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000495230303032303000180019001A0301001900190019001900DC03FF001B03FF03FF03FF03FF03FF4501000080000000000000000000000000000000FF0F1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080D4F*"; //ethernet test $status[1]="B400C97314D70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049523030303230300017001800190301001800190018001900E103FF001A03FF03FF03FF03FF03FF4501000080000000000000000000000000000000FF0F1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080E39"; $status[2]="B400CA7314D700000000000000000000000000000000000000FF00FFCACD00FFCACDC7CAD3D4CACDC7CAFAF2C7CA00FF00FF00FF00FF00FF00000000000000004952303030323030C017C0180019C301001800190019001900E1F3FF001AC3FFC3FFC3FFC3FFC3FF4501003C80000000000000000000000000000000FF0F1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000082A6B*"; $status[3]="B400CB7314D700000000000000000000000000000000000000FF00FFE3E600FFCACDE3E6E6E9D3D6E0E3F9F1E0E300FF00FF00FF00FF00FF00000000000000004952303030323030C017C017001AC300001900180018001900E0F3FF001AC3FFC3FFC3FFC3FFC3FF450100BC80000000000000000000000000000000FF0F1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000082BED*"; $status[4]="B400CF7314D70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049523030303230300017001800190301001800190018001900E103FF001A03FF03FF03FF03FF03FF4501000080000000000000000000000000000000FF0F1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080E39"; $status[5]="B400CD7314D700000000000000000000000000000000000000FF00FFCACD00FFCACDC7CAD3D4CACDC7CAFAF2C7CA00FF00FF00FF00FF00FF00000000000000004952303030323030C017C0180019C301001800190019001900E1F3FF001AC3FFC3FFC3FFC3FFC3FF4501003C80000000000000000000000000000000FF0F1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000082A6B*"; $status[6]="B400CE7314D700000000000000000000000000000000000000FF00FFE3E600FFCACDE3E6E6E9D3D6E0E3F9F1E0E300FF00FF00FF00FF00FF00000000000000004952303030323030C017C017001AC300001900180018001900E0F3FF001AC3FFC3FFC3FFC3FFC3FF450100BC80000000000000000000000000000000FF0F1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000082BED*"; //wifi test $status[7]="16006573034B2030014403380A1464000A0A000002A2"; $status[8]="2A006673033A1F8A0133032700000000000A000000000000000000000000000000000000C200000F0321*"; $status[9]="2A00677303441FEC013D03315A145000010A000000000000000000000000000000000000C100013D048E*"; $status[10]=("2A00687303441FEC013D03315A145000010A000000000000000000000000000000000000C100013D048E"); $status[11]=("2A006973037621D5016E03625A145000050A000000000000000000000000000000000000C60001E205BB*"); //PRO $status[0]="FF55FF5500C8CD00AD00A900BF00B000B900BC00BB00000084000000D500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202400B02580FFFFEFFFFFBFFFD0FFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; //LAN (ERM1) $status[12]="B400C973000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D900D50018030A00DD00D900DD00DA00DE03FF00D903FF03FF03FF03FF03FF0000000080000000000000000000000000000000FF0F1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001091"; //HeatManager (HM) $status[13]="6D0101027502490280023D025A0255025902530252023302460260023C0245024E024518880001000000000000000000C008DE006DFEFE010173027502490280023D025A0255025902530252023302460260023C0245024E024518880001000000000000000000C008DE00000000*"; //RoomManagers (RM) $status[14]="6D370100000256025203FF03FF03FF03FF03FF0000000000FFFFFFFF0005000000000000000000000000000000000000000000006DFEFE37017300000256025203FF03FF03FF03FF03FF0000000000FFFFFFFF000500000000000000000000000000000000000000000000000000*"; $status[15]="6D370200810252024903FF03FC03FF03B9037C0810000071FFFFFFFF0018000000000000000000000000000000000000000000006DFEFE37027300810252024903FF03FC03FF03B9037C0810000071FFFFFFFF001800000000000000000000000000000000000000000000000000*"; $status[16]="6D370300000253023E03FF03FF03FF03FF03FF2000000000FFFFFFFF0000000000000000000000000000000000000000000000006DFEFE37037300000253023E03FF03FF03FF03FF03FF2000000000FFFFFFFF000000000000000000000000000000000000000000000000000000*"; $status[17]="6D3704000003FF03FF03FF03FF03FF03FF03FFE07F01100080FFFFFF0018000000000000000000000000000000000000000000006DFEFE370473000003FF03FF03FF03FF03FF03FF03FFE07F01100080FFFFFF001800000000000000000000000000000000000000000000000000*"; $status[18]="6D370503FE0262026403FD008900E201B903E80018000C00FFFFFFFF0000000000000000000000000000000000000000000000006DFEFE37057303FE0262026403FD008900E201B903E80018000C00FFFFFFFF000000000000000000000000000000000000000000000000000000*"; $status[19]="6D370600000266004003FF009103FF03FF03FF0000000000000000000018000000000000000000000000000000000000000000006DFEFE37067300000266004003FF009103FF03FF03FF000000000000000000001800000000000000000000000000000000000000000000000000*"; $status[20]="6D37070000025303FF03FF03FE03FF03FF03FE1130000000800000000000000000000000000000000000000000000000000000006DFEFE3707730000025303FF03FF03FE03FF03FF03FE113000000080000000000000000000000000000000000000000000000000000000000000*"; $status[21]="6D37080001025E03FF03FF03FF03FF03FF03FFF8FD000000FFFFFFFF0018000000000000000000000000000000000000000000006DFEFE3708730001025E03FF03FF03FF03FF03FF03FFF8FD000000FFFFFFFF001800000000000000000000000000000000000000000000000000*"; $status[22]="6D370A0000025C03FF03FF03FF03FF03FF03FF0000000000FFFFFFFF0018000000000000000000000000000000000000000000006DFEFE370A730000025C03FF03FF03FF03FF03FF03FF0000000000FFFFFFFF001800000000000000000000000000000000000000000000000000*"; $status[23]="6D370B0000025C025C03FF03FF03FF03FF03FFC103000000000000000000000000000000000000000000000000000000000000006DFEFE370B730000025C025C03FF03FF03FF03FF03FFC10300000000000000000000000000000000000000000000000000000000000000000000*"; //WiFi Controller $status[24]="2A006573039A233501910385506414000F0A000000000000000000000000000000000000C1002088055B"; //Aura Thermostat $status[25]="42810102AEB6410A0800CD010E540000000000000000000000000000000000000000000000000000000000000000000000BA1B000000000000000000000000130057"; $status[26]="428102000F5B21050800AD010F430000000000000000000000000000000000000000000000000000000000000000000000BB1D000000000000000000000000140A9D"; $status[27]="42810301313C4C040800A90000430000000000000000000000000000000000000000000000000000000000000000000000B21F00047E000000800000000000050AC6"; $status[28]="428104000F5B59050800BF0000430000000000000000000000000000000000000000000000000000000000000000000000BD1D000000000000000000000000050AFC"; $status[29]="4281050271D0BC0B0800B0010A430000000000000000000000000000000000000000000000000000000000000000000000A7190000000000000000000000000F00FF"; $status[30]="42810601313C21040800B90000430000000000000000000000000000000000000000000000000000000000000000000000A71F00007C000000100000000000050AFD"; $status[31]="42810701313C58040800BC0000430000000000000000000000000000000000000000000000000000000000000000000000A81F00007C000000100000000000050A7C"; $status[32]="42810801313C2A040800BB0000430000000000000000000000000000000000000000000000000000000000000000000000B21F00007C000000100000000000050A9F"; $status[33]="4281090271D9960B0800000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000005006C"; $status[34]="42810A0271D9860B08008400C8430000000000000000000000000000000000000000000000000000000000000000000000AB1A000000000000000000000000CD00D9"; $status[35]="42810B0271D99E0B080000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000500A6"; $status[36]="42810C0271D9A70B0800D5010A430000000000000000000000000000000000000000000000000000000000000000000000AF1A0000000000000000000000000F00F0"; $m=37; $status[$m++]="37,02,Ad,04,1020,1019,D=-1"; $status[$m++]="37,02,Ad,05,1022,1021,D=-1"; $status[$m++]="37,02,Ad,06,772,694,D=-78"; $status[$m++]="37,02,Te,02,14.2,14.7,d=0.5,*"; $status[$m++]="37,02,Te,04,225.4,224.9,d=-0.5,*"; $status[$m++]="37,02,Te,05,226.4,225.9,d=-0.5,*"; $status[$m++]="37,07,Ad,05,1023,1022,D=-1"; $status[$m++]="37,07,Ad,07,1021,1022,D=1"; $status[$m++]="37,07,Te,05,226.8,226.4,d=-0.4,*"; $status[$m++]="37,07,Te,07,225.9,226.4,d=0.5,*"; $status[$m++]="37,05,Ad,03,1022,1023,D=1"; $status[$m++]="37,05,Ad,06,838,903,D=65"; $status[$m++]="37,05,Ad,08,56,24,D=-32"; $status[$m++]="37,05,Te,03,226.4,226.8,d=0.4,*"; $status[$m++]="37,05,Te,08,-245.8,-261.4,d=-15.6,*"; $status[$m++]="37,08,Te,00,99.9,100.0,d=0.1,*"; $status[$m++]="00,65,An,00,917,918,D=1"; $status[$m++]="00,65,Te,00,39.4,39.5,d=0.1, "; $status[$m++]="00,c9,Ad,00,212,211,D=-1"; $status[$m++]="00,c9,Te,00,18.2,17.9,d=-0.3, "; $status[$m++]="01,01,Ad,03,573,574,D=1"; $status[$m++]="01,01,Ad,04,589,588,D=-1"; $status[$m++]="01,01,Ad,08,593,594,D=1"; $status[$m++]="01,01,Ad,0c,575,576,D=1"; $status[$m++]="01,01,Te,03,6.9,7.4,d=0.5,*"; $status[$m++]="01,01,Te,04,14.7,14.2,d=-0.5,*"; $status[$m++]="01,01,Te,08,16.7,17.2,d=0.5,*"; $status[$m++]="01,01,Te,0c,7.9,8.4,d=0.5,*"; } //////////////////////////////////////////////////////////////////////////////// // eHouse PRO + Satel Processing //////////////////////////////////////////////////////////////////////////////// $protime=-microtime(true); if ($ENABLE_PRO_SATEL) { for($i=0;$i1000) { $eHousePro=new eHouseProC(trim($sta)); $eHousePro->SATEL_ENABLED=0; //we can disable some devices we dont use $eHousePro->ALARM_ENABLED=1; $eHousePro->DIMMERS_ENABLED=0; $eHousePro->ADCS_ENABLED=1; $eHousePro->HALF_ADC=2; //if 1 all inputs taken if 2 => half (EHOUSE_PRO_MAX_ADC/HALF_ADC) $eHousePro->HALF_INPUTS=2; //if 1 all inputs taken if 2 => half (EHOUSE_PRO_MAX_INPUTS/HALF_INPUTS) $eHousePro->HALF_OUTPUTS=2; //if 1 all inputs taken if 2 => half (EHOUSE_PRO_MAX_OUTPUTS/HALF_OUTPUTS) $eHousePro->HALF_DIMMERS=2; //if 1 all dimmers taken if 2 => half (EHOUSE_PRO_MAX_DIMMERS/HALF_DIMMERS) $eHousePro->DisplayToFileOnly=$DisplayToFilesOnlyPro; $decodeprotime=-microtime(true); if ($ENABLE_PRO_FULL_DECODE) { $eHousePro->DecodeEhousePROStatus(); }//Decode full eHousePRO Status - don't use for very frequent runing (on data change or 0.1s cycle) if ((($DEBUG_PRO) && ($ENABLE_PRO_FULL_DECODE)) && (!$eHousePro->StatusDecoded)) {$eHousePro->DecodeEhousePROStatus();} if (($DEBUG_PRO) && ($eHousePro->StatusDecoded)) { $eHousePro->Display(); } $decodeprotime+=microtime(true); //$eHousePro->Display(); display break; //only one (local) eHouse.PRO status } } } $protime+=microtime(true); ///////////////////////////////////////////////////////////////////////////////// // eHouse LAN Processing //////////////////////////////////////////////////////////////////////////////// $lantime=-microtime(true); if ($ENABLE_LAN) {//eHouse LAN Decoder for ($i=0;$i=250) //CM/LM last indexes { $ind=$MAX_EHOUSE_LAN+$adrl-253; $eHouseLan[$ind]=new eHouseLanC($sta); $LanAddrLow[$ind]=$adrl; } if ($adrl==249) //EPM index 0 as not EHM yet { $ind=0; $eHouseLan[$ind]=new eHouseLanC($sta); $LanAddrLow[$ind]=$adrl; } if ($adrl<249) //ERM index>0 { $eHouseLan[$ind]=new eHouseLanC($sta); $LanAddrLow[$ind]=$adrl; } $eHouseLan[$ind]->DisplayToFileOnly=$DisplayToFilesOnlyLan; if (($DEBUG_LAN) || ($ENABLE_ALL_LAN_FULL_DECODE) && (!$eHouseLan[$ind]->StatusDecoded)) {$eHouseLan[$ind]->DecodeEhouseLanStatus();} if (($DEBUG_LAN) && ($eHouseLan[$ind]->StatusDecoded)) {$eHouseLan[$ind]->Display();} } } LanERM(); $lantime+=microtime(true); } ///////////////////////////////////////////////////////////////////////////////// // eHouse WiFi Processing ///////////////////////////////////////////////////////////////////////////////// $wifitime=-microtime(true); if ($ENABLE_WIFI) {//eHouse WIFI Decoder for ($i=0;$i$MAX_EHOUSE_WIFI) //last element of array { $ind=$MAX_EHOUSE_WIFI; $eHouseWiFi[$ind]=new eHouseWiFiC($sta); $WiFiAddrLow[$ind]=$adrl; } $eHouseWiFi[$ind]->DisplayToFileOnly=$DisplayToFilesOnlyWiFi; if (($DEBUG_WIFI) || ($ENABLE_ALL_WIFI_FULL_DECODE) && (!$eHouseWiFi[$ind]->StatusDecoded)) {$eHouseWiFi[$ind]->DecodeEhouseWiFiStatus();} if (($DEBUG_WIFI) && ($eHouseWiFi[$ind]->StatusDecoded)) {$eHouseWiFi[$ind]->Display();} } } WiFi(); $wifitime+=microtime(true); //WiFi1(201); //WiFi2(202); } /////////////////////////////////////////////////////////////////////////////////// // eHouse One (RS485/422) Processing /////////////////////////////////////////////////////////////////////////////////// $onetime=-microtime(true); if ($ENABLE_ONE) {//eHouse One Decoder for ($i=0;$i0 - already set index { } else { //errors or unknown controller types continue; } $eHouseOne[$ind]=new eHouseOneC($sta); $OneAddrHigh[$ind]=$adrh; $OneAddrLow[$ind]=$adrl; $eHouseOne[$ind]->DisplayToFileOnly=$DisplayToFilesOnlyOne; if (($DEBUG_ONE) || ($ENABLE_ALL_ONE_FULL_DECODE) && (!$eHouseOne[$ind]->StatusDecoded)) { $eHouseOne[$ind]->DecodeEhouseOneStatus(); } if (($DEBUG_ONE) && ($eHouseOne[$ind]->StatusDecoded)) { $eHouseOne[$ind]->Display(); } } } OneRM(); $onetime+=microtime(true); } ///////////////////////////////////////////////////////////////////////////////////////// // eHouse WiFi Processing /////////////// $exttime=-microtime(true); if ($ENABLE_WIFI) { } $exttime+=microtime(true); $tottime+=microtime(true); /////////////////////////////////////////////////////////////////////////////////////// //test if eHouse Lan AddrL status received return index or false /////////////////////////////////////////////////////////////////////////////////////// function OneAvail($addrH,$addrL) { global $MAX_EHOUSE_ONE,$OneAddrLow,$OneAddrHigh,$eHouseOne,$ENABLE_ONE; if ($ENABLE_ONE<1) {return FALSE;} for ($i=0;$i<=$MAX_EHOUSE_ONE;$i++) { if ($OneAddrLow[$i]!==$addrL) {continue;} if ($OneAddrHigh[$i]!==$addrH) {continue;} if ($eHouseOne[$i]===NULL) {return FALSE;} //non initiated status if (strlen($eHouseOne[$i]->TextStatus)===0) {return FALSE;} if ($eHouseOne[$i]->StatusReceived===0) {return FALSE;} return $i; } return FALSE; } /////////////////////////////////////////////////////////////////////////////////////// //test if eHouse Lan AddrL status received return index or false /////////////////////////////////////////////////////////////////////////////////////// function LanAvail($addrL) { global $MAX_EHOUSE_LAN,$LanAddrLow,$eHouseLan,$ENABLE_LAN; if ($ENABLE_LAN<1) {return FALSE;} for ($i=0;$i<=$MAX_EHOUSE_LAN;$i++) { if ($LanAddrLow[$i]!==$addrL) {continue;} if ($eHouseLan[$i]===NULL) {return FALSE;} //non initiated status if (strlen($eHouseLan[$i]->TextStatus)===0) {return FALSE;} if ($eHouseLan[$i]->StatusReceived===0) {return FALSE;} return $i; } return FALSE; } //////////////////////////////////////////////////////////////////////////////// function WiFiAvail($addrL) { global $MAX_EHOUSE_WIFI,$WiFiAddrLow,$eHouseWiFi,$ENABLE_WIFI; if ($ENABLE_WIFI<1) {return FALSE;} for ($i=1;$i<$MAX_EHOUSE_WIFI;$i++) { if ($WiFiAddrLow[$i]!==$addrL) {continue;} if ($eHouseWiFi[$i]===NULL) {return FALSE;} //non initiated status if (strlen($eHouseWiFi[$i]->TextStatus)===0) {return FALSE;} if ($eHouseWiFi[$i]->StatusReceived===0) {return FALSE;} return $i; } return FALSE; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Example Template for all eHouse LAN ERM we ignore wrong AddrL but want to keep each controller seperatelly function LanERM() { global $MAX_EHOUSE_LAN,$INITIAL_LAN_ADDR,$eHouseLan,$debug,$PM; for ($i=$INITIAL_LAN_ADDR+1;$i<$INITIAL_LAN_ADDR+$MAX_EHOUSE_LAN;$i++) //we dont process EPM and CM/LM here $ind in renge <1,MAX_EHOUSE_LAN-1> { $ind=LanAvail($i); if ($ind===FALSE) { $eHouseLan[$ind]=NULL; } //no status captured for Address Low } // Some examples to copy-paste - we name indexes to be easily recognized (ControlerIndex_Signal+NR) // we assume all numbers for I,O,ADC,Dimm starts from 0 if ($eHouseLan[1]!==NULL) //we've got received status of ERM1 (0,201) in class instance { $PM["ERM1_I10"] = $eHouseLan[1]->GetInStatus(10); // get input 10 (counting from 0) $PM["ERM1_O11"] = $eHouseLan[1]->GetOutStatus(11); // get output 11 (counting from 0) $PM["ERM1_D1"] = $eHouseLan[1]->GetDimmerStatus(1); // get Dimm 1 (counting from 0) $PM["ERM1_TH8"] = $eHouseLan[1]->GetTempHStatus(8); //get Temperature high threshold level reading from IR Panel (counting from 0) $PM["ERM1_TL8"] = $eHouseLan[1]->GetTempLStatus(8); //get Temperature low threshold level reading from IR Panel (counting from 0) $PM["ERM1_T"] = $eHouseLan[1]->GetMCP9700Status(8); //get Temperature high threshold level reading from IR Panel (counting from 0) $PM["ERM1_APRG"] = $eHouseLan[1]->GetADCProgramStatus(); //get Temperature low threshold level reading from IR Panel (counting from 0) $PM["ERM1_PRG"] = $eHouseLan[1]->GetProgramStatus(); //get Temperature low threshold level reading from IR Panel (counting from 0) } //////////////// if ($ind !== $adrl-$INITIAL_LAN_ADDR) {return;} //we process only RM //$i11=$eHouseLan[$ind]->GetInStatus(10); //example get Input[10] status //$o13=$eHouseLan[$ind]->GetOutStatus(12); //Get Binary Output Status 0...max ////// $Horn11=$eHouseLan[$ind]->GetHornStatus(10); //Get Binary Input activated Horn (Alarm) Status 0...max only CM/LM ////// $Warning11=$eHouseLan[$ind]->GetWarningStatus(10); //0...max only CM/LMeHouse ////// $Monitoring11=$eHouseLan[$ind]->GetMonitoringStatus(10); //0...max only CM/LM //$d1=$eHouseLan[$ind]->GetDimmerStatus(0); //Get Dimmer Status 0...max //$adc7=$eHouseLan[$ind]->GetADCStatus(6); //Get ADC Input Status 0...max //$adcH7=$eHouseLan[$ind]->GetAdcHStatus(6); //Get ADC HighLevel Status 0...max //adcL7=$eHouseLan[$ind]->GetAdcLStatus(6); //Get ADC LowLevel Status 0...max //$T11=$eHouseLan[$ind]->GetMCP9701Status(10); //Get MCP9701 temp sensor Status 0...max //// temperature sensor on IR panel //$T9=$eHouseLan[$ind]->GetMCP9700Status(8); //Get MCP9700 temp sensor Status 0...max //$TH9=$eHouseLan[$ind]->GetTempHStatus(8); //Get mcp9700 temp high level calculated 0...max //$TL9=$eHouseLan[$ind]->GetTempLStatus(8); //get mcp9700 temp low level calculated 0...max //$T6=$eHouseLan[$ind]->GetLM35Status(5); //Get LM35 temp sensor Status 0...max //// Light Sensor on IR Panel //$Light10=$eHouseLan[$ind]->GetInvPercentStatus(9); //Get ADC inverted scale Status 0...max //$Percent12=$eHouseLan[$ind]->GetPercentStatus(11); //Get ADC Percent Status 0...max //public function GetTempLMStatus($nr) //Get LM335 temp sensor Status 0...max //// //// Than process aquired variables, and launch any command //// eg: //if ((!$i11) && ($o13) && ($T9>$TH9)) $eHouseLan[$ind]->ExecCommand("00C90201000000000000"); //if ((adc7>adcH7) && ($o13)) $eHouseLan[$ind]->function ExecOut(12,1,1000); //if ($debug) {echo "\r\nprocessed $adrl\r\n";} } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Example Template for all eHouse LAN ERM we ignore wrong AddrL but want to keep each controller seperatelly //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function OneRM() { global $MAX_EHOUSE_ONE,$eHouseOne,$debug,$PM; for ($i=1;$i<$MAX_EHOUSE_ONE;$i++) //we dont process HM and EM//CM/LM here $ind in renge <1,MAX_EHOUSE_ONE-1> { $ind=OneAvail(55,$i); //55 is initial addr High for RMs if ($ind===FALSE) { $eHouseOne[$ind]=NULL; } //no status captured for Address Low } // Some examples to copy-paste - we name indexes to be easily recognized (ControlerIndex_Signal+NR) // we assume all numbers for I,O,ADC,Dimm starts from 0 if ($eHouseOne[1]!==NULL) //we've got received status of RM1 (55,1) in class instance { $PM["RM1_I10"] = $eHouseOne[1]->GetInStatus(10); // get input 10 (counting from 0) $PM["RM1_O11"] = $eHouseOne[1]->GetOutStatus(11); // get output 11 (counting from 0) $PM["RM1_D1"] = $eHouseOne[1]->GetDimmerStatus(1); // get Dimm 1 (counting from 0) $PM["RM1_T"] = $eHouseOne[1]->GetTempLMStatus(1); //get Temperature from T1 input (2nd ADC input) $PM["RM1_PRG"] = $eHouseOne[1]->GetProgramStatus(); //get Temperature low threshold level reading from IR Panel (counting from 0) } } //////////////////////////////////////////////////////////////////////////////////////// function WiFi() { global $MAX_EHOUSE_WIFI,$INITIAL_WIFI_ADDR,$eHouseWiFi,$debug,$PM; for ($i=$INITIAL_WIFI_ADDR+1;$i<$INITIAL_WIFI_ADDR+$MAX_EHOUSE_WIFI;$i++) //we process only $ind in renge <1,MAX_EHOUSE_WIFI-1> - we reserved 0 and MAX_EHOUSE_WIFI for special func { $ind=WiFiAvail($i); if ($ind===FALSE) { $eHouseWiFi[$ind]=NULL; } //no status captured for Address Low } // Some examples to copy-paste - we name indexes to be easily recognized (ControlerIndex_Signal+NR) // we assume all numbers for I,O,ADC,Dimm starts from 0 if ($eHouseWiFi[1]!==NULL) //we've got received status of eHouseWiFi1 (0,101) in class instance { $PM["W1_I1"] = $eHouseWiFi[1]->GetInStatus(1); // get input 1 (counting from 0) $PM["W1_O2"] = $eHouseWiFi[1]->GetOutStatus(2); // get output 2 (counting from 0) $PM["W1_D1"] = $eHouseWiFi[1]->GetDimmStatus(1); // get Dimm 1 (counting from 0) $PM["W1_T"] = $eHouseWiFi[1]->GetTempStatus(0); //get Temperature high threshold level reading (counting from 0) $PM["W1_TH"] = $eHouseWiFi[1]->GetTempHStatus(0); //get Temperature high threshold level reading (counting from 0) $PM["W1_TL"] = $eHouseWiFi[1]->GetTempLStatus(0); //get Temperature low threshold level reading (counting from 0) $PM["W1_RSSI"] = $eHouseWiFi[1]->GetRSSIStatus(); // get WiFi RSSI in -dBm - negative value } /////and so on for all WiFi controllers } ChangeDecode(); if ($debugTime) { echo "\r\n#Pro Decode: $decodeprotime"; echo "\r\n#Pro: $protime"; echo "\r\n#Lan: $lantime"; echo "\r\n#WiFi: $wifitime"; echo "\r\n#External: $exttime"; echo "\r\n#Total: $tottime\r\n"; //echo sizeof($bin); } //////////////////////////////////////////////////////////////////////////////// // // Processing Change state notifications // //////////////////////////////////////////////////////////////////////////////// function ChangeDecode() { global $status,$ChangeManagement; //echo "\r\n\r\n\r\n";echo "\r\n\r\n\r\n";echo "\r\n\r\n\r\n"; for ($i=0;$i')>1) { $ft=explode('->',$from_to); $from=floatval($ft[0]); $to=floatval($ft[1]); } else {continue;} * */ $delta=floatval(substr($strs[6],2,strlen($strs[6]))); $updated='0'; if (isset($strs[7])) {$updated=$strs[7];} $ChangeManagement[]=new Changes($AdrH,$AdrL,$field,$nr,$from,$to,$delta,$updated); } } ///////////////////////////////////////////////////////////////////////////////// //We store in the array of the class Changes from previous status (submited from eHouse.PRO) //combained for each controller decoded from text statuses /*Single Change Class*/ class Changes { public $AdrH=0; //Address High of Controller hex/integer public $AdrL=0; //Address Low of Controller public $Field=0; //Field Name (string coded) 2 bytes/chars public $Nr=0; //Nr of the field (0..max) public $From=0; //Previous Value public $To=0; public $delta=0; public $Updated=0; function __construct($AdrH,$AdrL,$field,$nr,$from,$to,$delta,$updated) { $this->AdrH=$AdrH; $this->AdrL=$AdrL; $this->Field=$field; $this->Nr=$nr; $this->From=$from; $this->To=$to; $this->delta=$delta; $this->Updated=$updated; //echo "\r\nl!!!!Adr:($this->AdrH,$this->AdrL)\tSignal:$this->Field\tNr:$this->Nr\tFrom=$this->From=>$this->To,\tDelta:$this->delta\r\n"; } } ?>