GradientTop
PC
Vodeći IT časopis u Srbiji
PC #268 > Iz prakse
ARHIVA BROJEVA | O ČASOPISU | POSTANI SARADNIK | PRETRAGA
preview
Izmišljanje tople vode
Boris Stanojević, Dejan Ristanović
Ako na tržištu ne možete da nađete nešto što vam odgovara, napravite ga sami... Tako je i nastao kontroler za bojler zasnovan na Raspberry Pi i Arduino Mega pločama. Prekomplikovano? Čekajte dok pročitate detalje...
- PC #268 (Septembar 2019)
- U prodaji po ceni od 200 din

broj

Izmišljanje tople vode

Saga je počela kada je jedan od autora ovog teksta shvatio da njegov bojler sa recirkulacijom tople vode troši previše struje. Recirkulacija tople vode je ideja o kojoj su nekada Microsoft, Google i drugi propitivali programere na konkursima: kako se postiže da čim otvorite slavinu voda bude topla? Programeri su imali raznih ideja, ali realno rešenje je da se umesto jedne cevi za toplu vodu do svake slavine dovode dve cevi, pa kroz njih stalno cirkuliše topla voda. Pri tom se voda neminovno i hladi, što znači da je stalno grejete da bi ponekad, kad otvorite slavinu, odmah bila topla. Lepo funkcioniše, ali prilično košta...

image

Rešavanje problema počelo je kupovinom Aquanta Smart Water Heater Controller. Nije se baš pokazao – trebalo ga je nabavljati u Americi i donositi ovamo, pa onda primetiti da je on namenjen monofaznim bojlerima, praviti odgovarajuću trofaznu sklopku i najzad shvatiti da Aquanta pali i gasi bojler u skladu s nekom svojom mambo-džambo veštačkom inteligencijom koja prati navike korisnika i „zna“ kada će mu biti potrebna topla voda. Ako se veštačka inteligencija isključi, može se zadati samo jedna temperatura koja važi čitavog dana; kakva je onda prednost u odnosu na običan termostat? No „tačku na i“ je stavila činjenica da se korisnik ne loguje na kontroler, nego na sajt aquanta.io u Americi, a server odatle menja temperaturu u bojleru. Kada je Aquanta sajt jednom pao, bojler je ostao isključen. Niko ne želi da zbog „tamo nekog“ sajta nema tople vode za kupanje. Pametna kuća bi morala da bude znatno pametnija.

Ideje i komponente

Pošto je i drugom autoru ovog teksta bio potreban kontroler za bojler, počeli smo da smišljamo koncepciju. Zahtev je bio da kontroler, pomoću 220 V releja, pobuđuje sklopku koja aktivira i isključuje (trofazni) bojler, a da pogodno postavljenom sondom meri temperaturu vode u bojleru ili, ako neki bojler nema mogućnost da se sonda uvuče u kazan, barem temperaturu vode na izlazu (pokazaće se da je uvođenje sonde u bojler praktično neophodno). Kontroleru se zadaje konfiguracija tipa „od 00 do 08 časova temperatura je 48 stepeni, od 08 do 10 je 45 stepeni, od 10 do 15 časova je 40 stepeni“ i tako dalje, i on posle toga radi samostalno, ne gubeći vreme i konfiguraciju ni u slučaju nestanka struje. Želeli smo da se kontroleru kroz Web interfejs upload-uje konfiguracija, proverava tekuća temperatura vode, aktivira neki vanredni boost kada je „u nevreme“ potrebna topla voda itd. Kontroler bi bio u kućnoj mreži, po mogućnosti povezan Ethernet kablom (Wi-Fi je slab u podrumu), a za pristup od spolja... pa, uvek se možemo uključiti u kućni VPN.

Želeli smo da koristimo standardne komponente koje nisu skupe i koje je ovde lako nabaviti, pa se kao prirodan izbor nametnuo Arduino. To je kontroler prilagođen radu u realnom vremenu – u njegovoj programskoj memoriji je jedna petlja koja se „beskonačno“ vrti, nema pozadinskih procesa koje bi je prekidale, mali je, jeftin... No ubrzo su se iskristalisala dva problema. Prvi je RAM memorija, koje Arduino ima baš malo. Šta, iz današnje percepcije, pomislite kada vam kažu da računar ima malo memorije? Megabajt? Arduino ima manje. 64 kilobajta? Ni toliko... model Uno ima samo 2 kilobajta. Zaboga, pa TI-59 iz 1977. godine je imao kilobajt!

