Smarthome

ESPHome okosítás – okos kávéfőző

Hogyan lesz okos a kávéfőző? Így!

Régóta tervezem, hogy felokosítsam a kávéfőzőt. Sajnos (?) viszonylag sok kávét iszok. Lefőzök általában előre egy nagyobb adagot, vagy egyet reggel, egyet délben.

A lényeg, hogy sokszor ott marad a kávéfőzőben a kávé, de azért kihül, azt meg én annyira nem szeretem. A kávéfőzőnk melegíti alul a kannát, szóval ha vissza akarom melegíteni a kávét, csak vissza kell kapcsolni a gépet. Van, hogy hosszabb meetingem lesz, amikor szeretek elszürcsölni egy kávét, ilyenkor tök jó lenne automatán bekapcsolni a melegítést, hogy már csak fel kelljen markolni a kávét, ha kész.

Tehát a cél igazából az, hogy itt is tudjam nyomkodni a bekapcsológombot, kapjak infót arról, hogy épp be van-e kapcsolva a gép. Esetleg tök jó lenne egyéb infót is kinyerni:

  • hány ˚C a fűtőpanel/melegentartó jelenleg,
  • fel van-e töltve a víztartály,
  • van-e még kávé a kannában.

Ez már egy kicsit komolyabb projekt. Vehetnék helyette egy értelmes kávégépet is különben, de abban mi a kihívás? Ez a gép 10e Ft volt a MediaMarktban, aznap vettük, hogy összeköltöztünk párommal, így már-már eszmei értéke van:)

Russell Hobbs filteres kávéfőző
Russell Hobbs egyszerű, filteres kávéfőző

Bármilyen másik olcsó kávéfőző alkalmas erre a retrofittingre, kis módosításokra lehet szükség.

Az alternatívák

Ahhoz képest, hogy a legnagyobb smarthome-buzik – mint én – olyan szakterületen dolgoznak, ahol literszámra fogy a kávé, furcsa módon annyira nem kiforrott az okos kávéfőző piac, hazánkban pedig végképp limitált az elérhető termékek köre. Árukeresős kutatás eredménye:

  • A legalja 20-30e Ft környékén van, DeLonghi kapszulás gép. Az „okosság” kimerül abban, hogy kap firmware frissítést és tudod követni, hogy mikor kell takarítani, valamint kapod a reklámokat, hogy melyik kapszulát vedd meg hozzá. Nagyszerű.
  • Ugrunk egy hatalmasat, 419e Ft, Miele. Ez már egy darálós, tejhabosítós készülék. Itt már legalább tudsz főzést indítani az alkalmazásukból.

Nem volt értelme tovább keresni. Ezeknél egyébként elég kérdéses az is, hogy Home Assistantba mennyire lehet őket integrálni.

Külföldön 30e Ft környékén van filteres, 50e Ft környékén pedig kapszulás. Az olcsók tényleg csak annyit tesznek elérhetővé az alkalmazásukon át, hogy be tudod őket kapcsolni, ettől azért én többet akarok.

A terv

Gondoltam megpróbálok mindent megvalósítani abból, amit a bevezetőben írtam.

A bekapcsolás-kikapcsolás tök egyszerű. Ez már a harmadik írásom, ahol beszámolok róla: két optocsatoló, egyik a gombra, másik a visszajelző LED-re. Példa korábbról az Aroma Diffuser.

A hőmérséklet méréséhez tehetek egy olcsó DS18B20 hőmérőt a melegentartó tálca alá. Így láthatom egyrészt azt, hogyha be van kapcsolva a melegítő, másrészt ha kikapcsol, láthatom, hogy még milyen meleg lehet a kávé a kannában. Ha beteg állat vagyok, azt is meg tudom oldani így Home Assistantból, hogy a bekapcsoló gombot kapcsolgatva egy bizonyos hőmérsékleten tartom a kávémat.

Azt, hogy fel van-e töltve vízzel a tartály, több módon is vizsgálhatom. Ez egyébként két dologra is jó:

  • így meg lehet állapítani, hogy előre be van készítve főzéshez a víz, szóval reggel bekapcsolhat automatán a kávéfőző, hogy kész kávéra ébredjünk,
  • meg lehet állapítani, hogy elkészült a kávé, ha elfogyott a víz, míg bekapcsolt állapotban vagyunk. Így tehát megkülönböztethető a kávéfőzés és a melegentartás, mint állapot.

Gondolkodtam a non-intrusive vízszint érzékelőn és az ultrahangos érzékelőn is. Előbbivel ugye csak bináris adatom lenne: van víz vagy nincs víz, utóbbival viszont a vízszintet is látom, szóval tudom, hogy hány „százalékban” van kész a kávé, mekkora volt az utolsó adag, stb.

