subFolder пуст при использовании шлюза Google IoT Core и Pub / Sub - PullRequest
0 голосов
/ 30 мая 2020

У меня есть устройство, публикующее через шлюз по событиям topi c (/devices/<dev_id>/events/motion) в PubSub. Он правильно попадает в PubSub, но вложенная папка - это просто пустая строка.

На шлюзе Я публикую, используя приведенный ниже код. f"mb.{device_id}" - это device_id (не идентификатор шлюза, а attribute может быть что угодно - движение, температура и т. Д. c

def report(self, device_id, attribute, value):
    topic = f"/devices/mb.{device_id}/events/{attribute}"
    timestamp = datetime.utcnow().timestamp()
    client.publish(topic, json.dumps({"v": value, "ts": timestamp}))

И это облачная функция прослушивание очередь PubSub.

def iot_to_bigtable(event, context):
    payload = json.loads(base64.b64decode(event["data"]).decode("utf-8"))
    timestamp = payload.get("ts")
    value = payload.get("v")
    if not timestamp or value is None:
        raise BadDataException()
    attributes = event.get("attributes", {})
    device_id = attributes.get("deviceId")
    registry_id = attributes.get("deviceRegistryId")
    attribute = attributes.get("subFolder")
    if not device_id or not registry_id or not attribute:
        raise BadDataException()

Пример события в Pub / Sub:

{
    @type: 'type.googleapis.com/google.pubsub.v1.PubsubMessage', 
    attributes: {
        deviceId: 'mb.26727bab-0f37-4453-82a4-75d93cb3f374', 
        deviceNumId: '2859313639674234', 
        deviceRegistryId: 'mb-staging', 
        deviceRegistryLocation: 'europe-west1', 
        gatewayId: 'mb.42e29cd5-08ad-40cf-9c1e-a1974144d39a', 
        projectId: 'mb-staging', 
        subFolder: ''
    }, 
    data: 'eyJ2IjogImxvdyIsICJ0cyI6IDE1OTA3NjgzNjcuMTMyNDQ4fQ=='
}

Почему subFolder пусто? Основываясь на документации, я ожидал, что это будет атрибут (например, motion или temperature)

1 Ответ

1 голос
/ 30 мая 2020

Эта проблема не имеет ничего общего с Cloud IoT Core. Вместо этого это вызвано тем, как Pub / Sub обрабатывает неудачные сообщения. Он повторял сообщения из ~ 12 часов go, которые не удалось (и не имели атрибута).

Это можно исправить, очистив подписку в Pub / Sub.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...