Kaip ir minėjau, pradėsiu rašyt apie kelią išmanaus namo link. Kadangi jau įsikraustėm, tad ir darbai pajudės ta linkme gerokai sparčiau.

Agile

Turbūt nebandysiu rašyti kaip ką daryčiau, arba kokie yra planai dabar ir po metų. Toks rašinėjimas labiau panašu į krioklio principu kuriamus produktus, arba kitaip tariant primena senus laikus. Paskui dar reikia rašyt kitus įrašus, kaip planai pasikeitė ir viską ten. Dabar gi judrusis projektų valdymas ant bangos, tai ir stengiuosi daryti viską kai reikia ir tada galvot kaip ir kas. Todėl daugiau bandysiu rašyti apie tai, ką jau pasidariau ir kaip pasidariau.

Semantinis versijavimas

Turbūt teko matyti programų versijas, sudarytas iš trijų skaičių atskirtų tašku , x.y.z (pvz. 1.0.0. ). Tai x šiuo atveju būtų „major“ pakeitimai, kas reiškia kad nesuderinama su prieš tai buvusia versija. Dar kitaip populiariai tarp programerių sakoma „breaking changes“. y – būtų atsakingas už „minor“ pakeitimus, tai tiesiog kažkokie patobulinimai, kurie leidžia naudoti ir senesnę versiją, ir viskas suderinama. z – atsakingas už visokius „patch“ ir pataisymus ir jokio naujo funkcionalumo. Panašiai ir aš versijuosiu savo sistemą ir atskiras dalis. Teisingai sukonfiguravus visa CI/CD pipeline daug rankinio darbo versijuojant galima išvengti. Aš bent jau bloge versijuosiu visą bendrą namo sistemą, tiesiog, kad pačiam būtų galima sekti kaip viskas keitėsi.

Pradėti nuo 0.1.0 ar 1.0.0?

Nulis ant „major“ dažniausiai naudojamas kai dar programa yra „beta“ versijoj ar tiesiog neparuošta pilnam naudojimui, bet norint parodyti – kad darbai vyksta. Pas mane kadangi pradžia ir vis dar labiau „proof concept“ tai ir aš pradėsiu nuo 0.1.0.

Šviesos valdymas telefonu

Name jau gyvenam, bet neturim jungtukų. Nei vieno. Iš skydinės garaže junginėti ir nebaisiai patogu. Ypač prieš miegą. Dieną prieš įsikeliant sumontavau PLC su tom magiškom rėlėm. Drąsu, bet kažkiek esu išsibandęs veikimą ant stalo, turėjau jau paruoštą programą į PLC. Internetas ir WiFi jau name veikė metus prieš tai. Tad viskas pavyko sklandžiai. Gal tik truputį buvau pamiršęs kaip ModBus suintegruoti su OpenHAB (nes ir pats OpenHAB persivertė į 3 versiją nuo paskutinių bandymų), nors irgi buvau bandęs. Bet viską sukonfiguravus šviesą valdome iš telefono per OpenHAB programėlę arba per Android widget’us net neįjungus programėlės. Kolkas tik dvi grupės valdomos. Iš kitos pusės ne visos ir šviesos pajungtos.

Įspūdingos tvarkos nėra, bet kolkas laikinai pajungta. Žiūrint iš kairės viskas prasideda nuo rėlyčių, toliau PLC blokas. Viskas gražiai šviečia, mirksi ir viską ten.

PLC programą pridėsiu prie progos kitame įraše kur apžvelgsiu PLC programavimą.

OpenHAB ar HomeAssistant

Sprendimo šitoj vietoj dar neturiu. Profesiškai taip susiklostė, kad dirbu su Java, o OpenHAB parašytas ant Javos, kai HomeAssistant ant Python, tai pradėjau bandinėtis nuo OH. Įsirašiau ir HA nes jo aplinka man akiai mielesnė. Bandžiau pasileisti abu, nes jie šiame etape dar neturėtų pjautis vienas su kitu. Vis gi neradau kaip sukonfiguruoti ModBus per UI, kažkokius konfiguracinius failus rašyt reik, tai HA liko paleistas bet nesukonfiguruotas.

OpenHAB ir ModBus TCP integracija

Visą konfiguraciją ant OH galima pasidaryti per UI. Pirmą kartą gal tik painu, nes reikia susikurti „connection bridge“, tada reikia susikurti duomenų traukėją (poller), kur nurodomas adresų rėžis, kuriuos nuskaitinės. Tik tada galima kurtis konkrečius daiktus su konkrečiais adresais. Čia taip būna kai naudoji protokolą kuris sukurtas prieš 40 metų. Pati integracija pakankamai paprasta, reikia žinoti IP adresą, ir duomenų adresus pagal ModBus protokolą. Taip pasijungiau PLC ir pabandymui pasijungiau ir rekuperatoriaus kelis parametrus (lauko temperatūrą ir ventiliatoriaus intensyvumą) prie OH. Tik dažnai gamintojai nurodo adresus ne pagal ModBus adresą o pagal savo, tai tada iš specifikacijos adreso, reik atimti vienetą. Įsivaizduokit su kokiu ModBus RTU per RS485 tai reiktų dar baud rate nustatinėt, USB devaisą pajunginėti, kažkur ten laidelius pajunginėt ir nesumaišyt poliariškumo. O dar jei porą įrenginių ant tos pačios magistralės… Fuj, net nesinori pagalvoti… Su ModBus RTU vistiek teks dar susidurti, bet apie tai vėliau.

Komfovento ModBus specifikacija, tiek RTU tiek TCP ta pati

