Я настраиваю 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.