Smarthome

ESPHome okosítás – mosógép

Okos mosógép: jelezzen ha lejárt, de még mindig nem pakoltunk ki belőle.

Sokan megcsinálták már ezt, csak kész Zigbee eszközökkel: egy rezgés- és egy nyitásérzékelő segítségével.

A rezgésérzékelőt a mosógép bármelyik pontjára felragasztják, amíg rezgést érzékel, addig valószínűsíthető, hogy jár a mosógép. A nyitásérzékelőt az ajtóra teszik, így tudják mikor van nyitva és csukva a mosógép töltőnyílása.

Okos mosógép

Nyilván, léteznek eleve smart mosógépek, de minek vegyél újat, ha jó a mostani is? Ettől függetlenül érdekesnek tartottam szétnézni a piacon, mit tudnak ezek nyújtani igazából.

Az Árukeresőn szétnézve már 101 500 Ft-tól elérhető egy okos mosógép. Márkája Candy, úgyhogy ajánlani biztos nem fogom a közelmúltban történtek miatt. A márkásabb készülékek 169 190 Ft (Samsung), 224 490 Ft (LG), 308 899 Ft (Electrolux) árakon érhetőek el.

Milyen funkciókhoz férünk mégis hozzá a gyári alkalmazásokban? Egy összesített lista:

  • ki- és bekapcsolás
  • program indítása, szüneteltetése, leállítása
  • program időzítése
  • program állapota, hátralévő idő
  • ajtó és ajtózár állapota
  • fogyasztás mérése
  • aktuális ciklus (pl. centrifuga)
  • mosószer és öblítő adagolás finomhangolása
  • dobkapacitás kijelzése (súly)

Korábbi megoldás

Eddig egy Tuya smart socketet használtam erre a célra, ami tud fogyasztásmérést (ezekről írtam is, miért nem volt jó ötlet). Ha van fogyasztás, megy a mosógép, ha nincs, akkor nem. Ez elég egyértelmű. Pár perc után, ha megszűnt a fogyasztás akkor értesítést küldtem, plusz a hangszóró bemondta, hogy „lejárt a mosógép”.

Két probléma volt/történt:

  • akkor is jelzett a hangszórón, ha egyébként hallottuk a mosógépet csipogni és már rég kipakoltunk belőle,
  • teljesen megmakkant a Tuya smart socket, WiFi-re nem csatlakozik, áram nem folyik át rajta, visszajelző LED-je halványan villog…

Tervezés

Gondolkodtam több, saját megoldáson ehhez. Az egyik opció, hogy CT Clamp sensort veszek, amivel mérem a fogyasztást. Még csak pontos se kell legyen, mert igazából az érdekel, van-e egyáltalán valamennyi áramfogyasztás vagy semmi.

Aztán gondolkodtam rezgésérzékelőkön és eszembejutott, hogy a HEStore idei ajándéka, egy ilyen kis rázogatható izé, ami random választ egy ledet 3 közül.

Jól megnézegettem, a hátulján megtaláltam a rezgésérzékelőt. Kimértem multiméterrel: hát tényleg az, ráadásul tök analóg cucc, ahogy rázogatod, úgy kapcsol.

Megpróbáltam kiforrasztani, aztán úgy jártam, ahogy a harmadik képen látszik. Mivel elég rövidre voltak vágva a lábai, a pákával jól megolvasztottam az alját és szét is ugrott szegény. Hát ezt baszhatom, mondtam magamban.

Na nem baj, rendelek akkor újat, úgy is kell más projekthez is ez-az.

A választott elemek a TZT SW-420 (nice) és egy MC-38 ajtó nyitás érzékelő (reed relé tkp).

Mindkét érzékelő kapcsolóként viselkedik. ESPHome-ban ezeket GPIO binary sensorként egyszerűen lehet kezelni. Hardveresen mindössze annyi dolgunk van vele, hogy egy-egy GPIO-ra bekötjük őket. Pulldown/pullup resistorra sincs feltétlen szükség, mert az ESP-k bizonyos GPIO-in vannak beépítve, amik kapcsolhatóak.

Ha már erre járunk és kerül egy ESP a fürdőszobába, mit lehetne még bele tenni?

  • hő- és páratartalommérő
  • mozgásérzékelő
  • vízszivárgás érzékelő
  • víz átfolyásmérő (mérni mi, hány m³ vizet fogyaszt)

