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.
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.
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.
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ą.
2021-09-26 - 20:08
Super, panasiai ir pas mane. Naudoju OH , siemens PLC, savadarbi plc(ant arduino) kruva wifi davikliu temperaturai ir dregmei. Rekupas ir saules elektrine pajunta per modbusa. Skaitau straipsnius ir jaciuosi kaip namie.
2021-09-27 - 10:44
O kaip tie Siemens PLC? Jų kaina kaip ir nebloga, tik kad man truputį pritrūko plečiamumo. Ir su programine įranga kažkaip ten pas juos neaiškiai pasirodė, lyg ir pirkt reikia?
2021-10-03 - 19:45
Namų automatizacijai tiktų dvi siemens serijos – didesnė ir sudėtingesnė Siemens S7-1200 ir mažesnė bei labai paprasta naudoti Siemens Logo. S7-1200 serijos valdiklis 1214C gali būti plečiamas iki 8 IO modulių. CPU ir IO moduliai gali turėti tranzistorinius arba relinius išėjimus. Jeigu reikia max DI ir DO kiekio, tai gali būti 8 moduliai su 16 DI ir 16 DO. Programavimas su “TIA portal”. Tai didelis ir galingas įrankis,reikia skirti laiko pažiūrėti youtube kaip konfigūruojama viskas. S7-1200 rašo, kad turi MQTT bibliotekas, nesu bandęs ir naudojęs, jų instrukcija yra googlej, atrodo painokai.
Nesu dirbęs su kitų gamintojų programuojamomis relėmis, bet, mano nuomone, siemens logo yra geriausias pasirinkimas. Savybės ir funkcijos:
*Kaina sąlyginai nedidelė. Manau galima rasti 20-30% pigiau nupirkti perskambinus google rezultatus „siemens valdikliai”, nei kad yra Distrelec skelbiama.
*Pagal siemens dokumentaciją gali būti plečiamas iki 24 DI, 16DO, 8AI ir 2AO. Reikėtų pasitikrinti logo soft comfort programoje, man atrodo, kad gali būti daugiau AO
*Modulinis dizainas, tinka į skydelį kaip automatukai. Aišku minusas, kad jie turi jungtis vienas šalia kito, tai skydelis turi būti platus.
*Modbus TCP ir Profinet master/slave komunikacija.
*Ant pačio CPU yra displėjus, galima ką nors atvaizduoti, keisti parametrus.
*Labai paprastas programavimas, yra online funkcija stebėti kaip veikia programa.
*Youtubej galima pažiūrėti „logo web editor” – galimybe susikurti savo valdymo langus, mygtukus ir valdyti LOGO per interneto naršyklę.
*Yra modulis su KNX ryšiu, bet namie tai nelabai aktualu, kai home assistant turi savo knx integraciją.
*Nuo 8.3 LOGO versijos atsirado kažkoks „cloud support”. Nesu bandęs, siūlau google „logo aws cloud” ir čia pdf
https://cache.industry.siemens.com/dl/files/025/109781025/att_1034284/v2/109781025_LOGO_Cloud-connect_DOC_en.pdf
*LOGO gali būti 12/24V ir 230V. Renkantis CPU ir IO modulius reikia žiūrėti, kad sutaptų įtampos.
*230V maitinami CPU ir IO moduliai priima įėjimus su 230V.
S7-1200 turi kažką apie MQTT, o LOGO ne, tačiau tai yra nereikalinga. Yra gerai veikianti biblioteka http://snap7.sourceforge.net/ Aš ją naudojau su C# ir iš S7-300 serijos nuskaitydavau po kelis IO kas sekundę, viskas gerai veikė. Kolega naudojo Snap7 arduino bibliotekos versiją ir iš savo arduino mega rašydavo į Siemens valdiklio atminti nuskaitytų dallasų temperatūras. Naudojant Snap7 galima nuskaityti duomenis iš valdiklio IO praktiškai be programavimo ir toliau naudoti savo MQTT metodus.
Abu programavimo toolsai gali būti “pigiai” perkami rusiškuose torrentuose. Toks pirkimas, deja, plačiai paplitęs ir gal prisideda prie Siemens populiarumo rytuose. Didelis Siemens privalumas yra jų nemokamas ir aktyvus pagalbos forumas, programavimas per RJ45, kai nereikia spec kabelių.
Tokios būtų Siemens savybės. Tikiuosi bus naudinga ir kitiems besirenkantiems ką naudoti namie.
Lauksiu Jūsų „Click” valdiklio apžvalgos 🙂
2021-09-28 - 8:02
Pabusiu koncervatyvus – o tai einant i kita kambari, ar dar kur nors kur reik ijungt ar isjungt sviesa, tai kas kart traukt telefona, swipint, mygt widgeta yra greiciau nei einant tiesiog paspaust jungikli? 😀
2021-09-28 - 11:15
Panašu, kad skaitėte tik antraštę, bet įrašo nelabai. Šiai dienai jungtukai nesumontuoti, nes jų nėra nupirkta. Kambariais junginėti ir kolkas negalima. Po pusę kiekvieno aukšto tik. Faktas, kad fiziniai mygtukai daug patogiau, ir jie greitu laiku bus. Aprašysiu kada.
2021-09-29 - 7:37
Name jau gyvenam, bet neturim jungtukų. Nei vieno.
Na, perskaičius šitą dalį tai susidarė įspudis kad „ir neturėsim! Ir visai nereikia mums jų” 🙂
2021-11-03 - 8:06
O kaip ketini valdyti inputus? ar jų logiką aprašysi pačiame Click PLC controleryje, ar visgi iš OH pusės bandysi pollinti per Modmus Input Interrupt’us ir atitinkamai vykdysi logiką?
Pirmas variantas turbūt teisingesnis, jei pačio PLC galimybės lanksčios, bet antru variantu man architektūriškai gražiau atrodytų, kad visa biznio logika yra vienoje vietoje (OH).
2021-11-17 - 14:09
Bazinė logika stovės PLC dėl kelių priežasčių: nes greičiau sureaguoja, ir gali veikti be tinklo. T.y. gali nukristi OH, ar tinklas bet visi jungtukai veiks. Automatizacija, kažkokios scenos, ir kita ne gyvybiškai svarbi logika bus OH.
Šiaip paaukojant modbuso registrų grupę pavyko padaryti šiokią tokią konfiguraciją ir iš OH logikai tai kolkas apie religines problemas (kur kokią logiką geriau laikyti) per daug nesiparinu.
2021-11-22 - 9:39
Dar klausimėlis, kiek matau, pas patį output modulis užmaitinamas nuo to paties maitinimo šaltinio, kaip ir PLC valdiklis. Kiek visur skaitau, tai yra bloga praktika. Maitinimo šaltiniai turėtų būt atskiri.
2021-12-05 - 21:22
Jo, žinau, kad bloga praktika. Dabar jau pajungta ant atskiro maitinimo.
2021-12-01 - 17:26
Inspire’inai mane ir as nusipirkau toki pat valdikli is plcdirect.eu 🙂 jau atejo ir jau pradejau jungt 🙂 ziauriai smagus, tiek kaip moduliai jungiasi, tiek kaip paprastai pogramuojasi, ir kaina labai draugiska. savaitgali jau bandysiu visa nama pilnai permesti ant jo.
2022-06-21 - 16:40
Galbūt žinot iš kur Europoj nusipirt Click PLC be plcdirect.eu? Jie parduoda tik įmonėms, kurios yra PVM mokėtojos, o paprastiems mirtingiesiems niekur nerandu, kas parduoda.