IP-Symcon Module Library
v1.0
|
00001 <? 00015 include_once "IPSLogger.ips.php"; 00016 include_once "IPSEDIP.class.php"; 00017 00018 $value = $_IPS['VALUE']; 00019 $registerId = $_IPS['INSTANCE']; 00020 00021 $buffer = RegVar_GetBuffer($registerId); 00022 if ($buffer <> '') { 00023 $value = $buffer.$value; 00024 RegVar_SetBuffer($registerId, ''); 00025 } 00026 00027 // Search Start of Message 00028 $stx = strlen($value)-1; 00029 for ($idx=0 ; $idx<strlen($value) ; $idx++) { 00030 if (ord(substr($value, $idx, 1))== 27) { 00031 $stx = $idx; 00032 } 00033 } 00034 00035 $message = substr($value, $stx); 00036 00037 // Logging 00038 $log = ''; 00039 for ($idx=0 ; $idx<strlen($value) ; $idx++) { 00040 $log .= ord(substr($value, $idx, 1)).','; 00041 } 00042 $log .= ', Message='; 00043 for ($idx=0 ; $idx<strlen($message) ; $idx++) { 00044 $log .= ord(substr($message, $idx, 1)).','; 00045 } 00046 IPSLogger_Inf(__file__, 'Received: '.$log); 00047 00048 00049 // Message beyond minimum Length 00050 if (strlen($message) < 4) { 00051 RegVar_SetBuffer($registerId, $message); 00052 IPSLogger_Inf(__file__, 'Message beyond minimum Length of 4'); 00053 return; 00054 } 00055 00056 $messageLength = ord(substr($message, 2,2)); 00057 00058 // Message beyond Message Length (esc cmd len data[]) 00059 if (strlen($message) < 3+$messageLength) { 00060 RegVar_SetBuffer($registerId, $message); 00061 IPSLogger_Inf(__file__, 'Message beyond Message Length of '.$messageLength); 00062 return; 00063 } 00064 00065 foreach ($EDIP_CONFIGURATION as $configId=>$configData) { 00066 if ($configData[EDIP_CONFIG_REGISTER]==$registerId) { 00067 $instanceClass = $configData[EDIP_CONFIG_CLASSNAME]; 00068 $instanceId = IPS_GetObjectIDByIdent($configId, EDIP_ID_PROGRAM); 00069 00070 $edip = new $instanceClass($instanceId); 00071 $edip->receiveText($message); 00072 } 00073 } 00074 00076 ?>