Projekt 3: Raspberry okos ébresztőóra (Chronos) - 2. rész
2017. október 24. írta: eNeS

Projekt 3: Raspberry okos ébresztőóra (Chronos) - 2. rész

A hardver építése után térjünk rá a szoftverre.

Legelső dolgunk a memóriakártyára a:

1.Raspbian telepítése

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

chronos_sw_01.jpg

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)

chronos_sw_03.jpg

2. Online netrádió (2)

chronos_sw_02.jpg

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:

https://bitekmindenhol.blog.hu/api/trackback/id/tr913070376

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.

Nincsenek hozzászólások.