{"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\/et\/blog\/administrirovanie\/umnyj-dom-stroim-grafiki-potrebleniya-vody-i-elektrichestva-v-home-assistant","title":{"rendered":"Nutika kodu: Joonistame veetarve ja elektri grafiike Home Assistantis","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Nutika kodu: Joonistame veetarve ja elektri grafiike Home Assistantis\" src=\"\/wp-content\/uploads\/2020\/03\/f1133a4c391e901ed64bf0825a774fc6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nI am always surprised every time I receive the bill for electricity and water \u2014 does my family really consume that much? Well, yes, there is a heated floor and a boiler in the bathroom, but they don't run constantly. We also seem to save water (although we do enjoy splashing around in the bath). A few years ago, I already <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/411259\/\">connected the water meters<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=XKvunh29sZo&amp;list=PLkt_cQxT0oUmfdxhbmTjytjaJjZjSVUOu\">electricity<\/a><\/noindex> to the smart home system, but that\u2019s where the progress stopped. I only got around to analyzing consumption now, which is what this article is about.<\/p>\n<p>Recently, I switched to Home Assistant as my smart home system. One of the reasons was precisely the opportunity to collect a large amount of data with the ability to conveniently create various types of graphs.<\/p>\n<p>The information described in this article is not new; all these things have already been discussed on the Internet under different guises. However, each article usually focuses on just one approach or aspect. It was up to me to compare all these approaches and choose the most suitable one. The article still doesn\u2019t provide exhaustive information on data collection, but serves as a kind of summary of how I did it. So constructive criticism and suggestions for improvement are welcome.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>\u00dclesande seadmine<\/h2>\n<p>\nSo, the purpose of today\u2019s exercise is to get nice graphs of water and electricity consumption:<\/p>\n<ul>\n<li>Hourly for 2 days<\/li>\n<li>Daily for 2 weeks<\/li>\n<li>(optionally) weekly and monthly<\/li>\n<\/ul>\n<p>\nWe face some difficulties in this:<\/p>\n<ul>\n<li>The standard graph components are usually quite poor. At best, you can create a line graph from points.\n<p>If you search well, you can find third-party components that extend the capabilities of the standard graph. For Home Assistant, the component <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kalkih\/mini-graph-card\">mini-graph-card<\/a><\/noindex>is relatively good and attractive, but it is also somewhat limited:<\/p>\n<ul>\n<li>It's challenging to set parameters for a bar graph over large intervals (the width of the bars is set in fractions of an hour, meaning intervals longer than an hour will be set in decimal numbers)<\/li>\n<li>You cannot add different entities to one graph (for example, temperature and humidity, or combine a bar graph with a line)<\/li>\n<\/ul>\n<\/li>\n<li>Lisaks sellele, et home assistant kasutab vaikimisi k\u00f5ige primitiivsemat andmebaasi SQLite (ja mina, oskamatu, ei suutnud MySQL v\u00f5i Postgresit installida), on andmed salvestatud ka mitte k\u00f5ige optimaalsemalt. N\u00e4iteks iga v\u00e4ikese digitaalse parameetri muutmise korral salvestatakse andmebaasi hiiglaslik json, mille suurus on umbes kilobait.\n<pre><code class=\"json\">{\"entity_id\": \"sensor.water_cold_hourly\", \"old_state\": {\"entity_id\": \"sensor.water_cold_hourly\", \"state\": \"3\", \"attributes\": {\"source\": \"sensor.water_meter_cold\", \"status\": \"collecting\", \"last_period\": \"29\", \"last_reset\": \"2020-02-23T21:00:00.022246+02:00\", \"meter_period\": \"hourly\", \"unit_of_measurement\": \"l\", \"friendly_name\": \"water_cold_hourly\", \"icon\": \"mdi:counter\"}, \"last_changed\": \"2020-02-23T19:05:06.897604+00:00\", \"last_updated\": \"2020-02-23T19:05:06.897604+00:00\", \"context\": {\"id\": \"aafc8ca305ba4e49ad4c97f0eddd8893\", \"parent_id\": null, \"user_id\": null}}, \"new_state\": {\"entity_id\": \"sensor.water_cold_hourly\", \"state\": \"4\", \"attributes\": {\"source\": \"sensor.water_meter_cold\", \"status\": \"collecting\", \"last_period\": \"29\", \"last_reset\": \"2020-02-23T21:00:00.022246+02:00\", \"meter_period\": \"hourly\", \"unit_of_measurement\": \"l\", \"friendly_name\": \"water_cold_hourly\", \"icon\": \"mdi:counter\"}, \"last_changed\": \"2020-02-23T19:11:11.251545+00:00\", \"last_updated\": \"2020-02-23T19:11:11.251545+00:00\", \"context\": {\"id\": \"0de64b8af6f14bb9a419dcf3b200ef56\", \"parent_id\": null, \"user_id\": null}}}<\/code><\/pre>\n<p>\nMul on \u00fcsna palju andureid (temperatuuriandurid igas toas, vee- ja elektri arvestid), ning m\u00f5ned neist genereerivad ka piisavalt palju andmeid. N\u00e4iteks vaid elektriarvesti SDM220 genereerib umbes k\u00fcmme v\u00e4\u00e4rtust iga 10-15 sekundi tagant, ja ma soovin paigaldada selliseid arvesti umbes 8. Lisaks on terve partii parameetreid, mis arvutatakse teiste andurite p\u00f5hjal. Seega v\u00f5ivad k\u00f5ik need v\u00e4\u00e4rtused kergesti muuta andmebaasi 100-200 MB v\u00f5rra iga p\u00e4ev. N\u00e4dala p\u00e4rast hakkab s\u00fcsteem vaevalt t\u00f6\u00f6tama ja kuu aja p\u00e4rast sureb m\u00e4lupulk (t\u00fc\u00fcpilise home assistant paigaldamise korral Raspberry PI-l), r\u00e4\u00e4kimata andmete s\u00e4ilitamisest aasta jooksul.<\/li>\n<li>Kui sul on vedanud, siis su arvesti oskab ise seda tarbimist lugeda. Sa saad igal hetkel p\u00f6\u00f6rduda arvesti poole ja k\u00fcsida, mis kell on akumuleeritud tarbimise v\u00e4\u00e4rtus. \u00dcldjuhul pakuvad k\u00f5ik elektriarvestid, millel on digitaalne liidese (RS232\/RS485\/Modbus\/Zigbee), sellist v\u00f5imalust.\n<p>Halvem, kui seade suudab lihtsalt m\u00f5\u00f5ta m\u00f5ningast kohest parameetrit (n\u00e4iteks kohest v\u00f5imsust v\u00f5i voolu) v\u00f5i lihtsalt genereerida impulsse iga X vatundi v\u00f5i liitri j\u00e4rel. Siis tuleb m\u00f5elda, kuidas ja millega seda integreerida ning kus v\u00e4\u00e4rtust koguda. On oht, et m\u00f5ni aruanne j\u00e4\u00e4b ikka vahele mingil p\u00f5hjusel ja s\u00fcsteemi t\u00e4psuse \u00fcle on k\u00fcsimusi. Muidugi v\u00f5ib kogu selle \u00fclesande usaldada nutika kodu s\u00fcsteemile nagu home assistant, kuid andmebaasi salvestuste hulk on \u00fcks asi, mis kedagi ei vabasta, ja andurite k\u00fcsitlemine sagedamini kui kord sekundis ei \u00f5nnestu (home assistanti arhitektuurist tingitud piirang).<\/li>\n<\/ul>\n<p><\/p>\n<h2>L\u00e4henemine 1<\/h2>\n<p>\nK\u00e4ivitusel vaatame, mida home assistant pakub. Tarbimise m\u00f5\u00f5tmine perioodil on \u00fcsna n\u00f5utud funktsionaalsus. Kindlasti on see juba ammu realiseeritud spetsialiseeritud komponendina - utility_meter. <\/p>\n<p>Komponendi p\u00f5him\u00f5te on selles, et see loob sees tekundi muutuja tekkinud_akkumuleeritud_v\u00e4\u00e4rtus, ja nullib selle m\u00e4\u00e4ratud perioodi (tund\/n\u00e4dal\/kuu) l\u00f5ppedes. Komponent j\u00e4lgib ise sisenevat muutujat (m\u00f5ne anduri v\u00e4\u00e4rtust), kirjutab end ise v\u00e4\u00e4rtuse muutustele alla - te saate lihtsalt valmis tulemuse. Selle kirjeldamine n\u00f5uab vaid m\u00f5nda rida konfiguratsioonifailis.<\/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>\nSiin on sensor.water_meter_cold praegune v\u00e4\u00e4rtus m\u00f5\u00f5turis liitrites, mille ma olen saanud <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/411259\/\">otse rauast<\/a><\/noindex> mqtt kaudu. Konstruktsioon loob 2 uut andurit water_cold_hour_um ja water_cold_day_um, mis koguvad tunni- ja p\u00e4evaseid n\u00e4itajaid, nullides need perioodi l\u00f5ppedes. Siin on graafik tunni akumulaatori poolest p\u00e4evast.<\/p>\n<p><img decoding=\"async\" alt=\"Nutika kodu: Joonistame veetarve ja elektri grafiike Home Assistantis\" src=\"\/wp-content\/uploads\/2020\/03\/d3c3ea29c10b17142e51ebe756ab7123.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTunni- ja p\u00e4evagraafiku kood lovelace-UI jaoks n\u00e4eb v\u00e4lja selline:<\/p>\n<pre><code class=\"python\">      - type: history-graph\n        title: 'Tunni veetarbimine varside kasutamisega'\n        hours_to_show: 48\n        entities:\n          - sensor.water_hour\n\n      - type: history-graph\n        title: 'P\u00e4evane veetarbimine varside kasutamisega'\n        hours_to_show: 360\n        entities:\n          - sensor.water_day\n<\/code><\/pre>\n<p>\nTegelikult on selle algoritmi probleem just selles. Nagu ma juba mainisin, genereeritakse iga sisendi v\u00e4\u00e4rtuse (praegune arvesti n\u00e4it kwh kohta) jaoks andmebaasi 1 kB kirje. Iga utiliidi arvesti genereerib samuti uue v\u00e4\u00e4rtuse, mis ka salvestatakse andmebaasi. Kui ma tahan koguda tunniseid\/p\u00e4evaste\/n\u00e4dalaste\/kuuliste n\u00e4ite, ja lisaks veel mitmeid vees\u00fcsteeme ning hunniku elektriarvestit, siis andmeid tuleb v\u00e4ga palju. T\u00f5en\u00e4oliselt ei ole need andmed nii t\u00f5sised, aga kuna kodu assistent salvestab andmebaasi palju \u00fcleliigset teavet, siis andmebaasi suurus kasvab nagu p\u00e4rmitaigen. Kardan isegi nende n\u00e4dalaste ja kuiste graafikute andmebaasi suurust hinnata.<\/p>\n<p>Lisaks ei lahenda utiliidi arvesti iseenesest seatud \u00fclesannet. Arvesti, mille v\u00e4\u00e4rtused genereerib utiliidi arvesti, on monotoonselt kasvav funktsioon, mis nullitakse igal tunnil. Meile on vajalik kasutajale arusaadav tarbimise graafik, n\u00e4idates, kui palju liitreid on perioodi jooksul tarbitud. Standardne koostisosa ajaloograaf ei oska seda teha, kuid abi saab v\u00e4lisest komponendist mini-graph-card.<\/p>\n<p>See on lovelace-UI kaartide kood:<\/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: \"Tunni tarbimise kogus, koondatud kommunaalm\u00f5\u00f5turi j\u00e4rgi\"\n        points_per_hour: 1\n        show:\n          graph: bar\n        type: 'custom:mini-graph-card'<\/code><\/pre>\n<p>\nLisaks standardsetele seadistustele, nagu sensori nimi, graafiku t\u00fc\u00fcp, v\u00e4rv (tavaline oran\u017e ei meeldinud), on oluline m\u00e4rkida kolm seadistust:<\/p>\n<ul>\n<li>group_by: hour \u2014 graafik genereeritakse, ritta seades t\u00fckid tunni alguse j\u00e4rgi<\/li>\n<li>points_per_hour: 1 \u2014 \u00fcks t\u00fckike igal tunnil<\/li>\n<li>Ja k\u00f5ige olulisem, aggregate_func: max \u2014 v\u00f5tta iga tunni jooksul maksimaalne v\u00e4\u00e4rtus. Just see parameeter muudab saagide graafiku t\u00fckikesteks.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Nutika kodu: Joonistame veetarve ja elektri grafiike Home Assistantis\" src=\"\/wp-content\/uploads\/2020\/03\/5bd866c39b23299e5f15dcf4a9bce38f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVasakpoolsete t\u00fckikeste rida \u00e4rge t\u00e4helepanu p\u00f6\u00f6rake \u2014 see on komponendi standardne k\u00e4itumine, kui andmeid ei ole. Ja andmeid t\u00f5epoolest ei olnud \u2014 l\u00fclitasin andmete kogumise utiliidi arvesti j\u00e4rgi sisse vaid paar tundi tagasi ainult selle artikli jaoks (oma praegusest l\u00e4henemisest r\u00e4\u00e4gin veidi hiljem). <\/p>\n<p>Selle pildil tahtsin n\u00e4idata, et m\u00f5nikord andmete kuvamine isegi t\u00f6\u00f6tab ja veergud peegeldavad t\u00f5epoolest \u00f5igeid v\u00e4\u00e4rtusi. Ainult et need ei ole kaugeltki k\u00f5ik \u00f5iged. Toodud veerg ajavahemiku 11 kuni 12 hommikul n\u00e4itab mingil p\u00f5hjusel 19 liitrit, kuigi hambuline graafik veidi k\u00f5rgemal n\u00e4itab sama perioodi jooksul sama sensoriga tarbimist 62 liitrit. Kas tegemist on veaga v\u00f5i on tegu halva t\u00f6\u00f6tlusega. Ja miks andmed paremal pool kadusid, ei ole ma veel aru saanud \u2013 seal oli tarbimine normaalne, mis on samuti n\u00e4htav hambulisel graafikul.<\/p>\n<p>\u00dches\u00f5naga, selle l\u00e4henemise usutavust mulle saavutada ei \u00f5nnestunud \u2013 graafik n\u00e4itab peaaegu alati mingit jama.<\/p>\n<p>Sarnane kood p\u00e4evaksensorile. <\/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: \"P\u00e4evane tarbimise kogus, koondatud kommunaalm\u00f5\u00f5turi j\u00e4rgi\"\n        points_per_hour: 0.0416666666\n        show:\n          graph: bar\n        type: 'custom:mini-graph-card'\n<\/code><\/pre>\n<p>\nPange t\u00e4hele, et parameeter group_by on seadistatud v\u00e4\u00e4rtusele interval ja k\u00f5ik punktid per tund s\u00f5ltuvad sellest. Ja selles peitub veel \u00fcks selle komponendi probleem \u2013 points_per_hour t\u00f6\u00f6tab h\u00e4sti graafikute puhul, mis on \u00fche tunni v\u00f5i v\u00e4hem, kuid on kohutav pikemate ajavahemike korral. Nii tuli \u00fche p\u00e4eva jaoks saada \u00fcks veerg, peab sisestama v\u00e4\u00e4rtuse 1\/24=0.04166666. Ma ei r\u00e4\u00e4gi isegi n\u00e4dalaste ja igakuiste graafikute kohta.<\/p>\n<h2>L\u00e4htekoht 2<\/h2>\n<p>\nVeel olles kodu assistendi kallal uurimas, sattusin sellele videole:<\/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=\"M\u00e4ngi videot\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nS\u00f5ber kogub andmeid tarbimise kohta mitmest erinevast Xiaomi pistikust. Tema \u00fclesanne on veidi lihtsam \u2013 lihtsalt kuvada tarbimise v\u00e4\u00e4rtus t\u00e4na, eile ja kuu jooksul. Graafikuid pole vaja. <\/p>\n<p>J\u00e4tame k\u00f5rvale arutlused k\u00e4sitsi integreerimise kohta hetketegevuse v\u00e4\u00e4rtustest \u2013 olen juba eespool kirjutanud sellise l\u00e4henemise \"t\u00e4psusest\". Pole selge, miks ta ei kasutanud akumuleeritud tarbimisandmeid, mis juba samalt pistikult kogutakse. Minu arvates t\u00f6\u00f6tab integreerimine seadmest paremini. <\/p>\n<p>Videost v\u00f5tame idee k\u00e4sitsi tarbimise arvestamise perioodi jooksul. Mehe puhul arvestatakse ainult t\u00e4na ja eile, kuid meie l\u00e4heme kaugemale ja proovime joonistada graafiku. Esitatud meetodi olemus minu juhul on j\u00e4rgmine.<\/p>\n<p>Loome muutuja v\u00e4\u00e4rtus_alguses_tunnis, kuhu salvestame praegused arvesti n\u00e4idud.<br \/>\nIga tunni l\u00f5pus (v\u00f5i j\u00e4rgmise tunni alguses) arvutame praeguse n\u00e4idu ja tunni alguses salvestatud n\u00e4idu vahelise erinevuse. See erinevus on praeguse tunni tarbimine \u2014 salvestame v\u00e4\u00e4rtuse sensorisse ja tulevikus kasutame seda v\u00e4\u00e4rtust graafiku koostamiseks. <br \/>\nSamuti tuleb \"nullida\" muutuja v\u00e4\u00e4rtus_alguses_tundi, kirjutades sinna praeguse arvesti v\u00e4\u00e4rtuse.<\/p>\n<p>K\u00f5ike seda saab teha l\u00e4bi... home assistant'i enda vahendite. <\/p>\n<p>Koodi tuleb kirjutada natuke rohkem kui eelmises l\u00e4henemises. Alustuseks loome need \"muutujad\". Meil ei ole vaikimisi olemas \"muutuja\" olemasolu, kuid saame kasutada mqtt vahendajat. Saame sinna saata v\u00e4\u00e4rtuseid retain=true lipuga \u2014 see salvestab v\u00e4\u00e4rtuse vahendajas ja selle saab igal ajal sealt k\u00e4tte, isegi home assistant'i taask\u00e4ivitamisel. Tehtud on kohe tunni ja p\u00e4evased arvestid.<\/p>\n<pre><code class=\"python\">- platform: mqtt\n  state_topic: \"test\/water\/hour\"\n  name: water_hour\n  unit_of_measurement: l\n\n- platform: mqtt\n  state_topic: \"test\/water\/hour_begin\"\n  name: water_hour_begin\n  unit_of_measurement: l\n\n- platform: mqtt\n  state_topic: \"test\/water\/day\"\n  name: water_day\n  unit_of_measurement: l\n\n- platform: mqtt\n  state_topic: \"test\/water\/day_begin\"\n  name: water_day_begin\n  unit_of_measurement: l<\/code><\/pre>\n<p>\nKogu maagia toimub automaatikas, mis k\u00e4ivitub iga tunni ja iga \u00f6\u00f6 jooksul vastavalt.<\/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: \"test\/water\/hour\"\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: \"test\/water\/hour_begin\"\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: \"00:00:00\"\n  action:\n    - service: mqtt.publish\n      data:\n        topic: \"test\/water\/day\"\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: \"test\/water\/day_begin\"\n        payload_template: &gt;\n          {{ states.sensor.water_meter_cold.state }}\n        retain: true<\/code><\/pre>\n<p>\nM\u00f5lemad automaatikad t\u00e4idavad 2 toimingut:<\/p>\n<ul>\n<li>Arvutavad intervalli v\u00e4\u00e4rtuse alg- ja l\u00f5ppv\u00e4\u00e4rtuse vahe.<\/li>\n<li>Uuendavad baasv\u00e4\u00e4rtuse j\u00e4rgmiseks intervalliks.<\/li>\n<\/ul>\n<p>\nGraafikute koostamine lahendatakse antud juhul tavalise history-graphiga:<\/p>\n<pre><code class=\"python\">      - type: history-graph\n        title: 'Tunni veetarbimine varside kasutamisega'\n        hours_to_show: 48\n        entities:\n          - sensor.water_hour\n\n      - type: history-graph\n        title: 'P\u00e4evane veetarbimine varside kasutamisega'\n        hours_to_show: 360\n        entities:\n          - sensor.water_day<\/code><\/pre>\n<p>\nSee n\u00e4eb v\u00e4lja nii:<\/p>\n<p><img decoding=\"async\" alt=\"Nutika kodu: Joonistame veetarve ja elektri grafiike Home Assistantis\" src=\"\/wp-content\/uploads\/2020\/03\/ebde2fc5f0a72d7d6ba565c3686dc9c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u00f5him\u00f5tteliselt on see juba see, mida on vaja. Selle meetodi plussiks on see, et andmeid genereeritakse \u00fcks kord intervalli jooksul. St, p\u00e4eva jooksul ainult 24 salvestust tunnigraafiku jaoks. <\/p>\n<p>Kahjuks ei lahenda see liikvele paisuva baasi \u00fcldprobleemi. Kui ma soovin kuup\u00f5hist tarbimist, tuleb mul andmeid hoida v\u00e4hemalt aasta. Ja kuna home assistant pakub ainult \u00fchte salvestusaja seadet kogu andmebaasi jaoks, t\u00e4hendab see, et K\u00d5IK andmed s\u00fcsteemis tuleb hoida terve aasta. N\u00e4iteks tarbin ma aastas 200 kuupmeetrit vett, mis t\u00e4hendab 200000 kirjet andmebaasis. Ja kui arvestada ka muid sensoreid, muutub number \u00e4\u00e4rmiselt suureks.<\/p>\n<h2>L\u00e4henemine 3<\/h2>\n<p>\n\u00d5nneks on nutikad inimesed selle probleemi juba lahendanud, kirjutades andmebaasi InfluxDB. See andmebaas on spetsiaalselt optimeeritud ajap\u00f5histe andmete salvestamiseks ja sobib ideaalselt erinevate sensorite v\u00e4\u00e4rtuste hoidmiseks. S\u00fcsteem pakub ka SQL-sarnast p\u00e4ringukeelt, mis v\u00f5imaldab andmebaasist v\u00e4\u00e4rtusi v\u00e4lja kaevata ja seej\u00e4rel neid erinevatel viisidel kokku koondada. L\u00f5puks on erinevaid andmeid v\u00f5imalik hoida erinevat aega. N\u00e4iteks kiiresti muutuvaid n\u00e4itajaid, nagu temperatuur v\u00f5i niiskus, v\u00f5ib hoida vaid paar n\u00e4dalat, samas kui p\u00e4evaseid veetarbimise n\u00e4itajaid v\u00f5ib hoida terve aasta.<\/p>\n<p>Peale InfluxDB on nutikad inimesed leiutanud ka Grafana \u2014 s\u00fcsteemi, mis joonistab graafikuid InfluxDB andmete p\u00f5hjal. Grafana oskab joonistada erinevat t\u00fc\u00fcpi graafikuid, neid detailselt kohandada ja, mis k\u00f5ige t\u00e4htsam, neid graafikuid saab \"paigaldada\" home assistant'i lovelace-UI-le.<\/p>\n<p>Inspireerib <noindex><a rel=\"nofollow\" href=\"https:\/\/dummylabs.com\/ru\/post\/2019-01-13-influxdb-part1\/\">siit <\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/dummylabs.com\/ru\/post\/2019-05-28-influxdb-part2\/\">siit<\/a><\/noindex>. Artiklites on detailselt kirjeldatud InfluxDB ja Grafana paigaldamise ja \u00fchendamise protsessi home assistant'iga. Ma keskendun enda konkreetse \u00fclesande lahendamisele.<\/p>\n<p>Nii et alustame kohe, hoides arvesti v\u00e4\u00e4rtust influxDB-s. Home assistant'i konfiguratsiooni l\u00f5ik (selles n\u00e4ites ka m\u00e4ngin mitte ainult k\u00fclma vaid ka sooja veega):<\/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>\nK\u00e4tkeme nende samade andmete salvestamist home assistant'i sisemisse andmebaasi, et mitte seda liigse koormuse alla suruda:<\/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>\nL\u00e4hme n\u00fc\u00fcd InfluxDB konsooli ja seadistame meie andmebaasi. Eriti tuleb seadistada, kui kaua hoitakse erinevaid andmeid. Seda reguleerib nn retention policy \u2014 see on sarnane andmebaasidele p\u00f5hjaandmebaasis, kus igal sisseehitatud andmebaasil on oma seadistused. Vaikimisi salvestatakse k\u00f5ik andmed retention policy all nimega autogen, need andmed hoitakse n\u00e4dala. Tahaksin, et tunnip\u00f5hised andmed hoitaks kuu aega, n\u00e4dalased \u2014 aasta, ja kuup\u00f5hised andmed ei eemaldataks kunagi. Loome vastavad retention policy.<\/p>\n<pre><code class=\"sql\">LOO KAA EESI KAITDUMISPOLIITIKA \"kuu\" ON \"homeassistant\" KESTUS 30d PALJUNDAMINE 1\nLOO KAA EESI KAITDUMISPOLIITIKA \"aasta\" ON \"homeassistant\" KESTUS 52n PALJUNDAMINE 1\nLOO KAA EESI KAITDUMISPOLIITIKA \"l\u00f5pmatu\" ON \"homeassistant\" KESTUS INF PALJUNDAMINE 1<\/code><\/pre>\n<p>\nN\u00fc\u00fcd, tegelikult, peamine trikk \u2014 andmete agregatsioon continuous query kaudu. See on mehhanism, mis automaatselt k\u00e4ivitab p\u00e4ringu teatud ajavahemike j\u00e4rel, agregatsiooni tulemuse salvestab uutesse v\u00e4\u00e4rtustesse. Vaatame n\u00e4idet (kirjutan vertikaalselt, et oleks lihtsam lugeda, kuid tegelikult pidin selle k\u00e4su sisestama \u00fchel real).<\/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>\nSee k\u00e4sk:<\/p>\n<ul>\n<li>Loob continuous query nimega cq_water_cold_hourly andmebaasis homeassistant.<\/li>\n<li>P\u00e4ringut teostatakse iga tunni j\u00e4rel (time(1h)).<\/li>\n<li>P\u00e4ring kogub k\u00f5ik andmed m\u00f5\u00f5tmisest homeassistant.autogen.l (liitrid), sealhulgas k\u00fclma ja sooja vee n\u00e4idud.<\/li>\n<li>Agregatsiooni tulemused grupeeritakse entity_id j\u00e4rgi, mis loob meile eraldi v\u00e4\u00e4rtused k\u00fclma ja sooja vee jaoks.<\/li>\n<li>Kuna liitrite arvesti on monotoonselt kasvav j\u00e4rjestus, tuleb igas tunnis v\u00f5tta maksimaalne v\u00e4\u00e4rtus, seet\u00f5ttu teostatakse agregatsioon max(value) funktsiooni abil. <\/li>\n<li>Uus v\u00e4\u00e4rtus salvestatakse homeassistant.month.water_meter_hour, kus month on retention policy nimi, mille s\u00e4ilitamise aeg on kuu. K\u00fclma ja sooja vee andmed jaotatakse eraldi kirjetesse koos vastava entity_id ja v\u00e4\u00e4rtusega v\u00e4ljades.<\/li>\n<\/ul>\n<p>\n\u00d6\u00f6sel v\u00f5i kui kedagi kodus ei ole, pole veetarbimist ja seet\u00f5ttu pole uusi kirjeid homeassistant.autogen.l-is samuti. Olgugi, et tavalistes p\u00e4ringutes pole v\u00e4\u00e4rtuste puudumise v\u00e4ltimiseks soovitatav kasutada fill(previous). See paneb InfluxDB kasutama eelneva tunni v\u00e4\u00e4rtust. <\/p>\n<p>Kahjuks on continuous query'l \u00fcks omadus: trick fill(previous) ei toimi ja kirjed lihtsalt ei genereerita. See on mingi \u00fcletamatu probleem, mida <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/influxdata\/influxdb\/issues\/3220\">on arutatud juba aastaid<\/a><\/noindex>. Selle probleemiga tegeleme hiljem, seesama fill(previous) continuous query's v\u00f5ib j\u00e4\u00e4da, see ei sega. <\/p>\n<p>Kontrollime, mis v\u00e4lja tuli (loomulikult tuleb oodata paar tundi):<\/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>\nPange t\u00e4hele, et andmed salvestatakse andmebaasis UTC ajas, seega erinevad need selles nimekirjas 3 tunni v\u00f5rra \u2014 kell 7 hommikul InfluxDB v\u00e4ljundis vastavad v\u00e4\u00e4rtused 10 hommikul \u00fclaltoodud graafikutes. Samuti pange t\u00e4hele, et kell 2 ja 5 hommikul pole kirjeid \u2014 see on see sama omadus continuous query's.<\/p>\n<p>Nagu n\u00e4ete, on agrgeeritud v\u00e4\u00e4rtus samuti monotoonselt kasvav jada, ainult et kirjed tulevad harvem \u2014 kord tunnis. Kuid see ei ole probleem \u2014 saame kirjutada veel \u00fche p\u00e4ringu, mis toob graafiku jaoks \u00f5iged andmed.<\/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>\nSelgitan:<\/p>\n<ul>\n<li>T\u00f5mbame andmed baast homeassistant.month.water_meter_hour jaoks entity_id=&#8217;water_meter_cold&#8217; viimase 24 tunni jooksul (time &gt;= now() -24h). <\/li>\n<li>Nagu varem mainisin, v\u00f5ivad homeassistant.month.water_meter_hour jadas puududa m\u00f5ned kirjed. Need andmed genereerime uuesti, k\u00e4ivitades p\u00e4ringu GROUP BY time(1h). Seekord t\u00f6\u00f6tab fill(previous) nagu peab, genereerides puuduvad andmed (funktsioon v\u00f5tab eelneva v\u00e4\u00e4rtuse)<\/li>\n<li>Selle p\u00e4ringu k\u00f5ige olulisem osa on funktsioon difference, mis arvutab erinevuse tunni m\u00e4rkmete vahel. Ise ei t\u00f6\u00f6ta ta ja vajab agregatsiooni funktsiooni. Olgu selleks max(), mida oleme varem kasutanud.<\/li>\n<\/ul>\n<p>\nT\u00e4idise tulemus n\u00e4eb v\u00e4lja selline<\/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>\nKell 2 kuni 5 hommikul (UTC) tarbimist ei olnud. Siiski tagastab p\u00e4ring sama tarbimise v\u00e4\u00e4rtuse t\u00e4nu fill(previous) funktsiooni kasutamisele, ja funktsioon difference lahutab selle v\u00e4\u00e4rtuse iseendast, saades l\u00f5puks 0, mis ongi vajalik.<\/p>\n<p>J\u00e4\u00e4nud on vaid v\u00e4ike asi \u2014 ehitada graafik. Selleks avame Grafana, avame m\u00f5ne olemasoleva (v\u00f5i loome uue) armatuurlauad, loome uue paneeli. Graafiku seadistused on j\u00e4rgmised.<\/p>\n<p><img decoding=\"async\" alt=\"Nutika kodu: Joonistame veetarve ja elektri grafiike Home Assistantis\" src=\"\/wp-content\/uploads\/2020\/03\/c6f551590cd141438b644b24aa4ddebf.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKannan esitlema andmeid k\u00fclma ja kuuma vee kohta \u00fchel graafikul. P\u00e4ring on t\u00e4pselt selline nagu ma \u00fclal kirjeldasin. <\/p>\n<p>Kuva seadistused m\u00e4\u00e4ratakse nii. Mul on see graafik joontega (lines), mis l\u00e4heb astmetena (stairs). Parameetrit Stack selgitan veidi allpool. Seal on veel m\u00f5ned kuvamise parameetrid, kuid need pole nii huvitavad.<\/p>\n<p><img decoding=\"async\" alt=\"Nutika kodu: Joonistame veetarve ja elektri grafiike Home Assistantis\" src=\"\/wp-content\/uploads\/2020\/03\/cb47fc8570b7fd1305ce3451e0518f11.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEt lisada saadud graafik home assistentisse, tuleb:<\/p>\n<ul>\n<li>v\u00e4lja minna graafiku redigeerimisre\u017eiimist. Mikski p\u00e4rast pakutakse graafikute jagamise \u00f5igeid seadistusi ainult armatuurlaua lehelt.<\/li>\n<li>Kl\u00f5psake kolmnurgal graafiku nime k\u00f5rval, men\u00fc\u00fcs valige share.<\/li>\n<li>Avanenud aknas minema vahekaardile embed.<\/li>\n<li>Eemaldage m\u00e4rkeruut current time range \u2014 ajavahemiku m\u00e4\u00e4rame URL-i kaudu. <\/li>\n<li>Valige vajalik teema. Minu puhul on see light.<\/li>\n<li>Kopeerige saadud URL lovelace-UI seadistuste kaardile.<\/li>\n<\/ul>\n<p><\/p>\n<pre><code class=\"python\">      - type: iframe\n        id: graf_water_hourly\n        url: \"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\"\n<\/code><\/pre>\n<p>\nPange t\u00e4hele, et ajavahemik (viimased 2 p\u00e4eva) m\u00e4\u00e4ratakse siinkohal, mitte armatuurlaua seadistustes. <\/p>\n<p>Graafik n\u00e4eb v\u00e4lja selline. Kuuma vett ei ole ma viimase kahe p\u00e4eva jooksul kasutanud, seega joonistatakse ainult k\u00fclma vee graafik.<\/p>\n<p><img decoding=\"async\" alt=\"Nutika kodu: Joonistame veetarve ja elektri grafiike Home Assistantis\" src=\"\/wp-content\/uploads\/2020\/03\/d18c82712d3b829a97ada8c8e2adce24.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMa pole endiselt otsustanud, milline graafik mulle rohkem meeldib, astmejoon v\u00f5i reaalsete sambad. Seega toon lihtsalt n\u00e4ite p\u00e4evagraafikust, ainult sellel korral sambadega. P\u00e4ringud koostatakse sarnaselt \u00fclaltoodud kirjeldatule. Kuvamise parameetrid on j\u00e4rgmised:<\/p>\n<p><img decoding=\"async\" alt=\"Nutika kodu: Joonistame veetarve ja elektri grafiike Home Assistantis\" src=\"\/wp-content\/uploads\/2020\/03\/557297e666f9cd73c3d2aa2fd80c0a2d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSee graafik n\u00e4eb v\u00e4lja selline:<\/p>\n<p><img decoding=\"async\" alt=\"Nutika kodu: Joonistame veetarve ja elektri grafiike Home Assistantis\" src=\"\/wp-content\/uploads\/2020\/03\/ac8c53569c6b05aeb22e05969de4cd6d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNii et n\u00fc\u00fcd parameetrist Stack. Sellel graafikul joonistatakse k\u00fclma vee sammas kuuma vee samba peale. Kokkuv\u00f5ttes k\u00f5rgus vastab \u00fche perioodi kokkuv\u00f5tlikule tarbimisele k\u00fclma ja kuuma vee osas. <\/p>\n<p>K\u00f5ik n\u00e4idatud graafikud on d\u00fcnaamilised. Sobrav s\u00fcsteemile huvitava punkti kohale ja vaadake detaile ja v\u00e4\u00e4rtust konkreetses punktis. <\/p>\n<p>Kahjuks ei saanud paar tilka t\u00f5rva v\u00e4ltida. Veergude graafikul (erinevalt astmeliselt joonistatud graafikust) asub veeru keskmine mitte keset \u00f6\u00f6d, vaid kell 00:00. St. vasak pool veerust on joonistatud eelmine p\u00e4ev. Nii on laup\u00e4eva ja p\u00fchap\u00e4eva graafikud joonistatud veidi vasakule sinakas tsoonist. Praegu ei ole ma leidnud viisi, kuidas seda lahendada. <\/p>\n<p>Teine probleem on seostatav kuude intervallide korrektse t\u00f6\u00f6tlemisega. Asi on selles, et tunni\/p\u00e4eva\/n\u00e4dala pikkus on fikseeritud, kuid kuu pikkus on iga kord erinev. InfluxDB suudab t\u00f6\u00f6tada ainult \u00fchtsete intervallidega. Praegu suudab mu aju seadistada fikseeritud intervalli 30 p\u00e4eva. Jah, graafik aasta jooksul muutub veidi ebat\u00e4pseks ja veerud ei vasta t\u00e4pselt kuudele. Kuid kuna see teema huvitab mind lihtsalt n\u00e4idikuna, siis olen sellega rahul. <\/p>\n<p>N\u00e4en v\u00e4hemalt kahte lahendust:<\/p>\n<ul>\n<li>J\u00e4tta kuu graafikud t\u00e4helepanuta ja piirduda n\u00e4dalastega. 52 n\u00e4dalast veergu aastas n\u00e4eb p\u00e4ris h\u00e4sti v\u00e4lja.<\/li>\n<li>N\u00e4dalase tarbimise arvestamine teise viisina ning Grafanat kasutada ainult ilusti graafikute jaoks. Tulemuseks saab olema \u00fcsna t\u00e4pne lahendus. V\u00f5ib isegi panna eelmisel aastal graafikud kokku, et v\u00f5rrelda \u2014 Grafana suudab ka seda.<\/li>\n<\/ul>\n<h2>Kokkuv\u00f5te<\/h2>\n<p>\nMa ei tea, miks, aga mulle meeldivad sellised graafikud. Need n\u00e4itavad, et elu pulbitseb ja k\u00f5ik muutub. Eile oli palju, t\u00e4na v\u00e4he, homme tuleb midagi muud. On j\u00e4\u00e4nud r\u00e4\u00e4kida pereliikmetega nende tarbimise teemast. Kuid isegi praeguste harrastuste juures muutub lihtsalt suur ja arusaamatu number arvel juba \u00fcsna arusaadavaks tarbimispildiks.<\/p>\n<p>Hoolimata peaaegu 20-aastasest programmeerija karj\u00e4\u00e4rist ei olnud ma andmebaasidega praktiliselt kokku puutunud. Seet\u00f5ttu tundus v\u00e4lise andmebaasi seadistamine midagi v\u00e4ga keerulist ja arusaamatut. <noindex><a rel=\"nofollow\" href=\"https:\/\/dummylabs.com\/ru\/post\/2019-01-13-influxdb-part1\">eelnevalt mainitud artikkel<\/a><\/noindex> \u2014 selgus, et sobiva t\u00f6\u00f6riista k\u00fclge keeramine toimub paari kl\u00f5psuga ning spetsialiseeritud t\u00f6\u00f6riista abil muutub graafikute loomise \u00fclesanne veidi lihtsamaks.<\/p>\n<p>Pealkirjas mainisin elektritarbimist. Kahjuks ei saa ma hetkel tuua \u00fchtegi graafikut. \u00dcks SDM120 arvesti on mu jaoks katkenud ja teine k\u00e4itub Modbus'i kutsumise korral ebatavaliselt. Siiski ei m\u00f5juta see artikkel teemat \u2014 graafikuid saab koostada samamoodi kui vee puhul.<\/p>\n<p>Selles artiklis olen v\u00e4lja toonud l\u00e4henemisviisid, mida olen ise proovinud. Kindlasti on olemas veel m\u00f5ni andmete kogumise ja visualiseerimise meetod, millest ma ei tea. Jagage minuga kommentaarides, mul oleks v\u00e4ga huvitav kuulda. Olen avatud konstruktiivsele kriitikale ja uutele ideedele. Loodan, et antud materjal aitab kedagi.<br \/>\n<br \/>Allikas: <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.1.1 - 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\/et\/blog\/administrirovanie\/umnyj-dom-stroim-grafiki-potrebleniya-vody-i-elektrichestva-v-home-assistant\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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\udd47Nutika kodu: Koostame vee ja elektritarbimise graafikud Home Assistant'is | ProHoster","description":"Iga kord.","canonical_url":"https:\/\/prohoster.info\/et\/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":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/74421","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=74421"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/74421\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/74422"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=74421"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=74421"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=74421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}