mqttconnector, utilizza le api piGarden e piGuardian tramite mqtt

Recentemente ho avuto la necessità di poter controllare piGarden e piGuardian tramite protocollo mqtt in modo da potere avviare o fermare l’irrigazione da Home Assistant, il famoso software open source per la gestione domotica della casa.

A questo proposito ho creato un piccolo script python che funziona da subscribe per alcuni topic mqtt destinati a ricevere nei rispettivi payload i comandi delle api di piGarden e piGuardian e di inoltrarli ai rispettivi socket server. In pratica mqttconnector funziona da intermediario tra mqtt e piGarden/piGuardian.

Installazione

Per funzionare mqttconnector ha bisogno di alcune dipendenze, installiamole con i seguenti due comandi:

sudo apt-get install python2.7 python-pip
sudo pip install paho-mqtt configparser

Scarichiamo ora mqttconnector da github:

cd
git clone https://github.com/lejubila/mqttconnector.git

Aggiungiamo adesso il file relativo al servizio systemd che ci servirà successivamente per avviare mqttconnector e impostare l’avvio automatico al boot del sistema:

cd
sudo cp mqttconnector/mqttconnector.service /etc/systemd/system/mqttconnector.service

Fate attenzione al percorso di mqttconnector.py indicato dentro /etc/systemd/system/mqttconnector.service che corrisponda alla posizione corretta dello script.

Configurazione

Copiamo il file di configurazione di esempio in /etc:

cd
sudo cp mqttconnector/mqttconnector.ini.sample /etc/mqttconnector.ini

Adesso che abbiamo il nostro file di configurazione vediamo come è composto:

[mqtt]
broker_address=_broker_hostname_or_ip_address_
port=1883
user=_broker_username_
password=_broker_password_
client_id=mqttconnector
path_connector=/home/pi/mqttconnector/
subtopic_command=command
subtopic_result=result
 
[pigarden]
enabled=1
host=_pigarden_socket_server_hostname_or_ip_addres_
port=_pigarden_socket_server_port_
exec_command=exec_cmd2sck.sh
user=_pigarden_socket_server_username_
pwd=_pigarden_socket_server_password_
topic=pigarden
result_enable=0
topic_result_qos=0
topic_result_retain=1
 
[piguardian]
enabled=1
host=_piguardian_socket_server_hostname_or_ip_addres_
port=_piguardian_socket_server_port_
exec_command=exec_cmd2sck.sh
user=_piguardian_socket_server_username_
pwd=_piguardian_socket_server_password_
result_enable=0
topic=piguardian
topic_result_qos=0
topic_result_retain=1

Come possiamo vedere il file di configurazione è suddiviso in tre parti: mqtt, pigarden e piguardian.

La prima parte riguarda il protocollo mqtt e ci permette di indicare l’hostname/ip del broker e le credenziali di accesso. Oltre a questo dobbiamo indicare il path della directory dello script (path_connector).

Con subtopic_command indichiamo il subtopic su cui lo script riceverà i comandi delle api da inoltrare a piGarden/piGuardian.

Una vota che il comando è stato ricevuto tramite il subtopic_command, questo viene inoltrato al socket server della rispettiva applicazione e il risultato, se vogliamo, potrà essere pubblicato su un’ulteriore topic via mqtt. Questo topic sarà composto dal valore indicato in subtopic_result.

Avremo quindi i topic pigarden/command e piguardian/command tramite i quali mqttconnector ricecerà i comandi delle api da inoltrare ai socket server dei rispettivi software.

Sui topic pigarden/result e piguardian/result (se abilitato con il parametro result_enable) verrà pubblicato invece il risultato di risposta della chiamata api ricevuto precedentemente.

Esecuzione

Il metodo più opportuno per lanciare mqttconnector è utilizzare systemd. Ma prima magari può essere comodo eseguirlo manualmente in modo da avere a video l’output generato dallo script e verificare eventuali problemi di connessione al broker mqtt o altro. L’esecuzione manuale può essere fatta impartendo i seguenti comandi:

cd
cd mqttconnector
python mqttconnector.py

Se la connessione al server mqtt andrà a buon fine vedrete un output simile al seguente

192.168.1.251 mqtt_port mqtt_user mqtt_password
Connected to broker
subscribe: pigarden/command
subscribe: piguardian/command

Continuando l’esecuzione in questa modalità potrete vedere anche l’output di eventuali chiamate alle api di piGarden/piGuardian impartite tramite protocollo mqtt.

Una volta che site sicuri che tutto funzioni per il verso giusto potrete interrompere l’esecuzione tramite Ctrl+C e riavviare mqttconnector utilizzando i comandi systemd:

sudo systemctl start mqttconnector

Inoltre per fare in modo che mqttconnector venga eseguito in automatico all’avvio del vostro Raspberry, dovete impartire il seguente comando:

sudo systemctl enable mqttconnector

Conclusione

Bene siamo arrivati alla conclusione. In un prossimo articolo vedremo come interfacciare piGarden a Home Assistant grazie proprio al protocollo mqtt.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.