Avtor: dr. Simon Vavpotič
Vsestranska aplikacija za upravljanje doma omogoča veliko funkcionalnosti, za katere bi potrebovali dneve načrtovanja in programiranja. Omogoča ne le priklop številnih senzorjev, ampak tudi obdelavo in hrambo podatkov ter nadzor in upravljanje doma prek spletnega oblaka.
V preteklem nadaljevanju smo spoznali pomen avtomatizacij in simulacij, s katerimi lahko testiramo Home Assistant tudi, če še nismo namestili strojne opreme. Tokrat se lotimo se lotimo praktičnih primerov. Denimo, kaj omogoča naslednik Tasmote ESPHome in katera druga orodja, na primer Thonny, so na voljo za zahtevnejše uporabnike, ki se ne bojijo programiranja v Pythonu ali Yamlu.
Ta vsebina je samo za naročnike
Začeli bomo z Raspberry Pi Pico W in Pico 2 W, ki sta poceni in zelo zmogljivi alternativi ESP32 modulom. Letos poleti smo dobili novi različici Raspberry Pi Pico 2 in Raspberry Pi Pico 2 W z RP2350 mikrokontrolerjem. Raspberry Pico 2 W se splača tudi zato, ker je relativno poceni, saj v ZDA pri pooblaščenih distributerjih stane le okoli 6 dolarjev, medtem ko je različica Raspberry Pi Pico 2 brez Wi-Fi/Bluetooth modula še 2 dolarja cenejša. Je pa res, da so lahko cene na ameriškem Amazon.com tudi za okoli dvakrat višje. Na nemškem Amazon.de Raspberry Pi Pico 2 dobimo za okoli 8 evrov, medtem ko različica Wi-Fi/Bluetooth kontrolerja stane od okoli 6 evrov naprej, kar je podobno cenam ESP32 modulov.


Po drugi strani, se cena originalnega Raspberry Pi Pico z RP2040 mikrokontrolerjem, verjetno zaradi združljivosti z nekaterimi razvojnimi okolji, kot je ESPHome, še vedno drži okoli 6 evrov, cena Raspberry Pi Pico W pa je okoli 8 evrov.
Tasmota in ESPHome
Čeprav je Tasmota razvojno okolje več kot očitno omejeno samo na module ESP8266 in ESP32 in na iz njih izvedene periferne naprave, veliko splošnejši ESPHome (esphome.io) podpira še številne druge platforme, med katerimi so: RP2040, BK72xx, RTL87xx, LN882x in NRF52. Vendar so mnogi domači graditelji razočarani, saj podpora za najnovejši Raspberry Pi Pico 2 (W) v času nastajanja tega članka še ni bila na voljo.
Kljub temu ima Raspberry Pi Pico 2 (W) številne prednosti. Ne samo, da je nekajkrat hitrejši, temelji tudi na od RP2040 precej zmogljivejšem mikrokontrolerju RP2350 s kar štirimi procesorskimi jedri (dvema ARM Cortex-M33 in dvema RISC-V Hazard3), od katerih lahko hkrati delujeta le dve. Vendar združuje jedra z različnimi procesorskimi arhitekturami, kar omogoča programerjem, da za svojo aplikacijo izberejo tako, ki jim bolj ustreza, lahko pa hkrati uporabljajo tudi procesorskih jedri z različnima arhitekturam; a razvojne programske opreme za to opcijo skoraj ni, saj je potrebno prevajanje programske kode z dvema prevajalnima verigama hkrati, kar pa v večini razvojnih okolij ni podprto.
Thommy z MicroPythonom in MQTT
Za ljubitelje programskega jezika Python je zanimivo razvojno okolje Thonny, ki ga lahko namestimo (če že ni nameščeno) v novejše Windows ali v novejše Raspberry Pi OS (npr. v Trixi z ukazoma sudo apt update && apt upgrade –y ter sudo apt install thonny). Nato v Raspberry Pi Pico (ali drug krmilni mikroračunalnik) prenesemo še zagonski nalagalnik (angl. bootloader) programov v MikroPythonu v izvedljivi datoteki s končnico uf2, ki ga lahko prenesemo iz spletne strani micropython.org/download.
Obsežna zbirka podprtih mikrokontrolerjev med drugim vsebuje vse ESP32 in ESP8266, razen ESP32-P4, obenem pa tudi oba Raspberry Pi mikrokontrolerja, RP2040 in RP2350 ter Microhip SAMD21 in SAMD51 mikrokontrolerja z ARM zasnovo. Za lažje programiranje so neposredno podprte so tudi nekatere razvojne plošče različnih proizvajalcev, kot so: Espressif Systems, LILYGO, NXP, Olimex, Microchip, Raspberry Pi, NXP, MikroElektronika, Seeed Studio, Arduino, Adafruit, Renesans Electronics, Wemos, Espruino, Ezuino in drugi.
Poleg podpore za izbrano razvojno ploščo in/ali mikrokontroler moramo v okolje Thonny naložiti še programsko knjižnico za podporo protokolu MQTT, kar lahko naredimo v okviru razvojnega okolja prek menija Tools.
Arduino in Visual Studio Code
Arduino je zelo razvejano razvojno okolje, ki ga večina bralcev že dobro pozna, zato omenimo le, da je tudi zanj na voljo programska knjižnica za podporo delovanju protokola MQTT, medtem ko je podpora za različne razvoje plošče v Arduinu 2 še obsežnejša od tiste za MicroPython. Namestimo jo lahko tako v računalnike z operacijskim sistemom Windows, kot tudi tiste z operacijskim sistemom Linnux. Raspberry Pi OS je v tem pogledu samo posebna različica Linuxa za osnovi ARM32 in ARM64. Čeprav Arduino 2 uradno ni podprt, na GitHubu najdemo izvorno kodo, pa tudi zanj že prevedene različice, v katere lahko iz spleta prenesemo najnovejšo podporo za različne razvojne plošče, kakor tudi potrebne programske knjižnice.


