def on_message(self, io_msg): usage_values = json.loads(str( io_msg.contentdata.decode('utf-8')))["train_data"] validation_values = json.loads(str( io_msg.contentdata.decode('utf-8')))["validation_data"] np_usage_values = np.array(usage_values) nplen = float(len(np_usage_values)) mean = sum(np_usage_values) / nplen stdev = np.std(np_usage_values) print('data: mean: {} standard_dev: {}'.format(mean, stdev)) min_expected_val = float(mean) - 2 * float(stdev) max_expected_val = float(mean) + 2 * float(stdev) for i in range(0, 30): if validation_values[i] < min_expected_val or validation_values[ i] > max_expected_val: print('anomaly usage at {} for device {} with value {}'.format( i, io_msg.tag, validation_values[i])) local_msg = IoMessage() local_msg.tag = io_msg.tag global final_result final_result = '{"usage_data":[' + ",".join( map(str, validation_values)) + '],"anomaly_value":' + str( validation_values[i]) + ',"anomaly_step":' + str( i) + '}'
def simulate_seismic(): lock.acquire() config = current_config lock.release() if not config: print 'Config is empty...' return False time.sleep(config.get(FREQUENCY, DEFAULT_SLEEP_TIME) / 1000.) msg = IoMessage() msg.infotype = SEISMIC_JSON msg.infoformat = TEXT_UTF8 contentdata = { MOTION_X: random.uniform(config.get(MINIMUM_VALUE_X, DEFAULT_MINIMUM_VALUE), config.get(MAXIMUM_VALUE_X, DEFAULT_MAXIMUM_VALUE)), MOTION_Y: random.uniform(config.get(MINIMUM_VALUE_Y, DEFAULT_MINIMUM_VALUE), config.get(MAXIMUM_VALUE_Y, DEFAULT_MAXIMUM_VALUE)), MOTION_Z: random.uniform(config.get(MINIMUM_VALUE_Z, DEFAULT_MINIMUM_VALUE), config.get(MAXIMUM_VALUE_Z, DEFAULT_MAXIMUM_VALUE)) } contentdata = json.dumps(contentdata) msg.contentdata = bytearray(contentdata) client.post_message_via_socket(msg)
def sendIOMessage(type, data): try: client = IoFogClient() except IoFogException as e: #client creation failed, e contains description print(e) return -1 msg = IoMessage() msg.infotype = type msg.infoformat = type msgcontent = data msg.contentdata = msgcontent client.post_message_via_socket(msg)
def simulate_temperature(): lock.acquire() config = current_config lock.release() if not config: print 'Config is empty...' return False time.sleep(config.get(FREQUENCY, DEFAULT_SLEEP_TIME) / 1000.) msg = IoMessage() msg.infotype = TEMPERATURE msg.infoformat = DECIMAL_CELSIUS contentdata = json.dumps(random.uniform(config.get(MINIMUM_VALUE, DEFAULT_MINIMUM_VALUE), config.get(MAXIMUM_VALUE, DEFAULT_MAXIMUM_VALUE))) msg.contentdata = bytearray(contentdata) client.post_message_via_socket(msg)
def get_next_messages(self): try: next_messages_resp = make_post_request(self.url_get_next_messages, APPLICATION_JSON, self.request_body_id) except HTTPError as e: raise IoFogHttpException(e.code, e.read()) messages = [] for json_msg in next_messages_resp[MESSAGES]: messages.append(IoMessage.from_json(json_msg)) return messages
def transform_message(msg): lock.acquire() config = current_config lock.release() if not config: print 'Config is empty...' return None new_msg = None for selection in config.get(SELECTIONS, []): if msg.infotype == selection.get( INPUT_TYPE) and msg.infoformat == selection.get(INPUT_FORMAT): content_data = transform_content_data(msg.contentdata, selection.get(OUTPUTS, [])) new_msg = IoMessage() new_msg.infotype = str(selection.get(OUTPUT_TYPE, '')) new_msg.infoformat = str(selection.get(OUTPUT_FORMAT, '')) new_msg.contentdata = bytearray(content_data) return new_msg
def get_next_messages_from_publishers_within_timeframe(self, query): try: next_messages_resp = make_post_request(self.url_get_publishers_messages, APPLICATION_JSON, json.dumps(query)) except HTTPError as e: raise IoFogHttpException(e.code, e.read()) response = { TIME_FRAME_START: next_messages_resp[TIME_FRAME_START], TIME_FRAME_END: next_messages_resp[TIME_FRAME_END] } messages = [] for json_msg in next_messages_resp[MESSAGES]: messages.append(IoMessage.from_json(json_msg)) response[MESSAGES] = messages return response
def received_message(self, message): data = bytearray(message.data) opt_code = data[0] if opt_code == CODE_MSG: self.logger.debug('Received message') msg_data = data[5:] if len(msg_data) == 0: return msg = IoMessage.from_bytearray(msg_data) self.send(bytearray([CODE_ACK]), binary=True) self.listener.on_message(msg) elif opt_code == CODE_RECEIPT: self.logger.debug('Received receipt') receipt_data = data[1:] if len(receipt_data) == 0: return id_len = receipt_data[0] ts_len = receipt_data[1] pos = 2 message_id = str(receipt_data[pos:pos + id_len]) pos += id_len timestamp = util.bytearray_to_num(receipt_data[pos:pos + ts_len]) self.send(bytearray([CODE_ACK]), binary=True) self.listener.on_receipt(message_id, timestamp)
def build_message(): msg = IoMessage() msg.infotype = "infotype" msg.infoformat = "infoformat" msg.contextdata = "" msg.tag = "tag" msg.groupid = "groupid" msg.authid = "authid" msg.authgroup = "authgroup" msg.hash = "hash" msg.previoushash = "previoushash" msg.nonce = "nonce" return msg