Ezek nagy része már megoldott nálunk vagy nincs értelme, így tényleg csak a mosógéppel foglalkoztam ebben a projektben.

A kód

esphome:
  name: washing-machine
  friendly_name: Washing Machine
  project:
    name: "PVGA Hackerspace.Washing Machine"
    version: "1.0"

binary_sensor:
  # Bekapcsolt állapotot jelző binary sensor, kézzel fogjuk állítgatni
  - platform: template
    name: "Status"
    id: bs_status
    icon: "mdi:washing-machine"

  # A töltőnyílás ajtaján lévő nyitásérzékelő
  - platform: gpio
    name: "Door"
    id: bs_door
    pin:
      number: GPIO2
      mode:
        input: true
        pullup: true
    # Ha kinyitjuk a mosógépet, akkor tuti kikapcsolt állapotba kerül:)
    on_release:
      - lambda: |-
          id(bs_status).publish_state(false);
    device_class: door

sensor:
  # Rezgésérzékelő modul: pulse counterrel az egy perc alatt érzékelt rezgéseket számolja össze
  - platform: pulse_counter
    pin: GPIO1
    name: "Vibrations"
    update_interval: 60s
    # Ha az ajtó csukva van és x. darab feletti a rezgések száma, bekapcsoltra rakjuk a status szenzort, ellenkező esetben kikapcsoljuk.
    on_value:
      - lambda: |-
          if (x > 300 && id(bs_door).state == false) {
            id(bs_status).publish_state(true);
          } else {
            id(bs_status).publish_state(false);
          }

  # Duty time sensor: utolsó bekapcsolást és a jelenleg futó program idejét adja vissza
  - platform: duty_time
    id: wm_working_time
    name: Work time
    sensor: bs_status
    last_time:
      name: Last turn-on

# Status LED, villog, ha valami ESPHome hiba van. Hasznos volt a szerelés alatt.
# Ez az ESP panelen lévő beépített LED, ha nincs ilyened, hagyd ki nyugodtan.
status_led:
  pin:
    number: GPIO8
    inverted: true

Ez HA-ban így fog kinézni:

Home Assistant mosógép
Home Assistant mosógép

Ezzel még nincs vége. A fenti kódot ha megnézted, láttad, hogy saccoltam egy 300 rezgés/perc értéket bekapcsolt állapotnak. Nincs mit tenni, felszerelés után el kell indítani egy mosást és finomhangolni kell az értéket.

Egyrészt lehet játszani ezzel a 300-as értékkel az on_value esemény alatt, másrészt lehet állítani az update_interval értékét a pulse_counteren, ha előfordul, hogy 1 percig nincs rezgés.

Szerelgetés

Sok izgalmasat nem tudok mutatni: egy műanyag dobozba beleraktam mindent és kész, sitty sutty.

Felkerült így az egész a mosógép oldalára.

Mint kiderült, nem mindegy a mosógép melyik részére szereled fel. Először túlságosan hátra raktam, ott pedig alig remeg a gép, szinte semmit nem érzékelt belőle.

Miután meglett a jó pozíció, jócskán kellett még állítani a pulse_counteren:

sensor:
  # Rezgésérzékelő modul: pulse counterrel az egy perc alatt érzékelt rezgéseket számolja össze
  - platform: pulse_counter
    pin: GPIO1
    name: "Vibrations"
    # Az egy perces időablak kevés volt, két perc már jónak tűnik
    update_interval: 120s
    # Ha az ajtó csukva van és x. darab feletti a rezgések száma, bekapcsoltra rakjuk a status szenzort, ellenkező esetben kikapcsoljuk.
    on_value:
      - lambda: |-
          if (x > 20 && id(bs_door).state == false) {
            id(bs_status).publish_state(true);
          } else {
            id(bs_status).publish_state(false);
          }

1 perc helyett 2 perces lett a figyelt időablak, 300 helyett pedig már 20 impulzus esetén bekapcsoltnak tekintjük a gépet.

Néha így is kihagy, úgyhogy még kicsit finomítok rajta, de kezdetnek elég jó.

Így:

  • kapunk értesítést, ha lejár a mosógép, de még nem pakoltunk belőle ki,
  • nyilván tudjuk tartani, hányszor mostunk, ami használható arra, hogy tudjuk, mikor van ideje kitisztítani a gépet.

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük