Home assistant 1 sensori cancello con Arduino

home assistant arduino

Utilizzo home assistant già da qualche anno. Mi avanzano per degli acquisti fatti qualche anno fa su aliexpress due cloni Arduino (UNO e Nano) ed un paio di shield economici ENC28J60. Direi il tutto per un valore di meno di 8€ (adesso costerebbero di più).

Abito in una strada molto trafficata è al momento ho quattro cani, che non sono molto bravi a restare nel giardino se trovano il cancello aperto. E’ quindi importante sapere se per qualche motivo uno dei cancelli oppure uno dei garage è rimasto aperto, prima di fare uscire i cani nella parte di giardino collegata alla strada.

Per il controllo degli ingressi e delle porte dell’abitazione, visto che sono tutti sensori all’asciutto e vicini alla scatolina del coordinatore ZigBee, ho utilizzato semplici sensori reed ZigBee comprati su AliExpress.

Ma per l’esterno sarebbe stato difficile fare arrivare con affidabilità il segnale ZigBee e proteggere gli stessi dalle intemperie, per cui ho optato per dei sensori reed cablati, normalmente aperti da collegare all’hardware di recupero che già avevo.

La domotica dal mio punto di vista

Circolano parecchie definizioni di domotica. Di fatto è un termine che è parecchio di moda e che quindi corre il rischio di essere abusato. Prima di passare alla parte più tecnica voglio quindi spendere qualche parola riguardo il mio punto di vista.

Il mio approccio è forse estremo. In fin dei conti mi aspetto solo che, la mia casa “intelligente”, prenda “autonomamente” decisioni, rispettando degli specifici algoritmi. Tutto questo, possibilmente, in modo affidabile.

Per fare questo sono necessarie almeno due cose: Le informazioni, e le applicazioni.

Le informazioni

Le informazioni possono essere raccolte in molti modi differenti. Da sensori (temperatura, apertura, presenza), dal tempo (meteorologico, dell’orologio), da comparazioni e operazioni.

Le applicazioni

Le applicazioni, le attuazioni, possono variare dall’attivare un interruttore, al informare gli utenti con un messaggio (audio o sul telefono), ad applicare ulteriori calcoli, comparazione o letture di sensori.

La sintesi

La sintesi di tutto questo è che la casa reagisca seguendo specifici algoritmi a quello che succede. Per esempio se il sole va sotto l’orizzonte la casa si prepara per la notte. Accende le luci del giardino. Cambia la tonalità delle luci. E viceversa quando qualcuno si sveglia (può saperlo da appositi sensori sui telefoni o sugli orologi indossati) accende la macchinetta del caffè, apre le persiane ecc ecc.

Il solo limite è la disponibilità di un sensore e la fantasia (e la precisione) nel comporre un codice che reagisca a quello che sta succedendo. Anche l’affidabilità di un sensore è decisamente importante.

La tecnologia deve essere al servizio della persona.

Hardware necessario

Per il mio piccolissimo progetto ho pensato di usare il seguente hardware:

  • Un PC, un Rasperry, una macchina virtuale con installato e funzionante Home assistant;
  • Un Arduino (Nano, Uno, un clone quello che volete);
  • Un sistema per collegare Arduino alla rete (ho usato uno shield ENC28J60 è il più economico, ma vanno bene anche altri tipi di shield ethernet o WiFi. Ovviamente cambiando shield, il codice Arduino andrà modificato di conseguenza.);
  • Un terminal block specifico per il vostro Arduino per evitare di avere i collegamenti con i cavetti DuPont ® e poter serrare con sicurezza i cavi del segnale.

Preparare home assistant

Do per scontato che ci sia già una installazione di home assistant funzionante e collegata alla rete. Ci serve un broker MQTT che è facilmente installabile utilizzando il componente aggiuntivo mosquitto broker. E’ abbastanza facile da fare, eventualmente seguendo la pagina di github del componente oppure la pagina dedicata a MQTT sul sito istituzionale di home assistant.

