IP-Symcon Module Library  v1.0
IPSEDIP_Receive.ips.php
gehe zur Dokumentation dieser Datei
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 ?>