Step-by-step manual for RPIEasy in English
Már több mint egy éve próbálkozom ESP8266 és Raspberry alapú kütyükkel valami okosságot hozni a lakásomba. Előnye ezeknek a megoldásoknak az, hogy aránylag olcsón ki lehet hozni őket, hátránya, hogy elég sokat kell dolgozni velük, és nem kizárólag a forrasztópákával.. hanem bizony, ha azt akarjuk, hogy valami úgy működjön, ahogy elképzeltük (és ez az oka, amiért a gyári okosotthon-megoldások számomra nem igazán jöttek be), olykor magunknak kell azt leprogramozni.
Mivel a Python nyelven aránylag gyorsan lehet haladni és rengeteg példaprogram érhető el Raspberryhez is, ezért ezek alapján próbáltam az innen-onnan összevásárolt szenzorjaimat használni. Viszont az ESP8266-on megismert ESPEasy-hez hasonló megoldást nem találtam RPI-re, pedig nagyban gyorsítja a műveletet, ha nem kell minden eszközhöz egyedi programot készíteni. Fél év próbálkozás és kódolás után immár elő tudtam állítani egy olyan programot, amivel ez aránylag könnyen megvalósítható. Nem állítom, hogy mindent ismer, de a pluginok támogatása miatt sok minden bekerülhet a következő évek során. Hasonlósága az ESPEasy-hez nem a véletlen műve, sokat merítettem a nyílt forrású másából, de ez azért nem volt egyszerű másolás, aki ezt mondja, annak sejtelme sincs mi a különbség az Arduino C és a Python nyelvek között. Fejlesztés közben persze egyeztettem az ESPEasy fejlesztői csapattal is, azt kell mondjam mindenben támogatóak voltak.
Hogy ne áruljak zsákbamacskát, íme így néz ki a webes felülete akció közben:

Látható, hogy az ESPEasy-től első körben inkább csak a színsémában üt el, ami málna-színt kapott a kék helyett. :)
De ne szaladjunk ennyire előre, hogyan tudjuk használatba venni a programot?
1. Szerzünk egy Raspberry Pi eszközt, optimális erre a célra a kis fogyasztású Raspberry Pi Zero W, de más RPI-k is megfelelőek lehetnek (félreértések elkerülése végett: nem, az Orange Pi nem kompatibilis a Raspberryvel)
2. Feltelepítjük az SD kártyájára a Raspbian Lite operációs rendszert (csak parancssoros, alaprendszer)
3. Ha sikeresen beléptünk a konzolra vagy SSH-n, vagy direkt módon az alábbi módon feltelepíthetjük előzetesen a függőségeket:
sudo apt install python3-pip screen alsa-utils wireless-tools wpasupplicant
sudo apt install zip unzip git
sudo pip3 install jsonpickle
Amennyiben az ifconfig parancs nem települt fel alapértelmezetten, telepítsük azt is: (Linux disztribúció és verzió függő, a jelenlegi Stretch-ben még benne volt)
sudo apt install net-tools
Letöltjük, majd elindítjuk:
git clone https://github.com/enesbcs/rpieasy.git
cd rpieasy
sudo ./RPIEasy.py
A sudo parancs gondoskodik róla, hogy az RPIEasy root joggal indul, ami lehetővé teszi a rendszer minden beállításához való hozzáférést, és nem mellesleg a 80-as webes port használatát... ez első indításnál és az alapbeállítások elvégzéséig mindenképpen kell, a későbbiekben nem feltétlen muszáj így futtatni.
Bár elég sok minden nem fog működni root nélkül, pl a 80-as port helyett csak a 8080 vagy 8008-as porton tud webes felületet indítani, nem tud hardveres PWM funkciókat kezelni, hálózati beállításokat, wifi AP/jelszót módosítani, automatikus indítást, plugin függőségeket feloldani, wifit/BLE-t szkennelni, hangkártyát választani, újraindítani, leállítani... csak hogy pár fontos dolgot említsek. :)
Opcionális, de ajánlott lépés a rendszerünk frissítése, ha valami problémába futnánk a későbbiek során, akkor is ajánlott ezt elvégezni:
sudo rpi-update
sudo apt-get update
sudo apt-get upgrade
4. Beállítjuk:
No, ha a program sikeresen elindult, írja is a konzolon, hogy melyik porton tudott webes felületet nyitni, ha sikerült a 80-ason (ha az már foglalt vagy nincs root jogunk, akkor a következő 8080-ason), akkor az eszköz IP címét beírva a böngészőbe az alábbi nyitóoldalt kapjuk:
A második Config fülön beállítható az eszköz neve, sorszáma, (ESPEasy P2P hálózatban levő egyedi sorszám) valamint a Wifi jelszó, esetlegesen állíthatunk fix IP címet, ha az alap dhcpcd vagy interfaces fájlt használja a rendszerünk.
A Controllers fülön állítható be, hogy hová és hogyan továbbítsa a beállított eszközök adatait az RPIEasy. (A Domoticz HTTP/MQTT-n kívül általános MQTT és ESPEasy P2P érhető el jelenleg)

