def build_status_msg(status, status_topic): msg = mqttc.MQTTMessage(topic=str.encode(status_topic)) msg.payload = status msg.qos = 1 msg.retain = True msg.properties = None return msg
def internal2mqtt(self, internal_msg): ''' Converts an internal message into a MQTT one. Args: internal_msg (an internalMsg object): the message to convert Returns: a MQTTMessage object: a full MQTT message where topic syntax is ``root/function/gateway/location/device/sender/{C or S}`` and payload syntax is either a plain action or a query string. Raises: ValueError: in case a token conversion fails ''' mqtt_function = self.maps.function.i2m(internal_msg.function) mqtt_gateway = self.maps.gateway.i2m(internal_msg.gateway) mqtt_location = self.maps.location.i2m(internal_msg.location) mqtt_device = self.maps.device.i2m(internal_msg.device) mqtt_sender = self.maps.sender.i2m(internal_msg.sender) if not mqtt_sender: mqtt_sender = self._sender mqtt_action = self.maps.action.i2m(internal_msg.action) mqtt_args = {} if internal_msg.arguments is not None: for key, value in internal_msg.arguments.iteritems(): mqtt_args[self.maps.argkey.i2m(key)] = self.maps.argvalue.i2m( value) # Generate topic topic = '/'.join( (self.root, mqtt_function, mqtt_gateway, mqtt_location, mqtt_device, mqtt_sender, 'C' if internal_msg.iscmd else 'S')) # Generate payload #======================================================================================== if not mqtt_args: # no arguments, just publish the action text on its own payload = mqtt_action else: # there are arguments, publish them mqtt_args['action'] = mqtt_action try: payload = json.dumps(mqtt_args) except (ValueError, TypeError) as err: raise ValueError(''.join( ('Error serialising arguments:\n\t', repr(err)))) #=== OLD VERSION AS QUERY STRINGS ====================================================== # stringlist = ['action=', mqtt_action] # for arg in internal_msg.arguments: # stringlist.extend(['&', arg, '=', internal_msg.arguments[arg]]) # payload = ''.join(stringlist) #======================================================================================= mqtt_msg = mqtt.MQTTMessage() mqtt_msg.topic = topic mqtt_msg.payload = payload mqtt_msg.qos = 0 mqtt_msg.retain = False return mqtt_msg
def mock_storage_message(): message = mqtt.MQTTMessage() message.topic = b"storage" message.payload = bytes(json.dumps( {"data": { "value": random.randint(0, 100) }}), encoding='utf8') return message
def send_message(): client = mqtt.Client() client.connect("iot.eclipse.org", 1883, 60) message = mqtt.MQTTMessage() message.payload = "Something Interesting Happened" client.publish("iox/test", message) client.disconnect()
def state_change(self, new_status) -> None: """Trigger a state change.""" data = { "msg": "STATE-CHANGE", "time": mqtt_time(), } data.update(new_status) message = mqtt.MQTTMessage(topic=self._status_topic.encode("utf-8")) message.payload = json.dumps(data).encode("utf-8") self.on_message(self, None, message)
def setUp(self): ''' ''' import paho.mqtt.client as mqtt self.mqtt = mqtt # self.base_topic = forwarder.BASE_TOPIC topic = b"" mid = 0 self.message = mqtt.MQTTMessage(mid, topic) self.message.payload = b"" forwarder.incoming_queue = []
def test_locust_on_message(self, mock_utils, _mock_paho, mock_json): """ Should fire locust sucess on message callback """ message: mqtt.MQTTMessage = mqtt.MQTTMessage() message.payload = str.encode(str({"timestamp": 0})) mock_json.loads.return_value = {"timestamp": 0} client = MQTTClient("123", "987", False, False) client.locust_on_message(client.mqttc, {}, message) mock_utils.fire_locust_success.assert_called_once()
def send_rpc_request(self, dest_tag, source_tag, method, params, listener): msg = mqtt.MQTTMessage() topic = dest_tag + "/" + source_tag + "/request" msg.topic = topic.encode('utf-8') method_id = str(self._jrpc_id) msg.payload = '{"jsonrpc":"2.0", "method":"%s", "params":%s,"id":"%s"}' % ( method, params, method_id) self._jrpc_id += 1 s = RpcSession(self.context, msg, listener) self._rpc_sessions[s.session_tag] = s s.send_request()
def internal2mqtt(self, internal_msg): ''' Converts an internal message into a MQTT one. Args: internal_msg (:class:`internalMsg`): the message to convert Returns: a MQTTMessage object: a full MQTT message where topic syntax is ``root/function/gateway/location/device/sender/{C or S}`` and payload syntax is either a plain action or a JSON string. Raises: ValueError: in case a token conversion fails ''' mqtt_function = self.maps.function.i2m(internal_msg.function) mqtt_gateway = self.maps.gateway.i2m(internal_msg.gateway) mqtt_location = self.maps.location.i2m(internal_msg.location) mqtt_device = self.maps.device.i2m(internal_msg.device) mqtt_sender = self.maps.sender.i2m(internal_msg.sender) if not mqtt_sender: mqtt_sender = self._sender mqtt_action = self.maps.action.i2m(internal_msg.action) mqtt_args = {} for (key, value) in internal_msg.arguments.items(): mqtt_args[self.maps.argkey.i2m(key)] = self.maps.argvalue.i2m( value) # Generate topic topic = '/'.join( (self.root, mqtt_function, mqtt_gateway, mqtt_location, mqtt_device, mqtt_sender, 'C' if internal_msg.iscmd else 'S')) # Generate payload if not mqtt_args: # no arguments, just publish the action text on its own payload = mqtt_action else: # there are arguments, publish them if mqtt_action: mqtt_args[ 'action'] = mqtt_action # add action only if not empty try: payload = json.dumps(mqtt_args) except (ValueError, TypeError) as err: raise ValueError(''.join( ('Error serialising arguments:\n\t', str(err)))) mqtt_msg = mqtt.MQTTMessage() mqtt_msg.topic = topic.encode('utf-8') mqtt_msg.payload = payload.encode('utf-8') mqtt_msg.qos = 0 mqtt_msg.retain = False return mqtt_msg
def test_event_from_unconfigured_sensor_id(self): self.mqtt_msg = mqtt.MQTTMessage(mid=0, topic=b'meshliumf958/SCP5/TC') self.mqtt_msg.payload = ( '{\r\n "id": "186897",\r\n "id_wasp": "SCP5", \r\n ' '"id_secret": "751C67057C105442",\r\n ' '"sensor": "TC",\r\n "value": "25.6",\r\n ' '"timestamp": "2018-07-19T11:01:41+03:00"\r\n}').encode() self.mqtt_msg.payload = self.mqtt_msg.payload self.formatted_timestamp = '1531987301' self.mqtt_adapter.on_message(client=self.mqtt_client, userdata=None, msg=self.mqtt_msg) meta = {SmartObject.MetadataField.Timestamp: self.formatted_timestamp} assert_that(self.servant.notify, is_not(called()))
def onSnipsIntentParsed(self, client, data, msg: mqtt.MQTTMessage): sessionId = self.Commons.parseSessionId(msg) session = self.DialogSessionManager.getSession(sessionId=sessionId) if session: session.update(msg) self.broadcast(method=constants.EVENT_INTENT_PARSED, exceptions=[self.name], propagateToSkills=True, session=session) if session.isAPIGenerated: intent = Intent(session.payload['intent']['intentName']) message = mqtt.MQTTMessage(topic=str.encode(str(intent))) message.payload = json.dumps(session.payload) self.onMqttMessage(client=client, userdata=data, message=message)
def onSnipsIntentParsed(self, client, data, msg: mqtt.MQTTMessage): sessionId = commons.parseSessionId(msg) session = self.DialogSessionManager.getSession(sessionId=sessionId) if session: session.update(msg) SuperManager.getInstance().broadcast(method='onIntentParsed', exceptions=[self.name], propagateToModules=True, session=session) if self.ConfigManager.getAliceConfigByName( 'asr').lower() != 'snips': intent = Intent( session.payload['intent']['intentName'].split(':')[1]) message = mqtt.MQTTMessage(topic=str.encode(str(intent))) message.payload = json.dumps(session.payload) self.onMessage(client=client, userdata=data, message=message)
def intentParsed(self, client, data, msg: mqtt.MQTTMessage): sessionId = self.Commons.parseSessionId(msg) session = self.DialogManager.getSession(sessionId=sessionId) if session: session.update(msg) intent = Intent(session.payload['intent']['intentName']) if str(intent) in self._deactivatedIntents: # If the intent was deactivated, let's try the next possible alternative, if any alternative = dict() if 'alternatives' in session.payload: for alt in session.payload['alternatives']: if str( Intent(alt["intentName"]) ) in self._deactivatedIntents or alt[ 'confidenceScore'] < self.ConfigManager.getAliceConfigByName( 'probabilityThreshold'): continue alternative = alt break if alternative: self.broadcast(method=constants.EVENT_INTENT_PARSED, exceptions=[self.name], propagateToSkills=True, session=session) intent = Intent(alternative['intentName']) payload = session.payload payload['slots'] = alternative['slots'] else: payload = session.payload message = mqtt.MQTTMessage(topic=str.encode(str(intent))) message.payload = json.dumps(payload) self.onMqttMessage(_client=client, _userdata=data, message=message) else: self.broadcast(method=constants.EVENT_INTENT_PARSED, exceptions=[self.name], propagateToSkills=True, session=session)
def publish(self, topic: str, payload: str, qos: int = 0) -> None: """Publish to a topic.""" assert topic == self._command_topic assert self._subscribed payload = json.loads(payload) message_type = payload["msg"] if message_type == "REQUEST-CURRENT-STATE": data = {"msg": "CURRENT-STATE"} data.update(self._status) elif message_type == "REQUEST-PRODUCT-ENVIRONMENT-CURRENT-SENSOR-DATA": data = {"msg": "ENVIRONMENTAL-CURRENT-SENSOR-DATA"} data.update(self._environmental_data) else: self.commands.append(payload) return message = mqtt.MQTTMessage(topic=self._status_topic.encode("utf-8")) data["time"] = mqtt_time() message.payload = json.dumps(data).encode("utf-8") self.on_message(self, None, message)
def test_get_event_with_value_and_timestamp(self): # get an event from IceStorm originated in mqtt broker self.mqtt_msg = mqtt.MQTTMessage(mid=0, topic=b'meshliumf958/SCP4/TC') self.mqtt_msg.payload = ( '{\r\n "id": "186897",\r\n "id_wasp": "SCP4", \r\n ' '"id_secret": "751C67057C105442",\r\n ' '"sensor": "TC",\r\n "value": "25.6",\r\n ' '"timestamp": "2018-07-19T11:01:41+03:00"\r\n}').encode() self.mqtt_msg.payload = self.mqtt_msg.payload self.formatted_timestamp = '1531987301' self.mqtt_adapter.on_message(client=self.mqtt_client, userdata=None, msg=self.mqtt_msg) meta = {SmartObject.MetadataField.Timestamp: self.formatted_timestamp} assert_that( self.servant.notify, called().with_args(close_to(25.6, 0.000001), 'FF00000100000023', meta, anything()). async (timeout=2))
def main(): # 创建MQTT客户端 client = mqtt.Client(client_id="iot-publisher", clean_session=True, userdata=None, protocol="MQTTv311") # 配置MQTT客户端 client.tls_insecure_set(False) client.tls_set(CA_CERT) client.username_pw_set(USERNAME, PASSWORD) # 配置回调函数 client.on_connect = onConnect client.on_publish = onPublish client.on_disconnect = onDisconnect # 连接到百度IoT服务端 client.connect(host=ENDPOINT, port=PORT) client.loop_start() # 向指定的主题发布10条消息, 内容分别为数值: 1, 2, 3, ..., 10, 每条消息之间的发送时间间隔为1秒. for count in range(1, 11): time.sleep(1) message = mqtt.MQTTMessage() message.topic = TOPIC message.payload = count message.qos = 1 resultCode, messageId = client.publish(topic=message.topic, payload=message.payload, qos=message.qos) message.mid = messageId publishedMessages[messageId] = message # 与百度IoT服务端断开连接 client.loop_stop() client.disconnect()
def test_locust_on_message(self, mock_utils, mock_logging, mock_cert_client, paho_mqtt_mock, json_mock): """ Should fire locust sucess on message callback """ message: mqtt.MQTTMessage = mqtt.MQTTMessage() message.payload = str.encode(str({"timestamp": 0})) json_mock.loads.return_value = {"timestamp": 0} client = MQTTClient("123", "987", False, False) MQTTClient.locust_on_message(client.mqttc, {}, message) mock_utils.fire_locust_success.assert_called_once() mock_utils.time_delta.assert_called_once() mock_utils.reset_mock() mock_logging.reset_mock() mock_cert_client.reset_mock() paho_mqtt_mock.reset_mock() json_mock.reset_mock()
def test_event_from_unconfigured_sensor_magnitude(self): self.icestorm_topic_name_unconfigured = "Unconfigured" self.servant_unconfigured = Mimic(Spy, SmartObject.AnalogSink) self.proxy_unconfigured = self._adapter_add(self.servant_unconfigured) self._subscribe(self.icestorm_topic_name_unconfigured, self.proxy_unconfigured) self.mqtt_msg = mqtt.MQTTMessage(mid=0, topic=b'meshliumf958/SCP4/HUM') self.mqtt_msg.payload = ( '{\r\n "id": "186897",\r\n "id_wasp": "SCP4", \r\n ' '"id_secret": "751C67057C105442",\r\n ' '"sensor": "HUM",\r\n "value": "25.6",\r\n ' '"timestamp": "2018-07-19T11:01:41+03:00"\r\n}').encode() self.mqtt_msg.payload = self.mqtt_msg.payload self.formatted_timestamp = '1531987301' self.mqtt_adapter.on_message(client=self.mqtt_client, userdata=None, msg=self.mqtt_msg) meta = {SmartObject.MetadataField.Timestamp: self.formatted_timestamp} assert_that(self.servant_unconfigured.notify, is_not(called()))
def publish_telemetry(self): """Publish telmetry once to simulate the behaviour of an MQTT server. """ for hvac_topic in self.hvac_topics: topic, variable = self.xml.extract_topic_and_item(hvac_topic) topic_enabled = self.topics_enabled[topic] topic_type = self.hvac_topics[hvac_topic]["topic_type"] idl_type = self.hvac_topics[hvac_topic]["idl_type"] limits = self.hvac_topics[hvac_topic]["limits"] value = None if topic_enabled: if hvac_topic in self.configuration_values.keys(): value = self.configuration_values[hvac_topic] elif topic_type == "READ": if idl_type == "boolean": value = True # Making sure that no alarm bells start ringing. if "ALARM" in variable: value = False elif ( idl_type == "float" and limits[0] is None and limits[1] is None ): value = 0.0 else: value = random.randint(10 * limits[0], 10 * limits[1]) / 10.0 else: if topic_type == "READ": if idl_type == "boolean": value = False if value is not None: msg = mqtt.MQTTMessage(topic=hvac_topic.encode()) msg.payload = json.dumps(value) self.msgs.append(msg)
def message(self): message = mqtt.MQTTMessage(mid=fake_mid, topic=fake_topic.encode()) message.payload = fake_payload message.qos = fake_qos return message
def message(topic, payload=None): msg = mqttc.MQTTMessage(topic=topic.encode('utf-8')) if payload is not None: msg.payload = payload return msg
def test_message(db): msg = mqtt.MQTTMessage() msg.payload = """{"app_id":"meet-je-stad","dev_id":"50","hardware_serial":"0000000000000032","port":10,"counter":0,"is_retry":true,"payload_raw":"AAAAAAAAEZP4580=","metadata":{"time":"2017-03-21T10:42:18.464710851Z","frequency":867.1,"modulation":"LORA","data_rate":"SF9BW125","coding_rate":"4/5","gateways":[{"gtw_id":"eui-1dee0b64b020eec4","timestamp":1862821700,"time":"","channel":3,"rssi":-120,"snr":-8.2},{"gtw_id":"eui-1dee1cc11cba7539","timestamp":3425054892,"time":"","channel":3,"rssi":-97,"snr":12.8},{"gtw_id":"eui-1dee18fc1c9d19d8","timestamp":2278897900,"time":"","channel":3,"rssi":-23,"snr":13.5}]}}""" on_message(None, {'db': db}, msg)
def setUp(self): self.message = mqtt.MQTTMessage() self.client = mqtt.Client() self.client.on_message = self.on_message self.client.on_log = self.on_log
def slideshow_timer(q): while True: msg = mqtt.MQTTMessage("photobooth") msg.payload = b'next' q.put(msg) sleep(5)