A non-intrusive szenzort egyszerűen a kávéfőző hátuljánál feltapasztanám a víztartályra. Nem lenne túl feltűnő, de mégiscsak ott lógna a seggén.

Az ultrahangos szenzort beépíteném a tetejébe, a víztartály fölé, viszont nagyon tartottam attól, hogy a magas páratartalom (gőzölve küldi a vizet a kávéra) kinyírja. Épp mikor ezen törtem a fejem, ránéztem az ESPHome changelogra.

A02YYUW Waterproof Ultrasonic Sensor
A02YYUW vízálló ultrahangos érzékelő

Éppen most került be támogatás a képen látható szenzorra, ami vízálló (IP67)!

A gyártó weboldalán ez áll:

The ultrasonic sensor adopts closed separated probe, waterproof and dustproof, which could be well suitable for harsh and moist measuring environment.

DFRobot, A02YYUW termékoldal

Pont erre van szükségem!

Rákerestem és biztos nem fogok ilyet rendelni, mert drágább, mint amennyiért anno a kávéfőzőt vettem.

Így hát maradt a non-intrusive szenzor.

Azt sajnos el kellett vessem, hogy vizsgáljam a kannában a kávé jelenlétét: nincs hely bármit is beszerelni mögé.

Vizsgálat

Míg vártam az alkatrészeket, gondoltam kinyitom a kávéfőző alját, hogy lássam, hogy férek el benne és hány voltos a logika.

A gyártó nem volt kedves. Miután kicsavartam a két philips csavart, a másik kettőt megláttam, hogy azt a rohadt „lyukas lapos” csavart használták. Nincs reszelőm, hogy feláldozzak egy lapos csavarhúzót, úgyhogy kölcsönkértem egy készletet.

A belső elektronika 24V AC, így kelleni fog egy kis tápegység majd.

Egy sikeres próbapaneles teszt, majd annak sikertelen felrajzolása, végül egy nagyon elrontott univerzális nyákkal történő szenvedés után majdnem feladtam. Aztán összeszedtem magam és újra nekiestem, figyelve arra, hogy lehetőleg ne basszam el az áramkör tervét most.

Okosítás

EasyEDA-ban összedobtam végre sikeresen a tervet, aztán megcsináltam egy univerzális nyákon. Ennek a mintája van a 3D terven.

Mint mindig, most is undorító lett a végeredmény, de működik. Később még ki lett bővítve egy plusz LED-del, de arról majd olvashatsz.

Egyszerű pin headerökkel lehet az érzékelőket bekötni:

  • egy a visszajelző LED-re,
  • egy a power gombra,
  • egy a hőmérőre,
  • egy pedig a vízérzékelőre.

Beépítés

A kis tápegységet beforrasztottam az eredeti panelre, amire beérkezik a 220V.

Kivettem a vezérlőgombok paneljét és arra forrasztottam vezetékeket, amiket majd a saját panelemre fogok vezetni. Két vezeték ment a LED-re, két vezeték pedig a nyomógombra.

A hőmérőt is egy külön vezetékre kötöttem, hogy el tudjam helyezni a fűtőszál környékére. A vízérzékelő vezetékéből annyit hagytam kint, amennyi nagyjából szükséges. Az egész cucc pedig ment a doboz egyik üres sarkába – szerencsére bőven hagytak benne helyet.

ESPHome kód

Sok hack szerencsére nincs benne. Az alapja ennek is az Aroma Diffuser kódja.

esphome:
  name: coffee-machine-v3
  friendly_name: "Coffee Machine"

globals:
  # Ez a változó true, ha kézzel állítgattuk a powert, false, ha a gép magától módosított.
   - id: v_manual_event
     type: bool
     restore_value: no
     initial_value: "true"

switch:
  # A Home Assistantban megjelenő power switch
  - platform: template
    name: "Power"
    id: sw_power
    icon: "mdi:coffee-maker"
    # A fizikai visszajelző LED állapota határozza meg a kapcsoló állását
    lambda: |-
          if (id(bs_status).state) {
            return true;
          } else {
            return false;
          }
    # Be- és kikapcsoláskor "megnyomjuk" a power gombot, ill. elrakjuk egy változóba, hogy ezt az eseményt HA-ból adtuk ki
    turn_on_action:
      - lambda: |-
          id(v_manual_event) = true;
      - switch.turn_on: sw_power_btn
    turn_off_action:
      - lambda: |-
          if (id(sw_power).state) {
            id(v_manual_event) = true;
            id(sw_power_btn).turn_on();
          }

  # Erre a GPIO-ra van kötve a fizikai bekapcsológomb.
  - platform: gpio
    pin: GPIO22
    name: "Power button short"
    id: sw_power_btn
    icon: "mdi:coffee-maker"
    internal: true
    on_turn_on:
      # 150 ms után ki is kapcsoljuk, ezzel egy gombnyomást szimulálunk
      - delay: 150ms
      - switch.turn_off: sw_power_btn

  # Ez egy LED, amivel az eredeti power ledet helyettesítem.
  - platform: gpio
    pin: GPIO15
    id: led_pwr_led
    internal: true

