STATUPDATE_ANY, "mcu_state" => 0x0000, // batteries are undefined "mcu_local_state" => MCULOC_INIT_DONE, // "mcu_persistent" => 0xBB00, // batteries, 3.6V LiIon "t" => json_get_object($gateway, "date_time") ); // Get fixed GPS position $gps = db_fetch_cache($db_gateway['id'], "gps"); if( $gps ) { $status['gps_mode'] = 'init'; $status['speed'] = 0.0; $status = array_merge($status, $gps); } // Update time stamp in "log_realtime" db_store_log_rt($db_gateway['id'], $status); // Handle the sensors (if any) $sensors = json_get_object($json, "sensors"); if( $sensors ) { foreach( $sensors as $sensor ) { // Get sensor from the database if( !($db_sensor = db_fetch_imei(json_get_object($sensor, "address"), NULL)) ) { return vitelec_error("Unknown sensor, address " . json_get_object($sensor, "address")); } $db_sensor = $db_sensor[0]; $device = db_fetch_system_devices(NULL, $db_sensor['device']); $db_sensor['threshold_t_ext1'] = $device[0]['threshold_t_ext1']; $db_sensor['threshold_t_ext2'] = $device[0]['threshold_t_ext2']; // global information about the sensor $batt_lvl = json_get_object($sensor, "battery_level"); foreach( json_get_object($sensor, "messages") as $message ) { $t = json_get_object($message, "date"); $status = array( "changes" => STATUPDATE_ANY, "mcu_state" => 0x7000, // battery #2 not supported "mcu_local_state" => MCULOC_INIT_DONE,// "mcu_persistent" => 0xBB00, // batteries, 3.6V LiIon "wcpu_state" => 0, // "t" => $t, // "gsm_rssi" => json_get_object($message, "message_rssi"), "gsm_berr" => 0 ); // Get fixed GPS position $gps = db_fetch_cache($db_sensor['id'], "gps"); if( $gps ) { $status['gps_mode'] = 'init'; $status['speed'] = 0.0; $status = array_merge($status, $gps); } // battery level $status['batt_sel'] = 0; $status['batt1_niveau'] = $batt_lvl / 1000.0; if( $batt_lvl < 3200 ) $status['mcu_state'] |= MCUSTAT_BATTERY1_LOW; if( $batt_lvl < 3000 ) $stauts['mcu_state'] |= MCUSTAT_BATTERY1_CRITICAL; $sensor_data = json_get_object($message, "data"); foreach( $sensor_data as $key => $item ) { switch( $key ) { case "0": $T = json_get_object($item, "value") / 10.0; $status["temp_onboard"] = $T; $major = MAJ_TEMP; $minor = MIN_TEMP_ONBOARD; if( $T >= $db_sensor['threshold_t_ext2'] ) $status['wcpu_state'] |= WCPUERR_TEMP_EXT2; break; case "1": $T = json_get_object($item, "value") / 10.0; $status["temp_ntc"] = $T; $major = MAJ_TEMP; $minor = MIN_TEMP_EXT1; if( $T >= $db_sensor['threshold_t_ext1'] ) $status['wcpu_state'] |= WCPUERR_TEMP_EXT1; break; default: // not supported continue; } // Add to "log_zkl" db_store_log_zkl($db_sensor['id'], array(0,0), $t, $major, $minor, $T); } // Add to "log_realtime" db_store_log_rt($db_sensor['id'], $status); db_store_cache($db_sensor['id'], "status", $status); } } } // Success return vitelec_success(); } function vitelec_success() { echo "{\n"; echo " \"Result\": {\n"; echo " \"Status\": \"OK\"\n"; echo " }\n"; echo "}\n"; return TRUE; } function vitelec_error($msg) { echo "{\n"; echo " \"Result\": {\n"; echo " \"Status\": \"ERROR\",\n"; echo " \"Message\": \"" . $msg . "\"\n"; echo " }\n"; echo "}\n"; DBG("Vitelec SenseConnect: ERROR: " . $msg); return FALSE; } ?>