Podobno kot Arduino je tudi Microsoftov Visual Studio Code le ogrodje za pisanje programske kode in hrambo, v katerega lahko s pomočjo vtičnikov vgradimo podpore za prevajanje in razhroščevanje programske kode za različne strojne in programske osnove. RP2040 (Raspberry Pi Pico (W)) in RP2350 (Raspberry Pi Pico 2 (W)) mikrokontrolerja sta podprta v vtičniku RP2040. Obenem pa so na voljo tudi programske knjižnice za protokol MQTT. Za povezavo Raspberry Pi 2 W z Home Assistantom prek MQTT tako potrebujemo le še kak primer programske kode iz GitHuba (teh res ne manjka), ki ga nato nadgradimo s senzorji in stikali in ostalim, kar potrebujemo za nadzor in upravljanje doma.
Zakaj Raspberry Pi Pico?
Morda se ob vsem napisanem sprašujete, zakaj omenjam Raspberry Pi Pico (W) in Pico 2 (W) kot eni od najboljših alternativ ESP32 modulom. Drugačna zasnova RP2040 in RP2350 mikrokontrolerjev v enem čipu združuje več funkcionalnosti, med katerimi je tudi priključek USB, prek katerega ju lahko neposredno programiramo, obenem pa priključek uporabljamo tudi v aplikacijah, denimo kot CDC (naprava za prenos podatkov), MSD (pogon za masovno hrambo podatkov), HID (naprava za komunikacijo s človekom) itn. Zato ne potrebujeta komunikacijskega prehoda iz USB za zaporedna vrata, kakršen je vgrajen v večino ESP32 mikrokontrolerjev. Raspberry Pi Pico 2 W se po zmogljivosti lahko kosa tudi z najnovejšim ESP32-P4, ki smo ga omenili v pretekli številki (SE344), vendar slednji še ni podprt v večini omenjenih razvojnih okolij.
Operativni Docker strežnik s House Assistantom
V preteklih nadaljevanjih smo velikokrat omenili, da lahko Home Assistant neposredno namestimo na Raspberry Pi 3, 4 ali 5, saj imamo na voljo tudi slike sistemskih pogonov. Po drugi strani, lahko za pogon Home Assistanta s spletnim upravljavskim vmesnikom uporabimo skoraj katerikoli računalnik z operacijskim sistemom Linux, ali pa takega, na katerem lahko poganjamo virtualizacijsko okolje Docker.
Med poletnimi počitnicami mi je tako prav prišel Orange Pi 5 Max, na katerega sem najprej namestil Docker s Portainerjem, nato pa še kontejner s Home Assistantom, s čemer sem razbremenil klasični mini PC in Raspberry Pi 500, ki tako nista imela strežniških vlog, in sta bila kot nalašč za multimedijo. Nepričakovano pa se je zaradi manjkajoče programske podpore zataknilo, ko sem želel Home Assistant strežnik namestiti tudi na Orange Pi RV2 z RISC-V64 arhitekturo.
Tako sem ostal pri arhitekturah x86, x64 in ARM64, ki še vedno ponujajo obilico alternativ za namestitev Home Assistanta. Zanimivo pa je, da Home Assistant kot strežnik favorizira Raspberry Pi in lastno arhitekturo, medtem ko so za gradnjo perifernih naprav o ospredju moduli ESP32 in starejši ESP8266 ter na njihovi osnovi narejene razvojne plošče in naprave.
Gradnja periferne naprave z Raspberry Pi Pico 2
Raspberry Pi Pico 2 na osnovi novega RP2350 (produkcijska različica A2) mikrontrolerja so prvič predstavili lanske jeseni, od takrat pa je sta sledili še izboljšani različici A3 in A4, v katerih so odpravljene skrite napake in varnostne luknje, ki so jih na lanskem Hekerskem izzivu (Hacker Challenge) odkrili nadobudni programerji.
Nove Raspberry Pi Pico 2 danes izdelujejo samo še na osnovi RP2350 različic A3 in A4, medtem ko lahko za vgradnjo v lastno vezje naročimo le še različico A4 (A4 stepping), ki ime ima obenem tudi izboljšave v čipu, kar mu omogoča neposredno povezavo z do 5-voltnimi TTL vezji. Odpornost na 5-voltov na vhodnih priključkih je odvisna tudi izvedbe napajanja, zato velja pred uporabo RP2350 v 5-voltnih vezjih preveriti aktualne specifikacije na spletni strani datasheets.raspberrypi.com. Vseeno dodajmo, da Raspberry Pi Pico 2 (W) dopušča le 3,3 V vhodne napetosti na vhodnih priključkih. Je pa zanimivo, da ga lahko napajamo tudi z 1,8 V, če USB priključka ne uporabimo.
Za samograditelje elektronskih vezij je zanimiv tudi RP2354 čip, ki poleg A4 različice RP2350 združuje še 2 MB velik Flash RAM pomnilnik za hrambo uporabniških programov, kar dodatno zmanjša obseg tiskanega vezja.
Če se gradnje naprave lotevamo na osnovi Raspberry Pi Pico ali Pico 2, oziroma RP2040 ali RP2350 mikrokontrolerja, si lahko pomagamo z razvojnim okoljem Thonny, v katerega prenesemo kodo enega od številnih primerov iz GitHuba, na primer: github.com/jramsgz/pico-w-home-assistant. Predpogoj je, da prej v RP2040 ali RP2350 naložimo uf2 datoteko z MikroPythonom, kar omogoča povezavo Raspberry Pi Pico ali Pico 2 z razvojnim okoljem.
Povezavo izvedemo tako, da v meniju Tools kliknemo na Options, nato pa v zavihku Interpreter izberemo opcijo MicroPython (Raspberry Pi Pico), kar je mogoče le če smo izpolnili predpogoj. Nato iz menija Tools kliknemo na Manage packages, v polje za iskanje (čisto na vrhu okna) vpišemo ime paketa umqtt.simple in kliknemo na gumb Search micropython-lib and PyPl. Po namestitvi knjižnice moramo le še prenesti datoteke v izvorni programski kodi s končnico *.py, ki jih bo izvajal mikrokontroler Raspberry Pi Pico W ali Pico 2 W. Poudarimo, da je za omenjeni primer pomembna brezžična povezljivost prek domače Wi-Fi dostopne točke, zato moramo uporabiti Raspberry Pi Pico z oznako W (wireless). Prav tako moramo vnesti poverilnice za dostop do brezžične dostopne točke, kakor tudi za dostop do MQTT strežnike Home Assistanta.
Avtor primera predlaga, da poverilnice namesto neposredno v programsko kodo raje shranimo v datoteko secrets.py, saj je tako manj možnosti, da bi jih raztrosili naokoli. Je pa vseeno nekoliko več dela, če nameščamo več kot eno datoteko s programsko kodo. V Thonny razvojnem okolju lahko datoteke v Raspberry Pi Pico nameščamo prek stranskega pregleda Files, ki ga odpremo iz menija View. Na vrhi vidimo pregled datotek na trenutno izbranem imeniku razvojnega računalnika (npr. Raspberry Pi 500+), ki poganja Thonny, medtem ko vidimo datoteke na Rapberry Pi Pico v spodnjem levem pregledu.
Vsako datoteko iz razvojnega računalnika ali Raspberry Pi Pico lahko odpremo in urejamo, nato pa shranimo bodisi v razvojni računalnik ali pa naložimo v pogon za masovno hrambo podatkov v Raspberry Pi Pico. Zagon glavnega programa (main.py) izvedemo s tipko start z emblemom v obliki zelene puščice. Čeprav se na prvi pogled zdi kot da program deluje v razvojnem računalniku, ga dejansko poganja Raspberry Pi Pico. Zato deluje tudi, ko Thonny razvojno okolje zapremo.
Prihodnjič
Tokrat nam je zmanjkalo prostora za podroben primer upravljanja doma, saj smo pregledali opcije za alternativni razvoj z Home Assistantom združljivih naprav. Prihodnjič se zato lotimo še obsežnejšega primera avtomatizacije.
