{"id":74421,"date":"2020-03-17T08:43:08","date_gmt":"2020-03-17T05:43:08","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/umnyj-dom-stroim-grafiki-potrebleniya-vody-i-elektrichestva-v-home-assistant"},"modified":"2020-03-17T08:43:08","modified_gmt":"2020-03-17T05:43:08","slug":"umnyj-dom-stroim-grafiki-potrebleniya-vody-i-elektrichestva-v-home-assistant","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/umnyj-dom-stroim-grafiki-potrebleniya-vody-i-elektrichestva-v-home-assistant","title":{"rendered":"\u0423\u043c\u043d\u044b\u0439 \u0434\u043e\u043c: \u0421\u0442\u0440\u043e\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0434\u044b \u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432 Home Assistant","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"\u0423\u043c\u043d\u044b\u0439 \u0434\u043e\u043c: \u0421\u0442\u0440\u043e\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0434\u044b \u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432 Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/f1133a4c391e901ed64bf0825a774fc6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVsakokrat, ko prejemam ra\u010dun za elektriko in vodo, sem presene\u010den \u2014 ali moja dru\u017eina res porabi toliko? No ja, v kopalnici imamo talno gretje in bojler, a vendarle ju ne uporabljamo neprekinjeno. Tudi vodo o\u010ditno var\u010dujemo (\u010deprav se radi potapljamo v kadi). \u017de nekaj let nazaj sem <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/411259\/\">povezal vodomere<\/a><\/noindex> in <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=XKvunh29sZo&amp;list=PLkt_cQxT0oUmfdxhbmTjytjaJjZjSVUOu\">elektri\u010dnega omre\u017eja<\/a><\/noindex> z pametno hi\u0161o, a tu se je projekt ustavil. Analizo porabe sem opravil \u0161ele zdaj, o \u010demer pravzaprav pi\u0161em v tem \u010dlanku.<\/p>\n<p>Nedavno sem pre\u0161el na Home Assistant kot sistem pametne hi\u0161e. Eden od razlogov je bila prav mo\u017enost zbiranja velike koli\u010dine podatkov z enostavno mo\u017enostjo izdelave razli\u010dnih grafikonov.<\/p>\n<p>Informacije, opisane v tem \u010dlanku, niso nove, vse te zadeve so \u017ee bile opisane na internetu pod razli\u010dnimi nazivi. A vsak \u010dlanek praviloma opisuje le en pristop ali vidik. Primerjati vse te pristope in izbrati najprimernej\u0161ega je bilo potrebno sam. \u010clanek vseeno ne ponuja iz\u010drpnih informacij o zbiranju podatkov, temve\u010d predstavlja nekak\u0161en povzetek, kako sem jaz to naredil. Tako so konstruktivna kritika in predlogi za izbolj\u0161ave dobrodo\u0161li.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Definisanje zadatka<\/h2>\n<p>\nTorej, cilj dana\u0161nje vaje je pridobiti lepe grafike porabe vode in elektrike:<\/p>\n<ul>\n<li>Uradne ure za 2 dni<\/li>\n<li>Dnevne za 2 tedna<\/li>\n<li>(neobvezno) tedenske in mese\u010dne<\/li>\n<\/ul>\n<p>\nPri tem se sre\u010dujemo s nekaterimi te\u017eavami:<\/p>\n<ul>\n<li>Standardne komponente grafov so praviloma precej skromne. V najbolj\u0161em primeru lahko zgradite linearni graf na podlagi to\u010dk.\n<p>\u010ce dobro i\u0161\u010dete, lahko najdete zunanje komponente, ki \u0161irijo mo\u017enosti standardnega grafa. Za home assistant je v na\u010delu dobra in lepa komponenta <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kalkih\/mini-graph-card\">mini-graph-card<\/a><\/noindex>, vendar je tudi ta nekoliko omejena:<\/p>\n<ul>\n<li>Te\u017eko je nastaviti parametre stolp\u010dnega grafika pri dolgotrajnih intervalih (\u0161irina stolpca se dolo\u010da v delih ure, kar pomeni, da se bodo intervali dalj\u0161i od ure dolo\u010dali z decimalnimi \u0161tevilkami)<\/li>\n<li>Ni mogo\u010de na en graf dodajati razli\u010dnih entitet (na primer temperature in vla\u017enosti, ali zdru\u017eiti stolp\u010dni graf z linijo)<\/li>\n<\/ul>\n<\/li>\n<li>Ne samo da home assistant po defaultu koristi najjednostavniju bazu podataka SQLite (a ja, nespretni, nisam uspeo da instaliram MySQL ili Postgres), ve\u0107 se podaci \u010duvaju i na manje optimalan na\u010din. Na primer, pri svakoj promeni \u010dak i najsitnijeg digitalnog parametra u bazu se zapisuje ogroman json veli\u010dine oko kilobajta.\n<pre><code class=\"json\">{&quot;entity_id&quot;: &quot;sensor.water_cold_hourly&quot;, &quot;old_state&quot;: {&quot;entity_id&quot;: &quot;sensor.water_cold_hourly&quot;, &quot;state&quot;: &quot;3&quot;, &quot;attributes&quot;: {&quot;source&quot;: &quot;sensor.water_meter_cold&quot;, &quot;status&quot;: &quot;collecting&quot;, &quot;last_period&quot;: &quot;29&quot;, &quot;last_reset&quot;: &quot;2020-02-23T21:00:00.022246+02:00&quot;, &quot;meter_period&quot;: &quot;hourly&quot;, &quot;unit_of_measurement&quot;: &quot;l&quot;, &quot;friendly_name&quot;: &quot;water_cold_hourly&quot;, &quot;icon&quot;: &quot;mdi:counter&quot;}, &quot;last_changed&quot;: &quot;2020-02-23T19:05:06.897604+00:00&quot;, &quot;last_updated&quot;: &quot;2020-02-23T19:05:06.897604+00:00&quot;, &quot;context&quot;: {&quot;id&quot;: &quot;aafc8ca305ba4e49ad4c97f0eddd8893&quot;, &quot;parent_id&quot;: null, &quot;user_id&quot;: null}}, &quot;new_state&quot;: {&quot;entity_id&quot;: &quot;sensor.water_cold_hourly&quot;, &quot;state&quot;: &quot;4&quot;, &quot;attributes&quot;: {&quot;source&quot;: &quot;sensor.water_meter_cold&quot;, &quot;status&quot;: &quot;collecting&quot;, &quot;last_period&quot;: &quot;29&quot;, &quot;last_reset&quot;: &quot;2020-02-23T21:00:00.022246+02:00&quot;, &quot;meter_period&quot;: &quot;hourly&quot;, &quot;unit_of_measurement&quot;: &quot;l&quot;, &quot;friendly_name&quot;: &quot;water_cold_hourly&quot;, &quot;icon&quot;: &quot;mdi:counter&quot;}, &quot;last_changed&quot;: &quot;2020-02-23T19:11:11.251545+00:00&quot;, &quot;last_updated&quot;: &quot;2020-02-23T19:11:11.251545+00:00&quot;, &quot;context&quot;: {&quot;id&quot;: &quot;0de64b8af6f14bb9a419dcf3b200ef56&quot;, &quot;parent_id&quot;: null, &quot;user_id&quot;: null}}}<\/code><\/pre>\n<p>\nImam prili\u010dno mnogo senzora (temperaturni senzori u svakoj sobi, mera\u010di vode i struje), a neki od njih generi\u0161u i prili\u010dno mnogo podataka. Na primer, samo mera\u010d struje SDM220 generi\u0161e oko desetak vrednosti svake 10-15 sekundi, a takvih mera\u010da bih \u017eeleo da instaliram oko 8. Pored toga, postoji \u010ditava gomila parametara koji se izra\u010dunavaju na osnovu drugih senzora. Tako sve te vrednosti lako mogu da pove\u0107aju bazu na 100-200 MB dnevno. Posle nedelju dana sistem \u0107e jedva raditi, a posle mesec dana USB fle\u0161 \u0107e se pokvariti (u slu\u010daju tipi\u010dne instalacije home assistant na raspberry PI), a o \u010duvanju podataka celo godine bolje da ne pri\u010damo.<\/li>\n<li>Ako imate sre\u0107e, va\u0161 mera\u010d sam mo\u017ee da broji potro\u0161nju. U svakom trenutku mo\u017eete da se obratite mera\u010du i pitate koje je trenutno nagomilano vrednost potro\u0161nje. Generalno, svi mera\u010di struje koji imaju digitalni interfejs (RS232\/RS485\/Modbus\/Zigbee) pru\u017eaju tu mogu\u0107nost.\n<p>Bolj slabo je, \u010de naprava lahko samo meri nek trenutni parameter (na primer trenutno mo\u010d ali tok), ali pa preprosto generira impulze vsakih X vat-ur ali litrov. Takrat je treba razmi\u0161ljati, kako in s \u010dim to integrirati ter kje shraniti vrednost. Obstaja tveganje, da bo izpu\u0161\u010den naslednji poro\u010dilo iz kakr\u0161nega koli razloga, poleg tega pa tudi natan\u010dnost sistema kot celote vzbuja vpra\u0161anja. Seveda lahko vse to zaupate sistemu pametnega doma, kot je home assistant, vendar nikdo ni odpravil to\u010dke o \u0161tevilu zapisov v bazi, poleg tega pa anketiranje senzorjev pogosteje kot enkrat na sekundo ne bo mogo\u010de (omejitev arhitekture home assistant).<\/li>\n<\/ul>\n<p><\/p>\n<h2>Pristop 1<\/h2>\n<p>\nNajprej si poglejmo, kaj home assistant ponuja iz \u0161katle. Meritve porabe v obdobju so zelo iskana funkcionalnost. Seveda so jo \u017ee zdavnaj implementirali v obliki specializirane komponente \u2014 utility_meter. <\/p>\n<p>Namen komponente je v tem, da znotraj ustvari spremenljivko trenutno_nakopi\u010dena_vrednost in jo ponastavi po izteku dolo\u010denega \u010dasovnega obdobja (ura\/teden\/mesec). Komponenta sama spremlja vhodno spremenljivko (vrednost nekega senzorja) in se sama naro\u010di na spremembe vrednosti \u2014 samo prejmete kon\u010dni rezultat. Ta komponenta je opisna v le nekaj vrsticah konfiguracijske datoteke.<\/p>\n<pre><code class=\"python\">utility_meter:\n  water_cold_hour_um:\n    source: sensor.water_meter_cold\n    cycle: hourly\n  water_cold_day_um:\n    source: sensor.water_meter_cold\n    cycle: daily\n<\/code><\/pre>\n<p>\nTukaj sensor.water_meter_cold predstavlja trenutno vrednost merilnika v litrih, ki jih prejemam <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/411259\/\">direktno iz naprave<\/a><\/noindex> prek mqtt. Konstrukcija ustvari 2 nova senzorja water_cold_hour_um in water_cold_day_um, ki kopi\u010dita urne in dnevne podatke ter jih ponastavita po izteku obdobja. Tukaj je graf urnega akumulatorja za pol dneva.<\/p>\n<p><img decoding=\"async\" alt=\"\u0423\u043c\u043d\u044b\u0439 \u0434\u043e\u043c: \u0421\u0442\u0440\u043e\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0434\u044b \u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432 Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/d3c3ea29c10b17142e51ebe756ab7123.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKoda za urne in dnevne grafike za lovelace-UI izgleda tako:<\/p>\n<pre><code class=\"python\">      - type: history-graph\n        title: 'Uravnote\u017eena poraba vode na uro z uporabo spremenljivk'\n        hours_to_show: 48\n        entities:\n          - sensor.water_hour\n\n      - type: history-graph\n        title: 'Dnevna poraba vode z uporabo spremenljivk'\n        hours_to_show: 360\n        entities:\n          - sensor.water_day\n<\/code><\/pre>\n<p>\nDe facto, in this algorithm lies the problem of this approach. As I mentioned earlier, for each incoming value (the current reading of the meter for every subsequent liter), 1kb of entries is generated in the database. Each utility meter also generates a new value, which is added to the database. If I want to collect hourly\/daily\/weekly\/monthly readings, including several water stacks and even add a bunch of electricity meters \u2014 that will be a lot of data. Well, actually, the data itself isn't much, but since the home assistant writes a lot of unnecessary information to the database, the size of the database will grow exponentially. I'm even afraid to estimate the size of the database for weekly and monthly charts.<\/p>\n<p>Moreover, the utility meter itself does not solve the stated task. The graph of values given by the utility meter is a monotonically increasing function that resets to 0 every hour. We need an understandable consumption graph for the user, showing how many liters were consumed over a period. The standard history-graph component cannot do this, but an external component, mini-graph-card, can help us.<\/p>\n<p>Here is the code for the card for lovelace-UI:<\/p>\n<pre><code class=\"python\">      - aggregate_func: max\n        entities:\n          - color: var(--primary-color)\n            entity: sensor.water_cold_hour_um\n        group_by: hour\n        hours_to_show: 48\n        name: &quot;Aggregirana potro\u0161nja vode po satu mjerenja&quot;\n        points_per_hour: 1\n        show:\n          graph: bar\n        type: 'custom:mini-graph-card'<\/code><\/pre>\n<p>\nIn addition to standard settings like the sensor's name, graph type, color (I didn't like the standard orange), it is important to note 3 settings:<\/p>\n<ul>\n<li>group_by:hour \u2014 the graph will be generated with alignment of the bars to the start of the hour<\/li>\n<li>points_per_hour: 1 \u2014 one bar for each hour<\/li>\n<li>And most importantly, aggregate_func: max \u2014 to take the maximum value within each hour. This parameter is what turns the sawtooth graph into bars.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"\u0423\u043c\u043d\u044b\u0439 \u0434\u043e\u043c: \u0421\u0442\u0440\u043e\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0434\u044b \u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432 Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/5bd866c39b23299e5f15dcf4a9bce38f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDon't pay attention to the series of bars on the left \u2014 this is the standard behavior of the component when there is no data. And there was no data \u2014 I only started collecting data through the utility meter a couple of hours ago just for this article (I'll explain my current approach a bit later). <\/p>\n<p>Na tej sliki sem \u017eelel pokazati, da podatki v\u010dasih delujejo, in stolpci res odra\u017eajo pravilne vrednosti. Vendar pa to ne velja za vse. Izpostavljen stolpec za obdobje od 11. do 12. ure prikazuje 19 litrov, medtem ko na zobetem grafikonu malo vi\u0161je vidimo porabo 62 litra za isto obdobje z istega senzorja. Bodisi je to napaka, bodisi so roke krive. \u0160e vedno pa ne razumem, zakaj so podatki na desni strani manjkali \u2014 poraba je bila normalna, kar je prav tako vidno na zobatem grafikonu.<\/p>\n<p>Na splo\u0161no mi ni uspelo dose\u010di verodostojnosti tega pristopa \u2014 grafikon skoraj vedno prikazuje nekaj neumnosti.<\/p>\n<p>Podoben koda za dnevni senzor. <\/p>\n<pre><code class=\"python\">      - aggregate_func: max\n        entities:\n          - color: var(--primary-color)\n            entity: sensor.water_cold_day_um\n        group_by: interval\n        hours_to_show: 360\n        name: &quot;Aggregirana potro\u0161nja vode dnevno&quot;\n        points_per_hour: 0.0416666666\n        show:\n          graph: bar\n        type: 'custom:mini-graph-card'\n<\/code><\/pre>\n<p>\nUpo\u0161tevajte, da je parameter group_by nastavljen na interval, in nadzoruje ga parameter points_per_hour. In to je druga te\u017eava tega komponenta \u2014 points_per_hour deluje dobro na grafih za eno uro ali manj, vendar slabo na dalj\u0161ih \u010dasovnih obdobjih. Da bi dobili en stolpec za en dan, je bilo treba vnesti vrednost 1\/24=0.04166666. O tedenskih in mese\u010dnih grafih pa niti ne govorim.<\/p>\n<h2>Pristop 2<\/h2>\n<p>\n\u0160e medtem ko sem se \u0161ele spoznaval z home assistant, sem naletel na to video:<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"-0HrYFCRH0M\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/-0HrYFCRH0M\/hqdefault.jpg\" alt=\"Predvajaj video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nPrijatelj zbira podatke o porabi z ve\u010d vrstami vti\u010dnic Xiaomi. Njegova naloga je nekoliko preprostej\u0161a \u2014 le prikazati vrednosti porabe za danes, v\u010deraj in za mesec. Nobenih grafov ni potrebno. <\/p>\n<p>Pustimo ob strani razprave o ro\u010dnem integriranju takoj\u0161njih vrednosti mo\u010di \u2014 o \"natan\u010dnosti\" tak\u0161nega pristopa sem \u017ee pisal zgoraj. Ni jasno, zakaj ni uporabil akumuliranih vrednosti porabe, ki jih \u017ee zbirajo iste vti\u010dnice. Po mojem mnenju bo integriranje znotraj naprave delovalo bolje. <\/p>\n<p>Iz videa bomo prevzeli idejo ro\u010dnega izra\u010duna porabe za obdobje. Pri fantu se \u0161tejejo le vrednosti za danes in v\u010deraj, vendar bomo \u0161li dlje in poskusili narisati grafikon. Bistvo predlagane metode v mojem primeru je naslednje.<\/p>\n<p>Uvedli bomo spremenljivko stanje_na_za\u010detku_ure, v katero bomo zabele\u017eili trenutne kazalnike \u0161tevca.<br \/>\nNa koncu ure (ali na za\u010detku naslednje) bomo izra\u010dunali razliko med trenutnim stanjem in tistem, ki smo ga shranili na za\u010detku ure. Ta razlika bo poraba za trenutno uro \u2014 vrednost bomo shranili v senzor in v prihodnosti bomo na tej osnovi gradili graf. <br \/>\nPrav tako je potrebno \u201eponastaviti\u201c spremenljivko vrednost_v_naporni_ure tako, da vanjo zapi\u0161emo trenutno vrednost \u0161tevca.<\/p>\n<p>Sve ovo se mo\u017ee u\u010diniti putem samog home assistant-a. <\/p>\n<p>Koda bo nekoliko dalj\u0161a kot v prej\u0161njem pristopu. Za za\u010detek bomo pripravili te \u201espremenljivke\u201c. Iz \u0161katle nimamo entitete \u201espremenljivka\u201c, a lahko izkoristimo storitve mqtt brokerja. Po\u0161iljali bomo vrednosti z oznako retain=true \u2014 to bo shranilo vrednost v brokerju, in to lahko kadarkoli izvle\u010demo, tudi ob ponovnem zagonu home assistant. Takoj sem naredil urne in dnevne \u0161tevce.<\/p>\n<pre><code class=\"python\">- platform: mqtt\n  state_topic: &quot;test\/water\/hour&quot;\n  name: water_hour\n  unit_of_measurement: l\n\n- platform: mqtt\n  state_topic: &quot;test\/water\/hour_begin&quot;\n  name: water_hour_begin\n  unit_of_measurement: l\n\n- platform: mqtt\n  state_topic: &quot;test\/water\/day&quot;\n  name: water_day\n  unit_of_measurement: l\n\n- platform: mqtt\n  state_topic: &quot;test\/water\/day_begin&quot;\n  name: water_day_begin\n  unit_of_measurement: l<\/code><\/pre>\n<p>\nVsa magija se dogaja v avtomatizaciji, ki se spro\u017ei vsako uro in vsako no\u010d.<\/p>\n<pre><code class=\"python\">- id: water_new_hour\n  alias: water_new_hour\n  initial_state: true\n  trigger:\n    - platform: time_pattern\n      minutes: 0\n  action:\n    - service: mqtt.publish\n      data:\n        topic: &quot;test\/water\/hour&quot;\n        payload_template: &gt;\n          {{ (states.sensor.water_meter_cold.state|int) - (states.sensor.water_hour_begin.state|int) }}\n        retain: true\n    - service: mqtt.publish\n      data:\n        topic: &quot;test\/water\/hour_begin&quot;\n        payload_template: &gt;\n          {{ states.sensor.water_meter_cold.state }}\n        retain: true\n\n- id: water_new_day\n  alias: water_new_day\n  initial_state: true\n  trigger:\n    - platform: time\n      at: &quot;00:00:00&quot;\n  action:\n    - service: mqtt.publish\n      data:\n        topic: &quot;test\/water\/day&quot;\n        payload_template: &gt;\n          {{ (states.sensor.water_meter_cold.state|int) - (states.sensor.water_day_begin.state|int) }}\n        retain: true\n    - service: mqtt.publish\n      data:\n        topic: &quot;test\/water\/day_begin&quot;\n        payload_template: &gt;\n          {{ states.sensor.water_meter_cold.state }}\n        retain: true<\/code><\/pre>\n<p>\nObe avtomatizaciji izvajata 2 dejanja:<\/p>\n<ul>\n<li>Izra\u010dunata vrednost za \u010dasovno obdobje kot razliko med za\u010detno in kon\u010dno vrednostjo<\/li>\n<li>Posodobita osnovno vrednost za naslednje \u010dasovno obdobje<\/li>\n<\/ul>\n<p>\nIzgradnja grafov se v tem primeru re\u0161i z obi\u010dajnim history-graph:<\/p>\n<pre><code class=\"python\">      - type: history-graph\n        title: 'Uravnote\u017eena poraba vode na uro z uporabo spremenljivk'\n        hours_to_show: 48\n        entities:\n          - sensor.water_hour\n\n      - type: history-graph\n        title: 'Dnevna poraba vode z uporabo spremenljivk'\n        hours_to_show: 360\n        entities:\n          - sensor.water_day<\/code><\/pre>\n<p>\nIzgleda ovako:<\/p>\n<p><img decoding=\"async\" alt=\"\u0423\u043c\u043d\u044b\u0439 \u0434\u043e\u043c: \u0421\u0442\u0440\u043e\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0434\u044b \u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432 Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/ebde2fc5f0a72d7d6ba565c3686dc9c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV principu je to \u017ee to, kar potrebujemo. Prednost te metode je, da se podatki generirajo enkrat za \u010dasovno obdobje. To pomeni 24 zapisov na dan za urni graf. <\/p>\n<p>\u017dal, to \u0161e vedno ne re\u0161uje skupne te\u017eave rasto\u010de baze. \u010ce \u017eelim mese\u010dni grafikon porabe, bom moral hraniti podatke vsaj eno leto. In ker home assistant nudi le eno nastavitev trajanja hrambe za celotno bazo, to pomeni, da bo potrebno hraniti VSE podatke v sistemu celotno leto. Na primer, v enem letu porabim 200 kubi\u010dnih metrov vode, kar pomeni 200000 zapisov v bazi. \u010ce upo\u0161tevam tudi druge senzorje, postanejo \u0161tevilke prav nesramne.<\/p>\n<h2>Pristop 3<\/h2>\n<p>\nNa sre\u010do so pametni ljudje \u017ee re\u0161ili to te\u017eavo z napisom podatkovne baze InfluxDB. Ta baza je posebej optimizirana za hrambo \u010dasovno opredeljenih podatkov in je idealna za shranjevanje vrednosti razli\u010dnih senzorjev. Sistem prav tako nudi SQL-podobni jezik poizvedb, ki omogo\u010da pridobivanje vrednosti iz baze in njihovo agregacijo na razli\u010dne na\u010dine. Na koncu lahko razne podatke hranimo razli\u010dno dolgo. Na primer, pogosto spremenljive vrednosti, kot so temperatura ali vla\u017enost, lahko hranimo samo nekaj tednov, medtem ko dnevne porabe vode lahko hranimo celo leto.<\/p>\n<p>Poleg InfluxDB so pametni ljudje tudi izumili Grafano \u2013 sistem za risanje grafikonov na podlagi podatkov iz InfluxDB. Grafana zna risati razli\u010dne vrste grafik, jih podrobno prilagajati in, kar je najpomembneje, te grafike je mogo\u010de 'vstavljati' v lovelace-UI home assistant-a.<\/p>\n<p>Navdihovati se <noindex><a rel=\"nofollow\" href=\"https:\/\/dummylabs.com\/ru\/post\/2019-01-13-influxdb-part1\/\">tukaj <\/a><\/noindex> in <noindex><a rel=\"nofollow\" href=\"https:\/\/dummylabs.com\/ru\/post\/2019-05-28-influxdb-part2\/\">tukaj<\/a><\/noindex>. V \u010dlankih je podrobno opisan proces namestitve in povezovanja InfluxDB ter Grafane s home assistantom. Jaz pa se bom osredoto\u010dil na re\u0161itev svoje konkretne naloge.<\/p>\n<p>Torej, najprej za\u010dnimo shranjevati vrednost \u0161tevca v InfluxDB. Kos konfiguracije home assistant (v tem primeru se bom zabaval ne samo s hladno, temve\u010d tudi s toplo vodo):<\/p>\n<pre><code class=\"python\">influxdb:\n  host: localhost\n  max_retries: 3\n  default_measurement: state\n  database: homeassistant\n  include:\n    entities:\n      - sensor.water_meter_hot\n      - sensor.water_meter_cold<\/code><\/pre>\n<p>\nIzklopimo shranjevanje teh podatkov v notranjo bazo home assistant, da je ne napihujemo brez potrebe:<\/p>\n<pre><code class=\"python\">recorder:\n  purge_keep_days: 10\n  purge_interval: 1\n  exclude:\n    entities:\n      - sensor.water_meter_hot\n      - sensor.water_meter_cold<\/code><\/pre>\n<p>\nZdajmo se v konzolo InfluxDB in nastavimo na\u0161o bazo. Zlasti moramo nastaviti, kako dolgo se bodo hranila dolo\u010dena podatki. To je regulirano s t.i. retention policy \u2014 to je podobno kot baze podatkov znotraj glavne baze podatkov, pri \u010demer ima vsaka notranja baza svoje nastavitve. Privzeto se vsi podatki shranijo v retention policy imenovano autogen, ti podatki se bodo hranili en teden. Rad bi, da se podatki na uro hranijo en mesec, tedenski \u2014 eno leto, mese\u010dni pa se nikoli ne izbri\u0161ejo. Ustvarimo ustrezne retention policy.<\/p>\n<pre><code class=\"sql\">USTVARITE POLITIKU ZADR\u017dAVANJA &quot;mesec&quot; NA &quot;homeassistant&quot; TRAJANJE 30d REPLIKACIJA 1\nUSTVARITE POLITIKU ZADR\u017dAVANJA &quot;leto&quot; NA &quot;homeassistant&quot; TRAJANJE 52w REPLIKACIJA 1\nUSTVARITE POLITIKU ZADR\u017dAVANJA &quot;neomejeno&quot; NA &quot;homeassistant&quot; TRAJANJE INF REPLIKACIJA 1<\/code><\/pre>\n<p>\nZdaj pa, dejanski trik \u2014 agregacija podatkov z uporabo continuous query. To je mehanizem, ki avtomatsko izvaja poizvedbo v dolo\u010denih \u010dasovnih intervalih, agregira podatke po tej poizvedbi, rezultati pa se shranijo v novo vrednost. Raz\u010dlenimo na primeru (pi\u0161em v stolpcih za bolj\u0161o berljivost, toda v resnici sem moral to ukaz vpisati v eni vrstici).<\/p>\n<pre><code class=\"sql\">CREATE CONTINUOUS QUERY cq_water_hourly ON homeassistant \nBEGIN \n  SELECT max(value) AS value \n  INTO homeassistant.month.water_meter_hour \n  FROM homeassistant.autogen.l \n  GROUP BY time(1h), entity_id fill(previous) \nEND<\/code><\/pre>\n<p>\nTa ukaz:<\/p>\n<ul>\n<li>Ustvari continuous query z imenom cq_water_cold_hourly v bazi homeassistant.<\/li>\n<li>Poizvedba se bo izvajala vsakih eno uro (time(1h)).<\/li>\n<li>Poizvedba bo obdelala vse podatke iz measurement-a homeassistant.autogen.l (litri), vklju\u010dno z merjenji hladne in vro\u010de vode.<\/li>\n<li>Agregirani podatki se bodo grupirali po entity_id, kar nam bo omogo\u010dilo, da ustvarimo lo\u010dene vrednosti za hladno in vro\u010do vodo.<\/li>\n<li>Ker je \u0161tevec litrov monotono nara\u0161\u010dajo\u010da serija, bomo v okviru vsake ure vzeli najve\u010djo vrednost, zato bo agregacija potekala s funkcijo max(value). <\/li>\n<li>Nova vrednost se bo shranila v homeassistant.month.water_meter_hour, kjer je month ime retention policy za shranjevanje en mesec. Podatki o hladni in vro\u010di vodi bodo razpr\u0161eni v lo\u010denih zapisih s pripadajo\u010dim entity_id in vrednostjo v polju value.<\/li>\n<\/ul>\n<p>\npono\u010di ali ko nikogar ni doma, porabe vode ni, in posledi\u010dno novih zapisov v homeassistant.autogen.l prav tako ni. Da ne bi bilo vrzeli v vrednostih pri obi\u010dajnih poizvedbah, lahko uporabimo fill(previous). To privede do tega, da InfluxDB uporabi vrednost prej\u0161nje ure. <\/p>\n<p>Na\u017ealost, continuous query ima posebnost: trik fill(previous) ne radi i zapisi jednostavno nisu stvoreni. \u010cini se da je to neka neprevazi\u0111ena prepreka koja <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/influxdata\/influxdb\/issues\/3220\">se raspravlja ve\u0107 nekoliko godina.<\/a><\/noindex>S ovim problemom \u0107emo se pozabaviti kasnije, a fill(previous) u continuous query neka ostane \u2014 to ne smeta. <\/p>\n<p>Proverimo \u0161ta smo dobili (naravno, treba sa\u010dekati nekoliko sati):<\/p>\n<pre><code class=\"python\">&gt; select * from homeassistant.month.water_meter_hour group by entity_id\n...\nname: water_meter_hour\ntags: entity_id=water_meter_cold\ntime                 value\n----                 -----\n...\n2020-03-08T01:00:00Z 370511\n2020-03-08T02:00:00Z 370513\n2020-03-08T05:00:00Z 370527\n2020-03-08T06:00:00Z 370605\n2020-03-08T07:00:00Z 370635\n2020-03-08T08:00:00Z 370699\n2020-03-08T09:00:00Z 370761\n2020-03-08T10:00:00Z 370767\n2020-03-08T11:00:00Z 370810\n2020-03-08T12:00:00Z 370818\n2020-03-08T13:00:00Z 370827\n2020-03-08T14:00:00Z 370849\n2020-03-08T15:00:00Z 370921\n<\/code><\/pre>\n<p>\nObratite pa\u017enju da se vrednosti u bazi \u010duvaju u UTC-u, tako da se na ovom spisku razlikuju za 3 \u010dasa \u2014 vrednosti u 7 ujutru u InfluxDB izve\u0161taju odgovaraju vrednostima u 10 ujutru na grafikima iznad. Tako\u0111e, obratite pa\u017enju da izme\u0111u 2 i 5 ujutro jednostavno nema zapisa \u2014 to je ta posebnost continuous query.<\/p>\n<p>Kao \u0161to vidite, agregirana vrednost tako\u0111e predstavlja monotono rastu\u0107u sekvencu, samo \u0161to zapisi dolaze re\u0111e \u2014 svaka sat. Ali to nije problem \u2014 mo\u017eemo napisati jo\u0161 jedan upit koji \u0107e izvu\u0107i prave podatke za grafikon.<\/p>\n<pre><code class=\"sql\">SELECT difference(max(value)) \nFROM homeassistant.month.water_meter_hour \nWHERE entity_id='water_meter_cold' and time &gt;= now() -24h \nGROUP BY time(1h), entity_id \nfill(previous)<\/code><\/pre>\n<p>\nRazjasni\u0107u:<\/p>\n<ul>\n<li>Iz baze homeassistant.month.water_meter_hour izvlecimo podatke za entity_id=&#8217;water_meter_cold&#8217; za zadnjih 24 sati (time &gt;= now() -24h). <\/li>\n<li>Kao \u0161to sam ve\u0107 spomenuo, u sekvenci homeassistant.month.water_meter_hour mogu nedostajati neki zapisi. Te podatke \u0107emo ponovo generisati pokretanjem upita sa GROUP BY time(1h). Ovoga puta fill(previous) \u0107e raditi kako treba, generi\u0161u\u0107i nedostaju\u0107e podatke (funkcija \u0107e uzeti prethodnu vrednost).<\/li>\n<li>Najva\u017enija stvar u ovom upitu je funkcija difference, koja \u0107e izra\u010dunati razliku izme\u0111u satnih oznaka. Sama po sebi ne radi i zahteva agregatnu funkciju. Neka to bude max() kori\u0161\u0107ena ranije.<\/li>\n<\/ul>\n<p>\nRezultat izvr\u0161enja izgleda ovako:<\/p>\n<pre><code class=\"python\">name: water_meter_hour\ntags: entity_id=water_meter_cold\ntime                 difference\n----                 ----------\n...\n2020-03-08T02:00:00Z 2\n2020-03-08T03:00:00Z 0\n2020-03-08T04:00:00Z 0\n2020-03-08T05:00:00Z 14\n2020-03-08T06:00:00Z 78\n2020-03-08T07:00:00Z 30\n2020-03-08T08:00:00Z 64\n2020-03-08T09:00:00Z 62\n2020-03-08T10:00:00Z 6\n2020-03-08T11:00:00Z 43\n2020-03-08T12:00:00Z 8\n2020-03-08T13:00:00Z 9\n2020-03-08T14:00:00Z 22\n2020-03-08T15:00:00Z 72<\/code><\/pre>\n<p>\nOd 2 do 5 ure zjutraj (UTC) ni bilo porabe. Vendar pa bo poizvedba vrnila isto vrednost porabe zaradi fill(previous), funkcija difference pa bo to vrednost od\u0161tela samo od sebe in na izhodu dobimo 0, kar je v bistvu to, kar potrebujemo.<\/p>\n<p>Preostane samo \u0161e to, da zgradimo graf. Za to bomo odprli Grafano, odprli kakr\u0161no koli obstoje\u010do (ali ustvarili novo) nadzorno plo\u0161\u010do, in ustvarili novo plo\u0161\u010do. Nastavitve grafov bodo tak\u0161ne.<\/p>\n<p><img decoding=\"async\" alt=\"\u0423\u043c\u043d\u044b\u0439 \u0434\u043e\u043c: \u0421\u0442\u0440\u043e\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0434\u044b \u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432 Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/c6f551590cd141438b644b24aa4ddebf.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPrikazal bom podatke o hladni in topli vodi na enem grafu. Poizvedba bo to\u010dno taka, kot sem jo opisal zgoraj. <\/p>\n<p>Parametri prikaza se nastavijo tako. Imel bom graf z linijami (lines), ki gre v stopnicah (stairs). Parameter Stack bom razlo\u017eil malo spodaj. Spodaj je \u0161e nekaj parametrov prikaza, vendar niso tako zanimivi.<\/p>\n<p><img decoding=\"async\" alt=\"\u0423\u043c\u043d\u044b\u0439 \u0434\u043e\u043c: \u0421\u0442\u0440\u043e\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0434\u044b \u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432 Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/cb47fc8570b7fd1305ce3451e0518f11.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDa bi dodal pridobljen graf v home assistant, je potrebno:<\/p>\n<ul>\n<li>izstopiti iz na\u010dina urejanja grafa. Nekako se pravilne nastavitve deljenja grafov ponujajo le s strani nadzorne plo\u0161\u010de<\/li>\n<li>Klikniti na trikotnik poleg imena grafa in v meniju izbrati share<\/li>\n<li>V odprtem oknu preiti na zavihek embed<\/li>\n<li>Odznake current time range \u2013 \u010dasovni pas bomo dolo\u010dili preko URL <\/li>\n<li>Izbrati potrebno temo. V mojem primeru je to svetla tema<\/li>\n<li>Kopirati pridobljeni URL v nastavitvah lovelace-UI<\/li>\n<\/ul>\n<p><\/p>\n<pre><code class=\"python\">      - type: iframe\n        id: graf_water_hourly\n        url: &quot;http:\/\/192.168.10.200:3000\/d-solo\/rZARemQWk\/water?orgId=1&amp;panelId=2&amp;from=now-2d&amp;to=now&amp;theme=light&quot;\n<\/code><\/pre>\n<p>\nUpo\u0161tevajte, da se \u010dasovni pas (zadnji 2 dni) dolo\u010da ravno tukaj, ne v nastavitvah nadzorne plo\u0161\u010de. <\/p>\n<p>Graf izgleda tako. Tople vode v zadnjih 2 dneh nisem uporabljal, zato se prikazuje samo graf hladne vode.<\/p>\n<p><img decoding=\"async\" alt=\"\u0423\u043c\u043d\u044b\u0439 \u0434\u043e\u043c: \u0421\u0442\u0440\u043e\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0434\u044b \u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432 Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/d18c82712d3b829a97ada8c8e2adce24.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTako tudi nisem odlo\u010dil, kateri graf mi je bolj v\u0161e\u010d, stopni\u010di ali pravi stolpci. Zato bom preprosto predstavil primer dnevnega grafa porabe, tokrat le s stolpci. Poizvedbe se gradijo podobno kot prej opisano. Parametri prikaza so taki:<\/p>\n<p><img decoding=\"async\" alt=\"\u0423\u043c\u043d\u044b\u0439 \u0434\u043e\u043c: \u0421\u0442\u0440\u043e\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0434\u044b \u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432 Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/557297e666f9cd73c3d2aa2fd80c0a2d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTa graf izgleda tako:<\/p>\n<p><img decoding=\"async\" alt=\"\u0423\u043c\u043d\u044b\u0439 \u0434\u043e\u043c: \u0421\u0442\u0440\u043e\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0434\u044b \u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432 Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/ac8c53569c6b05aeb22e05969de4cd6d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTako je o parameter Stack. V tem grafu se stolpec hladne vode ri\u0161e nad stolpec tople vode. Skupna vi\u0161ina ustreza skupni porabi tako hladne kot tople vode v obdobju. <\/p>\n<p>Vsi prikazani grafi so dinami\u010dni. Lahko pomaknete mi\u0161ko na zanimivo to\u010dko in si ogledate podrobnosti in vrednost v specifi\u010dni to\u010dki. <\/p>\n<p>Na\u017ealost, brez dveh \u017elic katrana ne gre. Na stolpcih grafu (za razliko od grafov s stopni\u010dastimi \u010drtami) je sredina stolpca na 00:00, ne na sredini dneva. To pomeni, da je leva polovica stolpca narisana na mestu prej\u0161njega dne. Grafi za soboto in nedeljo so zato narisani nekoliko levo od modrikaste cone. \u0160e nisem na\u0161el na\u010dina, kako to odpraviti. <\/p>\n<p>Druga te\u017eava je v nemogo\u010dnosti pravilne obdelave mese\u010dnih intervalov. Razlog je, da je dol\u017eina ure\/dne\/teden fiksna, medtem ko je dol\u017eina meseca vsaki\u010d razli\u010dna. InfluxDB zna delati le z enakimi intervali. Zaenkrat sem uspel dolo\u010diti fiksni interval 30 dni. Da, graf v enem letu se bo nekoliko pomaknil in stolpci ne bodo povsem ustrezali mesecem. Ampak ker me ta zadeva zanima predvsem kot merilo, mi to ustreza. <\/p>\n<p>Vidim vsaj dve re\u0161itvi:<\/p>\n<ul>\n<li>Ignorirati mese\u010dne grafe in se omejiti na tedenske. 52 tedenskih stolpcev na leto se povsem dobro vidi.<\/li>\n<li>Mese\u010dno porabo \u0161teti po metodi \u0161t. 2, grafano pa uporabiti le za lepe grafe. Tako bi bilo povsem to\u010dno re\u0161itev. Lahko bi celo nanesli graf teku za prej\u0161nje leto za primerjavo - grafana to zmore.<\/li>\n<\/ul>\n<h2>Zaklju\u010dek<\/h2>\n<p>\nNe vem zakaj, ampak obo\u017eujem tovrstne grafe. Ka\u017eejo, da \u017eivljenje te\u010de in se vse spreminja. V\u010deraj je bilo veliko, danes malo, jutri bo kako druga\u010de. \u0160e delati moram z dru\u017einskimi \u010dlani glede porabe. Ampak \u017ee ob trenutnih apetitih se velika in nerazumljiva \u0161tevilka na ra\u010dunu spremeni v precej jasen pregled porabe.<\/p>\n<p>Kljub skoraj 20-letni karieri programerja se prakti\u010dno nisem sre\u010deval z bazami podatkov. Zato se mi je namestitev zunanje baze podatkov zdela nekaj zelo zapletenega in nerazumljivega. Vse se je spremenilo, <noindex><a rel=\"nofollow\" href=\"https:\/\/dummylabs.com\/ru\/post\/2019-01-13-influxdb-part1\">v zgoraj omenjenem \u010dlanku,<\/a><\/noindex> se je izkazalo, da je dodajanje primernega orodja mogo\u010de z nekaj kliki, s specializiranim orodjem pa je naloga gradnje grafov postala nekoliko la\u017eja.<\/p>\n<p>V naslovu sem omenil porabo elektri\u010dne energije. Na \u017ealost trenutno ne morem prilo\u017eiti nobene grafike. En merilnik SDM120 mi je crknil, drugi pa se ob dostopu preko Modbus zmrzne. Vendar to ne vpliva na temo tega \u010dlanka - grafi se bodo ustvarjali na enak na\u010din kot za vodo.<\/p>\n<p>V tem \u010dlanku sem predstavil pristope, ki sem jih preizkusil sam. Verjetno obstajajo \u0161e kak\u0161ni drugi na\u010dini zbiranja in vizualizacije podatkov, za katere ne vem. Povejte mi o tem v komentarjih, zelo me zanima. Vesel bom konstruktivne kritike in novih idej. Upam, da bo material, ki sem ga predstavil, pomagal tudi komu drugemu.<br \/>\n<br \/>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/492314\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u043e\u043b\u0443\u0447\u0430\u044f \u043f\u043b\u0430\u0442\u0435\u0436\u043a\u0443 \u0437\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438 \u0432\u043e\u0434\u0443 \u044f \u0443\u0434\u0438\u0432\u043b\u044f\u044e\u0441\u044c \u2014 \u043d\u0435\u0443\u0436\u0435\u043b\u0438 \u043c\u043e\u044f \u0441\u0435\u043c\u044c\u044f \u0441\u0442\u043e\u043e\u043e\u043e\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442? \u041d\u0443 \u0434\u0430, \u0432 \u0432\u0430\u043d\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0442\u0435\u043f\u043b\u044b\u0439 \u043f\u043e\u043b \u0438 \u0431\u043e\u0439\u043b\u0435\u0440, \u043d\u043e \u0432\u0435\u0434\u044c \u043e\u043d\u0438 \u0436\u0435 \u043d\u0435 \u043a\u043e\u0447\u0435\u0433\u0430\u0440\u044f\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e. \u0412\u043e\u0434\u0443 \u0442\u043e\u0436\u0435 \u0432\u0440\u043e\u0434\u0435 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043c (\u0445\u043e\u0442\u044f \u043f\u043e\u043f\u043b\u0435\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0432 \u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0436\u0435 \u043b\u044e\u0431\u0438\u043c). \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \u044f \u0443\u0436\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0438 \u0432\u043e\u0434\u044b \u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043a \u0443\u043c\u043d\u043e\u043c\u0443 \u0434\u043e\u043c\u0443, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":74422,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-74421","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.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437.\" \/>\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\/sl\/blog\/administrirovanie\/umnyj-dom-stroim-grafiki-potrebleniya-vody-i-elektrichestva-v-home-assistant\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\udd47\u0423\u043c\u043d\u044b\u0439 \u0434\u043e\u043c: \u0421\u0442\u0440\u043e\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0434\u044b \u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432 Home Assistant | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/umnyj-dom-stroim-grafiki-potrebleniya-vody-i-elektrichestva-v-home-assistant\" \/>\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=\"2020-03-17T05:43:08+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-17T05:43:08+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\udd47Pametna hi\u0161a: Gradimo grafike porabe vode in elektri\u010dne energije v Home Assistant | ProHoster","description":"Vsaki\u010d.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/umnyj-dom-stroim-grafiki-potrebleniya-vody-i-elektrichestva-v-home-assistant","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\udd47\u0423\u043c\u043d\u044b\u0439 \u0434\u043e\u043c: \u0421\u0442\u0440\u043e\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0434\u044b \u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432 Home Assistant | ProHoster","og:description":"\u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437.","og:url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/umnyj-dom-stroim-grafiki-potrebleniya-vody-i-elektrichestva-v-home-assistant","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":"2020-03-17T05:43:08+00:00","article:modified_time":"2020-03-17T05:43:08+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"74421","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:15:28","updated":"2022-09-27 16:07:45","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/74421","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=74421"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/74421\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/74422"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=74421"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=74421"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=74421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}