Код: Выделить всё
Accelerometer_XЧтобы расширить эту функциональность, я создал в 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()
Подключено: подписка не авторизована…
или
Ошибка соединения [WinError 10054] Существующее соединение было принудительно закрыто удаленным устройством хост, повторяю попытку...
Есть идеи, почему я не могу получить скрипт для получения значений из облака IoT?
Мобильная версия