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/tr6213070376

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.

Zoltán Sándorfi 2019.05.17. 01:19:15

Helló hozzáférhetővé tudnád tenni a githubon újra az egész projektet,mert nálam még nem működik semmi.Össze van rakva,de még nem megy a kijelző,a rapbsberry operációs rendszer megy ,hdmi-ről,de kijelző nem működik.

Zoltán Sándorfi 2019.05.17. 01:21:04

Kérlek tedd elérhetővé az egészet

eNeS 2019.05.17. 07:02:18

@Zoltán Sándorfi: az egész projekt fent van github-on eredeti állapotában, archiválva: github.com/enesbcs/multisensor-python-rpi Ha a kijelző nem megy, akkor ezt kellene megnézni, ellenőrizni, hogy az Xorg fenn van-e + enlightenment. bitekmindenhol.blog.hu/2017/09/14/2_8_tft_spi_kijelzo

Zoltán Sándorfi 2019.05.17. 15:49:16

@eNeS: Helló!Köszi,hogy válaszoltál,nekem grafikus felületen megy az egész ketyere, hdmi kimenetről és elakadt a telepítő csomag a frissítésnél, azt írja ki ,hogy egyénileg kell mindent telepíteni.Megkérdezhetem milyen felületen fejlesztetted /pontosan a projektjeidet ?A pyton hol fut.Nálam a hiányzó kiegészítő kőnyvtárak telepítésénél elakadt a cronos projekt./

eNeS 2019.05.17. 17:34:36

@Zoltán Sándorfi: a python fájlokat egyszerű szövegszerkesztőben készítem. a frissítésnél elképzelhető, hogy változtak a csomagok, mert eredetileg Raspbian Jessie alatt települtek. Ha leírod a hibaüzenetet, többet tudok mondani.

Támogatók:
okosotthon.jpg
allterco.jpg

Utolsó kommentek

  • szenorb: Hello. Bekötöttem 12V-ra , a bemetére egy mozgás érzékelőt kötöttem. Szépen kapcsol a relé a késle... (2023.06.14. 06:48) Shelly okosrelé (Shelly1)
  • Melanoheliophobia: Üdv! Kb. 2 éve vásároltam két ugyanilyen okos izzót. Sajnos az egyik még garancia idő alatt eltávo... (2023.05.03. 16:50) Shelly Vintage okosizzó
  • eNeS: Lehetséges, bár az ESP8266-ot lassan ideje elfelejteni, ha nem helyi hálózatra akarsz vele forgalm... (2023.04.02. 08:43) Tasmota szkriptek
  • eNeS: @tomih: Thonnyban rebootot nyomva nekem se megy az NTP. De mikor lekapcsoltam a Thonnyt és rebooto... (2023.04.02. 08:40) Raspberry Pico és a LAN (W5100S-EVB-Pico)
  • krump_lee: Kedves eNeS! ESP8266 tasmota-val szenvedek, hiemq kapcsolat sehogy nem jön össze, sehol nem talál... (2023.04.02. 08:31) Tasmota szkriptek
  • Utolsó 20

Címkék

433mhz (12) alkatrész (22) alternatív kapcsoló (2) amg8833 (1) analóg (2) android (1) arduinoeasy (5) audio (1) automatizálás (3) bemenet (3) bk7231n (1) ble (1) blitzwolf (4) bluetooth (9) bridge (2) camhi (2) csináld magad (22) dimmer (1) diy (28) do-it-yourself (27) domoticz (11) ds18b20 (1) ebay (3) érintő (2) érintőkapcsoló (7) érzékelő (11) esp-01 (2) esp32 (11) esp8266 (21) espeasy (2) espurna (1) esp projekt (18) Eview7 (1) ewelink (1) feldolgozó (1) felhő (1) fényérzékelő (1) firmware (7) flame detector (1) fogyasztásmérő (5) ftdi (1) füstérzékelő (1) gázérzékelő (1) gpio (1) hang (4) hangjelző (1) hőmérséklet (22) https (1) ikea (1) impulzus relé (1) izzó (2) javascript (1) jelenlétérzékelő (3) kamera (18) keresztkapcsoló (1) kézmozdulat (1) kijelző (3) kimenet (21) konnektor (8) lan (9) lángérzékelő (2) led (3) linux (4) logic level converter (1) lua (1) lux (1) maple mini (2) mcu (3) micropython (1) mikrovezérlő (2) milkv (1) mobil (1) mosfet (1) mozgás (5) mpyeasy (4) mq-2 (2) mqtt (3) működtető rendszer (5) multiroom (1) nedvesség (1) neo (1) neopixel (1) Node-RED (1) nvr (4) nyitás (7) okosház (4) okosizzó (3) okosotthon (8) oled (1) onvif (8) openbeken (1) opencv (1) openwrt (4) orange pi (4) páratartalom (6) php (1) pico (1) pi pico (2) poe (1) programozás (9) projekt (25) proximity olvasó (1) python (2) raspberry (14) raspberry projekt (6) raspbian (1) reed (1) relé (27) rf (2) rgb (6) rock pi (1) rögzítő (2) rp2 (1) rpieasy (1) rtc (1) shelly (24) smartwise (1) solid state relay (1) sonoff (20) SonOTA (1) soros (1) ssl (1) ssr (1) stm32 (4) szenzor (11) szilárdtest relé (1) szintillesztő (2) sziréna (1) szkript (3) szünetmentesítés (4) t1 (1) tasmota (8) távirányító (3) Telegram (1) termékteszt (85) termosztát (2) touch (2) ups (5) usb (7) usb hub (1) valós idejű óra (1) vezérlések (20) vezérlő (5) világítás (5) villanykapcsoló (12) webkamera (1) wiegand (1) wifi (32) ws2812 (1) xiaomi (5) xm (4) xmeye (4) yoosee (1) zigbee (16) zwave (3) Címkefelhő
süti beállítások módosítása