{"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\/sv\/blog\/administrirovanie\/umnyj-dom-stroim-grafiki-potrebleniya-vody-i-elektrichestva-v-home-assistant","title":{"rendered":"Smart hem: Skapa diagram f\u00f6r vatten- och elf\u00f6rbrukning i Home Assistant","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Smart hem: Skapa diagram f\u00f6r vatten- och elf\u00f6rbrukning i Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/f1133a4c391e901ed64bf0825a774fc6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVarje g\u00e5ng jag f\u00e5r r\u00e4kningen f\u00f6r elektricitet och vatten undrar jag \u2014 hur mycket konsumtion har egentligen min familj? Ja, det \u00e4r sant att vi har golvv\u00e4rme och en v\u00e4rmepanna i badrummet, men de g\u00e5r ju inte p\u00e5 fullt hela tiden. Vi f\u00f6rs\u00f6ker ocks\u00e5 spara vatten (\u00e4ven om vi gillar att plaska i badet). F\u00f6r n\u00e5gra \u00e5r sedan kopplade jag redan <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/411259\/\">vattenm\u00e4tare<\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=XKvunh29sZo&amp;list=PLkt_cQxT0oUmfdxhbmTjytjaJjZjSVUOu\">el<\/a><\/noindex> till v\u00e5rt smarta hem, men det stannade d\u00e4r. Det var f\u00f6rst nu som jag kom till att analysera f\u00f6rbrukningen, vilket \u00e4r vad den h\u00e4r artikeln handlar om.<\/p>\n<p>Nyligen har jag g\u00e5tt \u00f6ver till Home Assistant som system f\u00f6r smart hem. En av anledningarna var just m\u00f6jligheten att samla in stora m\u00e4ngder data med m\u00f6jlighet att enkelt skapa olika typer av grafer.<\/p>\n<p>Informationen som beskrivs i den h\u00e4r artikeln \u00e4r inte ny, alla dessa saker har redan beskrivits p\u00e5 olika s\u00e4tt p\u00e5 n\u00e4tet. Men varje artikel handlar vanligtvis bara om ett enda tillv\u00e4gag\u00e5ngss\u00e4tt eller aspekt. Jag fick sj\u00e4lv j\u00e4mf\u00f6ra alla dessa metoder och v\u00e4lja den mest l\u00e4mpliga. Artikeln ger dock inte en helt\u00e4ckande information om datainsamling, utan fungerar mer som en sammanfattning av hur jag gjorde. S\u00e5 konstruktiv kritik och f\u00f6rb\u00e4ttringsf\u00f6rslag \u00e4r v\u00e4lkomna.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Uppgiftsst\u00e4llande<\/h2>\n<p>\nS\u00e5, m\u00e5let med dagens \u00f6vning \u00e4r att f\u00e5 vackra grafer \u00f6ver vatten- och elf\u00f6rbrukningen:<\/p>\n<ul>\n<li>Timvisa under 2 dagar<\/li>\n<li>Dagsvisa under 2 veckor<\/li>\n<li>(valfritt) veckovisa och m\u00e5nadsvisa<\/li>\n<\/ul>\n<p>\nH\u00e4r st\u00e4lls vi inf\u00f6r n\u00e5gra sv\u00e5righeter:<\/p>\n<ul>\n<li>Standardkomponenterna f\u00f6r grafer \u00e4r oftast ganska begr\u00e4nsade. I b\u00e4sta fall kan man skapa ett linjediagram baserat p\u00e5 punkter.\n<p>Om man letar ordentligt kan man hitta tredjeparts komponenter som ut\u00f6kar funktionaliteten hos standardgrafen. F\u00f6r Home Assistant \u00e4r komponenten <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kalkih\/mini-graph-card\">mini-graph-card<\/a><\/noindex>, ganska bra och snygg, men den \u00e4r ocks\u00e5 n\u00e5got begr\u00e4nsad:<\/p>\n<ul>\n<li>Det \u00e4r sv\u00e5rt att st\u00e4lla in parametrarna f\u00f6r stapeldiagram \u00f6ver l\u00e5nga intervall (staplarna st\u00e4lls in i delar av en timme, vilket inneb\u00e4r att l\u00e4ngre intervall m\u00e5ste anges med decimaler)<\/li>\n<li>Man kan inte l\u00e4gga till olika entiteter till ett och samma diagram (till exempel temperatur och luftfuktighet, eller kombinera stapeldiagram med linjediagram)<\/li>\n<\/ul>\n<\/li>\n<li>Inte nog med att Home Assistant som standard anv\u00e4nder den mest primitiva databasen SQLite (och jag, klumpfot, lyckades inte installera MySQL eller Postgres), s\u00e5 lagras data inte p\u00e5 det mest optimala s\u00e4ttet. Till exempel, varje g\u00e5ng ett enda litet digitalt parametrar \u00e4ndras, skrivs en enorm JSON p\u00e5 omkring en kilobyte in i databasen.\n<pre><code class=\"json\">{\"entity_id\": \"sensor.water_cold_hourly\", \"old_state\": {\"entity_id\": \"sensor.water_cold_hourly\", \"state\": \"3\", \"attributes\": {\"source\": \"sensor.water_meter_cold\", \"status\": \"collecting\", \"last_period\": \"29\", \"last_reset\": \"2020-02-23T21:00:00.022246+02:00\", \"meter_period\": \"hourly\", \"unit_of_measurement\": \"l\", \"friendly_name\": \"water_cold_hourly\", \"icon\": \"mdi:counter\"}, \"last_changed\": \"2020-02-23T19:05:06.897604+00:00\", \"last_updated\": \"2020-02-23T19:05:06.897604+00:00\", \"context\": {\"id\": \"aafc8ca305ba4e49ad4c97f0eddd8893\", \"parent_id\": null, \"user_id\": null}}, \"new_state\": {\"entity_id\": \"sensor.water_cold_hourly\", \"state\": \"4\", \"attributes\": {\"source\": \"sensor.water_meter_cold\", \"status\": \"collecting\", \"last_period\": \"29\", \"last_reset\": \"2020-02-23T21:00:00.022246+02:00\", \"meter_period\": \"hourly\", \"unit_of_measurement\": \"l\", \"friendly_name\": \"water_cold_hourly\", \"icon\": \"mdi:counter\"}, \"last_changed\": \"2020-02-23T19:11:11.251545+00:00\", \"last_updated\": \"2020-02-23T19:11:11.251545+00:00\", \"context\": {\"id\": \"0de64b8af6f14bb9a419dcf3b200ef56\", \"parent_id\": null, \"user_id\": null}}}<\/code><\/pre>\n<p>\nJag har ganska m\u00e5nga sensorer (temperatursensorer i varje rum, vatten- och elm\u00e4tare), och vissa genererar dessutom en hel del data. Till exempel genererar bara elm\u00e4ta SDM220 omkring ett dussin v\u00e4rden var 10-15 sekunder, och jag skulle vilja installera \u00e5tta s\u00e5dana. Dessutom finns det en hel bunt parametrar som ber\u00e4knas utifr\u00e5n andra sensorer. D\u00e4rf\u00f6r kan alla dessa v\u00e4rden l\u00e4tt f\u00e5 databasen att sv\u00e4lla med 100-200 MB dagligen. Efter en vecka kommer systemet att knappt fungera, och efter en m\u00e5nad kommer flashminnet att d\u00f6 (vid en typisk installation av Home Assistant p\u00e5 Raspberry Pi), och att lagra data ett helt \u00e5r \u00e4r helt uteslutet.<\/li>\n<li>Om du har tur kan din m\u00e4tare sj\u00e4lv r\u00e4kna f\u00f6rbrukningen. Du kan n\u00e4r som helst kontrollera m\u00e4taren och fr\u00e5ga vilket v\u00e4rde som har samlats. Vanligtvis har alla elr\u00e4knare med digitalt gr\u00e4nssnitt (RS232\/RS485\/Modbus\/Zigbee) denna m\u00f6jlighet.\n<p>Det \u00e4r s\u00e4mre om enheten bara kan m\u00e4ta n\u00e5got momentant v\u00e4rde (till exempel momentan effekt eller str\u00f6m), eller bara generera impulser var X watt-timmar eller liter. D\u00e5 m\u00e5ste man t\u00e4nka p\u00e5 hur och med vad man ska integrera detta och var man ska lagra v\u00e4rdet. Det finns en risk att man missar en rapport av n\u00e5gon anledning, och systemets noggrannhet v\u00e4cker ocks\u00e5 fr\u00e5gor. Man kan f\u00f6rst\u00e5s \u00f6verl\u00e5ta allt detta till ett smart hem-system som home assistant, men punkten om antalet poster i databasen \u00e4r ingen irrelevant fr\u00e5ga, och man kan inte fr\u00e5ga sensorer oftare \u00e4n en g\u00e5ng i sekunder (en begr\u00e4nsning i home assistant-arkitekturen).<\/li>\n<\/ul>\n<p><\/p>\n<h2>Tillv\u00e4gag\u00e5ngss\u00e4tt 1<\/h2>\n<p>\nL\u00e5t oss f\u00f6rst titta p\u00e5 vad home assistant erbjuder ur l\u00e5dan. M\u00e4tning av f\u00f6rbrukning \u00f6ver en period \u00e4r en mycket efterfr\u00e5gad funktion. Sj\u00e4lvklart har det l\u00e4nge funnits i form av en specialiserad komponent \u2014 utility_meter. <\/p>\n<p>K\u00e4rnan i komponenten \u00e4r att den internt skapar en variabel current_accumulated_value och \u00e5terst\u00e4ller den efter en angiven period (timme\/vecka\/m\u00e5nad). Komponenten \u00f6vervakar sj\u00e4lv den inkommande variabeln (v\u00e4rdet fr\u00e5n en sensor) och prenumererar p\u00e5 f\u00f6r\u00e4ndringar \u2014 du f\u00e5r helt enkelt ett f\u00e4rdigt resultat. Detta beskrivs med bara n\u00e5gra rader i konfigurationsfilen.<\/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>\nH\u00e4r \u00e4r sensor.water_meter_cold det aktuella v\u00e4rdet p\u00e5 m\u00e4taren i liter, som jag f\u00e5r <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/411259\/\">direkt fr\u00e5n enheten<\/a><\/noindex> via mqtt. Konstruktionen skapar 2 nya sensorer water_cold_hour_um och water_cold_day_um, som samlar p\u00e5 sig tim- och dygnsv\u00e4rden, och nollst\u00e4ller dem efter att perioden har g\u00e5tt. H\u00e4r \u00e4r grafen f\u00f6r timsamlaren under en halv dag.<\/p>\n<p><img decoding=\"async\" alt=\"Smart hem: Skapa diagram f\u00f6r vatten- och elf\u00f6rbrukning i Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/d3c3ea29c10b17142e51ebe756ab7123.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKoden f\u00f6r tim- och dygnsgraferna f\u00f6r lovelace-UI ser ut s\u00e5 h\u00e4r:<\/p>\n<pre><code class=\"python\">      - type: history-graph\n        title: 'Timlig vattenf\u00f6rbrukning med hj\u00e4lp av variabler'\n        hours_to_show: 48\n        entities:\n          - sensor.water_hour\n\n      - type: history-graph\n        title: 'Daglig vattenf\u00f6rbrukning med hj\u00e4lp av variabler'\n        hours_to_show: 360\n        entities:\n          - sensor.water_day\n<\/code><\/pre>\n<p>\nEgentligen \u00e4r det h\u00e4r algoritmen som d\u00f6ljer problemet med denna metod. Som jag n\u00e4mnde tidigare genereras det 1 kB data f\u00f6r varje inkommande v\u00e4rde (nuvarande m\u00e4taravl\u00e4sning f\u00f6r varje liter som f\u00f6ljer). Varje utility meter genererar ocks\u00e5 ett nytt v\u00e4rde som l\u00e4ggs till i databasen. Om jag vill samla in tim-, dags-, veck- eller m\u00e5nadsavl\u00e4sningar, ja \u00e4ven fr\u00e5n flera vattencirklar, och dessutom l\u00e4gga till en bunt med elr\u00e4knare \u2014 kommer det bli v\u00e4ldigt mycket data. Tja, datam\u00e4ngden kanske inte \u00e4r s\u00e5 stor, men eftersom home assistant skriver massa on\u00f6dig information till databasen kommer databasen att v\u00e4xa snabbt. Jag v\u00e5gar knappt uppskatta storleken p\u00e5 databasen f\u00f6r veckovisa och m\u00e5natliga grafer.<\/p>\n<p>Ut\u00f6ver detta l\u00f6ser sj\u00e4lva utility meter inte den uppsatta uppgiften. Grafen \u00f6ver de v\u00e4rden som utility meter ger \u00e4r en monoton v\u00e4xande funktion som \u00e5terst\u00e4lls till 0 varje timme. Vi beh\u00f6ver en anv\u00e4ndarv\u00e4nlig graf som visar hur m\u00e5nga liter som har anv\u00e4nts under en viss period. Den standardkomponenten history-graph klarar inte detta, men en extern komponent mini-graph-card kan hj\u00e4lpa oss.<\/p>\n<p>Detta \u00e4r koden f\u00f6r kortet f\u00f6r 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;Timlig vattenf\u00f6rbrukning aggregerad av utility meter&quot;\n        points_per_hour: 1\n        show:\n          graph: bar\n        type: 'custom:mini-graph-card'<\/code><\/pre>\n<p>\nUt\u00f6ver standardinst\u00e4llningarna som namn p\u00e5 sensorn, typ av graf, f\u00e4rg (den standardorangea gillade jag inte) \u00e4r det viktigt att notera 3 inst\u00e4llningar:<\/p>\n<ul>\n<li>group_by:hour \u2014 grafen kommer att genereras med kolumnerna justerade vid timmens b\u00f6rjan<\/li>\n<li>points_per_hour: 1 \u2014 en kolumn f\u00f6r varje timme<\/li>\n<li>Och det viktigaste, aggregate_func: max \u2014 ta det maximala v\u00e4rdet inom varje timme. Just denna parameter g\u00f6r att den s\u00e5gstudsande grafen blir kolumner.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Smart hem: Skapa diagram f\u00f6r vatten- och elf\u00f6rbrukning i Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/5bd866c39b23299e5f15dcf4a9bce38f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAnalysera inte kolumnerna till v\u00e4nster \u2014 det \u00e4r standardbeteendet f\u00f6r komponenten om det inte finns data. Och det fanns ingen data \u2014 jag aktiverade just datainsamlingen fr\u00e5n utility meter f\u00f6r denna artikel (min nuvarande metod beskriver jag strax nedan). <\/p>\n<p>P\u00e5 denna bild ville jag visa att ibland fungerar datavisningen \u00e4ven, och staplarna speglar faktiskt r\u00e4tt v\u00e4rden. Men l\u00e5ngt ifr\u00e5n alla. Den markerade stapeln f\u00f6r intervallet mellan 11 och 12 p\u00e5 f\u00f6rmiddagen visar av n\u00e5gon anledning 19 liter, medan vi p\u00e5 den taggiga grafiken strax ovanf\u00f6r f\u00f6r samma period fr\u00e5n samma sensor ser en konsumtion p\u00e5 62 liter. Antingen en bugg eller s\u00e5 \u00e4r det n\u00e5got fel p\u00e5 anv\u00e4ndaren. Jag har \u00e4nnu inte f\u00f6rst\u00e5tt varf\u00f6r data till h\u00f6ger br\u00f6ts \u2014 konsumtionen var normal d\u00e4r, vilket ocks\u00e5 syns p\u00e5 den taggiga grafiken.<\/p>\n<p>\u00d6verlag har jag inte lyckats uppn\u00e5 n\u00e5gon trov\u00e4rdighet med den h\u00e4r metoden \u2014 grafiken visar n\u00e4stan alltid n\u00e5got nonsens.<\/p>\n<p>Liknande kod f\u00f6r daglig sensor. <\/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: \"Daglig vattenf\u00f6rbrukning aggregerad av nyttjande m\u00e4tare\"\n        points_per_hour: 0.0416666666\n        show:\n          graph: bar\n        type: 'custom:mini-graph-card'\n<\/code><\/pre>\n<p>\nObservera att parameter group_by \u00e4r inst\u00e4lld p\u00e5 v\u00e4rdet interval, och den styr hela parameter points_per_hour. Och h\u00e4r ligger ett annat problem med den h\u00e4r komponenten \u2014 points_per_hour fungerar bra p\u00e5 diagram f\u00f6r en timme eller mindre, men d\u00e5ligt p\u00e5 l\u00e4ngre intervall. F\u00f6r att f\u00e5 en stapel f\u00f6r en dag var jag tvungen att skriva v\u00e4rdet 1\/24=0.04166666. Jag n\u00e4mner inte ens veckodiagram och m\u00e5nadsdiagram.<\/p>\n<h2>Metod 2<\/h2>\n<p>\n\u00c4n s\u00e5 l\u00e4nge, n\u00e4r jag bara l\u00e4r mig home assistant, snubblade jag \u00f6ver denna 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=\"Spela video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nEn v\u00e4n samlar in konsumtionsdata fr\u00e5n flera typer av Xiaomi-uttag. Hans uppgift \u00e4r lite enklare \u2014 att bara visa konsumtionsv\u00e4rdet f\u00f6r idag, ig\u00e5r och f\u00f6r m\u00e5naden. Inga diagram beh\u00f6vs. <\/p>\n<p>L\u00e5t oss l\u00e4mna diskussionerna om manuell integrering av \u00f6gonblickliga effektv\u00e4rden \u00e5t sidan \u2014 om \"noggrannheten\" i den metoden har jag redan skrivit ovan. Det \u00e4r inte klart varf\u00f6r han inte anv\u00e4nde de ackumulerade konsumtionsv\u00e4rdena som redan samlas in av samma uttag. Enligt min \u00e5sikt kommer integrering inuti enheten att fungera b\u00e4ttre. <\/p>\n<p>Fr\u00e5n videon tar vi id\u00e9n om manuell ber\u00e4kning av konsumtion \u00f6ver en period. Mannen ber\u00e4knar endast v\u00e4rdena f\u00f6r idag och ig\u00e5r, men vi t\u00e4nker g\u00e5 l\u00e4ngre och f\u00f6rs\u00f6ka rita en graf. Huvudsyftet med den f\u00f6reslagna metoden i mitt fall \u00e4r f\u00f6ljande.<\/p>\n<p>Vi skapar en variabel v\u00e4rde_i_b\u00f6rjan_av_timmen, d\u00e4r vi skriver in de aktuella m\u00e4tningarna fr\u00e5n m\u00e4taren.<br \/>\nVid tidsinst\u00e4llningen i slutet av timmen (eller i b\u00f6rjan av n\u00e4sta) kommer vi att ber\u00e4kna skillnaden mellan det aktuella v\u00e4rdet och det som sparades i b\u00f6rjan av timmen. Denna skillnad blir f\u00f6rbrukningen f\u00f6r den aktuella timmen \u2014 vi sparar v\u00e4rdet i sensorn, och i framtiden kommer vi anv\u00e4nda detta v\u00e4rde f\u00f6r att skapa en graf. <br \/>\nVi beh\u00f6ver ocks\u00e5 \"nollst\u00e4lla\" variabeln v\u00e4rde_i_b\u00f6rjan_av_timmen genom att skriva in det aktuella v\u00e4rdet av r\u00e4knaren d\u00e4r.<\/p>\n<p>Detta kan g\u00f6ras genom h&#8230; medel av home assistant sj\u00e4lv. <\/p>\n<p>Koden kommer att bli n\u00e5got l\u00e4ngre \u00e4n i det tidigare tillv\u00e4gag\u00e5ngss\u00e4ttet. F\u00f6rst kommer vi att skapa dessa \"variabler\". Fr\u00e5n b\u00f6rjan har vi ingen \"variabel\"-enhet, men vi kan anv\u00e4nda tj\u00e4nsterna fr\u00e5n mqtt-brokern. Vi kommer att skicka v\u00e4rden dit med flaggan retain=true \u2014 detta sparar v\u00e4rdet inom broker, och vi kan dra ut det n\u00e4r som helst, \u00e4ven vid omstart av home assistant. Jag skapade b\u00e5de tim- och dagsr\u00e4knare.<\/p>\n<pre><code class=\"python\">- plattform: mqtt\n  state_topic: \"test\/water\/hour\"\n  name: water_hour\n  unit_of_measurement: l\n\n- plattform: mqtt\n  state_topic: \"test\/water\/hour_begin\"\n  name: water_hour_begin\n  unit_of_measurement: l\n\n- plattform: mqtt\n  state_topic: \"test\/water\/day\"\n  name: water_day\n  unit_of_measurement: l\n\n- plattform: mqtt\n  state_topic: \"test\/water\/day_begin\"\n  name: water_day_begin\n  unit_of_measurement: l<\/code><\/pre>\n<p>\nAll magi sker i automatiseringen, som k\u00f6rs varje timme och varje natt.<\/p>\n<pre><code class=\"python\">- id: water_new_hour\n  alias: water_new_hour\n  initial_state: true\n  trigger:\n    - plattform: 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    - plattform: 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>\nB\u00e5da automatiseringarna utf\u00f6r 2 \u00e5tg\u00e4rder:<\/p>\n<ul>\n<li>Ber\u00e4knar v\u00e4rdet f\u00f6r intervallet som skillnaden mellan det initiala och det slutliga v\u00e4rdet<\/li>\n<li>Uppdaterar grundv\u00e4rdet f\u00f6r n\u00e4sta intervall<\/li>\n<\/ul>\n<p>\nGrafbyggandet l\u00f6ses h\u00e4r med en vanlig history-graph:<\/p>\n<pre><code class=\"python\">      - type: history-graph\n        title: 'Timlig vattenf\u00f6rbrukning med hj\u00e4lp av variabler'\n        hours_to_show: 48\n        entities:\n          - sensor.water_hour\n\n      - type: history-graph\n        title: 'Daglig vattenf\u00f6rbrukning med hj\u00e4lp av variabler'\n        hours_to_show: 360\n        entities:\n          - sensor.water_day<\/code><\/pre>\n<p>\nS\u00e5 h\u00e4r ser det ut:<\/p>\n<p><img decoding=\"async\" alt=\"Smart hem: Skapa diagram f\u00f6r vatten- och elf\u00f6rbrukning i Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/ebde2fc5f0a72d7d6ba565c3686dc9c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDetta \u00e4r i grunden det som beh\u00f6vs. F\u00f6rdelen med denna metod \u00e4r att datan genereras en g\u00e5ng per intervall. D.v.s. totalt 24 poster per dygn f\u00f6r tim-grafen. <\/p>\n<p>Tyv\u00e4rr l\u00f6ser det fortfarande inte det \u00f6vergripande problemet med den v\u00e4xande databasen. Om jag vill ha en m\u00e5natlig konsumtionsgraf m\u00e5ste jag lagra data i minst ett \u00e5r. Eftersom home assistant endast tillhandah\u00e5ller en inst\u00e4llning f\u00f6r lagringsl\u00e4ngd f\u00f6r hela databasen, inneb\u00e4r det att ALLA data i systemet m\u00e5ste lagras i ett helt \u00e5r. Till exempel f\u00f6rbrukar jag 200 kubikmeter vatten p\u00e5 ett \u00e5r, vilket inneb\u00e4r att det blir 200000 poster i databasen. Och om man ocks\u00e5 r\u00e4knar in andra sensorer blir siffran rent av oacceptabel.<\/p>\n<h2>Tillv\u00e4gag\u00e5ngss\u00e4tt 3<\/h2>\n<p>\nSom tur \u00e4r har kloka m\u00e4nniskor redan l\u00f6st detta problem genom att skriva databasen InfluxDB. Denna databas \u00e4r speciellt optimerad f\u00f6r lagring av tidsbaserade data och \u00e4r perfekt f\u00f6r att lagra v\u00e4rden fr\u00e5n olika sensorer. Systemet tillhandah\u00e5ller ocks\u00e5 ett SQL-liknande fr\u00e5gespr\u00e5k som g\u00f6r det m\u00f6jligt att h\u00e4mta v\u00e4rden fr\u00e5n databasen och sedan aggregera dem p\u00e5 olika s\u00e4tt. Slutligen kan olika data lagras under olika l\u00e5ng tid. Till exempel kan ofta f\u00f6r\u00e4nderliga m\u00e4tningar som temperatur eller fuktighet lagras i bara ett par veckor, medan dagliga vattenf\u00f6rbrukningsm\u00e4tningar kan lagras i ett helt \u00e5r.<\/p>\n<p>F\u00f6rutom InfluxDB har kloka m\u00e4nniskor ocks\u00e5 uppfunnit Grafana \u2014 ett system f\u00f6r att skapa diagram \u00f6ver data fr\u00e5n InfluxDB. Grafana kan skapa olika typer av diagram, detaljcustomisera dem, och viktigast av allt, dessa diagram kan \u201dinstallera\u201d p\u00e5 lovelace-UI f\u00f6r home assistant.<\/p>\n<p>Inspireras <noindex><a rel=\"nofollow\" href=\"https:\/\/dummylabs.com\/ru\/post\/2019-01-13-influxdb-part1\/\">). Ett typiskt exempel p\u00e5 anv\u00e4ndning: <\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"https:\/\/dummylabs.com\/ru\/post\/2019-05-28-influxdb-part2\/\">). Ett typiskt exempel p\u00e5 anv\u00e4ndning:<\/a><\/noindex>. Artiklarna beskriver processen f\u00f6r installation och anslutning av InfluxDB och Grafana till home assistant i detalj. Jag kommer att fokusera p\u00e5 att l\u00f6sa mitt specifika problem.<\/p>\n<p>S\u00e5, f\u00f6rst b\u00f6rjar vi med att spara v\u00e4rdet fr\u00e5n m\u00e4taren i InfluxDB. En del av konfigurationen f\u00f6r home assistant (i detta exempel kommer jag att leka med b\u00e5de kallt och varmt vatten):<\/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>\nVi st\u00e4nger av lagringen av dessa samma data i home assistants interna databas f\u00f6r att inte \u00f6verbelasta den i on\u00f6dan:<\/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>\nNu g\u00e5r vi till InfluxDB-konsolen och st\u00e4ller in v\u00e5r databas. Specifikt m\u00e5ste vi best\u00e4mma hur l\u00e4nge olika typer av data ska lagras. Detta regleras av den s\u00e5 kallade retention policy \u2014 det liknar databaser inom den prim\u00e4ra databasen, d\u00e4r varje intern databas har sina egna inst\u00e4llningar. Som standard lagras all data i retention policy med namnet autogen, och dessa data kommer att lagras under en vecka. Jag skulle vilja att timdata lagras i en m\u00e5nad, veckodata i ett \u00e5r och att m\u00e5natliga data aldrig tas bort. L\u00e5t oss skapa motsvarande retention policies.<\/p>\n<pre><code class=\"sql\">CREATE RETENTION POLICY \"month\" ON \"homeassistant\" DURATION 30d REPLICATION 1\nCREATE RETENTION POLICY \"year\" ON \"homeassistant\" DURATION 52w REPLICATION 1\nCREATE RETENTION POLICY \"infinite\" ON \"homeassistant\" DURATION INF REPLICATION 1<\/code><\/pre>\n<p>\nNu till sj\u00e4lva huvudnumret \u2014 datagreggation med hj\u00e4lp av continuous query. Detta \u00e4r en mekanism som automatiskt k\u00f6r en fr\u00e5ga med angivna tidsintervall, aggregerar data enligt denna fr\u00e5ga, och lagrar resultatet som ett nytt v\u00e4rde. L\u00e5t oss ta ett exempel (jag skriver i kolumner f\u00f6r l\u00e4sbarhet, men i verkligheten tvingades jag skriva denna kommando p\u00e5 en rad)<\/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>\nDenna kommando:<\/p>\n<ul>\n<li>Skapar en continuous query med namnet cq_water_cold_hourly i databasen homeassistant<\/li>\n<li>Fr\u00e5gan kommer att k\u00f6ras varje timme (time(1h))<\/li>\n<li>Fr\u00e5gan kommer att h\u00e4mta all data fr\u00e5n measurementen homeassistant.autogen.l (liter), inklusive m\u00e4tningar av kallt och varmt vatten<\/li>\n<li>De aggregerade data kommer att grupperas efter entity_id, vilket skapar separata v\u00e4rden f\u00f6r kallt och varmt vatten<\/li>\n<li>Eftersom liter-m\u00e4taren \u00e4r en monoton v\u00e4xande sekvens inom varje timme, beh\u00f6ver vi ta det maximala v\u00e4rdet, s\u00e5 aggregeringen kommer att ske med hj\u00e4lp av funktionen max(value) <\/li>\n<li>Det nya v\u00e4rdet kommer att skrivas till homeassistant.month.water_meter_hour, d\u00e4r month \u00e4r namnet p\u00e5 retention policy med en lagringstid p\u00e5 en m\u00e5nad. Data f\u00f6r kallt och varmt vatten kommer att spridas i separata poster med motsvarande entity_id och v\u00e4rde i f\u00e4ltet value<\/li>\n<\/ul>\n<p>\nP\u00e5 natten eller n\u00e4r ingen \u00e4r hemma finns det ingen vattenf\u00f6rbrukning, och d\u00e4rmed inga nya poster i homeassistant.autogen.l. F\u00f6r att undvika saknade v\u00e4rden i normala fr\u00e5gor kan man anv\u00e4nda fill(previous). Detta f\u00e5r InfluxDB att anv\u00e4nda v\u00e4rdet fr\u00e5n f\u00f6reg\u00e5ende timme. <\/p>\n<p>Tyv\u00e4rr har kontinuerlig fr\u00e5ga en speciell egenskap: trickfill(previous) fungerar inte och poster skapas helt enkelt inte. Detta \u00e4r ett ofr\u00e5nkomligt problem som <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/influxdata\/influxdb\/issues\/3220\">har diskuterats i flera \u00e5r nu<\/a><\/noindex>. Vi kommer att hantera det h\u00e4r problemet senare, och fill(previous) i kontinuerlig fr\u00e5ga f\u00e5r vara \u2014 det st\u00f6r inte. <\/p>\n<p>L\u00e5t oss kontrollera vad vi har f\u00e5tt (sj\u00e4lvklart beh\u00f6ver vi v\u00e4nta ett par timmar):<\/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>\nObservera att v\u00e4rdena i databasen sparas i UTC, s\u00e5 v\u00e4rdena i denna lista skiljer sig med 3 timmar \u2014 v\u00e4rdena f\u00f6r 7 p\u00e5 morgonen i InfluxDB-utmatningen motsvarar v\u00e4rdena f\u00f6r 10 p\u00e5 morgonen i graferna ovan. T\u00e4nk ocks\u00e5 p\u00e5 att det mellan 2 och 5 p\u00e5 morgonen helt enkelt inte finns n\u00e5gra poster \u2014 detta \u00e4r just den speciella egenskapen hos kontinuerlig fr\u00e5ga.<\/p>\n<p>Som du ser \u00e4r det aggregerade v\u00e4rdet ocks\u00e5 en monoton v\u00e4xande sekvens, men posterna kommer mer s\u00e4llan \u2014 en g\u00e5ng i timmen. Men det \u00e4r inget problem \u2014 vi kan skriva en ny fr\u00e5ga som h\u00e4mtar r\u00e4tt data f\u00f6r grafen.<\/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>\nJag ska f\u00f6rklara:<\/p>\n<ul>\n<li>Vi kommer att dra data f\u00f6r entity_id='water_meter_cold' fr\u00e5n databasen homeassistant.month.water_meter_hour f\u00f6r de senaste 24 timmarna (time &gt;= now() -24h). <\/li>\n<li>Som jag redan n\u00e4mnt kan vissa poster saknas i sekvensen homeassistant.month.water_meter_hour. Dessa data kommer vi att \u00e5terskapa genom att k\u00f6ra en fr\u00e5ga med GROUP BY time(1h). Denna g\u00e5ng kommer fill(previous) att fungera som det ska och generera de saknade uppgifterna (funktionen kommer att ta det f\u00f6reg\u00e5ende v\u00e4rdet)<\/li>\n<li>Det viktigaste i denna fr\u00e5ga \u00e4r funktionen difference, som kommer att ber\u00e4kna skillnaden mellan de timvisa punkterna. Den fungerar inte p\u00e5 egen hand och kr\u00e4ver en aggregerande funktion. L\u00e5t oss anv\u00e4nda max() som vi anv\u00e4nde tidigare.<\/li>\n<\/ul>\n<p>\nResultatet av exekveringen ser ut s\u00e5 h\u00e4r<\/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>\nFr\u00e5n klockan 2 till 5 p\u00e5 morgonen (UTC) var det inget f\u00f6rbrukning. \u00c4nd\u00e5 kommer f\u00f6rfr\u00e5gan att returnera samma v\u00e4rde p\u00e5 f\u00f6rbrukningen tack vare fill(previous), och funktionen difference kommer att subtrahera detta v\u00e4rde fr\u00e5n sig sj\u00e4lv, vilket ger 0, vilket \u00e4r precis vad som kr\u00e4vs.<\/p>\n<p>Nu \u00e5terst\u00e5r bara att bygga diagrammet. F\u00f6r detta \u00f6ppnar vi Grafana, \u00f6ppnar ett befintligt (eller skapar ett nytt) dashboard och skapar en ny panel. Inst\u00e4llningarna f\u00f6r diagrammen kommer att vara s\u00e5dana.<\/p>\n<p><img decoding=\"async\" alt=\"Smart hem: Skapa diagram f\u00f6r vatten- och elf\u00f6rbrukning i Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/c6f551590cd141438b644b24aa4ddebf.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJag kommer att visa data f\u00f6r kallt och varmt vatten i samma diagram. F\u00f6rfr\u00e5gan \u00e4r exakt densamma som jag beskrev ovan. <\/p>\n<p>Visningsparametrarna st\u00e4lls in s\u00e5 h\u00e4r. H\u00e4r kommer det att vara ett linjediagram (lines) som g\u00e5r i steg (stairs). Parametern Stack f\u00f6rklarar jag lite l\u00e4ngre ner. D\u00e4r finns ytterligare n\u00e5gra visningsparametrar, men de \u00e4r inte lika intressanta.<\/p>\n<p><img decoding=\"async\" alt=\"Smart hem: Skapa diagram f\u00f6r vatten- och elf\u00f6rbrukning i Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/cb47fc8570b7fd1305ce3451e0518f11.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nF\u00f6r att l\u00e4gga till det resulterande diagrammet i home assistant beh\u00f6ver du:<\/p>\n<ul>\n<li>g\u00e5 ur redigeringsl\u00e4get f\u00f6r diagrammet. Av n\u00e5gon anledning f\u00f6resl\u00e5s r\u00e4tt inst\u00e4llningar f\u00f6r delning av diagram endast fr\u00e5n dashboard-sidan.<\/li>\n<li>Klicka p\u00e5 triangeln bredvid diagrammets namn och v\u00e4lj share i menyn.<\/li>\n<li>I det \u00f6ppna f\u00f6nstret g\u00e5r du till fliken embed.<\/li>\n<li>Ta bort markeringen i current time range \u2014 tidsintervallet kommer vi att definiera via URL. <\/li>\n<li>V\u00e4lj det \u00f6nskade temat. I mitt fall \u00e4r det light.<\/li>\n<li>Kopiera den resulterande URL:en till inst\u00e4llningskortet f\u00f6r 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>\nObservera att tidsintervallet (de senaste 2 dagarna) anges just h\u00e4r, och inte i inst\u00e4llningarna f\u00f6r dashboard. <\/p>\n<p>Diagrammet ser ut s\u00e5 h\u00e4r. Jag har inte anv\u00e4nt varmt vatten de senaste 2 dagarna, s\u00e5 endast diagrammet f\u00f6r kallt vatten ritas.<\/p>\n<p><img decoding=\"async\" alt=\"Smart hem: Skapa diagram f\u00f6r vatten- och elf\u00f6rbrukning i Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/d18c82712d3b829a97ada8c8e2adce24.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJag har fortfarande inte best\u00e4mt mig f\u00f6r vilket diagram jag gillar mest, stegdiagrammet eller riktiga staplar. S\u00e5 jag kommer helt enkelt att ge ett exempel p\u00e5 ett dagligt konsumtionsdiagram, denna g\u00e5ng med staplar. F\u00f6rfr\u00e5gningarna byggs p\u00e5 samma s\u00e4tt som beskrivits ovan. Visningsparametrarna \u00e4r f\u00f6ljande:<\/p>\n<p><img decoding=\"async\" alt=\"Smart hem: Skapa diagram f\u00f6r vatten- och elf\u00f6rbrukning i Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/557297e666f9cd73c3d2aa2fd80c0a2d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDetta diagram ser ut s\u00e5 h\u00e4r:<\/p>\n<p><img decoding=\"async\" alt=\"Smart hem: Skapa diagram f\u00f6r vatten- och elf\u00f6rbrukning i Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/ac8c53569c6b05aeb22e05969de4cd6d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nS\u00e5, ang\u00e5ende parametern Stack. I det h\u00e4r diagrammet ritas stapeln f\u00f6r kallt vatten ovanp\u00e5 stapeln f\u00f6r varmt vatten. Den totala h\u00f6jden motsvarar den sammanlagda f\u00f6rbrukningen av kallt och varmt vatten under perioden. <\/p>\n<p>Alla visade diagram \u00e4r dynamiska. Du kan f\u00f6ra musen \u00f6ver den intressanta punkten f\u00f6r att se detaljer och v\u00e4rdet vid just den punkten. <\/p>\n<p>Tyv\u00e4rr har vi st\u00f6tt p\u00e5 n\u00e5gra problem. P\u00e5 stapeldiagrammet (till skillnad fr\u00e5n linjediagrammet) ligger mitten av stapeln inte i mitten av dygnet, utan vid 00:00. Det vill s\u00e4ga, v\u00e4nstra halvan av stapeln ritas p\u00e5 platsen fr\u00e5n f\u00f6reg\u00e5ende dag. S\u00e5 diagrammen f\u00f6r l\u00f6rdagen och s\u00f6ndagen ritas n\u00e5got l\u00e4ngre till v\u00e4nster \u00e4n den bl\u00e5aktiga zonen. Jag har \u00e4nnu inte kommit p\u00e5 hur jag ska l\u00f6sa detta. <\/p>\n<p>Ett annat problem \u00e4r of\u00f6rm\u00e5gan att korrekt hantera m\u00e5natliga intervall. Problemet \u00e4r att l\u00e4ngden p\u00e5 en timme\/dag\/vecka \u00e4r fast, medan l\u00e4ngden p\u00e5 en m\u00e5nad alltid \u00e4r olika. InfluxDB kan bara arbeta med lika intervall. Hittills har jag kunnat st\u00e4lla in ett fast intervall p\u00e5 30 dagar. Ja, diagrammet kommer att bli lite snett under \u00e5ret och staplarna kommer inte helt exakt att motsvara m\u00e5naderna. Men eftersom jag \u00e4r intresserad av detta som en slags visare \u00e4r jag okej med det. <\/p>\n<p>Jag ser minst tv\u00e5 l\u00f6sningar:<\/p>\n<ul>\n<li>Satsa p\u00e5 veckodiagram och begr\u00e4nsa oss till veckor. 52 veckostaplar per \u00e5r ser ganska bra ut.<\/li>\n<li>Ber\u00e4kna m\u00e5nadsf\u00f6rbrukning som metod nummer tv\u00e5 och anv\u00e4nd Grafana bara f\u00f6r snygga diagram. Det kommer att bli en ganska exakt l\u00f6sning. Man kan till och med \u00f6verlagra diagrammen fr\u00e5n f\u00f6rra \u00e5ret f\u00f6r j\u00e4mf\u00f6relse \u2013 Grafana klarar \u00e4ven av det.<\/li>\n<\/ul>\n<h2>Slutsats<\/h2>\n<p>\nJag vet inte varf\u00f6r, men jag \u00e4r f\u00f6rtjust i denna typ av diagram. De visar att livet \u00e4r aktivt och att allt f\u00f6r\u00e4ndras. Ig\u00e5r var det mycket, idag \u00e4r det lite, och imorgon kommer det att bli p\u00e5 n\u00e5got annat s\u00e4tt. Jag m\u00e5ste bara samarbeta med familjen ang\u00e5ende f\u00f6rbrukningen. Men \u00e4ven med de nuvarande beg\u00e4ren f\u00f6rvandlas helt enkelt det stora och sv\u00e5rbegripliga beloppet p\u00e5 r\u00e4kningen till en ganska f\u00f6rst\u00e5elig bild av f\u00f6rbrukningen.<\/p>\n<p>Trots n\u00e4stan 20 \u00e5r som programmerare har jag knappt haft n\u00e5gon kontakt med databaser. D\u00e4rf\u00f6r k\u00e4ndes installationen av en extern databas som n\u00e5got f\u00f6r abstrakt och oklart. Allt f\u00f6r\u00e4ndrades av <noindex><a rel=\"nofollow\" href=\"https:\/\/dummylabs.com\/ru\/post\/2019-01-13-influxdb-part1\">den ovan n\u00e4mnda artikeln.<\/a><\/noindex> det visade sig att kopplingen av ett l\u00e4mpligt verktyg g\u00f6rs med n\u00e5gra klick, och med ett specialiserat verktyg blir uppgiften att bygga diagram lite enklare.<\/p>\n<p>I rubriken n\u00e4mnde jag elf\u00f6rbrukning. Tyv\u00e4rr kan jag f\u00f6r tillf\u00e4llet inte visa n\u00e5gra diagram. En SDM120-m\u00e4tare har g\u00e5tt s\u00f6nder, och den andra fungerar d\u00e5ligt vid Modbus-anslutning. Men detta p\u00e5verkar inte temat f\u00f6r denna artikel \u2014 diagrammen kommer att byggas p\u00e5 samma s\u00e4tt som f\u00f6r vatten.<\/p>\n<p>I den h\u00e4r artikeln har jag presenterat de metoder jag sj\u00e4lv har pr\u00f6vat. Det finns s\u00e4kert fler s\u00e4tt att organisera insamling och visualisering av data som jag inte k\u00e4nner till. Ber\u00e4tta g\u00e4rna f\u00f6r mig i kommentarerna, jag skulle vara mycket intresserad. Jag v\u00e4lkomnar konstruktiv kritik och nya id\u00e9er. Jag hoppas att det presenterade materialet ocks\u00e5 kan hj\u00e4lpa n\u00e5gon.<br \/>\n<br \/>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/492314\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u043e\u043b\u0443\u0447\u0430\u044f \u043f\u043b\u0430\u0442\u0435\u0436\u043a\u0443 \u0437\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438 \u0432\u043e\u0434\u0443 \u044f \u0443\u0434\u0438\u0432\u043b\u044f\u044e\u0441\u044c \u2014 \u043d\u0435\u0443\u0436\u0435\u043b\u0438 \u043c\u043e\u044f \u0441\u0435\u043c\u044c\u044f \u0441\u0442\u043e\u043e\u043e\u043e\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442? \u041d\u0443 \u0434\u0430, \u0432 \u0432\u0430\u043d\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0442\u0435\u043f\u043b\u044b\u0439 \u043f\u043e\u043b \u0438 \u0431\u043e\u0439\u043b\u0435\u0440, \u043d\u043e \u0432\u0435\u0434\u044c \u043e\u043d\u0438 \u0436\u0435 \u043d\u0435 \u043a\u043e\u0447\u0435\u0433\u0430\u0440\u044f\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e. \u0412\u043e\u0434\u0443 \u0442\u043e\u0436\u0435 \u0432\u0440\u043e\u0434\u0435 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043c (\u0445\u043e\u0442\u044f \u043f\u043e\u043f\u043b\u0435\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0432 \u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0436\u0435 \u043b\u044e\u0431\u0438\u043c). \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \u044f \u0443\u0436\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0438 \u0432\u043e\u0434\u044b \u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043a \u0443\u043c\u043d\u043e\u043c\u0443 \u0434\u043e\u043c\u0443, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":74422,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-74421","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/umnyj-dom-stroim-grafiki-potrebleniya-vody-i-elektrichestva-v-home-assistant\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47Smart Home: Bygger f\u00f6rbrukningsdiagram f\u00f6r vatten och elektricitet i Home Assistant | ProHoster","description":"Varje g\u00e5ng.","canonical_url":"https:\/\/prohoster.info\/sv\/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":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/74421","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=74421"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/74421\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/74422"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=74421"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=74421"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=74421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}