ThingsBoard IoT Gateway не обновляет значения MQTT - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь получать простые текстовые значения из тем внешнего брокера MQTT с помощью IoT Gateway.

Для этого я упрощаю существующий скрипт (extensions/mqtt/custom_mqtt_uplink_converter.py):

from thingsboard_gateway.connectors.mqtt.mqtt_uplink_converter import MqttUplinkConverter, log

class CustomMqttUplinkConverter(MqttUplinkConverter):
    def __init__(self, config):
        self.__config = config.get('converter')
        self.dict_result = {}

    def convert(self, topic, body):
        try:
            log.debug("New data received: %s: %s" % (topic,body))
            # if topic = '/devices/buzzer/controls/volume' device name will be 'buzzer'.
            self.dict_result["deviceName"] = topic.split("/")[2]
            # just hardcode this
            self.dict_result["deviceType"] = "buzzer"
            self.dict_result["telemetry"] = {"data": body}
            log.debug("Result: %s" % (self.dict_result))
            return self.dict_result

        except ...

Когда я start gateway Я вижу в его журнале, что он успешно соединился и прочитал значения:

INFO ... MQTT Broker Connector connected to 10.1.1.2:1883 - successfully.'
DEBUG ... Client <paho.mqtt.client.Client object at 0x7fb42d19dd68>, userdata None, flags {'session present': 0}, extra_params ()'

DEBUG ... <module 'CustomMqttUplinkConverter' from '/var/lib/thingsboard_gateway/extensions/mqtt/custom_mqtt_uplink_converter.py'>'
DEBUG ... Import CustomMqttUplinkConverter from /var/lib/thingsboard_gateway/extensions/mqtt.'
DEBUG ... Converter CustomMqttUplinkConverter for topic /devices/buzzer/controls/volume - found!'
INFO ... Connector "MQTT Broker Connector" subscribe to /devices/buzzer/controls/volume'
DEBUG ... Received data: {}'
DEBUG ... (None,)'
INFO ... "MQTT Broker Connector" subscription success to topic /devices/buzzer/controls/volume, subscription message id = 1'
DEBUG ... New data received: /devices/buzzer/controls/volume: 66'
DEBUG ... Result: {'deviceName': 'buzzer', 'deviceType': 'buzzer', 'telemetry': {'data': 66}}'

Но эти значения - последние значения, которые он может прочитать. Если я изменю volume у одного брокера, новые значения не появятся ни в журнале, ни в пользовательском интерфейсе TB. (Я контролирую обновления с помощью mosquitto_sub.)

Кажется, этот конвертер никогда не будет вызываться снова, пока не будет перезапущен шлюз. Это правильно?

Как я могу убедиться, что мой код верен, если я не вижу результата?

1 Ответ

2 голосов
/ 06 мая 2020

Привет, я пробовал вашу версию специального конвертера, она не сработала, но когда я изменил
self.dict_result["telemetry"] = {"data": body}
на
self.dict_result["telemetry"] = [{"data": body}]
, данные отправлялись правильно.

Шлюз требует от преобразователя массив телеметрии атрибутов.

...