Une erreur s'est glissée dans l'exemple de mosquitto_sub: il faut utiliser l'option -v au lieu de -d pour avoir l'affichage du topic. -d fonctionne aussi mais affiche en plus plein d'autres choses pas intéressantes.
J'ai mis en place une règle cron pour lancer un script toute les minutes via /etc/cron.d/shutters:
#!/usr/bin/python3importpaho.mqtt.clientasmqttfromdatetimeimportdatetimeimportsysnow=datetime.now()action=NoneOPEN=99WARN=90HALF=50CLOSE=0shutters=["zwave/Salon_Ouest/Shutter_Salon_Ouest/switch_multilevel/endpoint_1/targetValue/set","zwave/Salon_Est/Shutter_Salon_Est/switch_multilevel/endpoint_1/targetValue/set","zwave/Cuisine/Shutter_Cuisine/switch_multilevel/endpoint_1/targetValue/set",]ifnow.month<4ormonth>9:# Winter mode: close at nightifnow.hour==7andnow.minute>40andnow.minute<=45:action=OPEN# Close a little bit first, make sure everyone is insideifnow.hour==20andnow.minute>55andnow.minute<=60:action=WARNifnow.hour==21andnow.minute>0andnow.minute<=5:action=CLOSEelse:# Summer mode: close during the day# On weekends, only half-close to let some light inifnow.weekday()>4:ifnow.hour==8andnow.minute>25andnow.minute<=30:action=WARNifnow.hour==8andnow.minute>30andnow.minute<=35:action=HALFifnow.hour==23andnow.minute>0andnow.minute<=5:action=OPENelse:ifnow.hour==8andnow.minute>25andnow.minute<=30:action=WARNifnow.hour==8andnow.minute>30andnow.minute<=35:action=CLOSEifnow.hour==17andnow.minute>25andnow.minute<=30:action=WARNifnow.hour==17andnow.minute>30andnow.minute<=35:action=HALFifnow.hour==23andnow.minute>0andnow.minute<=5:action=OPEN# If there is nothing to do, well, do nothingifactionisNone:sys.exit(0)client=mqtt.Client()# Number of pending requestspending=-1# Callback called when the client is connected.# Publish all commands and set "pending" to continue looping until they are processed.@client.connect_callback()defon_connect(client,userdata,flags,reason_code):globalpendingpending=len(shutters)forshutterinshutters:client.publish(shutter,action)# Publish esponse callback. Decrement the pending request count@client.publish_callback()defon_publish(client,userdata,mid):globalpendingpending=pending-1# Connect and wait for all requests to be processedclient.connect("localhost")whilepending!=0:client.loop()
Je verrai si cela nécessite des améliorations plus tard. On peut beaucoup simplifier en faisant un script qui accepte en argument le pourcentage d'ouverture des volets, et plusieurs règles cron pour l'appeler aux heures adéquates. Pour commencer j'ai fait sans trop réfléchir, un script appelé toutes les 5 minutes, qui décide pour chaque tranche de 5 minutes ce qu'il a besoin de faire ou pas.
Déjà je vous dirai demain si mes volets se sont bien ouverts tout seuls!
# Corrections et compléments
Posté par pulkomandy (site web personnel, Mastodon) . En réponse au journal Je domotise mes volets roulants (avec cron et mqtt). Évalué à 5.
Une erreur s'est glissée dans l'exemple de mosquitto_sub: il faut utiliser l'option -v au lieu de -d pour avoir l'affichage du topic. -d fonctionne aussi mais affiche en plus plein d'autres choses pas intéressantes.
J'ai mis en place une règle cron pour lancer un script toute les minutes via /etc/cron.d/shutters:
Le contenu du script:
Je verrai si cela nécessite des améliorations plus tard. On peut beaucoup simplifier en faisant un script qui accepte en argument le pourcentage d'ouverture des volets, et plusieurs règles cron pour l'appeler aux heures adéquates. Pour commencer j'ai fait sans trop réfléchir, un script appelé toutes les 5 minutes, qui décide pour chaque tranche de 5 minutes ce qu'il a besoin de faire ou pas.
Déjà je vous dirai demain si mes volets se sont bien ouverts tout seuls!