Значение Нет или ValueError («Неверный файл JSON.») - PullRequest
0 голосов
/ 30 января 2019

Я настраиваю push-уведомления SNS на AWS IoT для двух датчиков MCU.

Сейчас я получаю оповещения только тогда, когда влажность низкая, поэтому я хотел включить данные о температуре / влажности, но они либо дают мне значение none, либо выдают ошибку Invalid JSON.Как это исправить?

Рабочий код:

def myShadowUpdateCallback(payload, responseStatus, token):
  print()
  print('UPDATE: $aws/things/' + SHADOW_HANDLER +
    '/shadow/update/#')
  print("payload = " + payload)
  print("responseStatus = " + responseStatus)
  print("token = " + token)

channel = 21
GPIO.setup(channel, GPIO.IN)

while True:

  if GPIO.input(channel):
    myDeviceShadow.shadowUpdate(
      '{"state":{"reported":{"moisture":"low"}}}',
      myShadowUpdateCallback, 5)
  else:
    myDeviceShadow.shadowUpdate(
      '{"state":{"reported":{"moisture":"okay"}}}',
      myShadowUpdateCallback, 5)

Результат по электронной почте:

{"state":{"reported":{"moisture":"low"}},"metadata":{"reported":{"moisture":{"timestamp":1548870624}}},"version":5167,"timestamp":1548870624,"clientToken":"b8a2"}

Чтобы заставить работать датчик температуры / влажности DH22, я добавил:

import Adafruit_DHT

humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 20)

Изменено:

def myShadowUpdateCallback(payload, responseStatus, token):
  print()
  print('UPDATE: $aws/things/' + SHADOW_HANDLER +
    '/shadow/update/#')
  print("payload = " + payload)
  print("responseStatus = " + responseStatus)
  print("token = " + token)
  print('Temperature={}*F  Humidity={}%'.format(temperature, humidity))

while True:

  if GPIO.input(channel):
    myDeviceShadow.shadowUpdate(
      '{"state":{"reported":{"moisture":"low","humidity":{"0":"0.1f"},"temperature":{"1":"0.1f"}}}}',
      myShadowUpdateCallback, 5)
  else:
    myDeviceShadow.shadowUpdate(
      '{"state":{"reported":{"moisture":"okay","humidity":{"0":"0.1f"},"temperature":{"1":"0.1f"}}}}',
      myShadowUpdateCallback, 5)

Ошибка:

Когда влажность в порядке, температура и влажность показывают:

Temperature=None*F  Humidity=None%

Когда влажностьнизкий я получаю ошибку:

myShadowUpdateCallback, ValueError: Invalid JSON file.

1 Ответ

0 голосов
/ 30 января 2019

Похоже, что часть {0: 0.1f} не является допустимым json.Возможно, измените его на что-то вроде {"0": "0.1f"} или другой допустимый json.

...