Пример #1
0
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
Пример #2
0
    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
Пример #4
0
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()
Пример #5
0
 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)
Пример #6
0
    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 = []
Пример #7
0
    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()
Пример #8
0
    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()
Пример #9
0
    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
Пример #10
0
    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()))
Пример #11
0
    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)
Пример #12
0
    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)
Пример #13
0
    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)
Пример #14
0
    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)
Пример #15
0
    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))
Пример #16
0
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()
Пример #17
0
    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()
Пример #18
0
    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()))
Пример #19
0
    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)
Пример #20
0
 def message(self):
     message = mqtt.MQTTMessage(mid=fake_mid, topic=fake_topic.encode())
     message.payload = fake_payload
     message.qos = fake_qos
     return message
Пример #21
0
 def message(topic, payload=None):
     msg = mqttc.MQTTMessage(topic=topic.encode('utf-8'))
     if payload is not None:
         msg.payload = payload
     return msg
Пример #22
0
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)
Пример #23
0
 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
Пример #24
0
def slideshow_timer(q):
    while True:
        msg = mqtt.MQTTMessage("photobooth")
        msg.payload = b'next'
        q.put(msg)
        sleep(5)