У меня очень странная проблема. Предположение состоит в том, что я довольно невежественен как в mqtt, так и в python (последний я не использую сейчас, по крайней мере, 5-6 лет), но я делаю приложение Unity для музея, использующего систему 3D-слежения (www. pozyx.io) и мне нужно, чтобы на каждом из моих компьютеров был запущен небольшой клиент mqtt-to-OSC, чтобы мое приложение Unity могло считывать данные о положении с клиента.
На моей машине для разработки все работает как чудо, используя слегка модифицированную версию скрипта, предоставленную производителем сенсора.
`
API_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
import paho.mqtt.client as mqtt
import ssl
import json
from pythonosc.udp_client import SimpleUDPClient
host = "mqtt.cloud.pozyxlabs.com"
port = 443
topic = "5c500595601a3f5871a17685"
username = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
password = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
ip = "127.0.0.1" # IP for the OSC UDP
network_port = 8888 # network port for the OSC UDP
osc_udp_client = SimpleUDPClient(ip, network_port)
def on_connect(client, userdata, flags, rc):
print(mqtt.connack_string(rc))
def on_message(client, userdata, msg):
tag_data = json.loads(msg.payload.decode())
for tag in tag_data:
try:
network_id = tag["tagId"]
#print(network_id)
timestamp = tag["timestamp"]
position = tag["data"]["coordinates"]
yaw = tag["data"]["orientation"]["yaw"]
osc_udp_client.send_message("/position", [network_id, timestamp, position["x"], position["y"], position["z"], yaw])
except:
print("Received a bad packet?")
pass
def on_subscribe(client, userdata, mid, granted_qos):
print("Subscribed to topic!")
client = mqtt.Client(transport="websockets")
client.username_pw_set(username, password=password)
client.tls_set_context(context=ssl.create_default_context())
client.on_connect = on_connect
client.on_message = on_message
client.on_subscribe = on_subscribe
client.connect(host, port=port)
client.subscribe(topic)
client.loop_forever()
`
Теперь, когда я нахожусь в музее для развертывания, конечно же, на только что настроенных машинах Windows 10 (я пробовал и на NUC, и на Lenovo Thinkpad), ничего не работает, и я получаю каждый раз следующую ошибку
C: \ Users \ Vattenkikare1 \ Desktop \ osc_hans> py osc_hans.py
Traceback (последний вызов был последним):
Файл "osc_hans.py", строка 67, в
client.connect (хост, порт = порт)
Файл "C: \ Users \ Vattenkikare1 \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ paho \ mqtt \ client.py", строка 839, в соединении
вернуть self.reconnect ()
Файл "C: \ Users \ Vattenkikare1 \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ paho \ mqtt \ client.py", строка 994, в переподключении
sock.do_handshake ()
Файл "C: \ Users \ Vattenkikare1 \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ ssl.py", строка 1117, в do_handshake
self._sslobj.do_handshake ()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] проверка сертификата не удалась: не удалось получить сертификат локального эмитента (_ssl.c: 1056)
Мой ноутбук подключен к тому же WiFi, и у меня есть права администратора на всех машинах. Не могли бы вы понять, что может быть причиной проблемы? И почему это может произойти только на других компьютерах, а не на моем?
Сначала я развернул exe на этих машинах, но затем на одной из них я сделал быструю настройку python со всеми модулями, но ничего не изменилось.
Я нашел несколько похожих проблем, но ни один из них не мог быть связан непосредственно с моим в плане решения.