Ako će u memoriji biti niz bajtova od kojih svaki označava željenu temperaturu u jednom minutu dana, a dan ima 1440 minuta, već je skoro čitava memorija zauzeta, a gde da upišemo log rada i sve ostale pomoćne promenljive? Dobro, mogu temperature malo i da se pakuju, po četiri minuta u jedan bajt, ali... I tako smo uzeli Arduino Mega koji ima „čitavih“ 8 KB, što je za naš softver bilo sasvim dovoljno. Postoji i EEPROM kapaciteta 4 KB, u koji se mogu upisati željene temperature i drugi parametri, ali u njemu nema mesta i za log, koji će ostati u osnovnoj memoriji.

Drugi problem je komunikacija s Internetom koju Arduino, kratko rečeno, nema. Treba kupiti Arduino Ethernet Shield 2 koji „najaše“ na kontroler, ali da li će na tih 8 KB moći da se napravi kakav-takav Web server za kontrolu bojlera? Delovalo je baš nategnuto.

Druga mogućnost je Raspberry Pi 3, znatno ozbiljniji mali računar. Iako fizički nije bitno veći od Arduino Mega, Pi ima gigabajt RAM-a, ugrađen Ethernet priključak i Wi-Fi antenu, četiri USB 2 porta, čak i HDMI za povezivanje na klasičan full HD monitor. Pi radi pod operativnim sistemom Raspbian, koji je zapravo prilagođena distribucija Debian Linux-a. Lako se na njega instalira Apache Web server, PHP i sve što bi moglo da nam bude potrebno. Prostora ima dovoljno, pošto se umesto hard-diska ili SSD-a koristi micro SD kartica željenog kapaciteta. Ne znajući kolika ona treba da bude, stavili smo 64 GB, mada se pokazalo da je realno i 8 GB dovoljno, tako da je tekući model sasvim srećan s 16 GB karticom.

Pi je inicijalno delovao kao savršena varijanta za naš projekat, ali je i tu bilo nekih nedoumica. Prvo, Raspbian nije real-time (RTOS) operativni sistem i kao takav nije idealan za kontrolu hardvera. Dobro, ne kontrolišemo mi neku letilicu kod koje desetinku sekunde zakasnila komanda može da izazove havariju, već bojler kome je sasvim svejedno da li je uključen u 12:00:00 ili u 12:00:10. Ali, kad se već igramo, hteli smo da budemo spremni i za neke buduće izazove. Doduše, na Pi može da se stavi drugi operativni sistem, recimo ChibiOS/RT koji jeste real-time, ali smo se susreli sa neprijatnim problemom da ne možemo da nađemo sondu za merenje temperature koja se direktno povezuje na Pi (sada ju je lako naći) pa smo nastavili razmišljanje.

Najbolje iz oba sveta

image
Shema povezivanja kontrolera

Kolega Vladimir Kukuruzović je predložio da kontroler pravimo ujedinivši oba sveta: da Arduino kontroliše bojler, a da Pi programira Arduino, prikazuje Web interfejs, čuva i vizualizuje dnevnike rada bojlera. Zvučalo je kao zanimljiva ideja, mada nas je ta „zanimljivost“ uništila, pa smo nešto što bi sa samim Pi-jem verovatno završili za nedelju-dve radili preko godinu dana. Dobro, nije nam to bio neki projekat visokog prioriteta, imali smo i drugog posla u životu, slobodne periode je bilo teško sinhronizovati i tako, mesec za mesecom...

U finalnoj koncepciji, Pi je povezan na napajanje (punjač za mobilni telefon), pa preko USB kabla napaja Arduino. Na Arduino je povezan relej shield (do 10 A) koji pali i gasi bojler, tj. uključuje i isključuje sklopku, što je lakši zadatak za sam relej. Ugradili smo i časovnik realnog vremena RTC1307 sa I2C interfejsom, level shifter potreban za vezu sa Pi-jem (Arduino radi na 5 V a Pi na 3.3 V) kao i ekrančić 1602 sa tasterima (DFRobot LCD keypad shield). Displej ima dva reda od po 16 karaktera, što je sasvim dovoljno – u prvom redu se vidi temperatura vode, tražena temperatura, da li je relej uključen i da li je aktivan boost, a u drugom redu je tekući datum i vreme. Displej na sebi ima i šest tastera, tako da se bojlerom ne mora upravljati samo kroz Web interfejs, već su raspoložive i lokalne komande, za sada još neosmišljene.