Possiamo intanto aggiungere anche i sensori che ci serviranno direttamente nel file di configurazione configuration.yaml di home assistant. Lo state_topic qui definito dovrà essere coincidente con quello definito nel codice di Arduino.

mqtt:
  binary_sensor:
  - name: "Cancellino"
    state_topic: "nano-ha/cancellino"
    device_class: opening
  - name: "Cancello"
    state_topic: "nano-ha/cancello"
    device_class: opening
  - name: "Garage 1"
    state_topic: "nano-ha/garage1"
    device_class: garage_door
  - name: "Garage 2"
    state_topic: "nano-ha/garage2"
    device_class: garage_door

Preparare Arduino

Anche in questo caso do per scontato di avere un minimo di dimestichezza con Arduino. Il dispositivo scelto va collegato ad un PC via seriale e poi va caricato il codice (come quello riportato più avanti).

I collegamenti, abbastanza banali, sono riportati in questa immagine. Alla fine fa praticamente tutto lo shield. Da ogni sensore partono due fili. Uno di ognuno si collega insieme a GND l’altro terminale va uno per ogni canale (4, 5, 6, 7). I sensori non sono altro che interruttori, se l’accesso è chiuso l’interruttore è chiuso, e viceversa.

arduino nano

Questo è invece il codice per leggere e trasmettere via ethernet ogni 3 secondi lo stato dei sensori.

#include <EthernetENC.h>  //queste sono le librerie necessarie per ENC28J60
#include "PubSubClient.h" // nel caso sono da cambiare a seconda dello shield


#define CLIENT_ID       "nanoMQTT"
#define INTERVAL        3000 // 3 sec intervallo fra due pubblicazioni

bool statusCM=HIGH;//cancello lato monte
bool statusCMM=HIGH;//cancello lato mare
bool statusPG1=HIGH;//garage door 1
bool statusPG2=HIGH;//garage door 2
uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05};

EthernetClient ethClient;
PubSubClient mqttClient;

long previousMillis;

void setup() {
pinMode(4,INPUT_PULLUP); //resistenze interne di pullup
pinMode(5,INPUT_PULLUP);
pinMode(6,INPUT_PULLUP);
pinMode(7,INPUT_PULLUP);
  // setup serial communication  // queste sono parti che poi ho commentato per fare un po' di debug sulla porta seriale
  //Serial.begin(9600);
  // setup ethernet communication using DHCP
  if(Ethernet.begin(mac) == 0) {
   // Serial.println(F("Ethernet configuration using DHCP failed"));
    for(;;);
  }
  // setup mqtt client
  mqttClient.setClient(ethClient);
  //mqttClient.setServer("test.mosquitto.org",1883);
  mqttClient.setServer("192.168.1.xxx",1883); // questo è l'indirizzo del mio broker locale gli altri sono nel caso siano server mqtt esterni
  //mqttClient.setServer("broker.hivemq.com",1883);
  //Serial.println(F("MQTT client configured"));

     previousMillis = millis();
}

void loop() { \\qui leggiamo lo stato digitale dei canali ad intervalli prestabiliti
  statusCM=digitalRead(4);
  statusCMM=digitalRead(5);
  statusPG1=digitalRead(6);
  statusPG2=digitalRead(7);
  // check interval
  if(millis() - previousMillis > INTERVAL) {
    sendData();
    previousMillis = millis();
  }
  mqttClient.loop();
}

void sendData() {
  char msgBuffer[20];
// qui a seconda del fatto che il reed sia aperto o chiuso pubblica sul server mqtt il valore ON oppure OFF
  if(mqttClient.connect(CLIENT_ID,"username","password")) {
   mqttClient.publish("nano-ha/cancellino", (statusCM == HIGH) ? "OFF" : "ON"); 
   mqttClient.publish("nano-ha/cancello",(statusCMM == HIGH) ? "OFF" : "ON");
   mqttClient.publish("nano-ha/garage1",(statusPG1 == HIGH) ? "OFF" : "ON");
   mqttClient.publish("nano-ha/garage2", (statusPG2 == HIGH) ? "OFF" : "ON");
 
 }
}

