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; }
/** * 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); } } } } }