{"id":37423,"date":"2019-10-31T22:17:33","date_gmt":"2019-10-31T19:17:33","guid":{"rendered":"https:\/\/prohoster.info\/blog\/shiotiny-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer\/"},"modified":"2019-10-31T22:17:33","modified_gmt":"2019-10-31T19:17:33","slug":"shiotiny-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/shiotiny-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer","title":{"rendered":"ShIoTiny: ventila\u021bia \u00eenc\u0103perilor umede (proiect-exemplu)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u021bia \u00eenc\u0103perilor umede (proiect-exemplu)\" src=\"\/wp-content\/uploads\/2019\/08\/a6e9c8239a90c713bd1b3b21891cbc13.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>Tezele principale sau despre ce este acest articol<\/h4>\n<p>\nContinu\u0103m seria de articole despre <b>ShIoTiny<\/b> \u2014 un controler programabil vizual bazat pe cipul <b>ESP8266<\/b>.<\/p>\n<p>\u00cen acest articol se discut\u0103 despre un exemplu de proiect de control al ventila\u021biei \u00een baie sau \u00een alt\u0103 \u00eenc\u0103pere cu umiditate ridicat\u0103 \u0219i despre cum se construie\u0219te programul pentru <b>ShIoTiny<\/b>.<\/p>\n<h4>Articolele anterioare din serie.<\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463107\/\">ShIoTiny: automatizare mic\u0103, internetul lucrurilor sau \u00abcu \u0219ase luni \u00eenainte de vacan\u021b\u0103\u00bb<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463285\/\">ShIoTiny: noduri, conexiuni \u0219i evenimente sau particularit\u0103\u021bile desen\u0103rii programelor<\/a><\/noindex><\/p>\n<h4>Linkuri<\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shiotiny\/ShIoTinyBin\">Firmware binare, schema controlerului \u0219i documenta\u021bia<\/a><\/noindex> <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shiotiny\/ShIoTinyBin\/blob\/master\/doc\/ShIoT-esp8266-01_obzor.pdf\">Instruc\u021biuni \u0219i descrierea nodurilor<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/esppower.ru\/mqtt-android\/\">Configurarea brokerului MQTT cloudmqtt.com<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/393277\/\">Panoul de control MQTT dashboard pentru Android<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Introducere<\/h4>\n<p>\nF\u0103r\u0103 experien\u021b\u0103 nu exist\u0103 \u00een\u021belegere. Este o adev\u0103r vechi demonstrat de timp \u0219i genera\u021bii. A\u0219adar, nu exist\u0103 nimic mai bun pentru a \u00eenv\u0103\u021ba abilit\u0103\u021bi practice dec\u00e2t \u00eencerc\u0103rile de a face ceva de unul singur. Iar exemplele care arat\u0103 ce se poate face \u0219i ce nu ar trebui s\u0103 \u00eencerci sunt extrem de utile. Gre\u0219elile altora, evident, nu pot preveni apari\u021bia propriilor gre\u0219eli, dar pot ajuta la reducerea num\u0103rului acestora.<\/p>\n<p>\u00centreb\u0103rile \u0219i mesajele cititorilor articolelor anterioare m-au impulsionat s\u0103 creez un mic proiect-exemplu de control al ventila\u021biei pentru a ar\u0103ta cum func\u021bioneaz\u0103 nodurile ShIoTiny.<\/p>\n<p>Ideea ini\u021bial\u0103 pe baza c\u0103reia a fost creat controlerul <b>ShIoTiny<\/b> \u2014 sta\u021bia de pompare \u0219i irigare \u2014 nu va fi relevant\u0103 pentru toat\u0103 lumea \u0219i nu va interesa pe toat\u0103 lumea. De aceea, am ales un sistem de control al ventila\u021biei, u\u0219or de \u00een\u021beles \u0219i util multora, ca exemplu.<\/p>\n<p>Voi spune c\u0103 ideea proiectului nu este a mea, iar <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/masterkit\/blog\/385281\/\">am preluat-o de aici<\/a><\/noindex> \u0219i apoi am adaptat-o la <b>ShIoTiny<\/b>.<\/p>\n<h4>\u00cencepe prin a \u00een\u021belege ce vrei<\/h4>\n<p>\nProcesul de perfec\u021bionare este infinit. \u0218i exact aceast\u0103 caracteristic\u0103 a distrus multe idei \u0219i proiecte bune. Dezvoltatorul, \u00een loc s\u0103 lanseze un lucru poate nu ideal, dar func\u021bional \u2014 a continuat s\u0103-l perfec\u021bioneze. \u0218i a perfec\u021bionat p\u00e2n\u0103 c\u00e2nd concuren\u021bii l-au dep\u0103\u0219it, lans\u00e2nd solu\u021bii poate nu ideale (dar adesea total inadecvate), dar func\u021bionale.<\/p>\n<p>Prin urmare, este foarte important s\u0103 \u0219tim unde s\u0103 punem punctul \u00een proiect. Cu alte cuvinte, trebuie s\u0103 definim ce dorim s\u0103 ob\u021binem la finalul proiectului din ceea ce avem la \u00eenceput. \u00cen limba rom\u00e2n\u0103, pentru documentul care se elaboreaz\u0103 tocmai cu scopul de a descrie drumul de realizare a ceva, exist\u0103 un cuv\u00e2nt scurt \u0219i concis \u201eplan\u201d, pe care traduc\u0103torii mai pu\u021bin capabili \u0219i managerii ineficien\u021bi l-au \u00eenceput s\u0103 \u00eel numeasc\u0103 inexplicabil \u201ehart\u0103 de traseu\u201d. Dar s\u0103 le d\u0103m uit\u0103rii.<\/p>\n<p>Planul nostru va fi astfel. S\u0103 presupunem c\u0103 avem o \u00eenc\u0103pere \u00een care umiditatea poate cre\u0219te semnificativ din c\u00e2nd \u00een c\u00e2nd. De exemplu, o baie sau o buc\u0103t\u0103rie. Umiditatea este un lucru nepl\u0103cut \u0219i metoda de a lupta cu ea este la fel de veche ca lumea: aerisirea \u00eenc\u0103perii. Exist\u0103 multe metode de aerisire. Dar, probabil, ne vom ab\u021bine de la metodele exotice \u0219i \u00eenvechite, cum ar fi negrii cu evantaie \u0219i ne vom concentra pe un ventilator obi\u0219nuit. Ventilatoarele sunt mai ieftine \u0219i mai u\u0219or de g\u0103sit \u00een zona noastr\u0103.<\/p>\n<p>Cu alte cuvinte, vrem s\u0103 control\u0103m ventilatorul: s\u0103-l pornim \u0219i s\u0103-l oprim \u00een func\u021bie de necesitate. Mai precis, dorim ca acesta s\u0103 se porneasc\u0103 \u0219i s\u0103 se opreasc\u0103 de la sine, atunci c\u00e2nd este necesar.<\/p>\n<p>R\u0103m\u00e2ne de stabilit: \u00een ce condi\u021bii ventilatorul trebuie s\u0103 se porneasc\u0103 \u0219i \u00een ce condi\u021bii \u2014 s\u0103 se opreasc\u0103.<\/p>\n<p>Aici totul este evident: dac\u0103 umiditatea dep\u0103\u0219e\u0219te un anumit prag stabilit \u2014 ventilatorul porne\u0219te \u0219i extrage aerul; c\u00e2nd umiditatea revine la normal \u2014 ventilatorul se opre\u0219te.<\/p>\n<p>Cineva atent va observa imediat cuv\u00e2ntul \u201estabilit\u201d. De cine este stabilit? Cum este stabilit?<\/p>\n<p>Pragul de umiditate poate fi setat \u00een mai multe moduri. Vom analiza dou\u0103 dintre ele: primul \u2014 cu ajutorul unei rezisten\u021be variabile \u0219i al doilea \u2014 prin re\u021bea folosind protocolul MQTT. Fiecare dintre aceste metode are avantaje \u0219i dezavantaje, care vor fi discutate \u00een continuare.<\/p>\n<p>Pentru cei care nu au \u00een\u021beles, explic c\u0103 \u201eumiditatea de prag\u201d este acel nivel de umiditate, la dep\u0103\u0219irea c\u0103ruia este necesar\u0103 pornirea ventilatorului.<\/p>\n<p>Urm\u0103torul \u00eentreb\u0103ri: ar trebui s\u0103 oferim utilizatorului dreptul de a porni ventilatorul direct? Adic\u0103, indiferent de nivelul umidit\u0103\u021bii, prin ap\u0103sarea unui buton? Vom oferi aceast\u0103 op\u021biune. Ventilatorul poate fi necesar nu doar atunci c\u00e2nd umiditatea este ridicat\u0103, ci \u0219i pentru a elimina din camer\u0103, de exemplu, mirosurile nepl\u0103cute, cunoscute popular ca \u201eduhoare\u201d.<\/p>\n<p>Deci, am \u00een\u021beles ce dorim \u0219i chiar \u0219i pu\u021bin despre cum va func\u021biona. S\u0103 enumer\u0103m pe scurt toate func\u021biile sistemului nostru de control al ventila\u021biei:<\/p>\n<ul>\n<li> stabilirea unui nivel de umiditate de praj cu dou\u0103 variante;<\/li>\n<li> m\u0103surarea nivelului de umiditate;<\/li>\n<li> pornire automat\u0103 a ventilatorului;<\/li>\n<li> oprire automat\u0103 a ventilatorului;<\/li>\n<li> pornire manual\u0103 a ventilatorului (prin ap\u0103sarea unui buton).<\/li>\n<\/ul>\n<p>\nDeci, planul este clar. Este necesar s\u0103 implement\u0103m toate func\u021biile enumerate mai sus \u00een programul nostru. Pe baza acestui \u201eplan\u201d, vom ac\u021biona. La \u00eenceput, vom desena schema structurii dispozitivului.<\/p>\n<h4>Schema structurale a dispozitivului<\/h4>\n<p>\n\u00cen general, vom avea dou\u0103 astfel de scheme. Prima \u2014 pentru varianta \u00een care nivelul de umiditate este setat printr-un rezistor variabil. A doua schem\u0103 \u2014 pentru varianta \u00een care nivelul de umiditate este setat prin re\u021bea prin protocolul MQTT.<\/p>\n<p>Dar deoarece aceste scheme vor diferi cu un singur element \u2014 rezistorul variabil \u201estabilirea nivelului de umiditate\u201d, vom desena doar o schem\u0103 structural\u0103. Sigur, schema structural\u0103 conform standardului GOST arat\u0103 diferit. Dar ne orient\u0103m nu pe ingineri-veterani, ci pe genera\u021bia t\u00e2n\u0103r\u0103. De aceea, claritatea este mai important\u0103.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u021bia \u00eenc\u0103perilor umede (proiect-exemplu)\" src=\"\/wp-content\/uploads\/2019\/08\/519f40496a8e459c22d69e7f0eaeee1d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDeci, ce vedem \u00een desen? Ventilatorul este conectat la relai <b>Relay1<\/b> controlerului <b>ShIoTiny<\/b>. Vreau s\u0103 subliniez c\u0103 ventilatorul este un dispozitiv care func\u021bioneaz\u0103 cu tensiune \u00eenalt\u0103. A\u0219a c\u0103, dac\u0103 cineva vrea s\u0103 realizeze singur a\u0219a ceva \u2014 fi\u021bi pruden\u021bi. Adic\u0103, c\u00e2t mai pu\u021bin, \u00eenainte de a v\u0103 introduce degetele sau aparatele de m\u0103sur\u0103 \u00een schem\u0103 \u2014 deconecta\u021bi cel pu\u021bin ventilatorul. \u0218i o a doua observa\u021bie. Dac\u0103 ventilatorul dumneavoastr\u0103 are o putere mai mare de <b>250W<\/b>, atunci nu-l conecta\u021bi direct la <b>ShIoTiny<\/b> \u2014 doar printr-un starter.<\/p>\n<p>Am rezolvat problema ventilatorului. Acum, butonul \u201epornire manual\u0103\u201d a ventilatorului. Acesta este conectat la intrarea <b>Input1<\/b>. Aici nu este mai nimic de explicat.<\/p>\n<p>Senzor de temperatur\u0103 \u0219i nivel de umiditate <b>DHT-11<\/b> (sau <b>DHT-22<\/b> sau analogii). O intrare special\u0103 pe controller este prev\u0103zut\u0103 pentru conectarea acestuia <b>ShIoTiny<\/b>. A\u0219a cum se vede \u00een imagine \u2014 conectarea unui astfel de senzor nu prezint\u0103 probleme.<\/p>\n<p>\u0218i, \u00een sf\u00e2r\u0219it, rezisten\u021ba variabil\u0103 care stabile\u0219te nivelul de umiditate. Mai exact \u2014 un divizor format din rezisten\u021be variabile \u0219i constante. Nu sunt probleme cu conexiunea sa, dar voi explica c\u0103 ADC-ul \u00eencorporat pe <b>ESP8266<\/b> este proiectat pentru un maxim de 1 Volt. De aceea este necesar un divizor de tensiune de aproximativ 5 ori.<\/p>\n<p>\u0218i \u00eenc\u0103 o dat\u0103, reamintesc c\u0103 acest divizor nu este necesar dac\u0103 nivelul de umiditate este setat prin re\u021bea utiliz\u00e2nd protocolul MQTT.<\/p>\n<p>S\u0103 \u00eencepem s\u0103 elabor\u0103m algoritmul de func\u021bionare a dispozitivului \u00een editorul ElDraw ShIoTiny. Cum se poate accesa acest editor, poate fi citit \u00een articolele anterioare sau \u00een instruc\u021biuni, linkul fiind disponibil la \u00eenceputul articolului.<\/p>\n<h4>Op\u021biunea \u00eent\u00e2i, cea mai simpl\u0103<\/h4>\n<p>\nS\u0103 \u00eencepem cu ceva simplu: activarea releului <b>Relay1<\/b> la dep\u0103\u0219irea nivelului de umiditate pentru o perioad\u0103 specificat\u0103.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u021bia \u00eenc\u0103perilor umede (proiect-exemplu)\" src=\"\/wp-content\/uploads\/2019\/08\/e9f8d30627cf7cdbebccf863c2b2f808.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDup\u0103 cum vedem, nu este nimic complicat: doar patru noduri, f\u0103r\u0103 a lua \u00een considerare nodurile-commentarii. <b>DHT11<\/b> \u2014 este senzorul de temperatur\u0103 \u0219i umiditate (poate fi schimbat cu <b>DHT22<\/b>).<\/p>\n<p>Constanta <b>CONST<\/b> \u2014 nivelul de umiditate, exprimat \u00een procente.<\/p>\n<p>Comparatorul \u2014 este un nod care compar\u0103 dou\u0103 numere \u0219i emite 1 la ie\u0219ire, dac\u0103 condi\u021bia specificat\u0103 este \u00eendeplinit\u0103 \u0219i 0 dac\u0103 condi\u021bia nu este \u00eendeplinit\u0103.<\/p>\n<p>\u00cen cazul nostru, aceast\u0103 condi\u021bie va fi <b>A&gt;B<\/b>, unde <b>A<\/b> \u2014 nivelul de umiditate m\u0103surat de senzor, iar <b>B<\/b> \u2014 nivelul de umiditate de prag men\u021bionat anterior.<\/p>\n<p>De \u00eendat\u0103 ce nivelul de umiditate m\u0103surat (<b>A<\/b>) dep\u0103\u0219e\u0219te nivelul de umiditate de prag (<b>B<\/b>), comparatorul va emite imediat 1 \u0219i releul se va activa. \u0218i invers, de \u00eendat\u0103 ce nivelul de umiditate revine la normal (adic\u0103 <b>A&gt;B<\/b> A&lt;=B <b>va emite 0 \u0219i releul se va dezactiva.<\/b>), comparatorul va emite imediat 1 \u0219i releul se va activa. \u0218i invers, de \u00eendat\u0103 ce nivelul de umiditate revine la normal (adic\u0103 <b>A&gt;B<\/b> Este clar? Dac\u0103 nu este prea clar \u2014 citi\u021bi \u00eenc\u0103 o dat\u0103 sau consulta\u021bi descrierea func\u021bion\u0103rii nodurilor din instruc\u021biuni.<\/p>\n<p>Voi men\u021biona c\u0103 datele de la senzor<\/p>\n<p>se actualizeaz\u0103 cam o dat\u0103 la 10 secunde. Prin urmare, releul nu va putea s\u0103 se activeze \u0219i s\u0103 se dezactiveze mai des dec\u00e2t o dat\u0103 la 10 secunde. <b>DHT11<\/b> Totul ar fi \u00een regul\u0103, dar ne-am dorit s\u0103 stabilim nivelul de umiditate de prag cu ajutorul unui potentiometru. Nu este nimic mai simplu!<\/p>\n<p>Pur \u0219i simplu \u00eenlocuim nodul-constant cu un nod ADC. Deoarece la ADC am conectat divizorul de tensiune cu potentiometru.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u021bia \u00eenc\u0103perilor umede (proiect-exemplu)\" src=\"\/wp-content\/uploads\/2019\/08\/3042bda4fe16e3fbad2d3f46f0beccb4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVom schimba pur \u0219i simplu nodul constant pe nodul ADC. De fapt, la ADC am conectat un divisor de tensiune cu un rezistor variabil.<\/p>\n<p>Tensiunea pe intrarea ADC variaz\u0103 de la 0 la 1 Volt. \u00cen schimb, umiditatea la ie\u0219irea senzorului variaz\u0103 de la 0 la 100%. Cum le compar\u0103m? Foarte simplu. Nodul ADC \u00een <b>ShIoTiny<\/b> nu m\u0103soar\u0103 doar tensiunea de la intrare, ci \u0219tie \u0219i s\u0103 o <i><b>scaleze \u0219i s\u0103 o transleze.<\/b><\/i>.<\/p>\n<p>Adic\u0103 la ie\u0219irea nodului ADC1 va fi valoarea <b>X<\/b>, calculat\u0103 dup\u0103 formula <\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u021bia \u00eenc\u0103perilor umede (proiect-exemplu)\" src=\"\/wp-content\/uploads\/2019\/08\/d01bc0ff4e6962252fced695d3894d32.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>, unde <img decoding=\"async\" alt=\"ShIoTiny: ventila\u021bia \u00eenc\u0103perilor umede (proiect-exemplu)\" src=\"\/wp-content\/uploads\/2019\/08\/ac0bf727edb4c759d12268376ec6ad9b.jpeg\" style=\"display:block;margin: 0 auto;\" \/> \u2014 tensiunea de la intrarea ADC (de la 0 la 1V); <b>k<\/b> \u2014 intervalul (ADC range) \u0219i <b>b<\/b>\u2014 deplasarea (ADC offset). Astfel, dac\u0103 set\u0103m <b>k=100<\/b> \u0219i <b>b=0<\/b>, atunci c\u00e2nd variaz\u0103 <img decoding=\"async\" alt=\"ShIoTiny: ventila\u021bia \u00eenc\u0103perilor umede (proiect-exemplu)\" src=\"\/wp-content\/uploads\/2019\/08\/0afbeb2e49d5a107bc54d6bbd87ba23c.jpeg\" style=\"display:block;margin: 0 auto;\" \/> \u00een intervalul de la 0 la 1, valoarea <b>X<\/b> de la ie\u0219irea nodului ADC va varia \u00een intervalul de la 0 la 100. Cu alte cuvinte, numeric egal cu intervalul de schimbare a umidit\u0103\u021bii de la 0 la 100%.<\/p>\n<p>Sau, pe scurt, rotind un poten\u021biometru, putem seta nivelul pragu de umiditate de la 0 la 100. Singura problem\u0103 este c\u0103 nu exist\u0103 dispozitive de afi\u0219are. Dar, \u00een practic\u0103, dac\u0103 poten\u021biometrul are 6 divizii 0%, 20%, 40%, 60%, 80%, 100%) \u2014 este suficient pentru a seta nivelul pragu de umiditate.<\/p>\n<p>Cum putem seta coeficientele <b>k<\/b> \u2014 intervalul (ADC range) \u0219i <b>b<\/b>\u2014 deplasarea (ADC offset)? E simplu ca bun\u0103 ziua! Da\u021bi click cu mouse-ul pe nodul <b>ADC1<\/b> \u0219i imediat vi se va deschide o fereastr\u0103 de configurare. \u00cen aceasta pute\u021bi seta tot ce ave\u021bi nevoie. Pentru cazul nostru, va fi o astfel de fereastr\u0103, ca \u00een imagine.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u021bia \u00eenc\u0103perilor umede (proiect-exemplu)\" src=\"\/wp-content\/uploads\/2019\/08\/ff81992b4fe236f5de6d17ca6bf8187c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDeci, avem o solu\u021bie de baz\u0103 func\u021bional\u0103. Vom \u00eencepe s\u0103 o \u00eembun\u0103t\u0103\u021bim.<br \/>\n\u00cen plus, aceast\u0103 solu\u021bie simpl\u0103 are un avantaj \u2014 nu are nevoie de internet. Este complet autonom\u0103.<\/p>\n<h4>Varianta a doua, conect\u0103m un buton.<\/h4>\n<p>\nTotul func\u021bioneaz\u0103 \u0219i toat\u0103 lumea este fericit\u0103. Dar a ap\u0103rut o problem\u0103, nu putem activa ventila\u021bia for\u021bat\u0103. Am stabilit deja c\u0103 la intrare <b>Input1<\/b> va fi conectat un buton care va porni \u0219i opri ventilatorul for\u021bat, f\u0103r\u0103 a \u021bine cont de senzorul de umiditate.<br \/>\nA venit timpul s\u0103 proces\u0103m acest buton \u00een schema noastr\u0103 programATIC\u0102.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u021bia \u00eenc\u0103perilor umede (proiect-exemplu)\" src=\"\/wp-content\/uploads\/2019\/08\/673c274a5be680ce7c3ef1f9572f93fa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBlocul de procesare a ap\u0103s\u0103rii butonului este eviden\u021biat cu o linie portocalie. Reprezint\u0103 un contor al ap\u0103s\u0103rilor butonului, care se reseteaz\u0103 la zero atunci c\u00e2nd valoarea de la ie\u0219irea sa dep\u0103\u0219e\u0219te unu (linia verde, ie\u0219irea nodului <b>CT<\/b>).<\/p>\n<p>Totul func\u021bioneaz\u0103 la fel de simplu ca \u00eenainte: contorul <b>CT<\/b> num\u0103r\u0103 ap\u0103s\u0103rile butonului conectat la intrare. <b>Input1<\/b>Adic\u0103 valoarea de la ie\u0219irea acestui contor cre\u0219te cu 1 la fiecare ap\u0103sare a butonului.<\/p>\n<p>De \u00eendat\u0103 ce aceast\u0103 valoare devine egal\u0103 cu dou\u0103 (adic\u0103 mai mare dec\u00e2t 1), imediat la ie\u0219irea comparatorului. <b>A&gt;B<\/b> apare\u0219te 1. \u0218i acest 1 va reseta contorul <b>CT<\/b> la zero. Se refer\u0103 la comparator, cel de jos din schem\u0103!<\/p>\n<p>Astfel, butonul nostru are dou\u0103 st\u0103ri \u2014 0 \u0219i 1. Dac\u0103 am avea nevoie de mai multe st\u0103ri (3 sau 4 sau chiar mai multe) \u2014 ar fi suficient s\u0103 schimb\u0103m constanta <b>CONST<\/b> de la unu la o alt\u0103 valoare.<\/p>\n<p>Deci, avem dou\u0103 condi\u021bii pentru a porni ventilatorul: dep\u0103\u0219irea unui anumit nivel de umiditate \u0219i ap\u0103sarea o singur\u0103 dat\u0103 a butonului. C\u00e2nd oricare dintre condi\u021bii este \u00eendeplinit\u0103, ventilatorul se va porni. \u0218i va func\u021biona p\u00e2n\u0103 c\u00e2nd butonul va fi ap\u0103sat din nou <b>\u0218i<\/b> nivelul de umiditate revine la normal.<\/p>\n<p>Desigur, putem complica \u0219i mai mult algoritmul, dar nu o vom face \u2014 vom l\u0103sa loc pentru creativitate celor interesa\u021bi.<\/p>\n<h4>A treia variant\u0103, ne conect\u0103m la internet<\/h4>\n<p>\nTot ce am descris \u2014 este absolut func\u021bional. Dar ce zicem de impresii? Orice hipster-hacker cu acnee va r\u00e2de de cineva care rote\u0219te un buton \u0219i apas\u0103 un buton, \u00een loc s\u0103 controleze cu smartphone-ul! A roti butonul este \u00abneinteresant\u00bb. Dar a glisa degetul pe smartphone, p\u00e2n\u0103 la s\u00e2ngerare \u2014 iat\u0103, este apogeul dorin\u021belor hipsterului-hacker (nu am fost niciodat\u0103 \u00een stare s\u0103-i deosebesc, a\u0219a c\u0103, dac\u0103 am gre\u0219it, scuze).<\/p>\n<p>Dar s\u0103 fim indulgen\u021bi cu aceste personalit\u0103\u021bi. Controlul prin internet are \u0219i avantaje reale. \u00cen primul r\u00e2nd, este vizibilitate. Exist\u0103 o mul\u021bime de aplica\u021bii pentru toate platformele care permit, cu c\u00e2teva click-uri, s\u0103 creezi un panou de control foarte util pentru controllerul nostru. \u00cen al doilea r\u00e2nd, permite monitorizarea de la distan\u021b\u0103 a nivelului de umiditate din \u00eenc\u0103pere. \u0218i, \u00een al treilea r\u00e2nd, po\u021bi vedea nu doar ce face ventilatorul \u2014 se \u00eenv\u00e2rte sau nu, dar \u0219i care este nivelul pragul setat de umiditate. \u0218i dac\u0103 ventilatorul s-a pornit automat sau manual. \u00cen general, tot ce dori\u021bi.<\/p>\n<p>Desigur, pentru un ventilator este mult\u0103 aten\u021bie \u2014 dar acesta este doar un exemplu.<\/p>\n<p>A\u0219adar, pentru a ne conecta la internet, vom folosi tehnologia <b>MQTT<\/b> \u0219i protocolul omonim.<br \/>\nPentru a folosi aceast\u0103 tehnologie, avem nevoie de un <b>broker MQTT<\/b>. Acesta este un server special care deserveste <b>clien\u021bi MQTT<\/b>, de exemplu <b>ShIoTIny<\/b> \u0219i smartphone-ul dvs.<\/p>\n<p>Esenta tehnologiei <b>MQTT<\/b> const\u0103 \u00een faptul c\u0103 fiecare client public\u0103 pe brokerul MQTT (server) date arbitrare sub un nume specific (numit <b>topic<\/b> \u00een terminologie <b>MQTT<\/b>). Al\u021bi clien\u021bi se pot abona la datele dorite conform numelui lor (<b>topic<\/b>) \u0219i pot primi datele publicate recent. Cu alte cuvinte, tot schimbul de date se face pe principiul client-broker-client.<\/p>\n<p>Eu <i><b>nu voi<\/b><\/i> insista asupra detaliilor. Pe internet exist\u0103 o mul\u021bime de articole \u0219i tutoriale despre cum func\u021bioneaz\u0103 <b>MQTT<\/b> \u0219i ce programe exist\u0103 pentru a crea panouri de control. Voi ar\u0103ta cum putem primi \u0219i publica date prin intermediul <b>ShIoTiny<\/b>.<\/p>\n<p>Ca broker, am folosit <noindex><a rel=\"nofollow\" href=\"https:\/\/www.cloudmqtt.com\/\">www.cloudmqtt.com<\/a><\/noindex>, dar principiul este acela\u0219i peste tot.<\/p>\n<p>Deci, s\u0103 presupunem c\u0103 te-ai \u00eenregistrat pe <b>brokerul MQTT<\/b>. De obicei, brokerul \u00ee\u021bi va oferi (sau \u00ee\u021bi va cere s\u0103 g\u0103se\u0219ti) un nume de utilizator \u0219i o parol\u0103 (pentru autentificare), precum \u0219i un port pentru conectare. Po\u021bi conecta <b>ShIoTiny<\/b> la <b>brokerului MQTT<\/b> \u00een dou\u0103 moduri \u2014 conectare standard \u0219i prin <b>TLS<\/b> (<b>SSL<\/b>).<\/p>\n<p>Toate aceste parametrii \u00een <b>ShIoTiny<\/b> sunt introduse pe fila <b>Networking<\/b>, sec\u021biunea <b>MQTT Connection to server<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u021bia \u00eenc\u0103perilor umede (proiect-exemplu)\" src=\"\/wp-content\/uploads\/2019\/08\/3a16cbd07a64428568e7c03f178e87ef.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDac\u0103 brokerul t\u0103u <b>broker MQTT<\/b> nu necesit\u0103 autentificare \u2014 nu introduce numele de utilizator \u0219i parola (las\u0103 aceste c\u00e2mpuri goale).<\/p>\n<p>Parametru <b>prefixul topicului MQTT<\/b> necessit\u0103 explica\u021bii separate.<\/p>\n<p>Prefixul parametrilor MQTT este un \u0219ir ad\u0103ugat la numele temei (<b>topic<\/b>) la publicare \u0219i abonare pe brokerul MQTT. Pentru a seta <b>prefixul MQTT<\/b> pentru controlerul t\u0103u, trebuie s\u0103-l introduci pur \u0219i simplu \u00een c\u00e2mpul de introducere \u201e<b>Prefixul temei MQTT<\/b>\u00bb (\u00ab<b>prefixul topicului MQTT<\/b>\u201d). Prefixul \u00eencepe \u00eentotdeauna cu o bar\u0103 oblic\u0103 (<b>\u00ab\/\u00bb<\/b>)! Dac\u0103 nu introduci bara oblic\u0103 \u00een c\u00e2mpul de introducere \u2014 aceasta va fi ad\u0103ugat\u0103 automat. \u00cen prefix nu pot fi folosite simboluri <b>\u00ab#\u00bb<\/b> \u0219i <b>\u00ab+\u00bb<\/b>. Nu exist\u0103 alte restric\u021bii.<\/p>\n<p>De exemplu, dac\u0103 publici parametrul \u201e<b>status<\/b>\u201d (sau te abonezi la el), iar prefixul t\u0103u este setat ca \u201e<b>\/shiotiny\/<\/b>\u201d, atunci pe broker acest parametru va fi publicat sub numele \u201e<b>\/shiotiny\/status<\/b>\u201d. Dac\u0103 ai setat un prefix gol, atunci toate parametrii de pe broker vor \u00eencepe cu o bar\u0103 oblic\u0103 (<b>\u00ab\/\u00bb<\/b>): \u00ab<b>status<\/b>\u201d se va publica ca \u201e<b>\/status<\/b>\u00bb.<\/p>\n<p>Deci, s\u0103 presupunem c\u0103 te-ai \u00eenregistrat pe <b>brokerul MQTT<\/b> \u0219i ai ob\u021binut numele de utilizator, parola \u0219i portul. Apoi ai introdus ace\u0219ti parametrii pe fila <b>Networking<\/b>, sec\u021biunea <b>MQTT Connection to server<\/b> controlerului <b>ShIoTiny<\/b>.<\/p>\n<p>S\u0103 presupunem c\u0103 prefixul este stabilit la \u201e<b>\/room\/<\/b>\u00bb.<\/p>\n<p>S\u0103 \u00eencepem cu publicarea st\u0103rii tuturor parametrilor cheie: relee <b>Realay1<\/b>, starea activ\u0103rii manuale, starea activ\u0103rii automate \u0219i, \u00een final, nivelurile de umiditate pragu \u0219i curent. \u0218i un bonus \u2014 temperatura din camer\u0103. Cum s\u0103 faci asta, vezi \u00een imagine.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u021bia \u00eenc\u0103perilor umede (proiect-exemplu)\" src=\"\/wp-content\/uploads\/2019\/08\/ed016ae37bb0cb1197e2e4fd649a7c4f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA\u0219a cum vedem, diferen\u021ba fa\u021b\u0103 de versiunea anterioar\u0103 este doar nodurile \u201e<b>MQTT Publish<\/b>\u201d. Av\u00e2nd \u00een vedere prefixul, se public\u0103 urm\u0103torii parametrii:<br \/>\n<img decoding=\"async\" alt=\"ShIoTiny: ventila\u021bia \u00eenc\u0103perilor umede (proiect-exemplu)\" src=\"\/wp-content\/uploads\/2019\/08\/34b67dd1932f30de777a680802f71c59.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDup\u0103 cum vedem, starea sistemului este la \u00eendem\u00e2n\u0103!<\/p>\n<p>Dar nu vrem doar s\u0103 vedem, ci \u0219i s\u0103 gestion\u0103m. Ce s\u0103 facem? Foarte simplu. Ne vom ab\u021bine de la instalarea unui nivel de umiditate de prag prin <b>ADC<\/b> \u0219i un rezistor variabil \u0219i vom seta acest nivel de umiditate de prag direct <b>MQTT<\/b> de pe smartphone!<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u021bia \u00eenc\u0103perilor umede (proiect-exemplu)\" src=\"\/wp-content\/uploads\/2019\/08\/c32d9ec2c1a082e0a1ead0b04526eba5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nElimin\u0103m modul ADC din schem\u0103 \u0219i conect\u0103m alte trei module noi: <b>FLASH store<\/b>, <b>FLASH restore<\/b> \u0219i <b>MQTT describe<\/b>.<\/p>\n<p>Func\u021bia modulului <b>MQTT describe<\/b> este evident\u0103: prime\u0219te parametrul <b>\/room\/trigHset<\/b> (nivelul de umiditate de prag) de la <b>brokerul MQTT<\/b>. Dar ce face cu datele mai departe? Pur \u0219i simplu le returneaz\u0103 modulei <b>FLASH store<\/b>, care, la r\u00e2ndul s\u0103u, salveaz\u0103 aceste date \u00een memoria non-volatil\u0103 sub numele de <b>trigH<\/b>. Dup\u0103 aceea, modulul <b>FLASH restore<\/b> cite\u0219te din memoria non-volatil\u0103 datele sub numele <b>trigH<\/b> \u0219i ceea ce se \u00eent\u00e2mpl\u0103 mai departe \u0219tim deja.<\/p>\n<p>De ce sunt necesare aceste complexe? De ce nu putem pur \u0219i simplu s\u0103 d\u0103m datele primite direct comparatorului? <\/p>\n<p>A\u0219a cum spunea tovar\u0103\u0219ul S. Holmes \u2014 <i>este elementar<\/i>! Nimeni nu garanteaz\u0103 c\u0103, dup\u0103 activarea dispozitivului dvs., acesta se va conecta la <b>brokerului MQTT<\/b>. \u0218i umiditatea trebuie m\u0103surat\u0103. \u0218i ventilatorul trebuie pornit. Dar f\u0103r\u0103 informa\u021bii despre nivelul de umiditate de prag, este imposibil! De aceea, dispozitivul nostru, la activare, extrage nivelul de umiditate de prag salvat anterior din memoria non-volatil\u0103 \u0219i \u00eel folose\u0219te pentru a lua decizii. Iar c\u00e2nd se va stabili conexiunea cu <b>brokerul MQTT<\/b> \u0219i cineva va publica o nou\u0103 valoare <b>\/room\/trigHset<\/b>, atunci se va folosi aceast\u0103 nou\u0103 valoare.<\/p>\n<p>Mai departe, pute\u021bi inventa orice dori\u021bi. De exemplu, pe l\u00e2ng\u0103 umiditate, s\u0103 monitorizati \u0219i temperatura. Sau s\u0103 ad\u0103uga\u021bi un sistem de iluminat \u201einteligent\u201d (avem \u00eenc\u0103 dou\u0103 relee \u0219i dou\u0103 intr\u0103ri nefolosite). Totul este \u00een m\u00e2inile dvs!<\/p>\n<h4>Concluzie<\/h4>\n<p>\nIat\u0103 c\u0103 am discutat despre c\u00e2teva exemple de implementare a celui mai simplu controler bazat pe ShIoTiny. Poate c\u0103 va fi util cuiva.<\/p>\n<p>Ca de obicei, sugestii, dorin\u021be, \u00eentreb\u0103ri, gre\u0219eli tipografice \u0219i altele \u2014 pe e-mail: <b>shiotiny@yandex.ru<\/b><br \/>\n<br \/>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/464485\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0435\u0437\u0438\u0441\u044b \u0438\u043b\u0438 \u043e \u0447\u0435\u043c \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0446\u0438\u043a\u043b \u0441\u0442\u0430\u0442\u0435\u0439 \u043e ShIoTiny \u2014 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c\u043e\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0447\u0438\u043f\u0430 ESP8266. \u0412 \u044d\u0442\u043e\u0442 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0446\u0438\u0438 \u0432 \u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043c\u043d\u0430\u0442\u0435 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u0441 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u043e\u0439 \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f ShIoTiny. \u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0441\u0435\u0440\u0438\u0438. ShIoTiny: \u043c\u0430\u043b\u0430\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f, \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0432\u0435\u0449\u0435\u0439 \u0438\u043b\u0438 \u00ab\u0437\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28079,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37423","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0435\u0437\u0438\u0441\u044b \u0438\u043b\u0438 \u043e \u0447\u0435\u043c \u044d\u0442\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/shiotiny-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47ShIoTiny: \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0446\u0438\u044f \u0432\u043b\u0430\u0436\u043d\u043e\u0433\u043e \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u044f (\u043f\u0440\u043e\u0435\u043a\u0442-\u043f\u0440\u0438\u043c\u0435\u0440) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0435\u0437\u0438\u0441\u044b \u0438\u043b\u0438 \u043e \u0447\u0435\u043c \u044d\u0442\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/shiotiny-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:17:33+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:17:33+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47ShIoTiny: ventila\u021bia unui spa\u021biu umed (proiect-exemplu) | ProHoster","description":"Ideile principale sau despre ce este aceasta.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/shiotiny-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47ShIoTiny: \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0446\u0438\u044f \u0432\u043b\u0430\u0436\u043d\u043e\u0433\u043e \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u044f (\u043f\u0440\u043e\u0435\u043a\u0442-\u043f\u0440\u0438\u043c\u0435\u0440) | ProHoster","og:description":"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0435\u0437\u0438\u0441\u044b \u0438\u043b\u0438 \u043e \u0447\u0435\u043c \u044d\u0442\u0430.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/shiotiny-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:17:33+00:00","article:modified_time":"2019-10-31T19:17:33+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37423","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 17:45:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:27:24","updated":"2026-01-23 17:45:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/37423","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=37423"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/37423\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/28079"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=37423"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=37423"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=37423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}