Adoperiamo il progetto della stazione meteo Wi-Fi con Pannello Solare per integrarlo in Home Assistant tramite ESPHome

Quasi 3 anni fa realizzammo un upgrade software ed energetico alla Stazione Meteo Wi-Fi che inviava notifiche tramite Telegram [LINK]. Ora è giunto il momento di riscrivere il codice per integrarla con ESPHome sulla piattaforma di Home Assistant, creando un’entità che mostri temperatura, pressione e umidità  ed un’automazione che invii le rilevazioni al nostro smartphone su Telegram.

Componenti

Le componenti essenziali sono pressappoco le stesse del progetto precedente: una ESP8266 qualsiasi, ma per le dimensioni ridotte e per la antenna esterna abbiamo scelto una Wemos Pro, un sensore digitale BME280 (visto in questo articolo), una batteria  da 3,7V (noi stiamo riciclando quella di  un power bank tascabile), un pannello solare da 5V e 6W e il power manager Sunflower della DFRobot. 



Ovviamente per i collegamenti ci serviranno alcuni cavi che salderemo ai pin, mentre per disporre esternamente la stazione meteo utilizzeremo una scatola di derivazione da 180 x 140 x 70 mm. Per assemblare il tutto abbiamo utilizzato una scheda forata su cui abbiamo saldato i pin header, su cui abbiamo poi saldato i cavi per i collegamenti. Per stabilizzare il tutto non sono mancate le fascette di plastica, le guaine termo restringenti e un tubo di plastica o in ferro con una leggera curvatura per fissare la stazione meteo e, infine, abbondante nastro biadesivo M3.

  • Wemos Pro

Lista componenti Amazon:

Lista componenti Aliexpress:

Collegamenti

Vediamo come effettuare i collegamenti per la nostra stazione meteo con Telegram. Ricordandovi che il BME280 utilizza l’interfaccia I2C, quindi i collegamenti sono estremamente semplici. Per collegare la ESP8266 al sensore BME280 abbiamo usato i pin D1 e D2 per connetterlo ai pin SCL e SDA del sensore.



Abbiamo poi connesso il pin digitale D0 al pin RST, collegamento necessario per permettere alla scheda di andare in Deep-Sleep e poi risvegliarsi. Tra questi due pin abbiamo saldato uno switch che chiude o apre il collegamento: sarà utile posizionarlo in aperto per caricare lo sketch, per poi posizionarlo in chiuso.

Wemos Pro

Adoperate la scheda forata per saldare ogni componente ai relativi cavi, isolandoli con delle guaine termorestringenti o con del nastro isolante. Per tenere formi i cavi arrivano al sensore abbiamo adoperato una guaina più grande.

Wemos Pro

I collegamenti elettrici sono anch’essi facili: il Sunflower richiede che la batteria sia collegata nell’apposito terminale a vite, rispettando la polarità, e stessa cosa per il pannello solare, che anch’esso va connesso ad un apposito terminale a vite. Nel lato destro del power manager troviamo il connettore USB OUT con uscita a 5V e 1A che adopereremo per alimentare il Wemos Pro; potete usare un cavo di alimentazione con connettore Micro-USB e collegare il power manager alla dev-board. Assicuratevi di montare il dissipatore passivo  in dotazione nella parte posteriore del Sunflower.

Wemos Pro

Per assemblare tutto dovremmo levigare la base della scatola di derivazione, praticare un buco per inserire la scatola posta nel retro del pannello solare, poi fissare questo con del nastro biadesivo M3 o superiore al retro della scatola. Sigillate ogni fessura con del silicone, in modo da evitare infiltrazioni d’acqua quando piove.

Fissate ogni componenti con del biadesivo o della colla a caldo, cercando di disporre al meglio ogni parte. Praticate i fori con un avvitatore per l’antenna del Wemos Pro e per i fori con cui fissare la scatola di derivazione ad un supporto.



Predisposizione Telegram ed integrazione in Home Assistant

Procediamo ora creando un Bot di Telegram che ci comunicherà le informazioni rilevate dalla stazione meteo. Apriamo una chat con il BotFather, ossia un Bot che ci servirà per creare altri bot.

Per avviarlo scriviamo /start e poi premiamo Invio

Il BotFather ci risponderà che può aiutarci a creare un nuovo bot e per farlo digitiamo il comando /newbot.

Diamo un nome al nuovo Bot semplicemente digitandolo e dando poi Invio. Adesso toccherà dargli anche una username che lo renderà riconoscibile. Non sarà sempre facile perché molti nomi sono già utilizzati, quindi siate fantasiosi. L’importante è che finisca in Bot o _bot, come riportato nell’esempio.

