Подводя итог моей проблеме: я хочу, чтобы мой Raspberry Pi перехватывал данные с моего smartplug (TP Link Hs110) и пересылал их в Aws IoT (моя Raspberry зарегистрирована как вещь).
I есть следующий фрагмент кода, который отлично работает на моем локальном компьютере (Windows p c)
import socket
from struct import pack
import json
...
response = tp_send(cmd, ip_tplink)
print(type(response))
print(response)
json_data = json.loads(response)
emeter = json_data["emeter"]["get_realtime"]
print(type(emeter))
print("current_ma = " + str(emeter["current_ma"]))
Вывод на моем P c:
<class 'str'>
{"emeter":{"get_realtime":{"voltage_mv":233258,"current_ma":70,"power_mw":341,"total_wh":18082,"err_code":0}}}
<class 'dict'>
current_ma = 70
что именно то, что я хочу прямо сейчас. Итак, я хочу извлечь «current_ma» из этой длинной строки. Теперь моя проблема в том, что если я вставлю этот код на свой Raspberry, который может отправлять сообщения в AWS IoT, я всегда получаю сообщение об ошибке:
ValueError: No JSON object could be decoded
Журнал сообщает мне, что ошибка возникает из строка json_data = json.loads(response)
. Если необходимо, это импортированные пакеты в файле python, который запущен на моем Raspberry:
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
import logging
import time
import argparse
import json
import sys
import socket
import threading
from struct import pack
Есть ли способ исправить эту ошибку, возможно, импортировать другой модуль, или, может быть, я смогу найти обходной путь: мне не нужно преобразовывать response
из строки типа в dict и получать необходимое значение «current_ma» другим способом?