A következő Hardware fülön érhető el az automatikus indítás, hangkártya kiválasztási lehetőségen túl több hadrverközeli egyéb beállítás is.
Almenük:
- Plugin&controller dependencies: megtekinthető melyik plugin használatának mik a feltételei, és ha root jogunk van, akkor egy kattintással telepíthetőek a hiányzó függőségek (sokáig tarthat, közben nincs visszajelzés!)
- Pinout&ports: az RPI GPIO beállítások módosítása, érdemes itt kezdeni a beállításokat!
- Scan wifi: csak root joggal megy, szkenneli az elérhető hálózatokat
- I2C Scan: az I2C buszon válaszoló eszközök címeit listázza ki, feltétel az I2C bekapcsolása a Pinout&Ports részben, majd újraindítás!!!
-
Scan BLE: bluepy függőség telepítése és újraindítás után érhető el, root joggal
És akkor lássuk a legfontosabb, GPIO-k beállítását lehetővé tévő Pinout&Ports oldalt:
A felül látható, 2x20 tűs kiosztás vizuálisabb típusúak számára egyértelművé teszi, hogy melyik tű melyik, feltéve, hogy megtalálják az 1-es számút, ami a bal felső a webes felületen, a valóságban meg az RPI leírásában keresendő a megoldás. :)
A szabadon használható GPIO-k mellett levő lenyitható menükben állítható a típus, INPUT/OUTPUT, ezek alfajai a lehúzó és felhúzó ellenállásokkal, amik kifejtése egy hosszasabb cikket igényelnének, amit jelenleg mellőzök. Figyelem: A lent levő "Advanced features" beállításai befolyásolhatják a fenti kiosztást, ezért érdemes előbb lent kezdeni, és ha pl kikapcsoljuk az UART-ot, SPI-t, integrált audiót, akkor nyerhetünk pár használható tűt, illetve ha bekapcsoljuk, akkor elveszítjük ezeket, mivel ezek használatához a rendszer lefoglal bizonyos dedikált pineket.
A Submit gomb megnyomásával menthetőek el a beállítások a rendszer /boot/config.txt-be, ami ÚJRAINDÍTÁST követően fog érvénybe lépni. A GPU/videomemóriát headless rendszerben nyugodtan le lehet venni 16MB-ig, hogy több maradjon az operációs rendszer számára, de ha használunk kijelzőt, akkor minimum 64MB-t, vagy 128MB-t hagyjunk, ha valami kijelző gyorsítási funkciókat is szeretnénk használni. Ha Wifin kapcsolódunk, akkor az internal wifit ne kapcsoljuk ki... Ha soros/UART csatlakozást szeretnénk használni, a Bluetooth kikapcsolása sokat segíthet.
UPDATE: Előfordulhat, hogy a /boot partíció csak olvasható (ro), vagy csak a memóriában lett csatolva (tmpfs). Ebben az esetben ezt a fenti beállítás idejére meg kell szüntetnünk, vagy kézzel beállítani a config.txt tartalmát..
A Devices fül a cikk legelején látható, az EDIT gombra kattintva tudunk új eszközöket felvenni, eszköztől függő beállításoktól. Az Interval-nál adható meg, hány másodpercenként továbbítsa az adatokat.
Tipp: érdemes először a megfelelő Controllert beállítani, mert eszközönként kell megadni pl a Domoticz IDX-et és hogy forgalmaz-e az adott eszköz az adott Controller-en.
A jelenleg támogatott eszközök listája:
- Digital input (pl nyitásérzékelő vagy mozgásérzékelő)
- DS18b20 hőmérő
- DHT22 hőmérő
- PCF8591 analóg-digitál és digitál-analóg átalakító
- Wiegand RFID olvasó (szintillesztőn keresztül!!!)
- MCP23017 GPIO portbővítő
- BH1750 fényerőmérő
- LCD kijelző (I2C)
- HC-SR04 távolságmérő ultrahang szenzor
- Si7021/HTU21D
- TLS2561 fényerőmérő
- PN532 Mifare/NFC olvasó (I2C)
- PCF8574 GPIO portbővítő
- PCA9685 PWM bővítő
- OLED kijelző (I2C)
- MLX90614 infra hőmérő (I2C)
- INA219 DC áram/feszültség/fogyasztás mérő (I2C)
- ADS1015/ADS1115 analóg-digitál átalakító
- BMP280/BME280 hőmérő
- NeoPixel/WS2812 címezhető LED
- MH-Z19 CO2 érzékelő
- AM2320 hőmérő
- MPR121 kapacitív érzékelő (I2C)
- 7 szegmenses TM1637 megjelenítő
- RF433Mhz adó és vevő (egyszerű egy GPIO)
- APDS9960 kézmozdulat érzékelő
- VL53L0X LIDAR távolságmérő
- MAX44009 hőmérő
- MCP9808 hőmérő
- MCP4725 digitál-analóg átalakító
- Léptető motor (28BYJ-48)
- (V-)USB Relay
- USB Temper hőmérő
- Python Sound System
- VLC audio
- BLE iTag
- Xiaomi BLE Mijia hő és páratartalom mérő
- Xiaomi BLE Mi Flora növényszenzor
- DS18b20 USB átalakítón keresztül
A Rules fülön adhatóak meg egyszerű szabályok, amiket a beérkező események (pl mozgás) hatására vagy időzítésre végrehajt. Nagyrészt az ESPEasy szabályrendszer használható.
A Tools menüpont alatt érhető el pár hasznos rendszerfunkció, ebből első körben a "Files" pontot emelném ki, amiben lehetőség van fájlokat feltölteni, illetve letölteni (egyesével) az RPIEasy könyvtárában levő files/ mappa alá. (a felugró ablakok engedélyezése nem árthat ennek működésre bírásához)
Természetesen mint minden program, ez sem hibátlan, ha ilyet talál valaki a github-on kérem jelezze egy issue-ban, megpróbálom orvosolni, hisz én is használom, nekem sem jó, ha rejtett hibák maradnak a programban. Ha új eszköz támogatását kéri valaki, amivel én nem rendelkezem, akkor küldjön egyet belőle és mindent megteszek az ügy érdekében.. vagy ott a Donate gomb a github oldal alján. :)
Egyébként sok sikert az RPI DIY kütyük készítéséhez!
Extra infó:
Az igazsághoz tartozik, hogy nemcsak Raspberry Raspbian, hanem PC alapú Debian/Ubuntu rendszereken is működésre lehet bírni, természetesen GPIO nélkül, de az alap rendszerinformációs, USB, BLE és hangeszközök valamint a kontrollerek ettől függően használhatóak. Windows-al nem teszteltem, feltehetőleg nem megy, és nem is fog.