Python ir ModBus TCP integracija

Kadangi mano PLC nepalaiko MQTT, turėjau laisvą minutę, tai greitai pasibandžiau kaip iš pythono pasijungt prie ModBus. O ir šiaip gal gerai istorinius duomenis bus siurbt į duombazę. Mintis yra pasidaryti Modbus TCP į MQTT „bridge“. Bandymų triušis buvo tas pats Komfovent rekuperatorius.

from pyModbusTCP.client import ModbusClient
import pyModbusTCP

c = ModbusClient(host="192.168.0.8", port=502, unit_id=1, auto_open=True)

regs = c.read_holding_registers(903, 1) #903 yra lauko temperatūros adresas, 1 nurodo kiek registrų nuo 903 nuskaitysim

if regs:
    # number = pyModbusTCP.utils.word_list_to_long(regs)  # vienas registras yra 16bit dydžio, bet kai kurios reikšmės būna ir 32 ar net 64 tai su šita funkcija galima pasikonvertuoti, kokio dydžio reikšmės, reikia skaityti gamintojo specifikacijoj (tik primenu, kad ModBus labai senas protokolas)
    print(regs)
else:
    print("read error")

number_to_write = pyModbusTCP.utils.long_list_to_word([20], big_endian=True) # su dydžiais tas pats galioja ir įrašant, big_endian reiškia, nuo kurio galo 32bit/64bit reikšmę išdėlioti per 16bit registrus
c.write_multiple_registers(99, number_to_write) # čia pabandžiau ventiliatoriaus intensyvumą pareguliuoti, suveikė!

Bendras sistemos vaizdas

Bandysiu kažkiek paišyti sistemos schemą. Gal bus gerai ir man pačiam kada nors ateity.

Šiaip jau buvau numatęs, kad naudosiu 4 kartos raspberry su 8GB RAM. Buvau naujai surašęs viską, sukonfigūravęs 2x USB fleshiukus RAID rėžime. Taip jau nutiko, kad neveikia jis stabiliai, ir po kelių valandų lūžta. Galimai perkaista, nes net pasyvaus aušinimo neturi. Tad greit „suflešinau“ naują kortą su DietPi (šita distro man net labiau patinka nei Raspbian) ir viskas važiuoja stabiliai.

Kolkas nepiešiau kaip atrodo fizinė dalis, kurią valdo PLC nes ten viskas super laikinai: rėlės valdo du maitinimo blokus 220V > 24V o ant jų tiesiai šviesos prijungtos. Taip galutiniam variante tikrai nebus. Kaip atrodo vizualioji OH dalis atrodo ir pademonstruosiu. Kolkas tik tai ko labiausiai reikia, plius truputį eksperimentų su rekuperatoriaus duomenimis.

Kažkaip taip atrodo appsas. Fun fact, kad neprijungiau duomenų kaupimo, bet OH3 kažkur pats kaupia ir piešia grafikiuką. Lauko temperatūra iš rekuperatoriaus imu
Bene geriausias dalykas ant OH ilgą laiką buvo šitie widgetai, leidžia valdyt tiesiog nuo ekrano. Gal ir HA turi – nežinau.

P.s. mėgindamas gelbėti savo seną nebepalaikomą xiaomi Mi 8 ir paversti bent kiek saugesniu, „užsiflešinau“ Pixel experience ROM’ą (ale tas pats grynas androidas kaip ant Pixel) tai visai patiko.

Įspūdžiai

Įspūdžiai kolkas tik geri, nėra didelio poreikio jungiklius nusipirkti. Jei junginėjant iš appso arba per naršyklę – šviesos sureaguoja akimirksniu į išjungimą ar įjungimą. Jei jungiant nuo widgeto, tai priklauso kada appsas buvo naudotas, kartais suveikia iš karto, bet jei appsas seniau naudotas (tarkim prieš dešimt minučių, ar po ekrano išjungimo), tai sekundės kitos vėlavimas. Kas žino Android architektūrą tai žino ir kodėl taip darosi. D nors ir nėra technologijų mėgėja, bet ir puikiai prisijaukino appsą ir junginėja šviesas pati. Tai sekantis darbas ką reikės padaryt kol neautomatizuota – rekupo valdymą, nes prieš einant į dušą pasileidžiam stipriau.

Šiai dienai nėra jokio priėjimo iš išorės, t.y. ne vidinio tinklo. Tvarkysiuosi jau tada, kai turėsiu technines priemones saugiam tinklui įgyvendinti. Šiam kartui tiek.

Stabilumas

Sistema kolkas labai stabili – nieko nereikėjo specialiai perkraudinėti. Bandžiau net stress-testinti: tai routerį atjungiau nuo elektros, tai patį PLC, tai Odroid. Viskas gražiai susijungia ir veikia vos tik grįžta į tinklą. PLC kolkas dar net be baterijos.

Bonus

Name naudojamas senas routeris/switchas/access pointas viename, nes turėjau stalčiui. Toks senas, kad turiu gigabitinį šviesolaidį (kas yra 100+MB/s) o tempia vos 2MB/s per WiFi. Not cool at all. Bet daug didesnė problema, kad vakar pajungus workstation kompiuterį į tinklą nebeliko laisvų jungčių iš tų visų esamų 4 (rekuperatorius, Odroid, PLC, workstation). Plius kaip ir sakiau, noriu pasidaryti viską max mano suprantumu saugumu. Ta proga šią savaitę užsakiau visą reikalingą tinklo įrangą namo vidiniam tinklui. Na gal ne visą, bet pagrindinę. Tai kažkada bus proga sukalti įrašą ir apie vidinį tinklą.