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:

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.