binary_sensor:
  # Minden bekapcsoláskor/kikapcsoláskor reseteljük. Akkor kapcsol be, ha
  #  - a kávéfőző bekapcsolásakor volt víz a tartályban
  #  - majd kifogy a víz
  #  - és letelik 200s
  - platform: template
    icon: mdi:coffee
    name: "Coffee ready"
    id: bs_coffee_ready

  # Ha a fizikai gombot nyomva kapcsoljuk ki a gépet vagy magától áll le a beépített időzítő miatt, akkor ez true-ra vált.
  - platform: template
    device_class: problem
    name: "Automatically turned off"
    id: bs_hw_turn_off

  # Az aktuális ki-/bekapcsolt állapotot jelző szenzor, a fizikai power ledre van kötve. Ha megváltozik az értéke, ennek megfelelően az új power ledet is ki-/bekapcsoljuk.
  - platform: gpio
    id: bs_status
    name: "Status"
    pin:
      number: GPIO23
      inverted: true
      mode:
        input: true
        pullup: true
    on_state:
      - lambda: |-
          if (id(bs_status).state == false && id(v_manual_event) == false) {
            id(bs_hw_turn_off).publish_state(true);
          } else {
            id(bs_hw_turn_off).publish_state(false);
          }

          if (id(bs_status).state) {
            id(led_pwr_led).turn_on();
          } else {
            id(led_pwr_led).turn_off();
          }

          id(v_manual_event) = false;
      # Resetelni kell a "Coffee Ready" státuszt jelző szenzort is
      - binary_sensor.template.publish:
          id: bs_coffee_ready
          state: OFF

  # Vízérzékelő a víztartály falához rögzítve
  - platform: gpio
    id: bs_water_tank
    name: "Water tank"
    device_class: moisture
    icon: mdi:cup-water
    pin:
      number: GPIO21
      inverted: true
      mode:
        input: true
        pullup: true
    # Ha kiürül a tartály, átállítjuk a Coffee Ready szenzort
    on_release:
      then:
        - if:
            condition:
              lambda: 'return id(bs_status).state == true;'
            then:
              - delay: 200s
              - binary_sensor.template.publish:
                  id: bs_coffee_ready
                  state: ON

# DS18B20 hőmérő kezeléséhez
one_wire:
  - platform: gpio
    pin: GPIO19

# Fűtőszál melletti hőmérő
sensor:
  - platform: dallas_temp
    name: "Heater temperature"
    update_interval: 60s
ESPHome kávéfőző Home Assistantban
  • A Power kapcsolóval értelemszerűen ki- és be lehet kapcsolni a kávéfőzőt,
  • az Automatically turned off akkor jelez, ha a kávéfőző gyári időzítője kapcsolta ki a gépet,
  • a Coffee Ready akkor jelez, ha kész a kávé (erről bővebben lentebb),
  • a Heater temperature a hőmérő a melegítőlap fűtőszálánál,
  • a Status redundáns a Power kapcsoló állapotával (ellenben ez a pontos ki/bekapcsolt állapotot jelzi, a kávéfőző szerint),
  • a Water tank azt jelzi, hogy van-e víz a tartályban.

Hogy lefőtt-e a kávé, azt a víztartály szenzor on_release eseménye állítja. Ha a víztartály érzékelője úgy érzékeli, hogy a teli tartály üresre váltott, miközben a gép be volt kapcsolva, 200 mp. után azt jelzi, lefőtt a kávé. Igen, pontosan 200 mp kell még a kávéfőzőnek, hogy minden csepp kijöjjön, bármennyi vizet rakok bele ezen felül:)

Először persze nem működött

Nagyjából fél nap után kikapcsolt az ESP és vissza se kapcsolt. Szétszedtem, de láttam, hogy boldogan világít a power led. Kiderült, hogy a fűtőszál ki-/bekapcsolása zavarja a tápegységet, ami egy pillanatra ilyenkor kikapcsol. Ha rövid időn belül többször újraindul az ESP, akkor az ESPHome nem fog visszakapcsolódni a WiFi-re, ezért tűnt el teljesen. A tápegység cseréje megoldotta.

Másik gond, hogy ha a bekapcsolt állapot figyeléséhez összekötöm az eredeti power led érintkezőit az optocsatolóval, akkor a LED nem világít. Egyszerűen annyira kevés áram megy rajta át, hogy bármi mást kötök mellé, az a LED már nem fog halványan se világítani. Ezért az eredeti LED-et kikötöttem, és az ESP-ről kapcsolok egy másikat, amit a régi helyére tettem.

Végszó

Imádom, remek lett:)