Una volta che avremo trovato una username al nostro Bot, il BotFather ci comunicherà delle informazioni molto importanti che dovremmo tenere solo per noi e conservare gelosamente. La prima è il percorso per trovare il nostro Bot, l’altra è la API che ci servirà nel nostro codice.

Adesso che abbiamo l’API ci serve ricavare un’ultima informazione, ossia l’ID Utente o l’ID gruppo se vogliamo inserire il nostro Bot in un gruppo. Ricorreremo anche stavolta ad un altro Bot chiamato IDBot.

Avviamo una chat con IDBot e digitiamo il comando /getid e otterremo una serie di numeri che rappresentano il nostro ID, oppure inseriamolo nel gruppo con il bot della nostra stazione meteo e diamo il comando /getgroupid. L’ID che otterremo è anch’esso privato.



Andiamo su Home Assistant, apriamo il File editor e inseriamo nel file configuration.yaml le seguenti linee, ricordandoci di inserire la api_key, ovvero il token, ottenuto in precedenza e di indicare la chat_ids.

#Telegram Bot
telegram_bot:
  - platform: polling
    api_key: "xxxxxxxxxxxxxxxxxxxx"
    allowed_chat_ids:
      - xxxxxxxxxxx

Salviamo, andiamo su Strumenti per sviluppatori, verifichiamo la configurazione e, se tutto è andato bene, riavviamo Home Assistant.

ESPHome

Ora che il bot Telegram è configurato correttamente, andiamo a creare un nuovo device su ESPHome e chiamiamolo Stazione Meteo. Saltiamo per il momento la connessione e selezioniamo la scheda che dobbiamo programmare (ESP8622).

Una volta creato, clicchiamo su EDIT per modificare il codice. Dobbiamo inserire l’interfaccia con la quale la dev-board comunica con il sensore (i2c), il tipo di sensore adoperato e le variabili sulle quali caricare i dati ricavati. Indichiamo anche l’indirizzo del sensore. Abbiamo poi aggiunto un deep sleep, ossia mandiamo a dormire la scheda per circa un’ora dopo che è rimasta attiva per 30 secondi, leggendo i dati dal sensori e caricandoli su Home Assistant. La dev-board si riattiva dopo un’ora, ripete il ciclo di lettura e invio, poi ritorna in modalità di sonno profondo per risparmiare corrente. Infatti, adoperando un semplicissimo dispositivo per la lettura degli Ampere, passiamo da circa 75mA a 0A. In realtà, la scheda utilizza 0,179mA che non sono rilevabili dal dispositivo che stiamo utilizzando.

esphome:
  name: stazione-meteo
  friendly_name: Stazione Meteo
  platform: ESP8266
  board: d1_mini

logger:

api:
  encryption:
    key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

ota:
  password: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

i2c:
  sda: GPIO4
  scl: GPIO5
  scan: True

sensor:
  - platform: bme280_i2c
    temperature:
      name: "Temperatura"
      oversampling: 16x
    pressure:
      name: "Pressione"
    humidity:
      name: "Umidità"
    address: 0x76


deep_sleep:
  run_duration: 30s
  sleep_duration: 1h

Ricordatevi di lasciare il vostri dati relati all’OTA e all’API. Salvate e verificate con Validate se il codice è stato scritto correttamente. Potete ora installare il codice sulla vostra dev-board. Ci vorrà un po’ di tempo.

Conclusa l’installazione, integriamo il device su Home Assistant. Dovrebbe essere arrivata una notifica sulla plancia. In ogni caso, per integrarlo andate su Impostazioni -> Dispositivi e servizi e apparirà il dispositivo Stazione meteo da integrare. Autorizzate la configurazione ed otterrete quanto segue.

Automazione Telegram

Dobbiamo ora creare un’integrazione per inviare ogni ora un messaggio sulla chat che mostri temperatura, pressione e umidità rilevate dalla Stazione meteo. Muoviamoci su Home Assistant in Impostazioni -> Automazioni e scenari -> CREA AUTOMAZIONE. Scegli la voce crea una nuova automazione e, dal menu apribile in alto a destra dove ci sono i tre puntini, clicca su Modifica in YAML. Copia il codice che ripotiamo di seguito e salva.

alias: Stazione Meteo
description: ""
trigger:
  - platform: time_pattern
    minutes: "0"
condition: []
action:
  - service: telegram_bot.send_message
    data:
      message: >-
        Ciao, la Temperatura è di {{ states('sensor.stazione_meteo_temperatura')
        }}°C, la Pressione è di {{ states('sensor.stazione_meteo_pressione') }}
        hPa e l'Umidità è del {{ states('sensor.stazione_meteo_umidit') }}%
mode: single

Adesso, ogni volta che scatta un’ora, viene inviato un messaggio tramite Telegram sui vostri smartphone, aggiornandovi sulle condizioni meteo.