Alcuni mesi fa avevo accennato alla possibilità di poter controllare piGarden direttamente da Home Assistant, il noto controller di domotica open source. In questo articolo spiegherò come poterlo fare in modo da arrivare ad aver un pannello di gestione simile a quello mostrato nell’immagine riportata qui sopra.
Come prima cosa abbiamo bisogno che sul nostro raspberry sia installato e funzionante un broker mqtt. Uno dei più noti è sicuramente Mosquitto del quale troverete molte guide in rete per l’installazione e configurazione.
Il broker mqtt server da collante tra piGarden e Home Assistant grazie al quale comunicheranno tramite il protocollo mqtt.
Una volta che abbiamo il nostro broker mqtt funzionante dobbiamo configurare il nostro piGarden in modo che ad ogni cambio di stato questo venga pubblicato tramite un apposito topic mqtt. In questo modo Home Assistant riuscirà a reperire lo stato dei vari sensori da piGarden tenendo così aggiornata la propria interfaccia. Per fare questo potete rifarvi alle istruzioni riportate nell’articolo “piGarden 0.5.9: pubblicare stato ed eventi vesto un broker mqtt“.
Altro passo importante è quello di installare mqttconnector il quale si preoccuperà di inviare a piGarden via socket server tutti i messaggi ricevuti da Home Assistant via mqtt. Per instalalre mqttconnector potete rifarvi all’articolo: “mqttconnector, utilizza le api piGarden e piGuardian tramite mqtt“
Naturalmente si presuppone che su piGarden sia attivato il socket server, che se state utilizzando piGardenWeb, questo è già funzionante. Altrimenti potete rifarvi all’articolo “piGarden 0.2 – Easter egg“.
Ok, adesso abbiamo broker mqtt funzionante, piGarden configurato in modo che propaghi il proprio stato via mqtt e mqttconnector che istraderà al socket server i comandi ricevuti da Home Assitant via mqtt. Tutti i pezzo sono al loro posto, passiamo quindi alla configurazione di Home Assistant.
Come prima cosa dobbiamo andare modificare il file di configurazione di Home Assistant che generalmente si trova in https://www.lejubila.net/2017/04/pigarden-0-2-easter-egg/configuration.yaml, ma in base al tipo di installazione che avete fatto ptrebbe trovarsi anche in un’altra posizione.
Innanzitutto dovrete abilitare il supporto per il protocollo mqtt. Nelle ultime versioni di Home Assitant, se non sbaglio, questo operazione può essere fatto anche direttamente da interfaccia web. Io comunque ho l’ho attivato dal file di configurazione configuration.yaml andando ad inserire le seguenti linee di codice:
mqtt: discovery: true broker: indirizzo_ip_di_mosquitto port: 1883 client_id: home-assistant keepalive: 60 username: nome_utente_mosquitto password: password_utente_mosquitto protocol: 3.1 birth_message: topic: "hass/status" payload: "online" qos: 1 retain: true will_message: topic: "hass/status" payload: "offline" qos: 1 retain: true
Andiamo ora ad istruire Home Assistant in modo che possa recuperare le informazioni meteo da Openweathermap per poi poterle mostrare nella seguente forma:
Per fare questo dobbiamo inserire sempre in configuration.yaml il seguente codice (l’api key la potete recuperare dopo esservi iscritti al servizio):
- platform: openweathermap api_key: la_tua_api_key_di_openweathermap name: openweather
Definiamo ora i sensori che ci permetteranno di mostrare le informazioni sull’ultima azione compiuta da piGarden sullo stato del sensore fisico e online di rilevamento pioggia.
Inseriamo quindi le seguenti istruzioni in configuration.yaml:
sensor: # # Sensore informativo piGarden # - platform: mqtt name: pigarden_info_icon state_topic: "pigarden/result" value_template: > {% if value_json['info'] > "" %} mdi:information {% elif value_json['success'] > "" %} mdi:message-text {% elif value_json['warning'] > "" %} mdi:message-alert {% else %} {{ states.sensor.pigarden_info_icon.state }} {% endif %} - platform: mqtt name: pigarden_info_message state_topic: "pigarden/result" value_template: > {% if value_json['info'] > "" or value_json['success'] > "" or value_json['warning'] > "" %} {% if value_json['info'] > "" %} {{ value_json['info'] }} ({{ value_json['timestamp'] | timestamp_local }}) {% endif %} {% if value_json['success'] > "" %} {{ value_json['success'] }} ({{ value_json['timestamp'] | timestamp_local }}) {% endif %} {% if value_json['warning'] > "" %} {{ value_json['warning'] }} ({{ value_json['timestamp'] | timestamp_local }}) {% endif %} {% else %} {{ states.sensor.pigarden_info_message.state }} {% endif %} - platform: mqtt name: pigarden_last_rain_sensor state_topic: "pigarden/result" value_template: > {% if value_json['last_rain_sensor'] > "" %} {{ value_json['last_rain_sensor'] | int | timestamp_local }} {% else %} sconosciuto {% endif %} - platform: mqtt name: pigarden_last_rain_online state_topic: "pigarden/result" value_template: > {% if value_json['last_rain_online'] > "" %} {{ value_json['last_rain_online'] | int | timestamp_local }} {% else %} sconosciuto {% endif %} - platform: template sensors: pigarden_info: value_template: "{{ states.sensor.pigarden_info_message.state }}" icon_template: "{{ states.sensor.pigarden_info_icon.state }}"
Dobbiamo ora definire per ogni zona gestita su piGarden, gli switch, gli input boolean e i binary sensor che ci permetteranno di avviare/interrompere l’irrigazione e di forzare l’irrigazione in caso di pioggia.
Nell’esempio sottostante andrò a gestire tre zone che avranno i seguenti nomi:
- Giardino_Posteriore_DX
- Giardino_Posteriore_SX
- Giardino_Posteriore_CN
Inseriamo quindi sempre in configuration.yaml quanto segue:
switch: # # Switch per gestire le elettrovalvole di piGarden # - platform: template switches: pigarden_zone_giardino_posteriore_dx: value_template: "{{ is_state('binary_sensor.pigarden_state_giardino_posteriore_dx', 'on') }}" turn_on: service: mqtt.publish data: topic: "pigarden/command" #payload: "open Giardino_Posteriore_DX" payload_template: > {% if is_state( 'input_boolean.pigarden_force_giardino_posteriore_dx', 'off' ) %} open Giardino_Posteriore_DX {% else %} open Giardino_Posteriore_DX force {% endif %} turn_off: service: mqtt.publish data: topic: "pigarden/command" payload: "close Giardino_Posteriore_DX" entity_picture_template: > {% if not is_state( 'binary_sensor.pigarden_state_giardino_posteriore_dx', 'on' ) %} /local/icons/sprinkler-pause-3.gif {% else %} /local/icons/sprinkler-play-3.gif {% endif %} - platform: template switches: pigarden_zone_giardino_posteriore_sx: value_template: "{{ is_state('binary_sensor.pigarden_state_giardino_posteriore_sx', 'on') }}" turn_on: service: mqtt.publish data: topic: "pigarden/command" payload_template: > {% if is_state( 'input_boolean.pigarden_force_giardino_posteriore_sx', 'off' ) %} open Giardino_Posteriore_SX {% else %} open Giardino_Posteriore_SX force {% endif %} turn_off: service: mqtt.publish data: topic: "pigarden/command" payload: "close Giardino_Posteriore_SX" entity_picture_template: > {% if not is_state( 'binary_sensor.pigarden_state_giardino_posteriore_sx', 'on' ) %} /local/icons/sprinkler-pause-3.gif {% else %} /local/icons/sprinkler-play-3.gif {% endif %} - platform: template switches: pigarden_zone_giardino_posteriore_cn: value_template: "{{ is_state('binary_sensor.pigarden_state_giardino_posteriore_cn', 'on') }}" turn_on: service: mqtt.publish data: topic: "pigarden/command" payload_template: > {% if is_state( 'input_boolean.pigarden_force_giardino_posteriore_cn', 'off' ) %} open Giardino_Posteriore_CN {% else %} open Giardino_Posteriore_CN force {% endif %} turn_off: service: mqtt.publish data: topic: "pigarden/command" payload: "close Giardino_Posteriore_CN" entity_picture_template: > {% if not is_state( 'binary_sensor.pigarden_state_giardino_posteriore_cn', 'on' ) %} /local/icons/sprinkler-pause-3.gif {% else %} /local/icons/sprinkler-play-3.gif {% endif %} binary_sensor: # # binary sensor per switch template pigarden # - platform: mqtt name: pigarden_state_giardino_posteriore_dx state_topic: "pigarden/result" payload_on: true payload_off: false qos: 0 value_template: "{{ value_json['zones']['Giardino_Posteriore_DX']['state'] == 1 or value_json['zones']['Giardino_Posteriore_DX']['state'] == 2 }}" - platform: mqtt name: pigarden_state_giardino_posteriore_sx state_topic: "pigarden/result" payload_on: true payload_off: false qos: 0 value_template: "{{ value_json['zones']['Giardino_Posteriore_SX']['state'] == 1 or value_json['zones']['Giardino_Posteriore_SX']['state'] == 2 }}" - platform: mqtt name: pigarden_state_giardino_posteriore_cn state_topic: "pigarden/result" payload_on: true payload_off: false qos: 0 value_template: "{{ value_json['zones']['Giardino_Posteriore_CN']['state'] == 1 or value_json['zones']['Giardino_Posteriore_CN']['state'] == 2 }}" input_boolean: pigarden_force_giardino_posteriore_dx: name: Forza irrigazione in caso di pioggia initial: off icon: mdi:weather-rainy pigarden_force_giardino_posteriore_sx: name: Forza irrigazione in caso di pioggia initial: off icon: mdi:weather-rainy pigarden_force_giardino_posteriore_cn: name: Forza irrigazione in caso di pioggia initial: off icon: mdi:weather-rainy
Sugli switch che permettono l’avvio/interruzione dell’irrigazione delle varie zone ho inserito due icone custom. Queste due icone vanno posizionate nella directory www/icons da creare nella cartella dove è presente il file di configurazione configuration.yaml ( /home/homeassistant/.homeassistant/www/icons ).
Le due i cone da caricare sono le seguenti:
Ok, abbiamo finito di modificare il file di configurazione configuration.yaml. Adesso dobbiamo riavviare il servizio relativo ad Home Assistant, lo potete fare tranquillamente da interfaccia web andando su Impostazioni / Generale / Gestione del server / Riavviare. Prima di fare ciò però vi consiglio di verificare che nel file di configurazione appena modificato non vi siano errori. Lo potete fare da Impostazioni / Generale / Convalida della configurazione / Controlla la configurazione.
Bene ora che abbiamo Home Assistant riavviato con la nostra nuova configurazione passiamo a personalizzare l’interfaccia di Home Assistant.
Aggiungiamo una nuova “vista” dove inserire tutti gli elementi di piGarden. Lo facciamo andando in modalità di configurazione dell’interfaccia, cliccando sull’icona che rappresenta il menu, presente nell’angolo in alto a destra di Home Assistant e successivamente cliccando sulla voce “Configura l’interfaccia utente“:
Aggiungiamo la vista cliccando sul l’icona a forma di + e definiamola come segue:
Creata la nuova vista relativa a piGarden, andiamo ad aggiungere un Vertical Stack Card dove inseriremo le informazioni di stato di piGarden, dei sensori della pioggia e le condizioni meteo:
type: vertical-stack cards: - entities: - entity: sensor.pigarden_info show_header_toggle: false title: Controllo piGarden type: entities - entities: - sensor.pigarden_last_rain_sensor - sensor.pigarden_last_rain_online show_header_toggle: false title: Ultima pioggia rilevata type: entities - entity: weather.openweather name: Meteo type: weather-forecast
Come ultimo passo aggiungiamo un altro Vertical Stack Card dove inseriremo i controlli per le varie zone:
type: vertical-stack cards: - entities: - switch.pigarden_zone_giardino_posteriore_dx - input_boolean.pigarden_force_giardino_posteriore_dx show_header_toggle: false title: Giardino Posteriore DX type: entities - entities: - switch.pigarden_zone_giardino_posteriore_sx - input_boolean.pigarden_force_giardino_posteriore_sx show_header_toggle: false title: Giardino Posteriore SX type: entities - entities: - switch.pigarden_zone_giardino_posteriore_cn - input_boolean.pigarden_force_giardino_posteriore_cn show_header_toggle: false title: Giardino Posteriore CN type: entities
Bene, a questo punto se abbiamo fatto tutto Home Assistant dovrebbe mostrarci un pannello simile a quello qui sotto da dove potremo gestire piGarden.
Ciao, ottimo lavoro! funziona tutto alla perfezione!
solo una cosa: dovresti correggere la scritta qtt con mqtt nella configurazione del file .yaml
c’è un errore anche nella scritta binay_sensor: manca la “r”
grazie
Claudio
Ciao @Claudio,
grazie per avermi segnalato i due errori.
Ho provveduto a correggere quanto mi hai segnalato.
Oltre ad avere corretto gli errori indicati sopra, ho aggiunto anche una parte di definizione sensori mancante:
- platform: template
sensors:
pigarden_info:
value_template: "{{ states.sensor.pigarden_info_message.state }}"
icon_template: "{{ states.sensor.pigarden_info_icon.state }}"
Ciao,progetto stupendo.
Potresti inserire nella configurazione dell’home assistant anche il pulsante per la chiusura di tutte le elettrovalvole e per il riavvio spegnimento della centralina?
Grazie mille
@Cosimo,
hmmmm….. vedo cosa posso fare.
Ciao @Cosimo,
ho creato un package per Home Assistant per l’integrazione di piGarden, con questo puoi anche chiudere tutte le elettrovalvole e spegnere/riavviare la centralina.
Trovi tutto qui piGarden: package per integrazione con Home Assistant.