HTTP-запрос к функции HTTP Cloud с устройства (ядро Google Cloud IoT)?

Как я могу отправлять «HTTP-запросы» в облачную функцию Google с устройства (с помощью CLOUD IOT CORE AUTHORIZATION)?

например прямо сейчас у меня есть устройство, которое уже зарегистрировано в ядре Cloud IoT. Для связи я отправляю данные через Pub / Sub Mqtt в облачную функцию. Он работает хорошо, но я не могу отправить сообщение подтверждения из облачной функции на устройство, если ответ успешен или нет.

Но теперь я хотел бы, например, сделать HTTP-запрос POST / GET к облачной функции с устройства. Чтобы этот запрос HTPP получил сообщение подтверждения, например «Ваши данные достигли» обратно из облачной функции.

То, что я пробовал сейчас на своем устройстве, это ..

def post_data(payload):
    URL='https://cloudiotdevice.googleapis.com/v1/projects/{project-id}/locations/{cloud-region}/registries/{registry-id}/devices/{device-id}:publishEvent'
    payload = json.dumps(payload)
    headers = {
        'Content-Type': 'application/json; charset=utf-8',
        'Authorization': JWT
    }
    try:
        requests.post(URL, json=payload, headers=headers)
    except requests.exceptions.ConnectionError:
        logging.error('Error posting data to Cloud Function!')
    except requests.exceptions.MissingSchema:
        logging.error('Error posting data to Cloud Function! Are Environment Variables set?')

Но он возвращает мне ошибку 400. У меня также есть подпапка в качестве темы, но я также не знаю, где ее определить?

формат полезной нагрузки такой, как показано ниже

payload = {'device': device_id,
           'type': TYPE,
           'timestamp': time.time(),
           'data': {'temperature': temperature,
                    'humidity': humidity}}

comment
Не могли бы вы также объяснить, почему вы проголосовали за закрытие?   -  person Hsn    schedule 13.05.2020
comment
Не могли бы вы пояснить свой вопрос, как рекомендовано здесь   -  person Soni Sol    schedule 13.05.2020
comment
Спасибо, @ JoséSoní. Я обновил свой вопрос ..   -  person Hsn    schedule 14.05.2020


Ответы (1)


Когда вы отправляете событие телеметрии со своего устройства в Cloud IoT с помощью HTTP, полезная нагрузка должна быть JSON и должна иметь описанную структуру здесь. В частности, полезная нагрузка запроса REST POST должна быть:

{
  "binaryData": string
}

Где ФАКТИЧЕСКИЕ данные, которые вы хотите опубликовать, представляют собой представление в кодировке base 64. Глядя на ваш пример кода, я не вижу, чтобы вы отправляли запрос REST с этой полезной нагрузкой.

person Kolban    schedule 16.05.2020