Ostalo je još pitanje koje muči sve samograditelje – kućište. Iako deluju kompaktno, Raspberry Pi, Arduino, displej i ostale komponente, kad ih stavite na gomilu, i nisu tako sitne, a da i ne pominjemo silasiju žica koja sve to povezuje u funkcionalnu celinu. Imali smo ambiciozan plan da kućište savršeno prilagođena našem kontroleru odštampamo na 3D štampaču (možda se to jednog dana i desi) ali smo najzad stvari rešili na stari način – kupili plastično kućište kod kolege Željka Krstića (Kelco.rs) pa ga obrađivali testericom. Nije baš neki vrhunski dizajn, a i teško je doći do SD kartice ako je treba zameniti ali... završava posao. Sve u svemu, hardver za kontroler košta oko 100 evra, pa i manje ako vas ne mrzi da čekate komponente sa AliExpress-a.

Veza Pi – Arduino – periferije

Jedna od prvih odluka koju je trebalo doneti bila je kako će Pi i Arduino komunicirati. Prvo što pada na pamet je USB serijska veza, pošto se Arduino tim putem već napaja iz Pi-ja. Kamen spoticanja je osobina da se Arduino resetuje svaki put kada se inicira USB konekcija. To ima svoje opravdanje u većini primena, ali u ovom slučaju smeta.

Trebalo je, dakle, odlučiti se za komunikaciju preko SPI (Serial Peripheral Interface) ili I2C protokola. I2C je nešto jednostavniji za upotrebu zbog dobrih biblioteka, ali se pojavio problem. Arduino mora da „razgovara“ sa još dva uređaja – časovnikom realnog vremena i ekranom. Najzad smo zaključili da je, kad više uređaja „priča“ preko istog interfejsa, I2C bolji izbor; Arduino će biti master i upravljaće komunikacijom.

Da bi stvar bila još malo komplikovanija, trebalo je koristiti i treći vid komunikacije: OneWire, kojim Arduino dobija podatke o temperaturi vode preko sonde DS18B20 (sećamo se da Pi kada smo počeli nije imao ovaj interfejs, pa smo mu zato i dodali Arduino). Moglo je sve to i jednostavnije, ali smo iskoristili priliku da se upoznamo s (skoro) svim vrstama komunikacija koje se koriste u Arduino-Pi svetu.

OneWire interfejs se tako zove jer mu u suštini treba samo jedna žica, mada je potrebna i „zemlja“ (GND), tako da opet dolazimo do dve fizičke žice. Još je bolje ako i napajanje ide zasebnim vodom, ali ne mora, uređaj se može napajati preko data linije. Starije hobi-elektroničare može zbuniti izgled senzora, koji van kućišta izgleda kao tranzistor – tri izvoda iz sličnog pakovanja. Znajući da je to senzor temperature, pomislićete da je u pitanju neki element koji menja svojstvo u zavisnosti od temperature, te treba nešto proračunavati i kalibrisati i slično. Zapravo je u pitanju digitalni sklop koji preko pomenutog interfejsa šalje temperaturu kao broj, koji se može tumačiti u željenim jedinicama. Mnogo jednostavnije za upotrebu nego što se očekuje. Postoji i odgovarajuće kućište za njega tako se može koristiti za merenje temperature vode u bojleru.

Interfejs koji smo koristili za komunikaciju sa satom i displejom je, rekosmo, I2C, koga je razvio Philips za komunikaciju mikrokontroler-periferija. Na istom bus-u može biti više slave uređaja, bez potrebe za posebnim vodom do svakog kao kod SPI. Može ih zapravo biti do 1008, „malo“ više nego što nama treba. Sistem ima mana, ali su dobra strana lepo napisane biblioteke za rad sa periferijama, tako da je pisanje softvera razmerno jednostavno. Ne morate znati baš kako nešto fizički radi da biste ga koristili.

Interapti i komunikacija

image
Bojler pod stalnom kontrolom

Najzad je odlučeno da komunikacija Pi – Arduino ide preko SPI interfejsa. Uvek može i da se kaže da je SPI predviđen za veće brzine i za komunikaciju između kompjutera a ne samo kompjuter-periferija. On zahteva upotrebu malo više žica jer je u pitanju sinhrona komunikacija. Arhitektura je master/slave s jednim masterom i više slave uređaja. Komunikacija je full duplex, razgovor inicira master, tako da ako želite nešto da pročitate sa slave uređaja, morate nešto da mu pošaljete. Slave uređaj, u našem slučaju Arduino, može stalno da „osluškuje“ dolazni registar/bafer, ali je efikasnije da se to radi preko interapt rutine. Zakačite interrupt za SPI događaj i napišete odgovarajući potprogram.

