Не могу заставить мой скрипт Python записывать значения в CSV из облака Arduino IoTPython

Программы на Python
Ответить
Anonymous
 Не могу заставить мой скрипт Python записывать значения в CSV из облака Arduino IoT

Сообщение Anonymous »

Цель состоит в том, чтобы собрать данные акселерометра смартфона (оси X, Y, Z), опубликованные в облаке Arduino IoT с помощью мобильного приложения Arduino IoT Remote, а затем обработать их на Python и записать их в три разных файла CSV для переменных (

Код: Выделить всё

Accelerometer_X
, Акселерометр_Y, Акселерометр_Z). Я могу подключиться и пройти аутентификацию, но on_message никогда не срабатывает, хотя пользовательский интерфейс Arduino IoT Cloud показывает обновление значений акселерометра в реальном времени.
Чтобы расширить эту функциональность, я создал в Arduino IoT Cloud отдельное устройство под названием PythonLogger, а также специальную Thing, содержащую три плавающие переменные, отражающие оси акселерометра. Эти переменные PythonLogger были синхронизированы с переменными iPhone Thing, поэтому теоретически они должны отражать те же значения, которые публикует телефон. Устройство PythonLogger предоставляет мне идентификатор устройства и секретный код, которые я использую в качестве учетных данных для аутентификации в своем клиенте Python.
Код, который я использовал для сценария Python для регистрации значений из облака IoT в файлы csv

Код: Выделить всё

from paho.mqtt import client as mqtt
import ssl
from datetime import datetime, timezone

# Credentials (from PythonLogger device)
DEVICE_ID     = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
DEVICE_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

BROKER, PORT  = "iot.arduino.cc", 8884

# Thing + properties (IDs from Arduino IoT Cloud dashboard)
THING_ID = "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
PROP_X   = "propid-for-Accelerometer_X"
PROP_Y   = "propid-for-Accelerometer_Y"
PROP_Z   = "propid-for-Accelerometer_Z"

BASE = f"/v2/things/{THING_ID}/properties"
TOPICS = [
f"{BASE}/{PROP_X}",
f"{BASE}/{PROP_X}/publish",
f"{BASE}/{PROP_Y}",
f"{BASE}/{PROP_Y}/publish",
f"{BASE}/{PROP_Z}",
f"{BASE}/{PROP_Z}/publish",
f"{BASE}/+",
f"{BASE}/+/publish",
]

def ts(): return datetime.now(timezone.utc).isoformat()

def on_connect(client, userdata, flags, rc, props=None):
print("Connected:", rc)  # 0 = success
client.subscribe([(t, 0) for t in TOPICS])
print("Subscribed to:")
for t in TOPICS:
print("  ", t)

def on_message(client, userdata, msg):
print("RX", ts(), msg.topic, "->", msg.payload.decode("utf-8", "replace"))

client = mqtt.Client(client_id=DEVICE_ID, callback_api_version=mqtt.CallbackAPIVersion.VERSION2)
client.username_pw_set(DEVICE_ID, DEVICE_SECRET)
client.tls_set(cert_reqs=ssl.CERT_REQUIRED, tls_version=ssl.PROTOCOL_TLS_CLIENT)

client.on_connect = on_connect
client.on_message = on_message

client.connect(BROKER, PORT, keepalive=60)

try:
client.loop_forever()
except KeyboardInterrupt:
print("Shutting down...")
client.disconnect()
С помощью этого кода клиент успешно проходит аутентификацию, но не записывает данные в файлы CSV и вместо этого показывает мне эту ошибку.

Подключено: подписка не авторизована…

или

Ошибка соединения [WinError 10054] Существующее соединение было принудительно закрыто удаленным устройством хост, повторяю попытку...

Есть идеи, почему я не могу получить скрипт для получения значений из облака IoT?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»