#python #bluetooth #mqtt
Вопрос:
Здравствуйте, мне нужна помощь по скрипту python, который я использую для присутствия в моей домашней автоматизации, иногда случается, что mqtt недоступен, мой скрипт останавливается, я хотел бы, чтобы он повторил попытку подключения и перезапустил операцию, возможно ли это ?
Мой сценарий
#!/usr/bin/python
import bluetooth
from time import sleep
import paho.mqtt.client as mqtt
import paho.mqtt.publish as publish
phones = [
{'name': 'person1', 'state': 'not home', 'mac': '<mac address>'}
{'name': 'person2', 'state': 'not home', 'mac': '<mac address>'}
]
client = mqtt.Client("hass-client")
client.tls_set('/home/pi/certs/ca-certificates.crt')
client.username_pw_set('<username>', '<password>')
client.connect('<mqtt broker>', 8883)
client.loop_start()
while True:
for phone in phones:
key = "bluetooth/presence/" phone['name']
result = bluetooth.lookup_name(phone['mac'], timeout=3)
if result != None:
detected_state = 'home'
else:
detected_state = 'not home'
if phone['state'] != detected_state:
phone['state'] = detected_state
client.publish(key, detected_state, retain=False)
sleep(15)
client.disconnect()
Комментарии:
1. Пожалуйста, также опубликуйте сообщение, которое вы получите, когда оно прекратится (или если его нет). Также вы можете захотеть оставаться на связи, но подключаться и отключаться для каждого сообщения.
2. спасибо за ваш ответ, действительно, я мог бы отключить / повторно подключиться, но я не нахожу это решение очень чистым, я хотел бы знать, можно ли скорее выполнить проверку, и если mqtt недоступен, что он ждет и кто пытается подключиться, сделайте цикл, у меня нет журнала, потому что я сейчас на работе, я ищу решения
3. Я быстро проверил свой собственный код mqtt, работающий в производстве на радиостанции в течение 2 лет, и я подключаюсь — публикую — отключаюсь для каждого сообщения. Который отлично работает и просто вылетает с ошибкой, которую вы можете поймать, я рекомендую вам настроить mqtt локально и проверить свой код на соответствие этому, чтобы увидеть различные ошибки, которые вам нужно поймать. Также убедитесь, что вы используете Python3, а не старый Python 2 из «#!/usr/bin/python».
4. Хорошо, спасибо за идею, так что я попробую то, что вы сказали, действительно, я посмотрю версию python, также спасибо за вашу помощь