Получение «ValueError: объект JSON не может быть декодирован» на Raspberry - возможно ли обходное решение без «json .load»? - PullRequest
0 голосов
/ 04 августа 2020

Подводя итог моей проблеме: я хочу, чтобы мой 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» другим способом?

...