Automazioni

Finita la parte hardware e software dei sensori, mi sono potuto cominciare a sbizzarrire con le automazioni.

Come prima cosa ho messo dei trigger, cioè dei sistemi per disattivare o attivare le automazioni stesse, in particolare escludendo la “sicurezza cani” oppure escludendo le attivazioni relative al cancello pedonale che in alcuni casi posso lasciare aperto (mettendo in questo caso in sicurezza i cani all’interno dell’abitazione.

Su home assistant diventano dei sensori boleani. Che si creano comodamente come commutatori dalla vista Impostazioni => Dispositivi ecc => Aiutanti.

trigger
sicurezza

Di seguito mostro una automazione per essere avvisati che uno dei cancelli è rimasto aperto mentre si apriva la porta di ingresso dell’abitazione. Ed una seconda che avvisa se uno dei cancelli rimane aperto per più di cinque minuti.

In particolare "notify.mobile_app_moto_g4" è un vecchio telefono che ho attaccato a delle ancor più vecchie casse per pc con le quali condivide l’alimentatore che funziona come se fosse un Google Home. L’unica spina delle casse alimenta tutto, e, volendo, è possibile interagire come fosse proprio un Google Home.

DIY google home

Le automazioni poi le ho complicate ulteriormente inviandole anche via testo a tutti i telefoni che condividono l’app companion.

E ovviamente non sono ferme, ogni volta che viene la fantasia di inserire qualcos’altro si può aggiungere senza problemi.

alias: sicurezza cani 3
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.cancellino
      - binary_sensor.cancello
      - binary_sensor.ingresso_iaszone
    to: "on"
condition:
  - condition: and
    conditions:
      - condition: state
        entity_id: input_boolean.sicurezza_cani
        state: "on"
      - condition: or
        conditions:
          - condition: and
            conditions:
              - condition: state
                entity_id: binary_sensor.cancellino
                state: "on"
              - condition: state
                entity_id: input_boolean.escludi_cancellino
                state: "off"
          - condition: state
            entity_id: binary_sensor.cancello
            state: "on"
      - condition: state
        entity_id: binary_sensor.ingresso_iaszone
        state: "on"
action:
  - service: notify.mobile_app_moto_g4
    data:
      message: TTS
      data:
        tts_text: Attenzione ingresso e cancelli sono aperti insieme
mode: single

alias: Sicurezza cani 2
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.cancellino
      - binary_sensor.cancello
    to: "on"
    for:
      hours: 0
      minutes: 5
      seconds: 0
condition:
  - condition: state
    entity_id: input_boolean.sicurezza_cani
    state: "on"
action:
  - service: notify.telefoni
    data:
      title: "!!!Attenzione!!!"
      message: Un cancello è aperto da più di 5 minuti
  - service: notify.mobile_app_moto_g4
    data:
      message: TTS
      data:
        tts_text: Attenzione! Un cancello è aperto da più di 5 minuti
mode: single

Conclusioni

Non ho riportato tutte le automazioni e tutti i passaggi con precisione, nel caso sia di interesse per qualcuno potrò aggiungere direttamente in questo articolo altre specifiche o foto. Alcune cose sono dipendenti dall’hardware utilizzato e quindi vanno adattate alle esigenze.

Arduino è stata una mia vecchia passione, e vedo che, anche allo stato attuale delle cose, di fatto è possibile utilizzare quella magica schedina anche in progetti più propriamente “domotici”. Per esempio la mia centralina di controllo solare è proprio una schedina Arduino UNO (pagata 25€ contro gli almeno 300€ della centralina consigliata dall’idraulico) e fa il suo dovere da quasi 10 anni. Magari se trovo uno shield ethernet a buon prezzo scrivo un altro articolo in proposito.

ti potrebbe piacere anche ...