Taj potprogram treba da bude mali i efikasan, bez drugih oblika komunikacije dok se obrađuje ovaj interapt. To je neprijatno dok debagujete program – nema ispisivanja preko serijske veze. Protokol koji smo definisali nalaže da razgovor uvek započne Pi, slanjem jednog „c“ karaktera i čekanjem da Arduino odgovori sa „a“, kao znak da je slobodan i da razgovor može da počne. Zatim se šalje komanda dužine jednog karaktera koju Arduino tumači. Mora postojati usaglašenost o čemu se i kako priča, jer ako želi da pročita određeni broj bajtova, Pi mora toliko da pošalje.

Komunikacija teče prilično glatko, ali kad se šalje više podataka, npr. temperature zabeležene tokom čitavog dana (1440 minuta, dakle šalje se 1440 bajtova) treba predvideti i mogućnost greške. Praksa je pokazala da tih grešaka ima više nego što bi čovek očekivao, pa smo najpre uveli klasičan checksum po modulu 256, a kad je i kroz njega prolazila po neka brljotina, prešli na 16-bitni Fletcher algoritam.

Softverski deo priče

Za programski jezik smo izabrali C, smatrajući da je pogodan za programiranje niskog nivoa, a pri tom ga obojica solidno poznajemo. Arduino se programira tako što na PC-ju instalirate razvojno okruženje u kome se program piše, kompajlira i, pošto je Arduino povezan sa PC-jem USB kablom (koji ujedno služi i kao napajanje), upload-uje na kontroler.

Da bi se upravljalo uređajima povezanim na Arduino (displej, relej, časovnik realnog vremena) potrebne su odgovarajuće biblioteke koje se dobijaju uz same uređaje. Biblioteka se ugradi u Arduino razvojno okruženje i linker je automatski povezuje u finalni program kada je potrebna. Biblioteke su besplatne, uglavnom open source, ali često amaterski pisane i sa neadekvatnom dokumentacijom na nekoj čudnoj varijanti engleskog jezika. No uz malo truda sve proradi.

Raspberry Pi se programira kao i svaki starovremenski računar. Telnet-ujete se na njega (dobro, zbog neke apstraktne sigurnosti se obično koristi Putty odnosno SSH protokol) pa kompajlirate program komandom nalik na c++ -Wall -o bojler bojler.c. Pošto je dosadno kucati program u nekom od elementarnih linijskih editora na Pi-ju (vi, nano...), kucali smo ga na PC-ju u Ultraedit-u, pa pre svakog kompajliranja prenosili na Pi. Putty je jako nekomforan kad treba prenositi fajlove, pa smo na Pi-ju pokrenuli FTP server, a onda stalno držimo otvoren Total Commander u kome je jedan prozor usmeren na Pi, i kopiramo source tamo radi prevođenja i izvršavanja.

Kako je razvoj tekao, tako smo se u C-u osećali sve teskobnije. Nekad je izgledao lepo, ali se vremenom čoveka „iskvare“ komforniji programski jezici. Loš rad sa stringovima (otkud stringovi u kontroleru za bojler? Pa, nekako ispadne da je rad sa stringovima važan za svaku aplikaciju), maltretman s pointerima i razmenom argumenata s procedurama, dosadna printf naredba... I tako smo neprimetno prešli na C++, doduše bez korišćenja nekih velikih objektnih paradigmi... prosto je udobnije u njemu.

Izlazak na Web

Komandovanje kontrolerom osmišljeno je na prilično jednostavan način – uređaj ima fiksnu IP adresu u kućnoj mreži, recimo 192.168.4.22 i kada se na bilo kom računaru ili telefonu Web browser uputi na tu adresu, dobija se izveštaj o svim radnim parametrima bojlera i mogućnost da se neke stvari podešavaju. Da bi to bilo moguće, na Raspberry Pi treba instalirati Apache Web server, napraviti HTML stranu i postaviti je u folder /var/www/html/ pod imenom index.html. Pošto smo procenili da nam običan HTML nije dovoljan, odmah smo taj uvodni fajl nazvali index.php.

