{"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\/hu\/blog\/administrirovanie\/umnyj-dom-stroim-grafiki-potrebleniya-vody-i-elektrichestva-v-home-assistant","title":{"rendered":"Okos otthon: V\u00edz- \u00e9s villanyfogyaszt\u00e1si grafikonok \u00e9p\u00edt\u00e9se a Home Assistantban","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Okos otthon: V\u00edz- \u00e9s villanyfogyaszt\u00e1si grafikonok \u00e9p\u00edt\u00e9se a Home Assistantban\" src=\"\/wp-content\/uploads\/2020\/03\/f1133a4c391e901ed64bf0825a774fc6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nMindig meglep\u0151d\u00f6m, amikor megkapom a villany- \u00e9s v\u00edzsz\u00e1ml\u00e1t \u2013 t\u00e9nyleg ennyit fogyaszt a csal\u00e1dom? Igen, van a f\u00fcrd\u0151szob\u00e1ban padl\u00f3f\u0171t\u00e9s \u00e9s bojler, de ezek nem m\u0171k\u00f6dnek folyamatosan. \u00dagy t\u0171nik, hogy a v\u00edzhaszn\u00e1latot is sp\u00f3roljuk (b\u00e1r szeretek a f\u00fcrd\u0151k\u00e1dban pancsolni). P\u00e1r \u00e9vvel ezel\u0151tt m\u00e1r <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/411259\/\">bek\u00f6t\u00f6ttem a v\u00edzm\u00e9r\u0151ket<\/a><\/noindex> \u00e9s <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=XKvunh29sZo&amp;list=PLkt_cQxT0oUmfdxhbmTjytjaJjZjSVUOu\">\u00e1ramot<\/a><\/noindex> okosotthonhoz, de ezen a t\u00e9ren eddig megakadt a dolog. Csak most jutottam el a fogyaszt\u00e1s elemz\u00e9s\u00e9hez, ami miatt \u00edr\u00f3dott ez a cikk.<\/p>\n<p>Nemr\u00e9g \u00e1tt\u00e9rtem a Home Assistant-ra, mint okosotthon rendszere. Az egyik ok az volt, hogy lehet\u0151s\u00e9get adjon rengeteg adat gy\u0171jt\u00e9s\u00e9re, lehet\u0151v\u00e9 t\u00e9ve k\u00fcl\u00f6nf\u00e9le diagramok k\u00e9nyelmes elk\u00e9sz\u00edt\u00e9s\u00e9t.<\/p>\n<p>Az ebben a cikkben le\u00edrt inform\u00e1ci\u00f3k nem \u00fajak, ezek a dolgok m\u00e1r k\u00fcl\u00f6nb\u00f6z\u0151 k\u00f6nt\u00f6sben megjelentek az interneten. De minden cikk jellemz\u0151en csak egy megk\u00f6zel\u00edt\u00e9st vagy szempontot \u00edr le. \u00d6sszehasonl\u00edtani ezeket a megk\u00f6zel\u00edt\u00e9seket \u00e9s kiv\u00e1lasztani a legmegfelel\u0151bbet nekem kellett. A cikk \u00edgy sem ny\u00fajt kimer\u00edt\u0151 inform\u00e1ci\u00f3t az adatgy\u0171jt\u00e9sr\u0151l, de egyfajta v\u00e1zlat arr\u00f3l, hogyan csin\u00e1ltam \u00e9n. Teh\u00e1t a konstrukt\u00edv kritik\u00e1t \u00e9s a fejleszt\u00e9si javaslatokat sz\u00edvesen fogadom.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>L\u00e9pj\u00fcnk \u00e1t a kit\u0171z\u00f6tt feladatra: \u00edrjunk egy XDP mechanizmust SYN cookie-kkal.<\/h2>\n<p>\nTeh\u00e1t a mai gyakorlat c\u00e9lja, hogy sz\u00e9p diagramokat k\u00e9sz\u00edts\u00fcnk a v\u00edz- \u00e9s \u00e1ramfogyaszt\u00e1sr\u00f3l:<\/p>\n<ul>\n<li>\u00d3r\u00e1s az elm\u00falt 2 napra<\/li>\n<li>Napi az elm\u00falt 2 h\u00e9tre<\/li>\n<li>(opcion\u00e1lisan) heti \u00e9s havi<\/li>\n<\/ul>\n<p>\nEbben n\u00e9h\u00e1ny neh\u00e9zs\u00e9g v\u00e1r r\u00e1nk:<\/p>\n<ul>\n<li>A standard diagramkomponensek \u00e1ltal\u00e1ban meglehet\u0151sen szeg\u00e9nyesek. A legjobb esetben csak pontok alapj\u00e1n lehet vonaldiagramot k\u00e9sz\u00edteni.\n<p>Ha alaposan keres\u00fcnk, tal\u00e1lhatunk harmadik f\u00e9l komponenst, ami b\u0151v\u00edti a standard diagram lehet\u0151s\u00e9geit. A home assistant-hoz a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kalkih\/mini-graph-card\">mini-graph-card<\/a><\/noindex>relat\u00edve j\u00f3 \u00e9s sz\u00e9p komponens, de ennek is vannak korl\u00e1tai:<\/p>\n<ul>\n<li>Neh\u00e9z be\u00e1ll\u00edtani a oszlopdiagram param\u00e9tereit nagyobb intervallumokn\u00e1l (az oszlop sz\u00e9less\u00e9ge \u00f3r\u00e1kban van megadva, \u00edgy a hosszabb intervallumokat t\u00f6rt sz\u00e1mokkal kell megadni)<\/li>\n<li>Nem lehet egy diagramra k\u00fcl\u00f6nb\u00f6z\u0151 entit\u00e1sokat hozz\u00e1adni (p\u00e9ld\u00e1ul h\u0151m\u00e9rs\u00e9kletet \u00e9s p\u00e1ratartalmat, vagy oszlopdiagramot vonaldiagrammal \u00f6sszekapcsolni)<\/li>\n<\/ul>\n<\/li>\n<li>Nemcsak az a probl\u00e9ma, hogy a home assistant alap\u00e9rtelmezetten a legprimit\u00edvebb SQLite adatb\u00e1zist haszn\u00e1lja (\u00e9n pedig, \u00fcgyetlen kez\u0171, nem tudtam telep\u00edteni a MySQL-t vagy a Postgres-t), hanem az adatok t\u00e1rol\u00e1sa sem optim\u00e1lis m\u00f3don t\u00f6rt\u00e9nik. P\u00e9ld\u00e1ul minden egyes apr\u00f3 digit\u00e1lis param\u00e9ter m\u00f3dos\u00edt\u00e1sakor egy hatalmas, k\u00f6r\u00fclbel\u00fcl egy kilob\u00e1jtos json ker\u00fcl az adatb\u00e1zisba.\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>\nEl\u00e9g sok \u00e9rz\u00e9kel\u0151m van (h\u0151m\u00e9rs\u00e9klet-\u00e9rz\u00e9kel\u0151k minden szob\u00e1ban, v\u00edz- \u00e9s \u00e1ramm\u00e9r\u0151k), \u00e9s n\u00e9h\u00e1ny ezek k\u00f6z\u00fcl el\u00e9g sok adatot gener\u00e1l. P\u00e9ld\u00e1ul a SDM220 elektromos m\u00e9r\u0151 k\u00f6r\u00fclbel\u00fcl tucatnyi \u00e9rt\u00e9ket gener\u00e1l 10-15 m\u00e1sodpercenk\u00e9nt, \u00e9s ebb\u0151l nyolcat szeretn\u00e9k telep\u00edteni. Ezenk\u00edv\u00fcl van egy csom\u00f3 olyan param\u00e9ter, amely m\u00e1s \u00e9rz\u00e9kel\u0151k alapj\u00e1n sz\u00e1m\u00edt\u00f3dik. \u00cdgy ezek az \u00e9rt\u00e9kek k\u00f6nnyed\u00e9n megn\u00f6velhetik az adatb\u00e1zist naponta 100-200 MB-mal. Egy h\u00e9t m\u00falva a rendszer alig fog m\u0171k\u00f6dni, egy h\u00f3nap m\u00falva pedig t\u00f6nkremegy a flash mem\u00f3ria (a home assistant tipikus raspberry PI telep\u00edt\u00e9se eset\u00e9n), m\u00e1rpedig egy \u00e9vnyi adat t\u00e1rol\u00e1s\u00e1ra sz\u00f3 sem lehet.<\/li>\n<li>Ha szerencs\u00e9d van, a m\u00e9r\u0151d k\u00e9pes saj\u00e1t mag\u00e1t\u00f3l sz\u00e1m\u00edtani a fogyaszt\u00e1st. B\u00e1rmikor k\u00e9rhetsz t\u0151le inform\u00e1ci\u00f3t az \u00f6sszegy\u0171jt\u00f6tt fogyaszt\u00e1si \u00e9rt\u00e9kr\u0151l. \u00c1ltal\u00e1ban azok az elektromos m\u00e9r\u0151k, amelyek digit\u00e1lis interf\u00e9sszel rendelkeznek (RS232\/RS485\/Modbus\/Zigbee), k\u00edn\u00e1lj\u00e1k ezt a lehet\u0151s\u00e9get.\n<p>Rosszabb, ha az eszk\u00f6z csak egy adott pillanatnyi param\u00e9tert (p\u00e9ld\u00e1ul pillanatnyi teljes\u00edtm\u00e9nyt vagy \u00e1ramot) tud m\u00e9rni, vagy csak impulzusokat gener\u00e1l X watt\u00f3r\u00e1nk\u00e9nt vagy literenk\u00e9nt. Akkor el kell gondolkodni, hogy mivel \u00e9s hogyan integr\u00e1lj\u00e1k, valamint hol t\u00e1rolj\u00e1k az \u00e9rt\u00e9ket. Van kock\u00e1zata annak, hogy egy \u00fajabb jelent\u00e9st elmulasztanak valamilyen okb\u00f3l, \u00e9s a rendszer \u00e1ltal\u00e1nos pontoss\u00e1g\u00e1val kapcsolatban is felmer\u00fclnek k\u00e9rd\u00e9sek. Persze mindezt r\u00e1b\u00edzhatjuk egy okosotthon rendszerre, mint a home assistant, de a b\u00e1zis-recordok mennyis\u00e9g\u00e9r\u0151l sz\u00f3l\u00f3 pontot senki sem t\u00f6r\u00f6lte, \u00e9s a szenzorok lek\u00e9rdez\u00e9s\u00e9t gyakrabban mint m\u00e1sodpercenk\u00e9nt nem tudjuk megtenni (a home assistant architekt\u00far\u00e1j\u00e1nak korl\u00e1toz\u00e1sa).<\/li>\n<\/ul>\n<p><\/p>\n<h2>1. megk\u00f6zel\u00edt\u00e9s<\/h2>\n<p>\nEl\u0151sz\u00f6r n\u00e9zz\u00fck meg, mit k\u00edn\u00e1l a home assistant dobozb\u00f3l. A fogyaszt\u00e1s id\u0151szakos m\u00e9r\u00e9s\u00e9re nagy ig\u00e9ny van. Term\u00e9szetesen ezt m\u00e1r r\u00e9gen megval\u00f3s\u00edtott\u00e1k egy speci\u00e1lis komponensk\u00e9nt \u2014 utility_meter n\u00e9ven. <\/p>\n<p>A komponens l\u00e9nyege, hogy bel\u00fcl l\u00e9trehoz egy v\u00e1ltoz\u00f3t, a current_accumulated_value-t, \u00e9s ezt null\u00e1zza egy adott id\u0151szak (\u00f3ra\/h\u00e9t\/h\u00f3nap) letelt\u00e9vel. A komponens \u00f6n\u00e1ll\u00f3an figyeli a bej\u00f6v\u0151 v\u00e1ltoz\u00f3t (valamelyik \u00e9rz\u00e9kel\u0151 \u00e9rt\u00e9k\u00e9t), \u00f6n\u00e1ll\u00f3an iratkozik fel az \u00e9rt\u00e9k\u00e9nek v\u00e1ltoz\u00e1saira \u2014 \u00d6n csak a k\u00e9sz eredm\u00e9nyt kapja. Ezt a dolgot mind\u00f6ssze n\u00e9h\u00e1ny sorban lehet le\u00edrni a konfigur\u00e1ci\u00f3s f\u00e1jlban.<\/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>\nItt a sensor.water_meter_cold az aktu\u00e1lis \u00e9rt\u00e9k a v\u00edzm\u00e9r\u0151b\u0151l literben, amit kapok <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/411259\/\">k\u00f6zvetlen\u00fcl az eszk\u00f6zt\u0151l<\/a><\/noindex> mqtt-n kereszt\u00fcl. A szerkezet l\u00e9trehoz 2 \u00faj \u00e9rz\u00e9kel\u0151t, a water_cold_hour_um \u00e9s a water_cold_day_um, amelyek az \u00f3r\u00e1s \u00e9s napi \u00e9rt\u00e9keket gy\u0171jtik, \u00e9s azokat null\u00e1zza az id\u0151szak v\u00e9g\u00e9n. \u00cdme, a f\u00e9l napos \u00f3r\u00e1s akkumul\u00e1tor grafikona.<\/p>\n<p><img decoding=\"async\" alt=\"Okos otthon: V\u00edz- \u00e9s villanyfogyaszt\u00e1si grafikonok \u00e9p\u00edt\u00e9se a Home Assistantban\" src=\"\/wp-content\/uploads\/2020\/03\/d3c3ea29c10b17142e51ebe756ab7123.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA lovelace-UI \u00f3r\u00e1s \u00e9s napi grafik\u00e1inak k\u00f3dja \u00edgy n\u00e9z ki:<\/p>\n<pre><code class=\"python\">      - type: history-graph\n        title: '\u00d3r\u00e1nk\u00e9nti v\u00edzfogyaszt\u00e1s v\u00e1ltoz\u00f3kkal'\n        hours_to_show: 48\n        entities:\n          - sensor.water_hour\n\n      - type: history-graph\n        title: 'Napi v\u00edzfogyaszt\u00e1s v\u00e1ltoz\u00f3kkal'\n        hours_to_show: 360\n        entities:\n          - sensor.water_day\n<\/code><\/pre>\n<p>\nVal\u00f3j\u00e1ban ebben az algoritmusban rejlik a megk\u00f6zel\u00edt\u00e9s probl\u00e9m\u00e1ja. Ahogy m\u00e1r eml\u00edtettem, minden egyes bemeneti \u00e9rt\u00e9khez (a sz\u00e1ml\u00e1l\u00f3 aktu\u00e1lis \u00e9rt\u00e9ke minden egyes k\u00f6vetkez\u0151 liter eset\u00e9n) 1 kB rekord gener\u00e1l\u00f3dik az adatb\u00e1zisban. Minden egyes utility meter szint\u00e9n gener\u00e1l egy \u00faj \u00e9rt\u00e9ket, ami szint\u00e9n beleker\u00fcl az adatb\u00e1zisba. Ha \u00f3r\u00e1s, napi, heti vagy havi m\u00e9r\u00e9seket akarok gy\u0171jteni, t\u00f6bb v\u00edzvezet\u00e9khez, \u00e9s m\u00e9g n\u00e9h\u00e1ny villanysz\u00e1ml\u00e1l\u00f3t is hozz\u00e1adok - ez nagyon sok adatot jelent. Nos, pontosabban az adatok nem sokan vannak, de mivel a home assistant rengeteg felesleges inform\u00e1ci\u00f3t \u00edr az adatb\u00e1zisba, az adatb\u00e1zis m\u00e9rete olyan gyorsan fog n\u0151ni, mint az \u00e9leszt\u0151. F\u00e9lek m\u00e9g kalkul\u00e1lni az adatb\u00e1zis m\u00e9ret\u00e9t a heti \u00e9s havi grafikonokhoz.<\/p>\n<p>Ezen k\u00edv\u00fcl a utility meter \u00f6nmag\u00e1ban nem oldja meg a kit\u0171z\u00f6tt feladatot. A utility meter \u00e1ltal kiadott \u00e9rt\u00e9kek grafikonja monoton n\u00f6vekv\u0151 f\u00fcggv\u00e9ny, amelyet minden \u00f3r\u00e1ban 0-ra \u00e1ll\u00edtanak vissza. Nek\u00fcnk egy felhaszn\u00e1l\u00f3 sz\u00e1m\u00e1ra \u00e9rthet\u0151 grafikonra van sz\u00fcks\u00e9g\u00fcnk, ami megmutatja, hogy mennyi liter fogyott el az adott id\u0151szak alatt. A standard history-graph komponens ezt nem tudja, de a k\u00fcls\u0151 mini-graph-card komponens seg\u00edts\u00e9g\u00fcnkre lehet.<\/p>\n<p>Ez a k\u00f3d a lovelace-UI k\u00e1rty\u00e1hoz:<\/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;\u00d3r\u00e1nk\u00e9nti v\u00edzfogyaszt\u00e1s \u00f6sszes\u00edtve a k\u00f6zm\u0171m\u00e9r\u0151 \u00e1ltal&quot;\n        points_per_hour: 1\n        show:\n          graph: bar\n        type: 'custom:mini-graph-card'<\/code><\/pre>\n<p>\nA standard be\u00e1ll\u00edt\u00e1sokon k\u00edv\u00fcl, mint a szenzor neve, a grafikon t\u00edpusa, a sz\u00edn (a hagyom\u00e1nyos narancss\u00e1rga nem tetszik) itt h\u00e1rom be\u00e1ll\u00edt\u00e1st fontos megeml\u00edteni:<\/p>\n<ul>\n<li>group_by:hour - a grafikon a l\u00e9cet az \u00f3ra elej\u00e9re igaz\u00edtva lesz gener\u00e1lva<\/li>\n<li>points_per_hour: 1 - egy oszlop minden egyes \u00f3r\u00e1ra<\/li>\n<li>\u00c9s a legfontosabb, aggregate_func: max - a maxim\u00e1lis \u00e9rt\u00e9k figyelembev\u00e9tele minden egyes \u00f3r\u00e1n bel\u00fcl. Ez az param\u00e9ter alak\u00edtja \u00e1t a f\u0171r\u00e9szfogas grafikont oszlopokk\u00e1.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Okos otthon: V\u00edz- \u00e9s villanyfogyaszt\u00e1si grafikonok \u00e9p\u00edt\u00e9se a Home Assistantban\" src=\"\/wp-content\/uploads\/2020\/03\/5bd866c39b23299e5f15dcf4a9bce38f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA bal oldalon l\u00e9v\u0151 oszlopokra ne figyeljetek - ez a komponens standard viselked\u00e9se, ha nincsenek adatok. Pedig adatok nem voltak - csak n\u00e9h\u00e1ny \u00f3r\u00e1val ezel\u0151tt kezdtem el gy\u0171jteni az adatokat a utility meter seg\u00edts\u00e9g\u00e9vel csak ez\u00e9rt a cikk\u00e9rt (a jelenlegi megk\u00f6zel\u00edt\u00e9semet kicsit k\u00e9s\u0151bb elmondom). <\/p>\n<p>Ez a k\u00e9pen azt szerettem volna megmutatni, hogy n\u00e9ha a data megjelen\u00edt\u00e9se t\u00e9nyleg m\u0171k\u00f6dik, \u00e9s az oszlopok val\u00f3ban a helyes \u00e9rt\u00e9keket t\u00fckr\u00f6zik. Csak \u00e9ppen nem minden esetben. Az emelt oszlop az id\u0151intervallum alatt 11-t\u0151l 12-ig reggel valami\u00e9rt 19 litert mutat, holott a csipk\u00e9s grafikonon, ami kicsit fent van, ugyanarra az id\u0151szakra ugyanazzal az \u00e9rz\u00e9kel\u0151vel 62 literes fogyaszt\u00e1s l\u00e1that\u00f3. Vagy bug, vagy \u00fcgyetlen a kivitelez\u00e9s. Azt viszont nem \u00e9rtem, hogy mi\u00e9rt t\u00f6rtek el az adatok jobbra \u2014 a fogyaszt\u00e1s ott a norm\u00e1l hat\u00e1rokon bel\u00fcl volt, ami a csipk\u00e9s grafikonon is l\u00e1that\u00f3.<\/p>\n<p>A megk\u00f6zel\u00edt\u00e9s hiteless\u00e9g\u00e9t nem tudtam el\u00e9rni - a grafikon szinte mindig valami ostobas\u00e1got mutat.<\/p>\n<p>Hasonl\u00f3 k\u00f3d a napi \u00e9rz\u00e9kel\u0151h\u00f6z. <\/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;Napi v\u00edzfogyaszt\u00e1s \u00f6sszes\u00edtve a k\u00f6zm\u0171m\u00e9r\u0151 \u00e1ltal&quot;\n        points_per_hour: 0.0416666666\n        show:\n          graph: bar\n        type: 'custom:mini-graph-card'\n<\/code><\/pre>\n<p>\nFigyeljen arra, hogy a group_by param\u00e9ter az interval \u00e9rt\u00e9kre van \u00e1ll\u00edtva, \u00e9s a points_per_hour param\u00e9ter szab\u00e1lyoz mindent. Itt rejlik a komponenst \u00e9rint\u0151 m\u00e1sik probl\u00e9ma \u2014 a points_per_hour j\u00f3l m\u0171k\u00f6dik az \u00f3r\u00e1s vagy ann\u00e1l kisebb grafikonokon, de sz\u00f6rnyen a hosszabb id\u0151szakokban. Teh\u00e1t ahhoz, hogy egy oszlopot kapjunk egy napra, be kellett \u00edrni az \u00e9rt\u00e9ket 1\/24=0.04166666. M\u00e1r nem is besz\u00e9lek a heti \u00e9s havi grafikonokr\u00f3l.<\/p>\n<h2>Megk\u00f6zel\u00edt\u00e9s 2<\/h2>\n<p>\nM\u00e9g a Home Assistant-tel val\u00f3 ismerked\u00e9s k\u00f6zben bukkantam erre a vide\u00f3ra:<\/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=\"Vide\u00f3 lej\u00e1tsz\u00e1sa\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nEgy bar\u00e1t adatokat gy\u0171jt t\u00f6bbf\u00e9le Xiaomi aljzatr\u00f3l. Az \u0151 feladata kicsit egyszer\u0171bb - egyszer\u0171en csak a mai, a tegnapi \u00e9s a havi fogyaszt\u00e1s \u00e9rt\u00e9k\u00e9t kell ki\u00edrnia. Nincsenek grafikonok sz\u00fcks\u00e9gesek. <\/p>\n<p>Hagyjuk figyelmen k\u00edv\u00fcl az azonnali teljes\u00edtm\u00e9ny\u00e9rt\u00e9kek k\u00e9zi integr\u00e1l\u00e1s\u00e1r\u00f3l val\u00f3 \u00e9rvel\u00e9st \u2014 a \u201epontoss\u00e1g\u201d ilyen megk\u00f6zel\u00edt\u00e9se m\u00e1r fentebb eml\u00edtve lett. Nem vil\u00e1gos, mi\u00e9rt nem haszn\u00e1lt felhalmozott fogyaszt\u00e1si \u00e9rt\u00e9keket, amelyekb\u0151l az aljzata m\u00e1r gy\u0171jt adatokat. V\u00e9lem\u00e9nyem szerint a hardveres integr\u00e1l\u00e1s jobban fog m\u0171k\u00f6dni. <\/p>\n<p>A vide\u00f3b\u00f3l \u00e1tvessz\u00fck az \u00f6tletet a fogyaszt\u00e1s id\u0151szakonk\u00e9nti k\u00e9zi sz\u00e1m\u00edt\u00e1s\u00e1r\u00f3l. A fick\u00f3n\u00e1l csak a mai \u00e9s a tegnapi \u00e9rt\u00e9kek sz\u00e1m\u00edtanak, de mi tov\u00e1bbmegy\u00fcnk, \u00e9s megpr\u00f3b\u00e1lunk egy grafikont rajzolni. A javasolt m\u00f3dszer l\u00e9nyege az \u00e9n esetemben a k\u00f6vetkez\u0151.<\/p>\n<p>L\u00e9trehozunk egy v\u00e1ltoz\u00f3t, aminek a neve _\u00e9rt\u00e9k_a_\u00f3ra_kezdete, \u00e9s ebbe r\u00f6gz\u00edtj\u00fck a jelenlegi m\u00e9r\u0151\u00e1ll\u00e1st.<br \/>\nA \u00f3r\u00e1k v\u00e9g\u00e9n (vagy a k\u00f6vetkez\u0151 \u00f3ra elej\u00e9n) kisz\u00e1m\u00edtjuk a k\u00fcl\u00f6nbs\u00e9get a jelenlegi olvasat \u00e9s az \u00f3ra elej\u00e9n elt\u00e1rolt \u00e9rt\u00e9k k\u00f6z\u00f6tt. Ez a k\u00fcl\u00f6nbs\u00e9g lesz az aktu\u00e1lis \u00f3ra fogyaszt\u00e1sa \u2014 elmentj\u00fck az \u00e9rt\u00e9ket az \u00e9rz\u00e9kel\u0151be, \u00e9s a j\u00f6v\u0151ben ezt az \u00e9rt\u00e9ket fogjuk grafikonon \u00e1br\u00e1zolni. <br \/>\nEzen k\u00edv\u00fcl \"null\u00e1zni\" kell a v\u00e1ltoz\u00f3 \u00e9rt\u00e9k_az_\u00f3ra_kezdete_v\u00e1ltoz\u00f3t, \u00e9s bele kell \u00edrni a sz\u00e1ml\u00e1l\u00f3 aktu\u00e1lis \u00e9rt\u00e9k\u00e9t.<\/p>\n<p>Mindez a home assistant saj\u00e1t eszk\u00f6zeivel is megoldhat\u00f3. <\/p>\n<p>T\u00f6bb k\u00f3dot kell \u00edrni, mint az el\u0151z\u0151 megk\u00f6zel\u00edt\u00e9sben. El\u0151sz\u00f6r is, be kell vezetn\u00fcnk ezeket a \"v\u00e1ltoz\u00f3kat\". Alap\u00e9rtelmez\u00e9sben nincs \"v\u00e1ltoz\u00f3\" entit\u00e1sunk, de haszn\u00e1lhatjuk az mqtt broker szolg\u00e1ltat\u00e1sait. Az \u00e9rt\u00e9keket a retain=true jelz\u0151vel fogjuk k\u00fcldeni \u2014 ez meg\u0151rzi az \u00e9rt\u00e9ket a brokerben, \u00e9s azt b\u00e1rmikor el\u0151h\u00edvhatjuk, m\u00e9g a home assistant \u00fajraind\u00edt\u00e1sa ut\u00e1n is. K\u00e9sz\u00edtettem egy \u00f3r\u00e1s \u00e9s egy napi sz\u00e1ml\u00e1l\u00f3t is.<\/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>\nAz \u00f6sszes var\u00e1zslat az automatiz\u00e1l\u00e1sban zajlik, amely \u00f3r\u00e1nk\u00e9nt \u00e9s minden \u00e9jszaka elindul.<\/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>\nMindk\u00e9t automatiz\u00e1l\u00e1s 2 m\u0171veletet v\u00e9gez:<\/p>\n<ul>\n<li>Kisz\u00e1m\u00edtj\u00e1k az intervallum \u00e9rt\u00e9k\u00e9t az alap \u00e9s v\u00e9g\u00e9rt\u00e9k k\u00f6z\u00f6tti k\u00fcl\u00f6nbs\u00e9gk\u00e9nt<\/li>\n<li>Friss\u00edtik az alap\u00e9rt\u00e9ket a k\u00f6vetkez\u0151 intervallumhoz<\/li>\n<\/ul>\n<p>\nA grafikonok elk\u00e9sz\u00edt\u00e9se ebben az esetben a hagyom\u00e1nyos history-graph seg\u00edts\u00e9g\u00e9vel val\u00f3s\u00edthat\u00f3 meg:<\/p>\n<pre><code class=\"python\">      - type: history-graph\n        title: '\u00d3r\u00e1nk\u00e9nti v\u00edzfogyaszt\u00e1s v\u00e1ltoz\u00f3kkal'\n        hours_to_show: 48\n        entities:\n          - sensor.water_hour\n\n      - type: history-graph\n        title: 'Napi v\u00edzfogyaszt\u00e1s v\u00e1ltoz\u00f3kkal'\n        hours_to_show: 360\n        entities:\n          - sensor.water_day<\/code><\/pre>\n<p>\nEz \u00edgy n\u00e9z ki:<\/p>\n<p><img decoding=\"async\" alt=\"Okos otthon: V\u00edz- \u00e9s villanyfogyaszt\u00e1si grafikonok \u00e9p\u00edt\u00e9se a Home Assistantban\" src=\"\/wp-content\/uploads\/2020\/03\/ebde2fc5f0a72d7d6ba565c3686dc9c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nElvileg ez m\u00e1r mindaz, amire sz\u00fcks\u00e9g van. A m\u00f3dszer el\u0151nye, hogy az adatok egyszer keletkeznek az intervallum alatt. Teh\u00e1t \u00f6sszesen 24 rekord lesz egy nap alatt az \u00f3r\u00e1s grafikonhoz. <\/p>\n<p>Sajn\u00e1latos m\u00f3don ez nem oldja meg a n\u00f6vekv\u0151 adatb\u00e1zis \u00e1ltal\u00e1nos probl\u00e9m\u00e1j\u00e1t. Ha havi fogyaszt\u00e1si grafikont szeretn\u00e9k, akkor legal\u00e1bb egy \u00e9vig kell t\u00e1rolnom az adatokat. Mivel a home assistant csak egy t\u00e1rol\u00e1si id\u0151szakot k\u00edn\u00e1l az eg\u00e9sz adatb\u00e1zisra, ez azt jelenti, hogy MINDEN adatot egy eg\u00e9sz \u00e9vig kell t\u00e1rolni a rendszerben. P\u00e9ld\u00e1ul egy \u00e9v alatt 200 k\u00f6bm\u00e9ter vizet fogyasztok, ami 200000 bejegyz\u00e9st jelent az adatb\u00e1zisban. Ha figyelembe vessz\u00fck a t\u00f6bbi \u00e9rz\u00e9kel\u0151t is, akkor a sz\u00e1m val\u00f3ban hihetetlen\u00fcl nagy lesz.<\/p>\n<h2>3. megk\u00f6zel\u00edt\u00e9s<\/h2>\n<p>\nSzerencs\u00e9re az okos emberek m\u00e1r megoldott\u00e1k ezt a probl\u00e9m\u00e1t az InfluxDB adatb\u00e1zis meg\u00edr\u00e1s\u00e1val. Ez az adatb\u00e1zis kifejezetten id\u0151alap\u00fa adatok t\u00e1rol\u00e1s\u00e1ra van optimaliz\u00e1lva, \u00e9s t\u00f6k\u00e9letesen alkalmas k\u00fcl\u00f6nb\u00f6z\u0151 \u00e9rz\u00e9kel\u0151k \u00e9rt\u00e9keinek t\u00e1rol\u00e1s\u00e1ra. A rendszer emellett SQL-szer\u0171 lek\u00e9rdez\u0151 nyelvet is biztos\u00edt, amely lehet\u0151v\u00e9 teszi az adatok kinyer\u00e9s\u00e9t \u00e9s k\u00fcl\u00f6nb\u00f6z\u0151 m\u00f3dokon val\u00f3 aggreg\u00e1l\u00e1s\u00e1t. V\u00e9g\u00fcl, k\u00fcl\u00f6nb\u00f6z\u0151 adatokat elt\u00e9r\u0151 id\u0151tartamon kereszt\u00fcl lehet t\u00e1rolni. P\u00e9ld\u00e1ul a gyakran v\u00e1ltoz\u00f3 m\u00e9r\u00e9sek, mint a h\u0151m\u00e9rs\u00e9klet vagy a p\u00e1ratartalom, csak p\u00e1r h\u00e9tig t\u00e1rolhat\u00f3k, m\u00edg a napi v\u00edzfogyaszt\u00e1si adatok egy eg\u00e9sz \u00e9vig t\u00e1rolhat\u00f3k.<\/p>\n<p>Az InfluxDB mellett az okos emberek feltal\u00e1lt\u00e1k a Grafan\u00e1t is \u2014 egy rendszert az InfluxDB-b\u0151l sz\u00e1rmaz\u00f3 adatok grafikonokkal val\u00f3 megjelen\u00edt\u00e9s\u00e9re. A Grafana k\u00fcl\u00f6nb\u00f6z\u0151 t\u00edpus\u00fa grafikonokat tud rajzolni, r\u00e9szletesen testre szabni \u0151ket, \u00e9s ami a legfontosabb, ezeket a grafikonokat \"be lehet illeszteni\" a home assistant lovelace-UI-j\u00e1ba.<\/p>\n<p>Inspir\u00e1l\u00f3dni <noindex><a rel=\"nofollow\" href=\"https:\/\/dummylabs.com\/ru\/post\/2019-01-13-influxdb-part1\/\">itt <\/a><\/noindex> \u00e9s <noindex><a rel=\"nofollow\" href=\"https:\/\/dummylabs.com\/ru\/post\/2019-05-28-influxdb-part2\/\">itt<\/a><\/noindex>. A cikkek r\u00e9szletesen le\u00edrj\u00e1k az InfluxDB \u00e9s Grafana telep\u00edt\u00e9si \u00e9s csatlakoztat\u00e1si folyamat\u00e1t a home assistant-hoz. \u00c9n a saj\u00e1t konkr\u00e9t feladatom megold\u00e1s\u00e1ra \u00f6sszpontos\u00edtok.<\/p>\n<p>Teh\u00e1t el\u0151sz\u00f6r kezdj\u00fck a sz\u00e1ml\u00e1l\u00f3 \u00e9rt\u00e9k\u00e9nek t\u00e1rol\u00e1s\u00e1t az InfluxDB-ben. A home assistant konfigur\u00e1ci\u00f3j\u00e1nak egy r\u00e9szlete (ebben a p\u00e9ld\u00e1ban nemcsak hideg, hanem meleg v\u00edzzel is fogok j\u00e1tszani):<\/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>\nKapcsoljuk ki az ezen adatok home assistant bels\u0151 adatb\u00e1zis\u00e1ba val\u00f3 ment\u00e9s\u00e9t, hogy ne n\u00f6velj\u00fck feleslegesen:<\/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>\nMostramos agora o console do InfluxDB e configuramos nosso banco de dados. Em particular, precisamos definir quanto tempo os dados ser\u00e3o mantidos. Isso \u00e9 regulado pela chamada retention policy \u2014 \u00e9 semelhante a bancos de dados dentro do banco de dados principal, sendo que cada banco interno possui suas pr\u00f3prias configura\u00e7\u00f5es. Por padr\u00e3o, todos os dados s\u00e3o armazenados na retention policy chamada autogen, e esses dados ser\u00e3o mantidos por uma semana. Eu gostaria que os dados hor\u00e1rios fossem armazenados por um m\u00eas, os semanais por um ano e os mensais nunca fossem exclu\u00eddos. Vamos criar as retention policies correspondentes.<\/p>\n<pre><code class=\"sql\">Hozzon l\u00e9tre megtart\u00e1si politik\u00e1t &quot;month&quot; az &quot;homeassistant&quot; sz\u00e1m\u00e1ra, id\u0151tartam: 30 nap, replik\u00e1ci\u00f3: 1\nHozzon l\u00e9tre megtart\u00e1si politik\u00e1t &quot;year&quot; az &quot;homeassistant&quot; sz\u00e1m\u00e1ra, id\u0151tartam: 52 h\u00e9t, replik\u00e1ci\u00f3: 1\nHozzon l\u00e9tre megtart\u00e1si politik\u00e1t &quot;infinite&quot; az &quot;homeassistant&quot; sz\u00e1m\u00e1ra, id\u0151tartam: v\u00e9gtelen, replik\u00e1ci\u00f3: 1<\/code><\/pre>\n<p>\nAgora, na verdade, o principal truque \u2014 agrega\u00e7\u00e3o de dados atrav\u00e9s de uma consulta cont\u00ednua. Este \u00e9 um mecanismo que executa automaticamente uma consulta em intervalos definidos, agrega dados com base nessa consulta e armazena o resultado em um novo valor. Vamos analisar com um exemplo (escrevo em uma coluna para melhor legibilidade, mas na verdade precisei inserir este comando em uma \u00fanica linha).<\/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>\nEste comando:<\/p>\n<ul>\n<li>Cria uma consulta cont\u00ednua chamada cq_water_cold_hourly no banco de dados homeassistant.<\/li>\n<li>A consulta ser\u00e1 executada a cada hora (time(1h)).<\/li>\n<li>A consulta ir\u00e1 extrair todos os dados da medida homeassistant.autogen.l (litros), incluindo as leituras de \u00e1gua fria e quente.<\/li>\n<li>Os dados agregados ser\u00e3o agrupados por entity_id, o que nos dar\u00e1 valores separados para \u00e1gua fria e quente.<\/li>\n<li>Como o medidor de litros \u00e9 uma sequ\u00eancia monotonamente crescente, dentro de cada hora precisaremos pegar o valor m\u00e1ximo, portanto, a agrega\u00e7\u00e3o ser\u00e1 feita pela fun\u00e7\u00e3o max(value). <\/li>\n<li>O novo valor ser\u00e1 armazenado em homeassistant.month.water_meter_hour, onde month \u00e9 o nome da retention policy com um per\u00edodo de armazenamento de um m\u00eas. Os dados de \u00e1gua fria e quente ser\u00e3o distribu\u00eddos em registros separados com o respectivo entity_id e valor no campo value.<\/li>\n<\/ul>\n<p>\nDurante a noite ou quando n\u00e3o h\u00e1 ningu\u00e9m em casa, n\u00e3o h\u00e1 consumo de \u00e1gua, e, portanto, n\u00e3o h\u00e1 novos registros em homeassistant.autogen.l. Para evitar lacunas nos valores nas consultas normais, pode-se usar fill(previous). Isso far\u00e1 com que o InfluxDB use o valor da hora anterior. <\/p>\n<p>Sajnos a folyamatos lek\u00e9rdez\u00e9snek van egy saj\u00e1toss\u00e1ga: a fill(previous) tr\u00fckk nem m\u0171k\u00f6dik, \u00e9s a bejegyz\u00e9sek egyszer\u0171en nem j\u00f6nnek l\u00e9tre. Ez egyfajta lek\u00fczdhetetlen probl\u00e9ma, amely <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/influxdata\/influxdb\/issues\/3220\">m\u00e1r nem egy \u00e9ve t\u00e9ma.<\/a><\/noindex>Ezzel a probl\u00e9m\u00e1val k\u00e9s\u0151bb foglalkozunk, a fill(previous) a folyamatos lek\u00e9rdez\u00e9sben maradhat \u2014 nem zavar. <\/p>\n<p>N\u00e9zz\u00fck meg, mi k\u00e9sz\u00fclt el (term\u00e9szetesen \u00e9rdemes v\u00e1rni p\u00e1r \u00f3r\u00e1t):<\/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>\nVegye figyelembe, hogy az \u00e9rt\u00e9kek az adatb\u00e1zisban UTC-ben vannak t\u00e1rolva, ez\u00e9rt ezen a list\u00e1n 3 \u00f3r\u00e1val elt\u00e9rnek \u2014 a 7 \u00f3r\u00e1s \u00e9rt\u00e9kek az InfluxDB kimenet\u00e9ben a fenti grafikonok 10 \u00f3r\u00e1s \u00e9rt\u00e9keinek felelnek meg. Emellett vegye figyelembe, hogy 2 \u00e9s 5 \u00f3ra k\u00f6z\u00f6tt egyszer\u0171en nincsenek bejegyz\u00e9sek \u2014 ez a folyamatos lek\u00e9rdez\u00e9s saj\u00e1toss\u00e1ga.<\/p>\n<p>Ahogy l\u00e1that\u00f3, az aggreg\u00e1lt \u00e9rt\u00e9k szint\u00e9n monoton n\u00f6vekv\u0151 sorozat, csak a bejegyz\u00e9sek ritk\u00e1bban \u00e9rkeznek \u2014 \u00f3r\u00e1nk\u00e9nt. De ez nem probl\u00e9ma \u2014 \u00edrhatunk m\u00e9g egy lek\u00e9rdez\u00e9st, ami a megfelel\u0151 adatokat hozza el a grafikonhoz.<\/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>\nKifejtem:<\/p>\n<ul>\n<li>H\u00fazzon le adatokat a homeassistant.month.water_meter_hour t\u00e1bl\u00e1b\u00f3l az entity_id=&#8217;water_meter_cold&#8217; sz\u00e1m\u00e1ra az utols\u00f3 24 \u00f3r\u00e1ban (time &gt;= now() -24h). <\/li>\n<li>Ahogy m\u00e1r eml\u00edtettem, a homeassistant.month.water_meter_hour sorozatban hi\u00e1nyozhatnak egyes bejegyz\u00e9sek. Ezeket az adatokat \u00fajra gener\u00e1ljuk, ha az GROUP BY time(1h) lek\u00e9rdez\u00e9st futtatjuk. Ez\u00fattal a fill(previous) \u00fagy fog m\u0171k\u00f6dni, ahogyan kell, gener\u00e1lva a hi\u00e1nyz\u00f3 adatokat (a f\u00fcggv\u00e9ny az el\u0151z\u0151 \u00e9rt\u00e9ket fogja venni)<\/li>\n<li>A legfontosabb dolog ebben a lek\u00e9rdez\u00e9sben a difference f\u00fcggv\u00e9ny, amely kisz\u00e1m\u00edtja a k\u00fcl\u00f6nbs\u00e9get az \u00f3r\u00e1nk\u00e9nti jel\u00f6l\u00e9sek k\u00f6z\u00f6tt. \u00d6nmag\u00e1ban nem m\u0171k\u00f6dik, \u00e9s aggreg\u00e1l\u00f3 f\u00fcggv\u00e9nyt ig\u00e9nyel. Legyen ez a max(), amit kor\u00e1bban haszn\u00e1ltunk.<\/li>\n<\/ul>\n<p>\nA v\u00e9grehajt\u00e1s eredm\u00e9nye \u00edgy n\u00e9z ki<\/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>\nHajnali 2 \u00e9s 5 \u00f3ra k\u00f6z\u00f6tt (UTC) nem volt fogyaszt\u00e1s. Ennek ellen\u00e9re a lek\u00e9rdez\u00e9s ugyanazt a fogyaszt\u00e1si \u00e9rt\u00e9ket fogja visszaadni a fill(previous) funkci\u00f3nak k\u00f6sz\u00f6nhet\u0151en, \u00e9s a difference funkci\u00f3 ezt az \u00e9rt\u00e9ket vonja ki saj\u00e1t mag\u00e1b\u00f3l, \u00edgy a kimenet 0 lesz, ami v\u00e9g\u00fcl is sz\u00fcks\u00e9ges.<\/p>\n<p>Most m\u00e1r csak annyi a teend\u0151, hogy l\u00e9trehozzuk a grafikon. Ehhez nyissuk meg a Grafan\u00e1t, nyissunk meg egy l\u00e9tez\u0151 (vagy hozzunk l\u00e9tre egy \u00fajat) m\u0171szerfalat, \u00e9s hozzunk l\u00e9tre egy \u00faj panelt. A grafikon be\u00e1ll\u00edt\u00e1sai a k\u00f6vetkez\u0151k lesznek.<\/p>\n<p><img decoding=\"async\" alt=\"Okos otthon: V\u00edz- \u00e9s villanyfogyaszt\u00e1si grafikonok \u00e9p\u00edt\u00e9se a Home Assistantban\" src=\"\/wp-content\/uploads\/2020\/03\/c6f551590cd141438b644b24aa4ddebf.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA hideg \u00e9s a meleg v\u00edz adatait egy grafikonon fogom megjelen\u00edteni. A lek\u00e9rdez\u00e9s pontosan olyan, mint ahogy fentebb le\u00edrtam. <\/p>\n<p>A megjelen\u00edt\u00e9si param\u00e9terek \u00edgy vannak be\u00e1ll\u00edtva. Ez n\u00e1lam egy l\u00e9pcs\u0151zetes (stairs) vonalas grafikon lesz. A Stack param\u00e9tert lentebb fogom magyar\u00e1zni. M\u00e9g van n\u00e9h\u00e1ny megjelen\u00edt\u00e9si param\u00e9ter, de ezek nem annyira \u00e9rdekesek.<\/p>\n<p><img decoding=\"async\" alt=\"Okos otthon: V\u00edz- \u00e9s villanyfogyaszt\u00e1si grafikonok \u00e9p\u00edt\u00e9se a Home Assistantban\" src=\"\/wp-content\/uploads\/2020\/03\/cb47fc8570b7fd1305ce3451e0518f11.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA beszerzett grafikont a home assistant-be \u00edgy lehet hozz\u00e1adni:<\/p>\n<ul>\n<li>kil\u00e9pni a grafikon szerkeszt\u00e9si m\u00f3dj\u00e1b\u00f3l. Valami\u00e9rt a grafikonok megoszt\u00e1s\u00e1nak helyes be\u00e1ll\u00edt\u00e1sait csak a m\u0171szerfal oldal\u00e1r\u00f3l aj\u00e1nlj\u00e1k fel.<\/li>\n<li>Kattintson a grafikon neve mellett tal\u00e1lhat\u00f3 h\u00e1romsz\u00f6gre, majd a men\u00fcben v\u00e1lassza a share-t.<\/li>\n<li>A megny\u00edl\u00f3 ablakban v\u00e1lassza az embed lapot.<\/li>\n<li>Elt\u00e1vol\u00edtani a current time range jel\u00f6l\u0151n\u00e9gyzetet \u2014 az id\u0151tartamot az URL-en kereszt\u00fcl fogjuk be\u00e1ll\u00edtani. <\/li>\n<li>V\u00e1lassza ki a sz\u00fcks\u00e9ges t\u00e9m\u00e1t. Az \u00e9n esetemben ez a light.<\/li>\n<li>M\u00e1solja a kapott URL-t a lovelace-UI be\u00e1ll\u00edt\u00e1si k\u00e1rty\u00e1ba.<\/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>\nFigyeljen arra, hogy az id\u0151tartam (az utols\u00f3 2 nap) itt van be\u00e1ll\u00edtva, \u00e9s nem a m\u0171szerfal be\u00e1ll\u00edt\u00e1saiban. <\/p>\n<p>A grafikon \u00edgy n\u00e9z ki. Az utols\u00f3 2 napban nem haszn\u00e1ltam melegvizet, ez\u00e9rt csak a hideg v\u00edz grafikonja l\u00e1that\u00f3.<\/p>\n<p><img decoding=\"async\" alt=\"Okos otthon: V\u00edz- \u00e9s villanyfogyaszt\u00e1si grafikonok \u00e9p\u00edt\u00e9se a Home Assistantban\" src=\"\/wp-content\/uploads\/2020\/03\/d18c82712d3b829a97ada8c8e2adce24.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNem d\u00f6nt\u00f6ttem el, hogy melyik grafikon tetszik jobban, a l\u00e9pcs\u0151zetes vonal vagy a val\u00f3s oszlopok. Ez\u00e9rt csak bemutatok egy p\u00e9ld\u00e1t a napi fogyaszt\u00e1s grafikonra, de ez\u00fattal oszlopokkal. A lek\u00e9rdez\u00e9sek hasonl\u00f3an \u00e9p\u00fclnek fel, mint az el\u0151bbivel. A megjelen\u00edt\u00e9si param\u00e9terek a k\u00f6vetkez\u0151k:<\/p>\n<p><img decoding=\"async\" alt=\"Okos otthon: V\u00edz- \u00e9s villanyfogyaszt\u00e1si grafikonok \u00e9p\u00edt\u00e9se a Home Assistantban\" src=\"\/wp-content\/uploads\/2020\/03\/557297e666f9cd73c3d2aa2fd80c0a2d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEz a grafikon \u00edgy n\u00e9z ki:<\/p>\n<p><img decoding=\"async\" alt=\"Okos otthon: V\u00edz- \u00e9s villanyfogyaszt\u00e1si grafikonok \u00e9p\u00edt\u00e9se a Home Assistantban\" src=\"\/wp-content\/uploads\/2020\/03\/ac8c53569c6b05aeb22e05969de4cd6d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSz\u00f3val, a Stack param\u00e9terr\u0151l. Ezen a grafikonon a hideg v\u00edz oszlopa a meleg v\u00edz oszlopa f\u00f6l\u00f6tt jelenik meg. A teljes magass\u00e1g a hideg \u00e9s meleg v\u00edz \u00f6sszfogyaszt\u00e1s\u00e1t fejezi ki az id\u0151szak alatt. <\/p>\n<p>Az \u00f6sszes bemutatott grafikon dinamikus. Az eg\u00e9rrel r\u00e1 lehet h\u00fazni az \u00e9rdekes pontra, \u00e9s meg lehet n\u00e9zni a r\u00e9szleteket \u00e9s az \u00e9rt\u00e9ket egy adott pontban. <\/p>\n<p>Sajnos, egy kis keser\u0171s\u00e9g n\u00e9lk\u00fcl nem lehetett meg\u00faszni. Az oszlopdiagramon (ellent\u00e9tben a l\u00e9pcs\u0151s vonaldiagrammal) az oszlop k\u00f6zepe nem a nap k\u00f6zep\u00e9n van, hanem 00:00-kor. Vagyis az oszlop bal fele az el\u0151z\u0151 nap hely\u00e9n van. Az szombati \u00e9s vas\u00e1rnapi grafikonok kicsit balra vannak rajzolva, mint a k\u00e9kesz\u00f6ld z\u00f3na. M\u00e9g nem tal\u00e1ltam ki, hogyan lehetne ezt megoldani. <\/p>\n<p>A m\u00e1sik probl\u00e9ma a h\u00f3napok k\u00f6z\u00f6tti intervallumokkal val\u00f3 helyes munkav\u00e9gz\u00e9s lehetetlens\u00e9g\u00e9b\u0151l fakad. Az a helyzet, hogy az \u00f3ra\/nappal\/h\u00e9t hossza fix, m\u00edg a h\u00f3nap hossza minden alkalommal m\u00e1s. Az InfluxDB csak az azonos intervallumokkal k\u00e9pes dolgozni. Jelenleg annyira el\u00e9g az eszem, hogy 30 napos fix intervallumot \u00e1ll\u00edtsak be. Igen, a grafikon az \u00e9v sor\u00e1n kicsit el fog cs\u00faszni, \u00e9s az oszlopok nem eg\u00e9szen pontosan fogj\u00e1k t\u00fckr\u00f6zni a h\u00f3napokat. De mivel sz\u00e1momra ez a dolog csak mint bemutat\u00f3 szerepel, ez\u00e9rt elfogadom. <\/p>\n<p>K\u00e9t lehets\u00e9ges megold\u00e1st l\u00e1tok:<\/p>\n<ul>\n<li>Elhagyni a havi grafikonokat, \u00e9s korl\u00e1tozni magunkat a heti grafikonokra. \u00c9vente 52 heti oszlop m\u00e1r eg\u00e9szen j\u00f3l n\u00e9z ki.<\/li>\n<li>A havi fogyaszt\u00e1st a m\u00e1sodik m\u00f3dszer szerint sz\u00e1molni, m\u00edg a grafan\u00e1t csak a sz\u00e9p grafikonok haszn\u00e1lat\u00e1ra. Ez egy el\u00e9g pontos megold\u00e1s lesz. M\u00e9g a tavalyi \u00e9v grafikonjait is r\u00e1 lehet fektetni az \u00f6sszehasonl\u00edt\u00e1s \u00e9rdek\u00e9ben \u2014 a grafana ezt is tudja.<\/li>\n<\/ul>\n<h2>Z\u00e1r\u00e1s<\/h2>\n<p>\nNem tudom, mi\u00e9rt, de nagyon \u00e9lvezem az ilyen t\u00edpus\u00fa grafikonokat. Megmutatj\u00e1k, hogy az \u00e9let pezseg, \u00e9s minden v\u00e1ltozik. Tegnap sok volt, ma kev\u00e9s, holnap megint m\u00e1sk\u00e9pp lesz. M\u00e9g a csal\u00e1dtagokkal kell dolgoznom a fogyaszt\u00e1sr\u00f3l. De m\u00e9g a jelenlegi \u00e9tv\u00e1gy mellett is, egy nagy \u00e9s \u00e9rthetetlen sz\u00e1m a sz\u00e1ml\u00e1n m\u00e1r egy el\u00e9g vil\u00e1gos k\u00e9pet alkot a fogyaszt\u00e1sr\u00f3l.<\/p>\n<p>Annak ellen\u00e9re, hogy k\u00f6zel 20 \u00e9ves programoz\u00f3i karrierem van, szinte soha nem tal\u00e1lkoztam adatb\u00e1zisokkal. Ez\u00e9rt a k\u00fcls\u0151 adatb\u00e1zis telep\u00edt\u00e9se valami megh\u00f6kkent\u0151en \u00e9s \u00e9rthetetlennek t\u0171nt. Minden megv\u00e1ltozott <noindex><a rel=\"nofollow\" href=\"https:\/\/dummylabs.com\/ru\/post\/2019-01-13-influxdb-part1\">az eml\u00edtett cikk<\/a><\/noindex> \u2014 kider\u00fclt, hogy a megfelel\u0151 eszk\u00f6z csatlakoztat\u00e1sa p\u00e1r kattint\u00e1sb\u00f3l megoldhat\u00f3, \u00e9s a szakosodott eszk\u00f6zzel a grafikonok \u00e9p\u00edt\u00e9se kicsit egyszer\u0171bb\u00e9 v\u00e1lik.<\/p>\n<p>A c\u00edmben eml\u00edtettem az \u00e1ramfogyaszt\u00e1st. Sajnos jelenleg nem tudok bemutatni egyetlen grafikont sem. Az SDM120 m\u00e9r\u0151m elromlott, a m\u00e1sik pedig probl\u00e9m\u00e1s a Modbus kapcsolaton. Ezen k\u00edv\u00fcl a cikk t\u00e9m\u00e1j\u00e1ra ez nincs hat\u00e1ssal \u2014 a grafikont ugyan\u00fagy fogjuk fel\u00e9p\u00edteni, mint a v\u00edzfogyaszt\u00e1si adatok eset\u00e9ben.<\/p>\n<p>Ebben a cikkben azokat a megk\u00f6zel\u00edt\u00e9seket mutattam be, amelyeket magam is kipr\u00f3b\u00e1ltam. Bizony\u00e1ra l\u00e9teznek m\u00e1s m\u00f3dszerek az adatok gy\u0171jt\u00e9s\u00e9re \u00e9s vizualiz\u00e1l\u00e1s\u00e1ra, amikr\u0151l nem tudok. K\u00e9rlek, mes\u00e9ljetek nekem err\u0151l a megjegyz\u00e9sekben, nagyon \u00e9rdekelne. \u00d6r\u00f6mmel fogadom a konstrukt\u00edv kritik\u00e1t \u00e9s az \u00faj \u00f6tleteket. Rem\u00e9lem, hogy a bemutatott anyag m\u00e1soknak is seg\u00edts\u00e9get ny\u00fajt.<br \/>\n<br \/>Forr\u00e1s: <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.3 - 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\/hu\/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.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\/hu\/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\udd47Okosotthon: V\u00edz- \u00e9s \u00e1ramfogyaszt\u00e1si grafikonok \u00e9p\u00edt\u00e9se a Home Assistant seg\u00edts\u00e9g\u00e9vel | ProHoster","description":"Minden alkalommal.","canonical_url":"https:\/\/prohoster.info\/hu\/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":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/74421","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=74421"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/74421\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/74422"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=74421"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=74421"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=74421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}