Anul trecut am fost pus in legatura cu niste oameni de si-au facut un startup de vandut credite de carbon (sau certificate vezi cum se zice pe aici). Ideea lor a fost super simpla: gasesc pe unii de au nevoie de arda gazul la ei in tara mai mult decat o pot face conform cotelor de carbon alocate si ii conving sa investeasca in energie solara pe undeva prin Africa, unde sunt multe comunitati care n-au curent. Africanii consuma energie dupa ce isi cumpara televizoare, frigidere, aer conditionat si masini de karaoke. Si pentru ca nu ard nimic fosil facand asta, toata energia aia produsa si consumata se transforma in certificate verzi dupa niste formule agreate de agentiile de mediu internationale.
Pe scurt, versiunea moderna de hai sa mai jefuim Africa de o resursa :))
Ca sa faca rost de bani au zis ca solutia lor o sa fie bazata pe blockchain, sa sara lumea cu cascavalul cum trebuie. E ca’n reclame, tre’ sa plusezi cu capabilitati :))
Mno, toate bune si frumoase pana aici, numai ca toti astia cu firma lor tehnic n-aveau nici o idee despre cum ar trebui sa se intample treaba. Nu ca sa stie cum sa programeze la un blockchain, ci cum merge el de fapt. Si nici neaparat cum scot datele din toate instalatiile puse pe case africanilor in afara de “there will be a communication device that does this”.
La inceput a fost super amuzant, ca am studiat niste tehnologii de blockchain si le-am zis, o sa mergem cu un blockchain bazat pe Ethereum ca in general face ce vreti voi. Prima intrebare a fost “si trebuie sa cumparam ETH sa folosim?”. Vreo trei luni a durat pana i-am lamurit ca e al lor si nu trebuie sa cumpere nimic. Inca nu’s convins ca ei au inteles, dar macar nu ma mai intreaba de asta.
In fine, am inceput dezvoltarea la solutie, merge, arata cum vor ei, toata lumea destul de fericita. Dupa ce am ajuns suficient de avansati cu blockchain-ul, le-am cerut sa imi zica cum o sa-mi vina datele alea de la toate instalatiile solare, sa stim cum le citim si sa le transformam sa le bagam in blockchain. Ca au zis ca se ocupa ei de gasirea unui furnizor.
Cum sa zic, nu e nici un furnizor care sa-ti dea un API prin care sa iei date care sa-ti zica cat au produs panourile solare si cat din cat au produs alea s-a consumat, a doua parte fiind aia importanta. Toti de fac contoare din astea destepte de masoara cat intra si cat iese, sunt in general firmele de distributie de curent si pe aia ii intereseaza sa puna contorul intre tine si ei si sa-l citeasca din cand in cand. Da un invertor sa faca asta si in mod precis nu.
Am invatat anul asta despre invertoare si chestii solare mai mult decat imi imaginam c-o sa ajung sa stiu vreodata. Majoritatea solutiilor off-grid iti dau o aplicatie care face grafice frumoase sa te bucuri ca ai curent cand stai in pizdia. Via BLE. Sau alea de au un “cloud” fac sampling din cand in cand, un pic de integrare pe intervale de timp (desi nu cred) si isi fac un grafic frumos sa te bucuri ca uite, produci mai mult decat consumi si poti sa ai curent si noapte din bateria incarcata peste zi de invertor. Ca poate dai un karaoke party noaptea si nu vrei sa ramai fara muzica ca n-ai soare.
Cei mai amuzanti cu fost niste nemti de aveau o solutie din asta cu trimis date in cloud, bine, daca ai si internet, ca e treaba ta cum faci sa ai internet sa conectezi invertorul la internet, si ca nu pot da acces programatic la solutia lor ca “privacy reasons” si “GDPR” :) Joaca-o p’asta. A, si puteai sa-ti faci un cont per invertor daca luai modulul de comunicatie de la ei. Vrei 1000 de invertoare, pai fa-ti 1000 de conturi :))
La un moment dat, strainii mei mi-au dat un link de la un indian de pe Youtube care si-a facut el un contor acasa si i-am intrebat daca simt nevoia sa-l certifice in Africa ca masoara corect lucruri si le-a trecut de “hai sa facem design de PCB-uri si de stuff si sa facem hardware” :)) Mai ales ca ala facuse un circuit activ in serie. Iti pocnea o rezistenta pe acolo, pula curent dupa.
Intr-un final i-am gasit pe unii care au port serial pe invertor si un protocol semi-text prin care pot interoga invertorul sa-mi dea valorile instante in momentul ala. Si mi-a basit mintea o idee: daca am datele alea si le citesc o data pe secunda, ca stiu exact cat inseamna un Watt*Secunda in kW/h, pot sa pun un mic controller care sa faca asta si nu trebuie sa-mi bat creierii cu “hardware from scratch” – ca asta imi mai lipsea, R&D pe hardware, cand io nici nu stiu ce inseamna culorile pe o rezistenta si ce e ala un tiristor.
Am zis, ca hei, iau eu un Raspberry Pi 4 si va fac contor sa dea fix ce date aveti voi nevoie. De ce n-am pus chiar un micro-controller? Pai ca alea au memorie limitata, internet nu stiu exact cat de robust e pe acolo si nu e exclus sa dureze o saptamana pana pot trimite citirile la procesat undeva in cloud.
Cum sa zic, ce-a urmat intareste ideea ca in practica nu e ca in teorie. Si nici teoria nu seamana cu practica.
Am comandat invertor, baterie si panouri solare sa fac un PoC.
Am inceput simplu: conectat bateria la invertor. Bateria are un sistem de management si e pe lista de baterii interoperabile a invertorului. Tot ce trebuie sa pui un cablu intre ele si sa-i zici la invertor ce baterie ai.
Documentatia o aveam pentru revizia B de la baterie, eu am comandat revizia C – ca doar aia se gaseste. Teoria zice ca nu trebuie sa existe diferente majorre intre reviziile minore. E, intre B si C s-au sucit oamenii cu bateria si au schimbat pinii pe care vorbeste invertorul cu ea. Si au pus pe dos si nite dip switch-uri Am stat o zi intreaga c’un prieten facand combinatii intre pini pana i-am dat de cap. Si nu, cablul nu e reversibil, trebuia musai sa plece ceva din invertor pe niste pini si sa ajunga pe alti pini la baterie.
Intr-un final glorios a inceput invertorul sa afiseze faptul ca discuta cu baterie si ca acu stie ce are de facut, ca pana atunci, dupa cam 10 minute incepea sa bipaie ca ceva nu e ok. Partea buna e ca nu am ars nici un circuit cu testele astea. Ca ne-a trecut si asta prin cap, ca poate am muit ceva p’acolo.
Dupa a venit distractia cu vorbit cu invertorul. Am luat laptopul, am pus o seriala in el, d’aia USB-RJ45 si s-a incins microchip-ul din seriala de puteam sa gatesc pe el. Am zis, ia sa vezi ca am futut ceva. Dar nu, a fost ok, probabil s-a incins de cat de incet l-am setat, ca duda aia de invertor stie doar 2400 baud rate. 2400 in 2022, sa-mi bag pula. Maca run 9600 asa ca acu 30 de ani sa fi stiut. Cu alt USB-2-Serial a mers.
Teoretic comenzile sunt simple, ii zici la invertor Qceva+checksum la toate literele alea si ala iti raspunde cu un sir de caractere urmat de un checksum. Ca sa poti valida ca ti-a raspuns invertorul corect.
Checksum-ul a fost o intreaga poveste. In documentatia astora era si o bucata de ceea ce se dorea a fi cod C pe post de exemplu de cum il poti calcula. Cod C care nu se compila neam. La un moment dat mi-am dat seama ca se vrea a fi de fapt un C++ antic. Cateva zile mai tarziu am gasit pe internet ce mortii lor de algoritm au folosit pentru checksum. Ca macar i-a dus capul sa de exemple de cum arata checksum-ul la niste comenzi.
XMODEM in mod CCITT. 16 biti. Inventat undeva prin anii 70. Am gasit si o implementare in Python, am validat-o si zic bine, sa ma apuc de treaba. Exemplul lor din manual mergea prin gura. Ca ei acolo ziceau gen, QSTAT3DFA ca exemplu. Dar ce vroiau ei sa zica de fapt e ca aia doi octeti, 3D si FA trebuiau trimisi fix asa, ca octeti, nu ca string. Adica in Python trebuia sa-i zic QSTAT\x3D\xFA si cireasa de pe tort, new line nu era \n. Era \r. De ce era asta cireasa de pe tort?
Pai pentru ca niste inteligenti de mentin pachetul de PySerial au zis ca incepand cu Python 3, scot optiunea de new_line=” din parametrii de setat seriala. Si ca daca e orice altceva in afara de \n, folosesti o functie de-a lor read_until(). Care citeste caracater cu caracater output-ul pana da de ce i-ai dat acolo ca parametru.
Intr-un final glorios, am reusit sa conving pe RPi sa vorbeasca cu invertorul. Si sa-mi iau datele de care aveam nevoie. Si cu asta am trecut iar printr-o dilema de poate am ars ceva.
Da ce sa vezi, ca invertorul ala nu se grabeste nicaieri. Dureaza fix ~ 600msec sa-mi returneze un raspuns. Pentru ca probabil au un SoC mai lent ca un Arduino pe invertorul ala. Planul meu sa interoghez invertorul de doua ori pe secunda s-a dus pe penis. Ca pe langa QSTAT trebuia sa-l mai intreb si de un QOPER, sa vad daca e bine sa nu si cum se mai simte… Am ajuns la concluzia ca pot sa-l intreb mai rar de sanatate, sa nu-l stresez prea tare.
Initial aveam in cap tot felul de avioane, despre cum sa pun un system de queuing pe RPi4, gen un Redis cu persistenta, si sa fie totul mega dinamic si super high-tech si sa fac o gramada de chestii pe dispozitiv si la “centru” sa trimit date deja serializate, aranjate frumos. Edge computing pe bunelea. Mi se sculase un pic de la atata excitatie.
Dupa aia mi-am adus aminte ca eu nu prea stiu sa programez si ca sunt prea multe lucruri in miscare daca vin cu ideea asta, si am luat-o pe dos: am facut cel mai dumb Raspberry din lume si toata procesarea o sa fie la “centru” unde pot sa fixez tot felul de bug-uri.
Bine c’am citit si eu cartea aia a lui Exupery de zicea ca perfectiune se atinge cand nu mai ai nimic de scos, nu de adaugat. Stia baiatul ala ce stia. Da si io dastept c’am citit o carte.
Anyway, am rezolvat-o cumva cu invertorul, acum zic sa pun si panourile. Initial luasem doua ca zic, na, pentru PoC sunt de ajuns. Dupa inseriatul lor am mai stat cateva zile sa-mi vina niste conectori MC4 – ca nu stiam ce sunt aia pana nu am desfacut panourile. Ca astia au inventat conectori separati, nu iti dau panourile si cu niste cabluri care se falfaie asa…
Cu doua n-a mers, licurea o iconita pe invertor de era pom de craciun. Pai ce sa vezi, voltaj insuficient. Ca invertorul vroia minim 120V si doua panouri fac doar 84 :) Am mai comandat doua ca unul s-a sinucis in timpul unei furtuni si cu trei panouri am scos cam 119-121V, suficient cat sa fericesc invertorul vietii sa nu mai beculeasca a jale.
Alta faza misto cu panourile solare, la modul general, e ca merg cel mai bine la frig – cel mai bun randament il au intr-o vara polara la latitudini extreme :))
Am descoperit cu ocazia asta asta ca exista sigurante automate pentru curent continuu. Ca nu vrei sa-ti trazneasca invertorul :))
Si uite asa mi-am scris cu manutele astea doua primul meu soft cap coada: citirea si trimiterea datelor pe de o parte, primirea si procesarea lor pe de alta parte sa scot ce imi trebuia din ele. Cu fucking error checking. Si retry-uri si morti in inima. Mega mandru.
A venit si clientul in vizita sa vada minunea si a plecat super fericit.
Pai am scris eu stuff care merge? Am scris. Am scris eu webservice-uri? Am scris.
Care e morala povestii? Ca la un moment dat prin niste tari din Africa o sa instaleze unii foarte multe mii de Raspberry Pi facute de mine (adica dupa o imagine de microSD facuta de mine) si o sa fie datele alea procesate tot de ceva facut de mine. Can eram in chiloti, cu laptopul in brate si picioarele sus pe masuta de cafea :)))
Am mai facut si ceva super exciting pe langa lucrurile care’s ceva mai plictisitoare.