A hardver építése után térjünk rá a szoftverre.
Legelső dolgunk a memóriakártyára a:
Majd beállítása a fentiek szerint.. legalább a WiFi menjen.
2. A következő lépésben telepítsük a grafikus felületet, mivel a PiClock rendszer a Qt4-re épül, amihez nem árt valami X.org-féleség. Javaslom az Enlightenment-et, ez sem a leghasználhatóbb 320x240-es felbontásban, de a többi még ennyire sem használható.
A jó hír: az Enlightenment a standard Debian tárolókban megtalálható, így a telepítése roppant egyszerű, a rossz hír: elég régi van a tárolóban, és a forrásból történő fordítás egy RPI Zero-n elég sokáig tart. Jut eszembe: VLC nélkül nincs online rádió, azt is telepítsük.
Telepítés csomagból:
sudo apt update
sudo apt-get install e17 lightdm vlc-nox
3. Raspberry beállítása, hogy egyből a grafikus felületet nyissa meg bootoláskor:
sudo raspi-config
Itt az alábbit kell engedélyezni:
3 Boot Options -> B4 Desktop Autologin
Ha már itt járunk, egyúttal az Interfacing Options-nál engedélyezzük az SPI-t és az I2C-t is.
4. A szenzorok számára szükséges beállításokat, ha még nem történtek meg, szintén érdemes ekkor elvégezni, pl az APDS szenzor I2C paramétereinek finomhangolását, valamint a TFT kijelző overlay, valamint az RTC beállítását. Utóbbi opcionális elem, e nélkül is megy a program, és az eszköz is, de pont egy ébresztőórában ne legyen valósidejű óra hardver? :)
5. Ha véletlenül nincs Python3 fent, akkor telepítsük.
sudo apt-get install python3
A Chronos projekt letöltése githubról:
https://github.com/enesbcs/multisensor-python-rpi
A fenti repository minden szenzorom kódját tartalmazza, igazából csak az alábbi fájlokra van szükség:
- ms_chronos.py - Ez a főprogram, igazából egy teljesen átalakított PiClock
- ClockConfig.py - Ez tartalmazza a program beállításait, érdemes ezzel kezdeni az ismerkedést!
- config_sound.py - Ez tartalmazza az online rádióadók listáját, valamint a sound mappában levő hangokat társítja szintekhez
- unit_sound.py - Ez a zajkeltésért felelős modul (PyGame kell a használatához!)
- sound mappa kompletten, vagy saját WAV hangok
- unit_backlight_wpi.py - Ez a TFT fényerejének állításáért felelős modul, wiringpi kell hozzá, de igazából a PyWiringPi python wrappert nem használom, mert a PWM módja bugos, vagy nem megy, vagy csonttá fagyasztja a gépet, ellenben a parancssori "gpio -g pwm 18 500" fantasztikusan működik, úgyhogy így alkalmaztam
- unit_cputherm.py - Ez a modul jelenti le a vgencmd kimenete alapján a Pi saját hőmérsékletét, valamint vezérli a hűtőventillátort, ez utóbbit ebben a projektben nem használtam
- unit_lht.py - Ez a modul kéri le a BH1750-től az I2C buszon keresztül az aktuális Lux-ban mért fénymennyiséget
- unit_motion.py - Mozgásérzékelő (kombinált) kezelésére szolgáló rutingyűjtemény
- unit_temp.py - DHT22 hő és páraszenzor kezelő
- util.py - általános rutinok
- clock mappa kompletten (ApiKey.py-be fel kell venni a saját Weather Underground API kulcsot, a Developer ingyenesen regisztrálható, unit_clocktimer.py a Domoticz időzítők kezelésére, a unit_dummy.py akkor kell, ha valaki nem Raspberryn akarja kipróbálni...)
Az ms_chronos.py-ben egyetlen beállítás van legfelül, alapértelmezetten a DEBUGMODE = False, így kezeli a szenzorokat és a Domoticz MQTT-t, ha a DEBUGMODE=True akkor sima asztali PC-n is el lehet indítani - amennyiben fel van telepítve a python3 és minden függőség természetesen. Ekkor a clock/unit_dummy.py-ben szereplő véletlenszám-generátorokból nyeri a program az adatokat, és hogy ez mire jó? Természetesen fejlesztésre. :)
A unit_clocktimer.py a Domoticz API/JSON alapján, alapértelmezetten az "AL_" kezdetű Események időzítőit listázza ki, a Domoticz-ban beállított események történnek riasztáskor (paraméterezhető a ClockConfig.py-ben)... de a biztonság kedvéért egy timers.json fájlba is lementi néha, illetve be is tudja tölteni abból az ébresztési időket, ha offline van, vagyis nincs Domoticz szerver. Ha még ezen a ponton nem lenne világos, akkor megmondom egyenesen: aki Domoticz-en kívül más automatizálási szervert használ, és ahhoz szeretné illeszteni, le kell programozza a hiányzó funkciókat.
A python3 libraryk telepítése:
sudo apt-get install python3-pip python3-rpi.gpio python3-smbus python3-pyqt4 python3-setuptools python3-dev wiringpi python3-opengl libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsdl1.2-dev libswscale-dev libtiff5-dev libx11-6 libx11-dev xfonts-base xfonts-100dpi xfonts-75dpi fontconfig fonts-freefont-ttf
sudo pip3 install paho-mqtt wiringpi pygame
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT.git
sudo python3 setup.py install
Remélhetőleg semmi fontosat nem hagytam ki, de ha mégis, a python szól érte...
Pár szó a PiClock projektről: nagyon szép, praktikus és a legkönnyebben beüzemelhető volt abból a 3-4 féle Raspberryre készült óra projektből, amit találtam. A többiek szép lassan elvéreztek a függőségek és egyéb sallangok miatt. Sajnos a PiClock-ból pont egy dolog hiányzott, az ébresztő funkció, úgyhogy ezt teljes egészében le kellett programoznom, látszik is rajta, hogy idegen a felülettől.
Továbbá a PiClock nem túl moduláris felépítésű, gyakorlatilag a lényegi kódbázisa egyetlen fájlban volt, így meglehetősen macerás volt bővíteni-karcsúsítani. És hogy miért kellett karcsúsítani? Nagy monitorokhoz tervezték, így bármennyire is tetszett, a műholdképek kivágásával kezdve az előrejelzések áthelyezéséig mindent elkövettem, hogy a 320x240 pixeles képernyőn valami látható méretet tudjak előállítani. És miért kellett bővíteni? Természetesen a szenzorok értékeinek helyi kijelzése miatt. Meg az online netrádió is praktikus ötletnek tűnt, ha már WiFi és hangszóró is integrálásra került benne. Nagyjából 180-200MB RAM-ot használ működés közben, szóval az X.org-ot (cirka 100MB) is hozzáadva kell egy 512M-os összmemória a kényelmes futtatáshoz.
Alapprogram indítása:
python3 ms_chronos.py
Felépítés:
0. Főképernyő - óra
A jobb felső sarokban levő ikonra kattintva listázhatóak ki az ébresztési idők, fel lehet venni újat, illetve törölni.
1. Szenzor képernyő (1)
2. Online netrádió (2)
Vezérlések: a balra jobbra ujjal történő húzás (swipe), illetve az APDS vezérlő előtti azonos irányú kézmozdulatok lépnek a fenti képernyők között.
A 0. képernyőn a fel/le irány fel/lekapcsolja a Light_MQTT_IDX-ben megadott eszközt, a közelítés-távolítás némítja az ébresztőórát, illetve az előző lekapcsolás is, valamint a jobb alsó sarokban van egy "kattintható" némítás gomb, biztos ami biztos.
A 2. képernyőn a fel/le irány swipe/gesture a config_sound.py-ben felvett rádiók között vált, a lejátszás gombra kattintás, valamint az APDS közelítés-távolítás indítja-állítja meg a lejátszást. Hangerőszabályzásra sajnos már nem maradt irány, de gombot még lehetne felvenni. (fejlesztési lehetőség)
ClockConfig.py beállítások:
Az elején a PiClock-tól örökölt, kinézetet befolyásoló beállítások találhatóak, a png képek útvonalai, színek, stb. Ami kifejezetten érdekes lehet az óra típusának választása, lehet az alap analóg, vagy digitálisra is állítható a "digital" értékének módosításával.
Az első saját beállítás a Light_MQTT_IDX, ami annak az eszköznek (pl világítás) a Domoticz virtuális azonosítószáma, amit a főképernyőn lehet kapcsolni.
ReturnHomeSec : ennyi másodperc után tér vissza Főképernyőre automatikusan, ha a másik kettőn felejtődött
FrontMotionMinMove: ennyi másodpercen keresztüli mozgás után triggereli az elejére szerelt mozgásérzékelő a fényerősségállítást
DisplayOffTime: ennyi másodperc után kapcsolja ki teljesen a kijelzőt, ha nincs mozgás körülötte (mozgásnak számít: első mozgás, APDS érzékelő, kémény mozgások)
PIN_TMP: DHT22 szenzor RPI pin BCM számozás szerint (ahogy minden más pin is BCM)
IDX_TMP: Hőmérséklet+pára Domoticz virtuális IDX
IDX_LHT: Luxmérő Domoticz virtuális IDX
PIN_MOTION1, PIN_MOTION2: kéményben levő mozgásérzékelők pinjei
PIN_ADPS: APDS9960 szenzor trigger GPIO lába
IDX_MOTION_C: Kéményben levő mozgásérzékelők kombinált Domoticz virtuális IDX-e
PIN_MOTIONFRONT: első mozgásérzékelő GPIO lába
IDX_PITMP: Pi hőszenzor Domoticz virtuális IDX
IDX_SIREN: Hangszóró Domoticz virtuális IDX (kimenet, figyeli a bejövő parancsokat)
IDX_RADIO: Rádió Domoticz virtuális IDX (kimenet, figyeli a bejövő parancsokat)
PIN_TFT_LED: TFT "LED" feliratú lába, alapértelmezetten a GPIO18, mert az RPI ezen tud hardveres PWM-et a fényerő állításhoz.. más lábakon szoftveres PWM-et tud az RPI, próbáltam, csíkoz kicsit
mqttSend: MQTT téma, amire küldik az érzékelők az adatokat
mqttReceive: MQTT téma, amire a kimenetet feliratkoznak
mqttServer: az MQTT bróker IP címe
tempdelaysec: ennyi másodpercenként küldenek a beépített szenzorok adatokat az MQTT szervernek (10 másodperc alá nem ajánlom vinni, szerintem 60-90mp az ideális)
DomoticzURL: a Domoticz API eléréséhez az URL eleje (http://szerver:port)
DomoticzUsr, DomoticzPw: időzítők kezelésére jogosult felhasználó és jelszava, ha a helyi hálózat nincs felvéve a megbízhatóak közé a Domoticz beállítások között
AlarmScenePrefix: az ezzel kezdődő Domoticz események időzítőit értelmezi ébresztésként a unit_clocktimer.py
A bejegyzés trackback címe:
Kommentek:
A hozzászólások a vonatkozó jogszabályok értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a Felhasználási feltételekben és az adatvédelmi tájékoztatóban.