Izgledalo je jednostavno ali su brzo počeli problemi. Da bi Pi prikazao neke podatke na Web strani bojlera, recimo tekuću temperaturu vode, mora da pošalje komandu Arduino kontroleru i sačeka odgovor. Program koji je iz komandne linije radio sasvim normalno, pozvan sa Web strane sa $output1 = shell_exec(‘/bojler/control’); kao da nije ni stizao do Arduino uređaja – komanda nije izvršena pa nije bilo ni rezultata. Pažljivija analiza je pokazala da program treba da ima root privilegije da bi komunicirao s hardverom, a komanda iz našeg fajla index.php se izvršava na znatno manje privilegovanom nalogu www-data. Prvi refleks je bio da www-data korisnik dobije root prava, ali izvršavati Web server sa root naloga je toliko loša praksa da joj ne treba pribeći čak ni u slučaju kontrolera strogo zatvorenog u kućnu mrežu.

Rešenje je da komande za pozivanje prepravimo u $output1 = shell_exec(‘sudo /bojler/control’); i da, jednokratno, otkucamo sudo visudo, pa u konfiguracionu datoteku dodamo red:
www-data ALL=(ALL)
NOPASSWD: /bojler/control

Time je korisnik www-data (Web server) dobio pravo da izvrši isključivo komandu control iz foldera /bojler sa root pravima, a da se ne zahteva nikakva lozinka. Da ne bismo tako dodavali desetine komandi, smislili smo da čitavu komunikaciju obavlja program control, čiji će prvi parametar određivati koja se operacija obavlja. Tako control a vraća stanje releja, control d vraća temperaturu vode, control t doteruje časovnik na Arduino kontroleru i tako dalje. Protokol se vremenom komplikovao pa se stiglo čak do control z i prešlo na control 1, control 2...

Baza podataka

image
Upravljanje bojlerom preko Web stranice

Kad već u svakom trenutku znamo temperaturu vode u bojleru, zar ne bi vredelo taj podatak negde zapamtiti, za početak zbog debagovanja a kasnije... pa, eto, da postoji. U prvi mah smo mislili da upisujemo podatke u tekst datoteku, ali je pitanje kako to posle vizualizovati na Web strani kontrolera; možda ipak da potražimo neku gotovu komponentu. I onda nam je kolega Milan Maksimović predložio da instaliramo bazu podataka; možda ne baš MySQL, koji prvo padne na pamet, jer je nepotrebno složen i opterećivao bi Pi. Najzad je izbor pao na SQLite, malu i elementarnu bazu koja ima sve potrebne funkcionalnosti. Napravili smo tabelu čiji slog sadrži datum i vreme, temperaturu vode i podatak da li je u datom trenutku relej aktivan ili ne, i uveli indeks po timestamp-u radi bržeg pretraživanja.

Arduino svakog minuta zapiše vrednost tekuće temperature kao ceo broj u svoj RAM, s tim što toj temperaturi doda 128 ako je u datom trenutku relej uključen (programerski rečeno, setuje najviši bit). Na Pi-ju je definisan Cron Job koji se startuje na svakih 15 minuta, pokupi čitav 24-časovni bafer, i vrednosti koje već nisu zapisane doda u bazu. Na taj način je postignuto da se u slučaju nestanka struje može izgubiti najviše 15-tak minuta iz log-a. Kad smo već „u radnji“, napravili smo i drugu bazu u koju se upisuju sve komande upućene bojleru, s datumom i vremenom kada su izvršene, što je zgodna alatka za debagovanje sistema. Za prikazivanje podataka iz log-a na Web strani bojlera verovatno će biti korišćena Grafana.

Napravili smo i Cron Job koji se startuje svakog dana u 10:05, napravi dnevnu statistiku rada bojlera i pošalje je e-mail-om vlasniku sistema. Da, trebalo je instalirati e-mail server na Pi, otvoriti e-mail adresu bojlera na kućnom domenu (kad već usisivač Zuzzy ima e-mail adresu, što je ne bi imao i bojler), i sada svakog jutra znamo da je bojler živ i zdrav i koliko je radio. Napravili smo statistiku broja paljenja i gašenje bojlera, koja može da bude korisna. Naime, ako se traži da temperatura vode bude 50 stepeni, nećete ugasiti bojler kada temperatura pređe 50 i ponovo ga upaliti kada se ona spusti ispod 50 – to bi značilo da se bojler stalno pali i gasi, što nije dobro ni za relej, ni za sklopku, ni za grejače. Inicijalno smo postavili „histerezis“ tako da se bojler pali na 0.5 stepeni ispod zadate temperature a gasi na 0.5 iznad nje i sada posmatramo log-ove kako bismo videli da li ove vrednosti treba modifikovati.

