
ESPHomen käyttöönotto ja räätälöidyt komponentit
ESPhome on helppokäyttöinen työkalu ESP8266 ja ESP32 mikrokontrollerien firmwaren tekoon mahdollistaen samalla laitteiden yhdistämisen Home Assistantiin. Sen käyttö perustuu yksinkertaisiin, mutta tehokkaisiin yaml-konfiguraatiotiedostoihin. Peruskäytössä ohjelmointitaitoja ei siis tarvita. Valmiita esimerkkejä ja kattava dokumentaatio löytyy ESPHomen -sivuilta. ESPHomea voi käyttää käytännössä kaikkien laitteiden kanssa, joissa on joko ESP8266 tai ESP32 mikrokontrolleri sisäänrakennettuna tai erillisten kehitysalustojen kuten tälläkin sivustolla usein mainitun Wemos D1 Minin kanssa.

ESPHomeen liitettävien anturien kirjo on laaja. Yhteen alustaan on mahdollista yhdistää yksi tai useampi anturi samanaikaisesti. Jos anturille ei löydy tukea suoraan, on sille myös mahdollista kirjoittaa oma komponentti. Tällöin tosin ohjelmointitaidot tulevat tarpeeseen.
ESPHomen asennus onnistuu helposti Pythonin PIP -pakettina tai Docker -konttina. Sen voi asentaa myös Home Assistantin lisäosana kunhan käytössä on Home Assistant OS tai Supervised -asennus.
ESPHomen käyttö tapahtuu joko sen Web-käyttöliittymän eli Dashboardin avulla tai suoraan komentoriviltä. Liitettävälle laitteelle kirjoitetaan yaml -muotoinen konfiguraatiotiedosto, jonka avulla järjestelmä tekee tarvittavan firmwaren. Laitteet ilmestyvät firmwaren päivityksen jälkeen Home Assistantiin kunhan myös Home Asistant ESPHome -integraatio on asennettu.

