{"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\/cs\/blog\/administrirovanie\/umnyj-dom-stroim-grafiki-potrebleniya-vody-i-elektrichestva-v-home-assistant","title":{"rendered":"Inteligentn\u00ed d\u016fm: Vytv\u00e1\u0159\u00edme grafy spot\u0159eby vody a elekt\u0159iny v Home Assistant","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Inteligentn\u00ed d\u016fm: Vytv\u00e1\u0159\u00edme grafy spot\u0159eby vody a elekt\u0159iny v Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/f1133a4c391e901ed64bf0825a774fc6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKa\u017ed\u00fd m\u011bs\u00edc, kdy\u017e dost\u00e1v\u00e1m vy\u00fa\u010dtov\u00e1n\u00ed za elekt\u0159inu a vodu, se div\u00edm \u2013 opravdu na\u0161e rodina tolik spot\u0159ebov\u00e1v\u00e1? No jo, na koupeln\u011b m\u00e1me podlahov\u00e9 topen\u00ed a bojler, ale p\u0159ece jenom nepou\u017e\u00edvaj\u00ed neust\u00e1le. Vodu tak\u00e9 vypad\u00e1, \u017ee \u0161et\u0159\u00edme (i kdy\u017e si r\u00e1di zaplaveme ve van\u011b). P\u0159ed n\u011bkolika lety jsem u\u017e <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/411259\/\">p\u0159ipojil m\u011b\u0159i\u010de vody<\/a><\/noindex> a <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=XKvunh29sZo&amp;list=PLkt_cQxT0oUmfdxhbmTjytjaJjZjSVUOu\">elekt\u0159iny<\/a><\/noindex> k chytr\u00e9 dom\u00e1cnosti, ale t\u00edm to v\u0161echno skon\u010dilo. K anal\u00fdze spot\u0159eby jsem se dostal a\u017e te\u010f, o \u010dem\u017e vlastn\u011b je tento \u010dl\u00e1nek.<\/p>\n<p>Ned\u00e1vno jsem p\u0159e\u0161el na Home Assistant jako syst\u00e9m chytr\u00e9 dom\u00e1cnosti. Jedn\u00edm z d\u016fvod\u016f byla pr\u00e1v\u011b mo\u017enost sb\u00edrat velk\u00e9 mno\u017estv\u00ed dat s mo\u017enost\u00ed pohodln\u011b vytv\u00e1\u0159et r\u016fzn\u00e9 grafy.<\/p>\n<p>Informace popsan\u00e9 v tomto \u010dl\u00e1nku nejsou nov\u00e9, v\u0161echny tyto v\u011bci pod r\u016fzn\u00fdmi z\u00e1minkami ji\u017e byly pops\u00e1ny na internetu. Ale ka\u017ed\u00fd \u010dl\u00e1nek obvykle popisuje pouze jeden p\u0159\u00edstup nebo aspekt. Srovn\u00e1vat v\u0161echny tyto p\u0159\u00edstupy a vybrat ten nejvhodn\u011bj\u0161\u00ed jsem musel s\u00e1m. \u010cl\u00e1nek i p\u0159esto neposkytuje vy\u010derp\u00e1vaj\u00edc\u00ed informace o sb\u011bru dat, ale p\u0159edstavuje jak\u00fdsi souhrn toho, jak jsem to ud\u011blal. Tak\u017ee konstruktivn\u00ed kritika a n\u00e1vrhy na zlep\u0161en\u00ed jsou v\u00edt\u00e1ny.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Formulace \u00fakolu<\/h2>\n<p>\nC\u00edlem dne\u0161n\u00edho cvi\u010den\u00ed je z\u00edskat kr\u00e1sn\u00e9 grafy spot\u0159eby vody a elekt\u0159iny:<\/p>\n<ul>\n<li>Hodinov\u00fd graf za 2 dny<\/li>\n<li>Denn\u00ed graf za 2 t\u00fddny<\/li>\n<li>(voliteln\u011b) t\u00fddenn\u00ed a m\u011bs\u00ed\u010dn\u00ed<\/li>\n<\/ul>\n<p>\nZde n\u00e1s \u010dekaj\u00ed ur\u010dit\u00e9 obt\u00ed\u017ee:<\/p>\n<ul>\n<li>Standardn\u00ed grafov\u00e9 komponenty jsou obvykle velmi chud\u00e9. V tom lep\u0161\u00edm p\u0159\u00edpad\u011b lze vytvo\u0159it jen liniov\u00fd graf podle bod\u016f.\n<p>Pokud se dob\u0159e pod\u00edv\u00e1te, m\u016f\u017eete naj\u00edt extern\u00ed komponenty, kter\u00e9 roz\u0161i\u0159uj\u00ed mo\u017enosti standardn\u00edho grafu. Pro home assistant nen\u00ed \u0161patn\u00fd a hezk\u00fd komponent <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kalkih\/mini-graph-card\">mini-graph-card<\/a><\/noindex>, ale i ten m\u00e1 n\u011bkter\u00e1 omezen\u00ed:<\/p>\n<ul>\n<li>Je obt\u00ed\u017en\u00e9 nastavovat parametry sloupcov\u00e9ho grafu na dlouh\u00fdch intervalech (\u0161\u00ed\u0159ka sloupce je nastavena v zlomc\u00edch hodiny, co\u017e znamen\u00e1, \u017ee intervaly del\u0161\u00ed ne\u017e hodina budou nastavov\u00e1ny jako desetinn\u00e1 \u010d\u00edsla)<\/li>\n<li>Nen\u00ed mo\u017en\u00e9 na jeden graf p\u0159id\u00e1vat r\u016fzn\u00e9 entity (nap\u0159. teplotu a vlhkost nebo sloupcov\u00fd graf zkombinovat s lini\u00ed)<\/li>\n<\/ul>\n<\/li>\n<li>Nen\u00ed to jen tak, \u017ee home assistant ve v\u00fdchoz\u00edm nastaven\u00ed pou\u017e\u00edv\u00e1 nejjednodu\u0161\u0161\u00ed datab\u00e1zi SQLite (a j\u00e1, ne\u0161ika, nezvl\u00e1dl instalaci MySQL nebo Postgres), ale tak\u00e9 data nejsou uchov\u00e1v\u00e1na t\u00edm nejoptim\u00e1ln\u011bj\u0161\u00edm zp\u016fsobem. Nap\u0159\u00edklad p\u0159i ka\u017ed\u00e9 zm\u011bn\u011b ka\u017ed\u00e9ho, i toho nejmen\u0161\u00edho, digit\u00e1ln\u00edho parametru se do datab\u00e1ze zapisuje obrovsk\u00fd JSON o velikosti kolem jednoho kilobajtu.\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>\nM\u00e1m pom\u011brn\u011b mnoho senzor\u016f (teplotn\u00ed senzory v ka\u017ed\u00e9 m\u00edstnosti, m\u011b\u0159i\u010de vody a elekt\u0159iny), a n\u011bkte\u0159\u00ed tak\u00e9 generuj\u00ed pom\u011brn\u011b velk\u00e9 mno\u017estv\u00ed dat. Nap\u0159\u00edklad pouze m\u011b\u0159i\u010d elekt\u0159iny SDM220 generuje kolem deseti hodnot ka\u017ed\u00fdch 10-15 sekund, a takov\u00fdch m\u011b\u0159i\u010d\u016f bych cht\u011bl nainstalovat asi 8. A nav\u00edc je zde cel\u00e1 \u0161k\u00e1la parametr\u016f, kter\u00e9 se vypo\u010d\u00edt\u00e1vaj\u00ed na z\u00e1klad\u011b jin\u00fdch senzor\u016f. T\u00edm p\u00e1dem mohou v\u0161echny tyto hodnoty snadno nafouknout datab\u00e1zi o 100-200 MB denn\u011b. Po t\u00fddnu bude syst\u00e9m sotva fungovat, a po m\u011bs\u00edci zem\u0159e flash disk (v p\u0159\u00edpad\u011b typick\u00e9 instalace home assistant na Raspberry PI), a o uchov\u00e1v\u00e1n\u00ed dat po cel\u00fd rok nem\u016f\u017ee b\u00fdt ani \u0159e\u010d.<\/li>\n<li>Pokud m\u00e1te \u0161t\u011bst\u00ed, v\u00e1\u0161 m\u011b\u0159i\u010d um\u00ed s\u00e1m po\u010d\u00edtat spot\u0159ebu. M\u016f\u017eete se kdykoli obr\u00e1tit na m\u011b\u0159i\u010d a zjistit, jak\u00e1 je akumulovan\u00e1 hodnota spot\u0159eby. Obecn\u011b v\u0161echny m\u011b\u0159i\u010de elekt\u0159iny, kter\u00e9 maj\u00ed digit\u00e1ln\u00ed rozhran\u00ed (RS232\/RS485\/Modbus\/Zigbee), tuto mo\u017enost poskytuj\u00ed.\n<p>H\u016f\u0159e je, pokud za\u0159\u00edzen\u00ed m\u016f\u017ee m\u011b\u0159it pouze n\u011bjak\u00fd okam\u017eit\u00fd parametr (nap\u0159\u00edklad okam\u017eit\u00fd v\u00fdkon nebo proud), nebo prost\u011b generovat impulsy ka\u017ed\u00e9 X watthodin nebo litru. Pak je pot\u0159eba p\u0159em\u00fd\u0161let, jak a \u010d\u00edm to integrovat a kde hodnotu uchov\u00e1vat. Existuje riziko, \u017ee n\u011bkter\u00fd report bude zme\u0161k\u00e1n z n\u011bjak\u00e9ho d\u016fvodu, a tak\u00e9 p\u0159esnost syst\u00e9mu jako celku vyvol\u00e1v\u00e1 ot\u00e1zky. Samoz\u0159ejm\u011b, \u017ee to v\u0161echno m\u016f\u017eete sv\u011b\u0159it syst\u00e9mu inteligentn\u00ed dom\u00e1cnosti, jako je home assistant, ale bod ohledn\u011b po\u010dtu z\u00e1znam\u016f v datab\u00e1zi nikdo nezru\u0161il a dotazov\u00e1n\u00ed senzor\u016f \u010dast\u011bji ne\u017e jednou za sekundu nebude mo\u017en\u00e9 (omezen\u00ed architektury home assistant).<\/li>\n<\/ul>\n<p><\/p>\n<h2>P\u0159\u00edstup 1<\/h2>\n<p>\nNejprve se pod\u00edv\u00e1me, co home assistant nab\u00edz\u00ed p\u0159\u00edmo z krabice. M\u011b\u0159en\u00ed spot\u0159eby za obdob\u00ed \u2013 velmi \u017e\u00e1dan\u00e1 funk\u010dnost. Samoz\u0159ejm\u011b, \u017ee byla d\u00e1vno implementov\u00e1na jako specializovan\u00e1 komponenta \u2013 utility_meter. <\/p>\n<p>Podstata komponenty spo\u010d\u00edv\u00e1 v tom, \u017ee uvnit\u0159 zav\u00e1d\u00ed prom\u011bnnou current_accumulated_value a resetuje ji na konci zadan\u00e9ho obdob\u00ed (hodina\/t\u00fdden\/m\u011bs\u00edc). Komponenta sama monitoruje p\u0159ich\u00e1zej\u00edc\u00ed prom\u011bnnou (hodnota n\u011bjak\u00e9ho senzoru), sama se p\u0159ihla\u0161uje na zm\u011bny hodnoty \u2013 vy prost\u011b dostanete hotov\u00fd v\u00fdsledek. Toto za\u0159\u00edzen\u00ed je pops\u00e1no pouh\u00fdmi n\u011bkolika \u0159\u00e1dky v konfigura\u010dn\u00edm souboru.<\/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>\nZde sensor.water_meter_cold p\u0159edstavuje aktu\u00e1ln\u00ed hodnotu m\u011b\u0159i\u010de v litrech, kterou dost\u00e1v\u00e1m <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/411259\/\">p\u0159\u00edmo z \u017eeleza<\/a><\/noindex> p\u0159es mqtt. Konstrukce vytv\u00e1\u0159\u00ed 2 nov\u00e9 sensory water_cold_hour_um a water_cold_day_um, kter\u00e9 uchov\u00e1vaj\u00ed hodinov\u00e9 a denn\u00ed ukazatele a nuluj\u00ed je na konci obdob\u00ed. Zde je graf hodinov\u00e9ho akumul\u00e1toru za p\u016fl dne.<\/p>\n<p><img decoding=\"async\" alt=\"Inteligentn\u00ed d\u016fm: Vytv\u00e1\u0159\u00edme grafy spot\u0159eby vody a elekt\u0159iny v Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/d3c3ea29c10b17142e51ebe756ab7123.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u00f3d hodinov\u00fdch a denn\u00edch graf\u016f pro lovelace-UI vypad\u00e1 takto:<\/p>\n<pre><code class=\"python\">      - type: history-graph\n        title: 'Hodinov\u00e1 spot\u0159eba vody pomoc\u00ed prom\u011bnn\u00fdch'\n        hours_to_show: 48\n        entities:\n          - sensor.water_hour\n\n      - type: history-graph\n        title: 'Denn\u00ed spot\u0159eba vody pomoc\u00ed prom\u011bnn\u00fdch'\n        hours_to_show: 360\n        entities:\n          - sensor.water_day\n<\/code><\/pre>\n<p>\nVe skute\u010dnosti je v tomto algoritmu skryta probl\u00e9matika tohoto p\u0159\u00edstupu. Jak jsem ji\u017e zm\u00ednil, pro ka\u017edou vstupn\u00ed hodnotu (aktu\u00e1ln\u00ed hodnota m\u011b\u0159i\u010de pro ka\u017ed\u00fd dal\u0161\u00ed litr) se generuje 1 kB z\u00e1znamu v datab\u00e1zi. Ka\u017ed\u00fd utility meter tak\u00e9 generuje novou hodnotu, kter\u00e1 se rovn\u011b\u017e ukl\u00e1d\u00e1 do datab\u00e1ze. Pokud chci sb\u00edrat hodinov\u00e9, denn\u00ed, t\u00fddenn\u00ed nebo m\u011bs\u00ed\u010dn\u00ed hodnoty, a to z n\u011bkolika vodovodn\u00edch stojan\u016f a je\u0161t\u011b p\u0159idat p\u00e1r elektrick\u00fdch m\u011b\u0159i\u010d\u016f \u2014 to bude opravdu hodn\u011b dat. No, p\u0159esn\u011bji \u0159e\u010deno, dat nen\u00ed mnoho, ale proto\u017ee home assistant do datab\u00e1ze zapisuje spoustu zbyte\u010dn\u00fdch informac\u00ed, velikost datab\u00e1ze poroste jako houbami po de\u0161ti. Ob\u00e1v\u00e1m se i odhadovat velikost datab\u00e1ze pro t\u00fddenn\u00ed a m\u011bs\u00ed\u010dn\u00ed grafy.<\/p>\n<p>Krom\u011b toho utility meter s\u00e1m o sob\u011b ne\u0159e\u0161\u00ed stanoven\u00fd \u00fakol. Graf hodnot, kter\u00e9 poskytuje utility meter, je monotonn\u00ed rostouc\u00ed funkce, kter\u00e1 se ka\u017ed\u00fd hodinu resetuje na 0. Pot\u0159ebujeme p\u0159ehledn\u00fd graf spot\u0159eby pro u\u017eivatele, kolik litr\u016f bylo spot\u0159ebov\u00e1no za dan\u00e9 obdob\u00ed. Standardn\u00ed komponenta history-graph to neum\u00ed, ale m\u016f\u017ee n\u00e1m pomoci extern\u00ed komponenta mini-graph-card.<\/p>\n<p>Toto je k\u00f3d karty pro lovelace-UI:<\/p>\n<pre><code class=\"python\">      - aggregate_func: max\n        entities:\n          - color: var(--primary-color)\n            entity: sensor.water_cold_hour_um\n        group_by: hour\n        hours_to_show: 48\n        name: &quot;Hodinov\u00e1 spot\u0159eba vody agregovan\u00e1 podle m\u011b\u0159i\u010de&quot;\n        points_per_hour: 1\n        show:\n          graph: bar\n        type: 'custom:mini-graph-card'<\/code><\/pre>\n<p>\nKrom\u011b standardn\u00edch nastaven\u00ed jako je jm\u00e9no senzoru, typ grafu, barva (standardn\u00ed oran\u017eov\u00e1 se mi nel\u00edbila) je d\u016fle\u017eit\u00e9 zm\u00ednit 3 nastaven\u00ed:<\/p>\n<ul>\n<li>group_by:hour \u2014 graf bude generov\u00e1n s vyrovn\u00e1n\u00edm sloupe\u010dk\u016f na za\u010d\u00e1tek hodiny<\/li>\n<li>points_per_hour: 1 \u2014 jeden sloupe\u010dek na ka\u017edou hodinu<\/li>\n<li>A nejd\u016fle\u017eit\u011bj\u0161\u00ed, aggregate_func: max \u2014 br\u00e1t maxim\u00e1ln\u00ed hodnotu v r\u00e1mci ka\u017ed\u00e9 hodiny. Tento parametr pr\u00e1v\u011b prom\u011b\u0148uje pilov\u00fd graf na sloupe\u010dky.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Inteligentn\u00ed d\u016fm: Vytv\u00e1\u0159\u00edme grafy spot\u0159eby vody a elekt\u0159iny v Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/5bd866c39b23299e5f15dcf4a9bce38f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa \u0159adu sloupe\u010dk\u016f vlevo neberte ohled \u2014 to je standardn\u00ed chov\u00e1n\u00ed komponenty, pokud nejsou \u017e\u00e1dn\u00e1 data. A dat nebylo \u2014 jen p\u00e1r hodin zp\u011bt jsem aktivoval sb\u011br dat podle utility meter jen kv\u016fli tomuto \u010dl\u00e1nku (sv\u016fj aktu\u00e1ln\u00ed p\u0159\u00edstup pop\u00ed\u0161i o n\u011bco n\u00ed\u017ee). <\/p>\n<p>Na tomto obr\u00e1zku jsem cht\u011bl uk\u00e1zat, \u017ee n\u011bkdy zobrazen\u00ed dat opravdu funguje a sloupce skute\u010dn\u011b odr\u00e1\u017eej\u00ed spr\u00e1vn\u00e9 hodnoty. Ale ne v\u0161echny. Vymezen\u00fd sloupec za obdob\u00ed od 11 do 12 hodin zobrazuje 19 litr\u016f, p\u0159esto\u017ee na zubat\u00e9m grafu v\u00fd\u0161e za stejn\u00fd \u010dasov\u00fd \u00fasek ze stejn\u00e9ho senzoru vid\u00edme spot\u0159ebu 62 litr\u016f. Bu\u010f je to chyba, nebo je probl\u00e9m jinde. A zat\u00edm mi nen\u00ed jasn\u00e9, pro\u010d jsou data napravo zlomen\u00e1 \u2014 spot\u0159eba tam byla v norm\u011b, jak je tak\u00e9 vid\u011bt podle zubat\u00e9ho grafu.<\/p>\n<p>Obecn\u011b se mi nepoda\u0159ilo dos\u00e1hnout d\u016fv\u011bryhodnosti tohoto p\u0159\u00edstupu \u2014 graf t\u00e9m\u011b\u0159 v\u017edy ukazuje n\u011bjak\u00e9 nesmysly.<\/p>\n<p>Analogov\u00fd k\u00f3d pro denn\u00ed senzor. <\/p>\n<pre><code class=\"python\">      - aggregate_func: max\n        entities:\n          - color: var(--primary-color)\n            entity: sensor.water_cold_day_um\n        group_by: interval\n        hours_to_show: 360\n        name: &quot;Denn\u00ed spot\u0159eba vody agregovan\u00e1 podle m\u011b\u0159i\u010de&quot;\n        points_per_hour: 0.0416666666\n        show:\n          graph: bar\n        type: 'custom:mini-graph-card'\n<\/code><\/pre>\n<p>\nV\u0161imn\u011bte si, \u017ee parametr group_by je nastaven na hodnotu interval, a ovl\u00e1d\u00e1 ho cel\u00fd parametr points_per_hour. A v tom spo\u010d\u00edv\u00e1 dal\u0161\u00ed probl\u00e9m tohoto komponentu \u2014 points_per_hour funguje dob\u0159e na grafech za hodinu nebo m\u00e9n\u011b, ale \u0161patn\u011b na del\u0161\u00edch intervalech. Tak\u017ee abych z\u00edskal jeden sloupec za jeden den, musel jsem napsat hodnotu 1\/24=0.04166666. U\u017e nemluv\u00edm o t\u00fddenn\u00edch a m\u011bs\u00ed\u010dn\u00edch grafech.<\/p>\n<h2>P\u0159\u00edstup 2<\/h2>\n<p>\nJe\u0161t\u011b kdy\u017e se teprve seznamuji s Home Assistant, narazil jsem na toto video:<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"-0HrYFCRH0M\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/-0HrYFCRH0M\/hqdefault.jpg\" alt=\"P\u0159ehr\u00e1t video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nKolega shroma\u017e\u010fuje \u00fadaje o spot\u0159eb\u011b z n\u011bkolika typ\u016f z\u00e1suvek Xiaomi. Jeho \u00fakol je o n\u011bco jednodu\u0161\u0161\u00ed \u2014 jen zobrazit hodnotu spot\u0159eby za dne\u0161ek, v\u010derej\u0161ek a za m\u011bs\u00edc. \u017d\u00e1dn\u00e9 grafy nejsou pot\u0159eba. <\/p>\n<p>Odpus\u0165me si \u00favahy o ru\u010dn\u00edm integraci okam\u017eit\u00fdch hodnot v\u00fdkonu \u2014 o \"p\u0159esnosti\" tohoto p\u0159\u00edstupu jsem ji\u017e psal v\u00fd\u0161e. Nen\u00ed jasn\u00e9, pro\u010d nepou\u017eil akumulovan\u00e9 hodnoty spot\u0159eby, kter\u00e9 ji\u017e shroma\u017e\u010fuje stejn\u00e1 z\u00e1suvka. Podle m\u00e9ho n\u00e1zoru bude integrace uvnit\u0159 za\u0159\u00edzen\u00ed fungovat l\u00e9pe. <\/p>\n<p>Z videa si vezmeme my\u0161lenku ru\u010dn\u00edho po\u010d\u00edt\u00e1n\u00ed spot\u0159eby za obdob\u00ed. \u010clov\u011bk po\u010d\u00edt\u00e1 pouze hodnoty za dne\u0161ek a v\u010derej\u0161ek, ale my p\u016fjdeme d\u00e1l a pokus\u00edme se vykreslit graf. Podstata navrhovan\u00e9 metody v m\u00e9m p\u0159\u00edpad\u011b spo\u010d\u00edv\u00e1 v n\u00e1sleduj\u00edc\u00edm.<\/p>\n<p>Vytvo\u0159\u00edme prom\u011bnnou hodnota_na_za\u010d\u00e1tku_hodiny, do kter\u00e9 zap\u00ed\u0161eme aktu\u00e1ln\u00ed m\u011b\u0159en\u00ed po\u010d\u00edtadla.<br \/>\nNa konci hodiny (nebo na za\u010d\u00e1tku n\u00e1sleduj\u00edc\u00ed) spo\u010d\u00edt\u00e1me rozd\u00edl mezi aktu\u00e1ln\u00edm m\u011b\u0159en\u00edm a ulo\u017een\u00fdm na za\u010d\u00e1tku hodiny. Tento rozd\u00edl bude spot\u0159ebou za aktu\u00e1ln\u00ed hodinu - ulo\u017e\u00edme hodnotu do senzoru a v budoucnu budeme podle t\u00e9to hodnoty vytv\u00e1\u0159et graf. <br \/>\nJe tak\u00e9 pot\u0159eba \u201eresetovat\u201c prom\u011bnnou hodnota_na_zacatku_hodiny t\u00edm, \u017ee do n\u00ed zap\u00ed\u0161eme aktu\u00e1ln\u00ed hodnotu \u010d\u00edta\u010de.<\/p>\n<p>To v\u0161e lze prov\u00e9st prost\u0159ednictv\u00edm dom\u00e1c\u00edho asistenta. <\/p>\n<p>K\u00f3d bude t\u0159eba napsat o n\u011bco v\u00edce ne\u017e v p\u0159edchoz\u00edm p\u0159\u00edstupu. Nejprve si vytvo\u0159\u00edme tyto \u201eprom\u011bnn\u00e9\u201c. Z boxu nem\u00e1me entitu \u201eprom\u011bnn\u00e1\u201c, ale m\u016f\u017eeme vyu\u017e\u00edt slu\u017eby mqtt brokera. Budeme tam pos\u00edlat hodnoty s flagem retain=true - to ulo\u017e\u00ed hodnotu uvnit\u0159 brokera, a kdykoli ji m\u016f\u017eeme vyzvednout, i p\u0159i restartu home assistant. Vytvo\u0159il jsem ihned hodinov\u00e9 a denn\u00ed \u010d\u00edta\u010de.<\/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>\nVe\u0161ker\u00e1 magie se odehr\u00e1v\u00e1 v automatizaci, kter\u00e1 se spou\u0161t\u00ed ka\u017edou hodinu a ka\u017edou noc.<\/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>\nOb\u011b automatizace vykon\u00e1vaj\u00ed 2 akce:<\/p>\n<ul>\n<li>Vypo\u010d\u00edt\u00e1vaj\u00ed hodnotu za interval jako rozd\u00edl mezi po\u010d\u00e1te\u010dn\u00ed a koncovou hodnotou<\/li>\n<li>Aktualizuj\u00ed z\u00e1kladn\u00ed hodnotu pro dal\u0161\u00ed interval<\/li>\n<\/ul>\n<p>\nVytv\u00e1\u0159en\u00ed graf\u016f je v tomto p\u0159\u00edpad\u011b \u0159e\u0161eno pomoc\u00ed b\u011b\u017en\u00e9ho history-graph:<\/p>\n<pre><code class=\"python\">      - type: history-graph\n        title: 'Hodinov\u00e1 spot\u0159eba vody pomoc\u00ed prom\u011bnn\u00fdch'\n        hours_to_show: 48\n        entities:\n          - sensor.water_hour\n\n      - type: history-graph\n        title: 'Denn\u00ed spot\u0159eba vody pomoc\u00ed prom\u011bnn\u00fdch'\n        hours_to_show: 360\n        entities:\n          - sensor.water_day<\/code><\/pre>\n<p>\nVypad\u00e1 to takto:<\/p>\n<p><img decoding=\"async\" alt=\"Inteligentn\u00ed d\u016fm: Vytv\u00e1\u0159\u00edme grafy spot\u0159eby vody a elekt\u0159iny v Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/ebde2fc5f0a72d7d6ba565c3686dc9c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV podstat\u011b je to u\u017e to, co pot\u0159ebujete. V\u00fdhodou t\u00e9to metody je, \u017ee data se generuj\u00ed jednou za interval. Tedy celkem 24 z\u00e1znam\u016f za den pro hodinov\u00fd graf. <\/p>\n<p>Bohu\u017eel to st\u00e1le ne\u0159e\u0161\u00ed celkov\u00fd probl\u00e9m rostouc\u00ed datab\u00e1ze. Pokud budu cht\u00edt graf m\u011bs\u00ed\u010dn\u00ed spot\u0159eby, budu muset uchov\u00e1vat data alespo\u0148 za rok. A proto\u017ee Home Assistant poskytuje pouze jedno nastaven\u00ed doby uchov\u00e1v\u00e1n\u00ed pro celou datab\u00e1zi, znamen\u00e1 to, \u017ee V\u0160ECHNA data v syst\u00e9mu budou muset b\u00fdt uchov\u00e1v\u00e1na cel\u00fd rok. Nap\u0159\u00edklad za rok spot\u0159ebuji 200 kub\u00edk\u016f vody, co\u017e p\u0159edstavuje 200000 z\u00e1znam\u016f v datab\u00e1zi. A pokud tak\u00e9 zohledn\u00edm dal\u0161\u00ed senzory, \u010d\u00edslo se stane opravdu nep\u0159ijateln\u00fdm.<\/p>\n<h2>P\u0159\u00edstup 3<\/h2>\n<p>\nNa\u0161t\u011bst\u00ed chyt\u0159\u00ed lid\u00e9 u\u017e tento probl\u00e9m vy\u0159e\u0161ili vytvo\u0159en\u00edm datab\u00e1ze InfluxDB. Tato datab\u00e1ze je speci\u00e1ln\u011b optimalizov\u00e1na pro uchov\u00e1v\u00e1n\u00ed \u010dasov\u011b z\u00e1visl\u00fdch dat a je ide\u00e1ln\u00ed pro uchov\u00e1v\u00e1n\u00ed hodnot r\u016fzn\u00fdch senzor\u016f. Syst\u00e9m tak\u00e9 poskytuje SQL-podobn\u00fd jazyk dotaz\u016f, kter\u00fd umo\u017e\u0148uje vyb\u00edrat hodnoty z datab\u00e1ze a pot\u00e9 je agregovat r\u016fzn\u00fdmi zp\u016fsoby. Nakonec lze uchov\u00e1vat r\u016fzn\u00e9 \u00fadaje r\u016fzn\u011b dlouhou dobu. Nap\u0159\u00edklad \u010dasto se m\u011bn\u00edc\u00ed \u00fadaje jako teplota nebo vlhkost je mo\u017en\u00e9 uchov\u00e1vat pouze p\u00e1r t\u00fddn\u016f, zat\u00edmco denn\u00ed \u00fadaje o spot\u0159eb\u011b vody lze uchov\u00e1vat cel\u00fd rok.<\/p>\n<p>Krom\u011b InfluxDB chytr\u00ed lid\u00e9 tak\u00e9 vynalezli Grafanu \u2014 syst\u00e9m pro kreslen\u00ed graf\u016f na z\u00e1klad\u011b dat z InfluxDB. Grafana um\u00ed kreslit r\u016fzn\u00e9 typy graf\u016f, detailn\u011b je p\u0159izp\u016fsobovat a, co je nejd\u016fle\u017eit\u011bj\u0161\u00ed, tyto grafy lze \u201evlo\u017eit\u201c do u\u017eivatelsk\u00e9ho rozhran\u00ed lovelace Home Assistant.<\/p>\n<p>Inspirovat se <noindex><a rel=\"nofollow\" href=\"https:\/\/dummylabs.com\/ru\/post\/2019-01-13-influxdb-part1\/\">tady <\/a><\/noindex> a <noindex><a rel=\"nofollow\" href=\"https:\/\/dummylabs.com\/ru\/post\/2019-05-28-influxdb-part2\/\">tady<\/a><\/noindex>. V \u010dl\u00e1nc\u00edch je podrobn\u011b pops\u00e1n proces instalace a p\u0159ipojen\u00ed InfluxDB a Grafany k Home Assistant. J\u00e1 se soust\u0159ed\u00edm na \u0159e\u0161en\u00ed sv\u00e9 konkr\u00e9tn\u00ed \u00falohy.<\/p>\n<p>Tak\u017ee za\u010dneme t\u00edm, \u017ee za\u010dneme ukl\u00e1dat hodnotu m\u011b\u0159i\u010de do InfluxDB. Kousek konfigurace Home Assistant (v tomto p\u0159\u00edkladu se budu bavit nejen s studenou, ale i s horkou vodou):<\/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>\nVypneme uchov\u00e1v\u00e1n\u00ed t\u011bchto stejn\u00fdch dat v intern\u00ed datab\u00e1zi Home Assistant, abychom ji zbyte\u010dn\u011b nenafukovali:<\/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>\nP\u0159ejdeme nyn\u00ed do konzole InfluxDB a nastav\u00edme na\u0161i datab\u00e1zi. Konkr\u00e9tn\u011b je t\u0159eba nastavit, jak dlouho budou r\u016fzn\u00e9 \u00fadaje uchov\u00e1v\u00e1ny. To se reguluje tzv. retention policy \u2014 to je n\u011bco jako datab\u00e1ze uvnit\u0159 hlavn\u00ed datab\u00e1ze, p\u0159i\u010dem\u017e ka\u017ed\u00e1 vnit\u0159n\u00ed datab\u00e1ze m\u00e1 sv\u00e9 vlastn\u00ed nastaven\u00ed. Ve v\u00fdchoz\u00edm nastaven\u00ed se v\u0161echny \u00fadaje shroma\u017e\u010fuj\u00ed v retention policy s n\u00e1zvem autogen, tyto \u00fadaje budou uchov\u00e1v\u00e1ny po dobu jednoho t\u00fddne. Cht\u011bl bych, aby hodinov\u00e9 \u00fadaje byly uchov\u00e1v\u00e1ny m\u011bs\u00edc, t\u00fddenn\u00ed - rok, a m\u011bs\u00ed\u010dn\u00ed \u00fadaje nikdy nebyly smaz\u00e1ny. Vytvo\u0159\u00edme odpov\u00eddaj\u00edc\u00ed retention policy.<\/p>\n<pre><code class=\"sql\">VYTVO\u0158TE POLITIKU RETENCE \"month\" NA \"homeassistant\" D\u00c9LKA 30d REPLIKACE 1\nVYTVO\u0158TE POLITIKU RETENCE \"year\" NA \"homeassistant\" D\u00c9LKA 52w REPLIKACE 1\nVYTVO\u0158TE POLITIKU RETENCE \"infinite\" NA \"homeassistant\" D\u00c9LKA INF REPLIKACE 1<\/code><\/pre>\n<p>\nNyn\u00ed vlastn\u011b hlavn\u00ed trik \u2014 agregace \u00fadaj\u016f pomoc\u00ed continuous query. To je mechanismus, kter\u00fd automaticky spou\u0161t\u00ed dotaz v ur\u010den\u00fdch intervalech, agreguje \u00fadaje podle tohoto dotazu a ulo\u017e\u00ed v\u00fdsledky do nov\u00e9 hodnoty. Probereme si to na p\u0159\u00edkladu (p\u00ed\u0161i to ve sloupc\u00edch pro p\u0159ehlednost, ale ve skute\u010dnosti jsem musel zadat tento p\u0159\u00edkaz jako jeden \u0159\u00e1dek).<\/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>\nTento p\u0159\u00edkaz:<\/p>\n<ul>\n<li>Vytv\u00e1\u0159\u00ed continuous query s n\u00e1zvem cq_water_cold_hourly v datab\u00e1zi homeassistant.<\/li>\n<li>Dotaz se bude vykon\u00e1vat ka\u017edou hodinu (time(1h)).<\/li>\n<li>Dotaz bude vyb\u00edrat v\u0161echny \u00fadaje z measurementu homeassistant.autogen.l (litry), v\u010detn\u011b m\u011b\u0159en\u00ed studen\u00e9 a tepl\u00e9 vody.<\/li>\n<li>Agregovan\u00e9 \u00fadaje budou seskupeny podle entity_id, co\u017e n\u00e1m vytvo\u0159\u00ed samostatn\u00e9 hodnoty pro studenou a teplou vodu.<\/li>\n<li>Jeliko\u017e je m\u011b\u0159i\u010d litr\u016f monotonn\u011b rostouc\u00ed sekvence, v r\u00e1mci ka\u017ed\u00e9 hodiny bude t\u0159eba br\u00e1t maxim\u00e1ln\u00ed hodnotu, proto agregace bude provedena funkc\u00ed max(value). <\/li>\n<li>Nov\u00e1 hodnota bude zaps\u00e1na do homeassistant.month.water_meter_hour, kde month je n\u00e1zev retention policy s dobou uchov\u00e1v\u00e1n\u00ed v m\u011bs\u00edci. P\u0159i\u010dem\u017e \u00fadaje o studen\u00e9 a tepl\u00e9 vod\u011b budou rozpt\u00fdleny v samostatn\u00fdch z\u00e1znamech s odpov\u00eddaj\u00edc\u00edm entity_id a hodnotou v poli value.<\/li>\n<\/ul>\n<p>\nV noci nebo kdy\u017e nikdo nen\u00ed doma, nen\u00ed spot\u0159eba vody, a tedy tak\u00e9 neexistuj\u00ed nov\u00e9 z\u00e1znamy v homeassistant.autogen.l. Aby v b\u011b\u017en\u00fdch dotazech nedoch\u00e1zelo k v\u00fdpadk\u016fm hodnot, lze pou\u017e\u00edt fill(previous). To zp\u016fsob\u00ed, \u017ee InfluxDB pou\u017eije hodnotu z p\u0159edchoz\u00ed hodiny. <\/p>\n<p>Bohu\u017eel m\u00e1 continuous query zvl\u00e1\u0161tnost: trik fill(previous) nefunguje a z\u00e1znamy se jednodu\u0161e nevytv\u00e1\u0159\u00ed. A to je n\u011bjak\u00fd nezdoln\u00fd probl\u00e9m, kter\u00fd <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/influxdata\/influxdb\/issues\/3220\">se diskutuje u\u017e n\u011bkolik let<\/a><\/noindex>. S t\u00edmto probl\u00e9mem se vy\u0159e\u0161\u00edme pozd\u011bji, a fill(previous) ve continuous query a\u0165 z\u016fstane \u2014 nevad\u00ed to. <\/p>\n<p>Pod\u00edv\u00e1me se, co jsme z\u00edskali (samoz\u0159ejm\u011b je t\u0159eba po\u010dkat p\u00e1r hodin):<\/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>\nV\u0161imn\u011bte si, \u017ee hodnoty v datab\u00e1zi se ukl\u00e1daj\u00ed v UTC, tak\u017ee v tomto seznamu se li\u0161\u00ed o 3 hodiny \u2014 hodnoty za 7 hodin r\u00e1no ve v\u00fdstupu InfluxDB odpov\u00eddaj\u00ed hodnot\u00e1m za 10 hodin r\u00e1no na grafech v\u00fd\u0161e. Tak\u00e9 si dejte pozor, \u017ee mezi 2 a 5 hodinou r\u00e1no z\u00e1znamy prost\u011b nejsou \u2014 to je ta zvl\u00e1\u0161tnost continuous query.<\/p>\n<p>Jak vid\u00edte, agregovan\u00e1 hodnota je tak\u00e9 monot\u00f3nn\u011b rostouc\u00ed posloupnost, jenom z\u00e1znamy jsou \u0159\u00eddk\u00e9 \u2014 jednou za hodinu. Ale to nen\u00ed probl\u00e9m \u2014 m\u016f\u017eeme napsat dal\u0161\u00ed dotaz, kter\u00fd vyt\u00e1hne spr\u00e1vn\u00e1 data pro graf.<\/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>\nVysv\u011btl\u00edm:<\/p>\n<ul>\n<li>Z datab\u00e1ze homeassistant.month.water_meter_hour vyt\u00e1hneme data pro entity_id=&#8217;water_meter_cold&#8217; za posledn\u00edch 24 hodin (time &gt;= now() - 24h). <\/li>\n<li>Jak jsem u\u017e zm\u00ednil, v sekvenci homeassistant.month.water_meter_hour mohou chyb\u011bt n\u011bkter\u00e9 z\u00e1znamy. Tato data vygenerujeme znovu spu\u0161t\u011bn\u00edm dotazu s GROUP BY time(1h). Tentokr\u00e1t fill(previous) bude fungovat, jak m\u00e1, a vygeneruje chyb\u011bj\u00edc\u00ed data (funkce vezme p\u0159edchoz\u00ed hodnotu)<\/li>\n<li>Nejd\u016fle\u017eit\u011bj\u0161\u00ed v\u011bc\u00ed v tomto dotazu je funkce difference, kter\u00e1 spo\u010d\u00edt\u00e1 rozd\u00edl mezi hodinov\u00fdmi zna\u010dkami. Sama o sob\u011b nefunguje a vy\u017eaduje agrega\u010dn\u00ed funkci. A\u0165 to je max() pou\u017eit\u00e9 p\u0159edt\u00edm.<\/li>\n<\/ul>\n<p>\nV\u00fdsledek proveden\u00ed vypad\u00e1 takto<\/p>\n<pre><code class=\"python\">name: water_meter_hour\ntags: entity_id=water_meter_cold\ntime                 difference\n----                 ----------\n...\n2020-03-08T02:00:00Z 2\n2020-03-08T03:00:00Z 0\n2020-03-08T04:00:00Z 0\n2020-03-08T05:00:00Z 14\n2020-03-08T06:00:00Z 78\n2020-03-08T07:00:00Z 30\n2020-03-08T08:00:00Z 64\n2020-03-08T09:00:00Z 62\n2020-03-08T10:00:00Z 6\n2020-03-08T11:00:00Z 43\n2020-03-08T12:00:00Z 8\n2020-03-08T13:00:00Z 9\n2020-03-08T14:00:00Z 22\n2020-03-08T15:00:00Z 72<\/code><\/pre>\n<p>\nOd 2 do 5 hodin r\u00e1no (UTC) nebyla spot\u0159eba. Nicm\u00e9n\u011b dotaz vr\u00e1t\u00ed stejn\u00e9 hodnoty spot\u0159eby d\u00edky mo\u017enosti fill(previous), a funkce difference tuto hodnotu ode\u010dte sama od sebe, co\u017e povede k v\u00fdsledku 0, co\u017e je vlastn\u011b to, co pot\u0159ebujeme.<\/p>\n<p>Te\u010f u\u017e zb\u00fdv\u00e1 jen postavit graf. K tomu otev\u0159eme Grafanu, otev\u0159eme n\u011bjak\u00fd existuj\u00edc\u00ed (nebo vytvo\u0159\u00edme nov\u00fd) dashboard a vytvo\u0159\u00edme novou panel. Nastaven\u00ed graf\u016f bude takov\u00e9to.<\/p>\n<p><img decoding=\"async\" alt=\"Inteligentn\u00ed d\u016fm: Vytv\u00e1\u0159\u00edme grafy spot\u0159eby vody a elekt\u0159iny v Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/c6f551590cd141438b644b24aa4ddebf.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBudu zobrazovat data o studen\u00e9 a tepl\u00e9 vod\u011b na jednom grafu. Dotaz je p\u0159esn\u011b takov\u00fd, jak jsem popsal v\u00fd\u0161e. <\/p>\n<p>Parametry zobrazen\u00ed jsou nastaveny takto. Bude to graf s liniemi (lines), kter\u00fd jde po kroc\u00edch (stairs). Parametr Stack vysv\u011btl\u00edm n\u00ed\u017ee. Dole je je\u0161t\u011b p\u00e1r dal\u0161\u00edch parametrov zobrazen\u00ed, ale ty nejsou tak zaj\u00edmav\u00e9.<\/p>\n<p><img decoding=\"async\" alt=\"Inteligentn\u00ed d\u016fm: Vytv\u00e1\u0159\u00edme grafy spot\u0159eby vody a elekt\u0159iny v Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/cb47fc8570b7fd1305ce3451e0518f11.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAbychom p\u0159idali z\u00edskan\u00fd graf do home assistenta, je t\u0159eba:<\/p>\n<ul>\n<li>vystoupit z re\u017eimu \u00fapravy grafu. Z n\u011bjak\u00e9ho d\u016fvodu jsou spr\u00e1vn\u00e1 nastaven\u00ed sd\u00edlen\u00ed graf\u016f nab\u00edzena jen ze str\u00e1nky dashboardu.<\/li>\n<li>Klepn\u011bte na troj\u00faheln\u00edk vedle n\u00e1zvu grafu a v menu vyberte sd\u00edlet (share).<\/li>\n<li>V otev\u0159en\u00e9m okn\u011b p\u0159ejd\u011bte na z\u00e1lo\u017eku embed.<\/li>\n<li>Zru\u0161te za\u0161krtnut\u00ed u current time range \u2014 \u010dasov\u00fd rozsah budeme ur\u010dovat pomoc\u00ed URL. <\/li>\n<li>Vyberte pot\u0159ebn\u00e9 t\u00e9ma. V m\u00e9m p\u0159\u00edpad\u011b je to light.<\/li>\n<li>Zkop\u00edrujte z\u00edskanou URL do karty nastaven\u00ed lovelace-UI.<\/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>\nV\u0161imn\u011bte si, \u017ee \u010dasov\u00fd rozsah (posledn\u00ed 2 dny) se nastavuje pr\u00e1v\u011b zde, nikoli v nastaven\u00ed dashboardu. <\/p>\n<p>Graf vypad\u00e1 takto. Teplou vodu jsem za posledn\u00ed 2 dny nepou\u017e\u00edval, proto se vykresluje pouze graf studen\u00e9 vody.<\/p>\n<p><img decoding=\"async\" alt=\"Inteligentn\u00ed d\u016fm: Vytv\u00e1\u0159\u00edme grafy spot\u0159eby vody a elekt\u0159iny v Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/d18c82712d3b829a97ada8c8e2adce24.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJe\u0161t\u011b jsem se nerozhodl, kter\u00fd graf se mi v\u00edce l\u00edb\u00ed, zda stup\u0148ov\u00fd nebo skute\u010dn\u00e9 sloupce. Proto jen uvedu p\u0159\u00edklad denn\u00edho grafu spot\u0159eby, tentokr\u00e1t ale ve sloupc\u00edch. Dotazy se tvo\u0159\u00ed analogicky tomu, co bylo pops\u00e1no v\u00fd\u0161e. Parametry zobrazen\u00ed jsou n\u00e1sleduj\u00edc\u00ed:<\/p>\n<p><img decoding=\"async\" alt=\"Inteligentn\u00ed d\u016fm: Vytv\u00e1\u0159\u00edme grafy spot\u0159eby vody a elekt\u0159iny v Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/557297e666f9cd73c3d2aa2fd80c0a2d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTento graf vypad\u00e1 takto:<\/p>\n<p><img decoding=\"async\" alt=\"Inteligentn\u00ed d\u016fm: Vytv\u00e1\u0159\u00edme grafy spot\u0159eby vody a elekt\u0159iny v Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/ac8c53569c6b05aeb22e05969de4cd6d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTak, a te\u010f k parametru Stack. V tomto grafu je sloupec studen\u00e9 vody zakreslen nad sloupcem tepl\u00e9 vody. Celkov\u00e1 v\u00fd\u0161ka odpov\u00edd\u00e1 sou\u010dtu spot\u0159eby studen\u00e9 a tepl\u00e9 vody za obdob\u00ed. <\/p>\n<p>V\u0161echny zobrazen\u00e9 grafy jsou dynamick\u00e9. M\u016f\u017eete p\u0159ej\u00edt my\u0161\u00ed na zaj\u00edmav\u00fd bod a zobrazit podrobnosti a hodnotu v konkr\u00e9tn\u00edm bod\u011b. <\/p>\n<p>Bohu\u017eel, ani bez p\u00e1r l\u017ei\u010dek dehtu se to neobe\u0161lo. Na sloupcov\u00e9m grafu (na rozd\u00edl od grafu s krokov\u00fdmi \u010darami) se st\u0159ed sloupce nenach\u00e1z\u00ed uprost\u0159ed dne, ale ve 00:00. Tedy lev\u00e1 polovina sloupce je nakreslena na m\u00edst\u011b p\u0159edchoz\u00edho dne. Tak\u017ee grafy za sobotu a ned\u011bli jsou nakresleny o n\u011bco nalevo od modrav\u00e9 z\u00f3ny. Zat\u00edm jsem nep\u0159i\u0161el na to, jak to vy\u0159e\u0161it. <\/p>\n<p>Dal\u0161\u00ed probl\u00e9m spo\u010d\u00edv\u00e1 v nemo\u017enosti spr\u00e1vn\u011b pracovat s m\u011bs\u00ed\u010dn\u00edmi intervaly. D\u016fvodem je, \u017ee d\u00e9lka hodiny\/dne\/t\u00fddne je fixn\u00ed, zat\u00edmco d\u00e9lka m\u011bs\u00edce je poka\u017ed\u00e9 jin\u00e1. InfluxDB um\u00ed pracovat pouze s jednotkov\u00fdmi intervaly. Zat\u00edm mi sta\u010dilo na to, abych nastavil fixn\u00ed interval na 30 dn\u00ed. Ano, graf b\u011bhem roku se trochu posune a sloupce nebudou p\u0159esn\u011b odpov\u00eddat m\u011bs\u00edc\u016fm. Ale proto\u017ee m\u011b tato z\u00e1le\u017eitost zaj\u00edm\u00e1 jen jako ukazatel, tak s t\u00edm souhlas\u00edm. <\/p>\n<p>Vid\u00edm minim\u00e1ln\u011b dv\u011b \u0159e\u0161en\u00ed:<\/p>\n<ul>\n<li>Zasypat m\u011bs\u00ed\u010dn\u00ed grafy a omezit se na t\u00fddenn\u00ed. 52 t\u00fddenn\u00edch sloupc\u016f za rok vypad\u00e1 docela dob\u0159e.<\/li>\n<li>M\u011bs\u00ed\u010dn\u00ed spot\u0159ebu vypo\u010d\u00edt\u00e1vat jako metodu \u010d. 2 a grafanu pou\u017e\u00edvat jen na kr\u00e1sn\u00e9 grafy. P\u0159esn\u00e9 \u0159e\u0161en\u00ed se dostane. M\u016f\u017eete dokonce p\u0159ekr\u00fdt grafy z minul\u00e9ho roku pro srovn\u00e1n\u00ed \u2013 grafana to um\u00ed tak\u00e9.<\/li>\n<\/ul>\n<h2>Z\u00e1v\u011br<\/h2>\n<p>\nNev\u00edm pro\u010d, ale opravdu m\u011b bav\u00ed tento typ graf\u016f. Ukazuj\u00ed, \u017ee \u017eivot v\u0159e a v\u0161echno se m\u011bn\u00ed. V\u010dera bylo hodn\u011b, dnes m\u00e1lo, z\u00edtra to bude zase jinak. Je\u0161t\u011b zb\u00fdv\u00e1 probrat to s dom\u00e1c\u00edmi ohledn\u011b spot\u0159eby. Ale i p\u0159i sou\u010dasn\u00fdch apetitech se prost\u011b velk\u00e9 a nejasn\u00e9 \u010d\u00edslo na faktu\u0159e st\u00e1v\u00e1 docela pochopiteln\u00fdm obrazem spot\u0159eby.<\/p>\n<p>Navzdory t\u00e9m\u011b\u0159 20let\u00e9 kari\u00e9\u0159e program\u00e1tora jsem se s datab\u00e1zemi prakticky nesetkal. Proto mi instalace extern\u00ed datab\u00e1ze p\u0159ipadala jako n\u011bco tak nepochopiteln\u00e9ho. V\u0161echno se zm\u011bnilo, <noindex><a rel=\"nofollow\" href=\"https:\/\/dummylabs.com\/ru\/post\/2019-01-13-influxdb-part1\">v\u00fd\u0161e zm\u00edn\u011bn\u00fd \u010dl\u00e1nek,<\/a><\/noindex> \u2013 uk\u00e1zalo se, \u017ee p\u0159id\u00e1n\u00ed vhodn\u00e9ho n\u00e1stroje se prov\u00e1d\u00ed ve dvou kliknut\u00edch, a se specializovan\u00fdm n\u00e1strojem je \u00fakol vytv\u00e1\u0159en\u00ed graf\u016f o n\u011bco jednodu\u0161\u0161\u00ed.<\/p>\n<p>V nadpisu jsem zm\u00ednil spot\u0159ebu elektrick\u00e9 energie. Bohu\u017eel moment\u00e1ln\u011b nemohu poskytnout \u017e\u00e1dn\u00fd graf. Jedno m\u011b\u0159idlo SDM120 mi ode\u0161lo a druh\u00e9 m\u00e1 probl\u00e9my p\u0159i komunikaci p\u0159es Modbus. Nicm\u00e9n\u011b to na t\u00e9ma tohoto \u010dl\u00e1nku nem\u00e1 \u017e\u00e1dn\u00fd vliv \u2014 grafy budou vytvo\u0159eny stejn\u00fdm zp\u016fsobem jako pro vodu.<\/p>\n<p>V tomto \u010dl\u00e1nku jsem uvedl p\u0159\u00edstupy, kter\u00e9 jsem s\u00e1m vyzkou\u0161el. Ur\u010dit\u011b existuj\u00ed i dal\u0161\u00ed zp\u016fsoby organizace sb\u011bru a vizualizace dat, o kter\u00fdch nev\u00edm. Pod\u011blte se se mnou o to v koment\u00e1\u0159\u00edch, budu velmi r\u00e1d. Budu r\u00e1d za konstruktivn\u00ed kritiku a nov\u00e9 n\u00e1pady. Douf\u00e1m, \u017ee p\u0159edlo\u017een\u00fd materi\u00e1l tak\u00e9 n\u011bkomu pom\u016f\u017ee.<br \/>\n<br \/>Zdroj: <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\/cs\/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=\"cs_CZ\" \/>\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\/cs\/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\udd47Chytr\u00fd domov: Vytv\u00e1\u0159\u00edme grafy spot\u0159eby vody a elekt\u0159iny v Home Assistant | ProHoster","description":"Ka\u017ed\u00fd \u010das.","canonical_url":"https:\/\/prohoster.info\/cs\/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":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/74421","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=74421"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/74421\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/74422"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=74421"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=74421"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=74421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}