Nametnulo se i jedno pitanje teorijske prirode. Komande kontroleru zadajemo sa Web strane, ali i iz pomenutih Cron Job-ova, dakle moglo bi da se desi da dve komande budu zadate u istom trenutku, što bi napravilo haos. Šansa je mikroskopska, aplikacija nije mission critical ali opet... zašto da ne uradimo stvari kako treba? Trebalo je uvesti neku vrstu semafora. Unix ima potrebne mehanizme, ali je sve to delovalo jako komplikovano i podložno greškama, pa smo sami napravili trivijalno, a ipak dovoljno efikasno rešenje. Kreirali smo fajl /bojler/lock.txt i stavili da program za komunikaciju najpre ekskluzivno otvori taj fajl – ako ne uspe, čeka dok fajl ne bude slobodan. Pošto ga je otvorio, završava svoj posao i zatvara fajl, čime je semafor za akcije svih drugih procesa ponovo otvoren.

Razvoj i produkcija

Kada se kontroler najzad našao u podrumu, povezan na bojler, postavilo se pitanje daljeg razvoja. Ne možemo eksperimentima ugrožavati toplu vodu... I tako smo napravili još jedan primerak koji je ostao na radnom stolu. Dakle, baš kao što i treba da bude: razvojno okruženje i produkciono okruženje. U startu je softver na oba bio jednak, ali su brzo nastajale nove i nove verzije. Kako jednom testiranu novu verziju prebaciti na produkcioni kontroler?

Što se tiče Raspberry Pi komponente, sasvim je jednostavno – ssh na „podrumski“ uređaj i kopiranje softvera. Sa Arduino delom je bilo komplikovanije – da bi se novi softver upload-ovao na njega, treba sići u podrum s laptopom, otkačiti USB sa Pi-ja, ubosti kabl u laptop i onda poslati softver. A mi smo sve ovo radili da bi Arduino kontrolerom moglo da se upravlja iz udobnosti radne sobe...

Rešenje se zove avrdude a detaljno uputstvo za podešavanje možete pogledati na https://bit.ly/2WVDKgb. Ukratko, na PC-ju samo prevedete program i nastane .hex fajl koji je zatrpan negde duboko u stablu c:usersimeAppDataLocalTemp foldera. Pronađete taj fajl, prekopirate ga na produkcioni uređaj, pa tamo iz komandne linije pokrenete program avrdude koji .hex fajl preko USB interfejsa prekopira na Arduino. Komanda je prilično komplikovana, ali je uvek ista, tako da je od nje zgodno napraviti posalji.sh fajl koji će je izvršiti. Ne zaboravite samo da uradite i chmod +x posalji.sh i tako taj fajl učinite izvršnim, inače nećete moći da pokrenete komandu i pitaćete se šta se dešava.

I tako se nešto što je počelo od malog hobi-projekta proširilo na dvoprocesorski sistem, koji je zahtevao rad sa interaptima, korišćenje dva operativna sistema, upravljanje hardverom, sinhronizaciju i semafore, C/C++ programiranje, podešavanje Internet okruženja, malo HTML-a i PHP-a, grafičku biblioteku, bazu podataka, čak i cloud (šta ako memorijska kartica crkne? Treba praviti dnevni backup baza temperatura na Dropbox). Možda bi lep sledeći korak bio i mobilna aplikacija za lakšu kontrolu sistema, njegovo uklapanje u KNX smart home okruženje da bi boost bojlera mogao da se uključi pritiskom na neki od kućnih tastera i ko zna šta još... Svi su nam u šali govorili da izmišljamo toplu vodu, ali nama je bilo zanimljivo, puno toga smo naučili a nastali uređaj je itekako koristan.

Zahvaljujemo se kolegama iz PRVS tima, a posebno Bošku Koprivici, Vladimiru Kukuruzoviću, Ivanu Lotini, Milanu Maksimoviću i Jovanu Mariću na pomoći u raznim fazama „projekta bojler“. Zahvalnost dugujemo i Voji Antoniću čiji su komentari bili dragoceni pri formulisanju ovog teksta

SLEDEĆI TEKST U PC #268
preview
Master za ICT privredu



Acibadem porodilište

Heliant

CEO Summit 2024


YuNet

PC Press Studio

Čitaj PC Press

Excel kuhinjica

.

PC
Twitter Facebook Feed Newsletter