Ensimmäisellä kerralla firmware on päivitettävä laitteeseen langallisesti USB-kaapelilla tai ohjelmointipinneihin kytkeytymällä esimerkiksi ESPHome-Flasherin avulla. Jatkossa firmware on mahdollista päivittää langattomasti OTA -ominaisuuden avulla, kunhan se on konfiguraatiotiedostossa sallittu.
Käytössäni on useita ESP8266 -laitteita kuten valojen ohjauksia, kosteushälytin sekä sähkönkulutuksen ja vedenkulutuksen seuranta. Ennen päivitystä uuteen kotiautomaatiopavelimeen, nämä laitteet oli toteutettu MySensorsin tai muun vastaavan firmwaren avulla. Palvelinvaihdoksen yhteydessä kaikki nämä saivat vaihtua ESPHomeen.
Valojen ohjaus Sonoff Basicin avulla
Aikaisemman Sonoff Basicin avulla toteutetun valo-ohjauksen vaihto ESPHomeen oli ehdottomasti joukon helpoin tehdä. Tätä varten käytin valmista esimerkkikonfiguraatiota, johon luonnollisesti vahdoin oman kotiverkkoni ja Home Assistantin tiedot.
esphome:
name: valot
platform: ESP8266
board: esp01_1m
# Enable logging
logger:
# Enable Home Assistant API
api:
ota:
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
binary_sensor:
- platform: gpio
pin:
number: GPIO0
mode: INPUT_PULLUP
inverted: True
name: "Sonoff Basic Button"
on_press:
- switch.toggle: relay
switch:
- platform: gpio
name: "Sonoff Basic Relay"
pin: GPIO12
id: relay
status_led:
pin:
number: GPIO13
inverted: yes
Kosteushälytin
Aiempi MySensors:n avulla toteutettu kosteushälytin koostuu Wemos D1 Ministä, siihen liitetystä kosteusanturikaapelista ja muutamista peruskomponenteista. Laitteen mittaus perustuu kaapelin resistanssin muutokseen kosteuden lisääntyessä. Koodi oli aiemmin kirjoitettu itse, joten myös ESPHome tarvitsisi räätälöidyn komponentin.
Komponentin kirjoittaminen oli helppoa. Vanhasta koodista kopioitiin setup() ja loop() -funktioiden sisältö uuden räätälöidyn komponenttiluokan vastaaviin funktioihin. Tämän lisäksi anturiarvojen julkaisulle piti lisätä omat kutsut koodiin ja poistaa vanhat. Komponentin koodi ja anturin konfiguraatiotiedosto on ladattavissa GitHubista.
Sähkönkulutuksen seuranta
Aikaisemmin rakentamani sähkönkulutuksen seuranta koostuu Wemos D1 Mini Pro:sta ja siihen yhdistetystä valoanturista. Sähkön kulutus saadaan sähkömittarin ledin valopulssit laskemalla. ESPHomessa on tätä varten valmiiksi sopivat pulssien laskentaan tehdyt mallit:
esphome:
name: sahkon-kulutus
platform: ESP8266
board: d1_mini_pro
# Enable logging
logger:
# Enable Home Assistant API
api:
ota:
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
sensor:
- platform: pulse_counter
pin: 5
unit_of_measurement: 'W'
name: 'Hetkellinen kulutus'
filters:
- multiply: 6 # (60s/10000 pulses per kWh)
total:
name: "Kumulatiivinen kulutus"
unit_of_measurement: "kWh"
accuracy_decimals: 2
filters:
- multiply: 0.0001 # (60s/10000 pulses per kWh)
Vedenkulutuksen seuranta
Myös vedenkulutuksen seuranta perustuu sähkönkulutuksen tavoin pulssien laskemiseen. Alustana on tässä Wemos D1 Mini ja siinä laser-valon heijastusta mittaava anturointi. Firmwaressa erona on että anturin raakadataa on käsiteltävä matemaattisesti enemmän kuin ESPHomen filtterit kykenevät, joten tätäkin varten ESPHomeen piti kirjoittaa oma räätälöity komponentti. Komponentin koodi ja anturin konfiguraatiotiedosto on ladattavissa GitHubista.
Useita antureita yhteen
Aiemmassa järjestelmässä Raspberry Pi:n GPIO -nastoissa oli kiinni anturit sisilmanlaadun mittaukselle, ilmanvaihtokoneen jäteilman lämpötilalle sekä ilmanvaihtokoneen tehostukseen käytettävät releet. Sisäilmanlaadun uudesta anturista kirjoitin erillisen jutun jo aiemmin. Kaikki edellä mainitut komponentit on uudessa järjestelmässä kytketty Olimex ESP32-EVB -alustaan ja niille on kirjoitettu yhteinen konfiguraatiotiedosto:
esphome:
name: anturialusta
platform: ESP32
board: esp32-evb
# Enable logging
logger:
# Enable Home Assistant API
api:
ota:
password: !secret ota_password
ethernet:
type: LAN8720
mdc_pin: GPIO23
mdio_pin: GPIO18
clk_mode: GPIO0_IN
phy_addr: 0
manual_ip:
static_ip: x.x.x.x
gateway: y.y.y.y
subnet: z.z.z.z
switch:
- platform: gpio
name: "Ilmanvaihdon tehostus"
pin: 32
- platform: gpio
name: "Takkakytkin"
pin: 33
dallas:
- pin: GPIO14
i2c:
sda: GPIO13
scl: GPIO16
sensor:
- platform: dallas
address: 0x0C000802C9B83B10
name: "Nilan jäteilma"
- platform: scd30
co2:
name: "CO2-pitoisuus"
accuracy_decimals: 1
temperature:
name: "Lämpötila"
accuracy_decimals: 1
humidity:
name: "Suhteellinen kosteus"
accuracy_decimals: 1
Juotin kytkentälevyn palalle Dupont-naaarasliittimet ja näistä johtimet ESP32:n GPIO-pinneihin. Suunnittelin ja tulostin koko komeudelle kotelon. Kytkentälevyn liittimet tulevat kotelon kannesta läpi helpon kytkennän mahdollistamiseksi.

Uponor KNXRF -termostaatit
Aikaisemman Uponorin KNXRF -termostaattien seurannan toteuttaminen ESPHomen avulla oli ehdottomasti työläin projekti tässä listatuista. Aiemmin Raspberry Pi:n GPIO-nastoihin yhdistetty RF-moduuli liitettiin nyt ESP32:een ja samalla koko koodi piti kirjoittaa uusiksi. Löytämäni, lupaavalta vaikuttanut koodi ei ensiyrittämällä toiminut, vaan aiheutti järjestelmällisen kaatumisen käynnistyksen yhteydessä muistiongelmien vuoksi. Ongelman selvittelyyn ja samalla koodin sovittamiseen omaan käyttötarkoitukseen kului yllättävän paljon aikaa. Lopputuloksena yksinkertaistettu ESPHome -komponentti, joka löytyy GitHubista.
Alustana tälle on käytetty NodeMCU-32S:ää. Suunnittelin ja tulostin sille yksinkertaisen kotelon:
