Ejemplo n.º 1
0
 public static function addNew($msg, $listener_id, $rewrite_prev_values, $source = '', $station_id = 0, $source_info = null)
 {
     $message_obj = new ListenerLog();
     $message_obj->listener_id = $listener_id;
     $message_obj->message = $msg;
     $message_obj->is_processed = 0;
     $message_obj->rewrite_prev_values = $rewrite_prev_values;
     $message_obj->source = $source;
     $message_obj->source_info = $source_info;
     $message_obj->station_id = $station_id;
     $message_obj->save();
     return $message_obj->log_id;
 }
Ejemplo n.º 2
0
 /**
  * parses message and adds parsed values to database
  */
 function logMessage()
 {
     $this->_logger->log(__METHOD__);
     if ($this->_station->timezone_id) {
         TimezoneWork::set($this->_station->timezone_id);
         //            TimezoneWork::setReverse($this->_station->timezone_id);
     }
     // saves measuring timestamp
     $measuring_timestamp = mktime(substr($this->_tx_time, 0, 2), substr($this->_tx_time, 2, 2), 0, substr($this->_tx_date, 2, 2), substr($this->_tx_date, 4, 2), substr($this->_tx_date, 0, 2));
     //        if ($this->_station->timezone_id){
     //            $measuring_timestamp = TimezoneWork::setTimeByLocalTz($this->_station->timezone_id,$measuring_timestamp);
     //        }
     $this->message_obj->measuring_timestamp = date('Y-m-d H:i:s', $measuring_timestamp);
     $this->_logger->log(__METHOD__ . " measuring_timestamp: " . $measuring_timestamp);
     $this->_logger->log(__METHOD__ . " date: " . $this->message_obj->measuring_timestamp);
     $this->message_obj->save();
     // there are different ways to parse LOG message and REGULAR message
     if ($this->_message_type === 'rg_log') {
         // LOG provides us with info from only 1 sensor (however RG station can have more sensors)
         $sensor_info = $this->getFirstRGSensor();
         if ($sensor_info !== false) {
             $save_data_params = array('listener_log_id' => $this->message_obj->log_id, 'rewrite_prev_values' => $this->message_obj->rewrite_prev_values, 'battery_voltage' => $this->rg_battery_voltage, 'sensor' => $sensor_info['sensor'], 'sensor_features' => $sensor_info['features']);
             // create object of sensor handler
             $handler_obj = SensorHandler::create('RainRgLog');
             // parse part of message which is going just after sensor ID.
             // prepare data pairs basing on this string
             $res = $handler_obj->prepareDataPairs($this->_body, $measuring_timestamp, $sensor_info['features']);
             if ($res === false) {
                 $this->pushWarning('incorrect_sensor_value_format', 'Handler ' . $sensor_info['sensor']->sensor_id_code . ' can not get data from "' . $this->_body . '"');
                 //continue;
             }
             // save prepared sensor's data
             $handler_obj->saveDataPairs($save_data_params);
         }
     } else {
         // parse body into pairs SensorId::DataString
         $message_sensors_strings = $this->parseSensorsValues($this->_body);
         if (is_array($message_sensors_strings) && count($message_sensors_strings) > 0) {
             $save_data_params = array('listener_log_id' => $this->message_obj->log_id, 'rewrite_prev_values' => $this->message_obj->rewrite_prev_values, 'battery_voltage' => $this->rg_battery_voltage);
             foreach ($message_sensors_strings as $message_sensor_string) {
                 // get sensor's info by sensor ID code
                 $sensor_info = $this->getSensorInfo($message_sensor_string[0]);
                 if (!is_null($sensor_info)) {
                     $save_data_params['sensor'] = $sensor_info['sensor'];
                     $save_data_params['sensor_features'] = $sensor_info['features'];
                     // create object of sensor handler
                     $handler_obj = SensorHandler::create($sensor_info['sensor']->handler->handler_id_code);
                     $handler_obj->loadAWSFormat($this->_station->aws_format);
                     // parse string coming after sensor ID into data pairs (feature:value)
                     $res = $handler_obj->prepareDataPairs($message_sensor_string[1], $measuring_timestamp, $sensor_info['features']);
                     if ($res === false) {
                         $this->pushWarning('incorrect_sensor_value_format', 'Handler ' . $message_sensor_string[0] . ' can not get data from "' . $message_sensor_string[1] . '"');
                         continue;
                     }
                     // save features values
                     $handler_obj->saveDataPairs($save_data_params);
                     // some actions can be done after data is saved (depends on handler)
                     $handler_obj->afterDataPairsSaved($save_data_params);
                 }
             }
         }
     }
 }