{"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\/it\/blog\/administrirovanie\/umnyj-dom-stroim-grafiki-potrebleniya-vody-i-elektrichestva-v-home-assistant","title":{"rendered":"Casa intelligente: Creiamo grafici sul consumo di acqua ed elettricit\u00e0 in Home Assistant","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Casa intelligente: Creiamo grafici sul consumo di acqua ed elettricit\u00e0 in Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/f1133a4c391e901ed64bf0825a774fc6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOgni volta che ricevo la bolletta per l'elettricit\u00e0 e l'acqua mi sorprendo: la mia famiglia consuma cos\u00ec tanto? Certo, abbiamo il riscaldamento a pavimento e un boiler in bagno, ma non \u00e8 che vadano a pieno regime tutto il tempo. Cerchiamo di risparmiare acqua (anche se ci piace fare un bel bagno). Negli ultimi anni ho gi\u00e0 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/411259\/\">collegato i contatori dell'acqua<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=XKvunh29sZo&amp;list=PLkt_cQxT0oUmfdxhbmTjytjaJjZjSVUOu\">dell'elettricit\u00e0<\/a><\/noindex> alla casa intelligente, ma l'analisi del consumo si \u00e8 fermata l\u00ec. Solo ora mi sono dedicato a questo, e infatti, ecco l'articolo.<\/p>\n<p>Di recente sono passato a Home Assistant come sistema di casa intelligente. Una delle ragioni \u00e8 stata proprio la possibilit\u00e0 di raccogliere grandi quantit\u00e0 di dati con l'opzione di creare vari grafici in modo comodo.<\/p>\n<p>Le informazioni descritte in questo articolo non sono nuove; tutte queste cose sono gi\u00e0 state descritte in vari modi su Internet. Tuttavia, ogni articolo di solito affronta solo un approccio o un aspetto specifico. Ho dovuto confrontare tutti questi approcci e scegliere quello pi\u00f9 adatto. L'articolo non offre informazioni esaustive sulla raccolta dei dati, ma \u00e8 una sorta di riassunto di come ho proceduto. Quindi, si accettano critiche costruttive e suggerimenti per miglioramenti.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Definizione del compito<\/h2>\n<p>\nQuindi, l'obiettivo di questo esercizio \u00e8 ottenere grafici belli sul consumo di acqua ed elettricit\u00e0:<\/p>\n<ul>\n<li>Orario per 2 giorni<\/li>\n<li>Giornaliere per 2 settimane<\/li>\n<li>(opzionale) settimanali e mensili<\/li>\n<\/ul>\n<p>\nQui ci troviamo di fronte a alcune difficolt\u00e0:<\/p>\n<ul>\n<li>I componenti standard dei grafici sono generalmente piuttosto scadenti. Al massimo, si pu\u00f2 costruire un grafico a linee basato su punti.\n<p>Se si cerca bene, \u00e8 possibile trovare componenti di terze parti che ampliano le capacit\u00e0 del grafico standard. Per home assistant, c'\u00e8 un componente abbastanza buono e bello chiamato <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kalkih\/mini-graph-card\">mini-graph-card<\/a><\/noindex>, ma anche questo ha alcune limitazioni:<\/p>\n<ul>\n<li>\u00c8 difficile impostare i parametri del grafico a barre su intervalli ampi (la larghezza della barra \u00e8 impostata in frazioni di ora, quindi intervalli pi\u00f9 lunghi di un'ora saranno rappresentati con numeri decimali)<\/li>\n<li>Non \u00e8 possibile aggiungere diverse entit\u00e0 a un unico grafico (ad esempio, temperatura e umidit\u00e0, o combinare un grafico a barre con una linea)<\/li>\n<\/ul>\n<\/li>\n<li>Non solo Home Assistant utilizza di default il database SQLite pi\u00f9 semplice, ma i dati sono anche conservati in modo non ottimale. Ad esempio, ad ogni modifica di ogni singolo parametro numerico, viene salvato un enorme JSON di circa un kilobyte nel database.\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>\nHo un bel po' di sensori (sensori di temperatura in ogni stanza, contatori d'acqua e di elettricit\u00e0), e alcuni di essi generano anche un sacco di dati. Ad esempio, solo il contatore elettrico SDM220 genera circa una decina di valori ogni 10-15 secondi, e vorrei installarne circa 8. Ci sono anche una serie di parametri che vengono calcolati sulla base di altri sensori. Di conseguenza, tutti questi valori possono facilmente gonfiare il database di 100-200 MB al giorno. Dopo una settimana, il sistema sar\u00e0 praticamente ingolfato, e dopo un mese la memoria flash smetter\u00e0 di funzionare (nel caso di una tipica installazione di Home Assistant su Raspberry Pi), e nemmeno si pu\u00f2 parlare di conservare i dati per un intero anno.<\/li>\n<li>Se sei fortunato, il tuo contatore \u00e8 in grado di calcolare autonomamente il consumo. Puoi rivolgersi al contatore in qualsiasi momento e chiedere quale sia il valore accumulato. Di solito, tutti i contatori di elettricit\u00e0 che hanno un'interfaccia digitale (RS232\/RS485\/Modbus\/Zigbee) offrono questa possibilit\u00e0.\n<p>\u00c8 problematico se un dispositivo pu\u00f2 semplicemente misurare un certo parametro istantaneo (ad esempio, potenza istantanea o corrente), o semplicemente generare impulsi ogni X watt-ora o litri. In tal caso, \u00e8 necessario riflettere su come e con cosa integrare questi dati e dove conservare il valore. C'\u00e8 il rischio di saltare un report per qualche motivo, ed anche l'accuratezza complessiva del sistema solleva delle domande. Certo, si potrebbe affidare tutto a un sistema di smart home come Home Assistant, ma il punto riguardo al numero di registrazioni nel database non pu\u00f2 essere ignorato, e non \u00e8 possibile interrogare i sensori pi\u00f9 frequentemente di una volta al secondo (limitazione dell'architettura di Home Assistant).<\/li>\n<\/ul>\n<p><\/p>\n<h2>Approccio 1<\/h2>\n<p>\nIniziamo a vedere cosa offre Home Assistant di default. La misurazione del consumo su un periodo \u00e8 una funzionalit\u00e0 molto richiesta. Naturalmente, \u00e8 stata implementata da tempo come componente specializzato: utility_meter. <\/p>\n<p>Il concetto principale del componente \u00e8 che al suo interno crea una variabile chiamata valore_totale_attuale e la resetta al termine di un periodo specifico (ora\/settimana\/mese). Il componente monitora autonomamente la variabile in ingresso (il valore di un sensore) e si iscrive ai cambiamenti di valore \u2014 tu ricevi semplicemente il risultato finale. Questa cosa \u00e8 descritta in poche righe nel file di configurazione.<\/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>\nQui sensor.water_meter_cold rappresenta l'attuale lettura del contatore in litri, che ricevo <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/411259\/\">direttamente dall'hardware<\/a><\/noindex> via mqtt. La costruzione crea 2 nuovi sensori water_cold_hour_um e water_cold_day_um, che accumulano i dati orari e giornalieri, azzerandoli al termine del periodo. Ecco il grafico dell'accumulatore orario per mezza giornata.<\/p>\n<p><img decoding=\"async\" alt=\"Casa intelligente: Creiamo grafici sul consumo di acqua ed elettricit\u00e0 in Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/d3c3ea29c10b17142e51ebe756ab7123.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl codice per i grafici orari e giornalieri per lovelace-UI \u00e8 il seguente:<\/p>\n<pre><code class=\"python\">      - type: history-graph\n        title: 'Consumo d'acqua orario usando variabili'\n        hours_to_show: 48\n        entities:\n          - sensor.water_hour\n\n      - type: history-graph\n        title: 'Consumo d'acqua giornaliero usando variabili'\n        hours_to_show: 360\n        entities:\n          - sensor.water_day\n<\/code><\/pre>\n<p>\nIn questo algoritmo risiede il problema di questo approccio. Come ho gi\u00e0 accennato, per ogni valore in ingresso (la lettura attuale del contatore per ogni litro successivo) viene generato 1 KB di registrazione nel database. Ogni utility meter genera anche un nuovo valore, che viene aggiunto al database. Se voglio raccogliere letture orarie\/giornaliere\/settimanali\/mensili, oltre a diversi gruppi di contatori dell'acqua, aggiungendo anche una serie di contatori elettrici, ci saranno davvero moltissimi dati. In effetti, i dati non sono tanti, ma poich\u00e9 home assistant scrive una quantit\u00e0 enorme di informazioni nel database, la dimensione del database crescer\u00e0 in modo esponenziale. Ho paura anche solo di ipotizzare la dimensione del database per grafici settimanali e mensili.<\/p>\n<p>In aggiunta, l'utility meter di per s\u00e9 non risolve il compito assegnato. Il grafico dei valori forniti dall'utility meter \u00e8 una funzione monotonamente crescente, che si azzera ogni ora. Ci\u00f2 di cui abbiamo bisogno \u00e8 un grafico di consumo comprensibile per l'utente, che mostri quanti litri sono stati consumati durante un periodo. Il componente standard history-graph non riesce a farlo, ma possiamo utilizzare il componente esterno mini-graph-card.<\/p>\n<p>Ecco il codice della scheda per 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: \"Consumo d'acqua orario aggregato per contatore\"\n        points_per_hour: 1\n        show:\n          graph: bar\n        type: 'custom:mini-graph-card'<\/code><\/pre>\n<p>\nOltre alle impostazioni standard come il nome del sensore, il tipo di grafico, il colore (l'arancione standard non mi piace), qui \u00e8 importante notare 3 impostazioni:<\/p>\n<ul>\n<li>group_by:hour \u2014 il grafico verr\u00e0 generato allineando le barre all'inizio dell'ora<\/li>\n<li>points_per_hour: 1 \u2014 una barra per ogni ora<\/li>\n<li>E la cosa pi\u00f9 importante, aggregate_func: max \u2014 prendere il valore massimo all'interno di ogni ora. Questo parametro trasforma il grafico a zigzag in barre.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Casa intelligente: Creiamo grafici sul consumo di acqua ed elettricit\u00e0 in Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/5bd866c39b23299e5f15dcf4a9bce38f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNon preoccupatevi delle barre a sinistra \u2014 \u00e8 il comportamento standard del componente se non ci sono dati. E non c'erano dati \u2014 ho appena attivato la raccolta dati dal contatore utility solo per questo articolo (condivider\u00f2 il mio approccio attuale pi\u00f9 avanti). <\/p>\n<p>In questa immagine volevo mostrare che a volte la visualizzazione dei dati funziona effettivamente, e le colonne riflettono i valori corretti. Solo che non sono del tutto accurate. La colonna evidenziata per l'intervallo dalle 11 alle 12 di mattina mostra per qualche motivo 19 litri, mentre nel grafico a zigzag un po' pi\u00f9 in alto per lo stesso periodo e dallo stesso sensore vediamo un consumo di 62 litri. O \u00e8 un bug, o sono stati fatti errori nella registrazione. Non ho ancora capito perch\u00e9 i dati siano mancanti a destra \u2014 il consumo l\u00ec era nella norma, come mostrato anche dal grafico a zigzag.<\/p>\n<p>In generale, non sono riuscito a ottenere credibilit\u00e0 con questo approccio: il grafico mostra quasi sempre qualcosa di assurdo.<\/p>\n<p>Codice analogo per il sensore giornaliero. <\/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: \"Consumo d'acqua giornaliero aggregato per contatore\"\n        points_per_hour: 0.0416666666\n        show:\n          graph: bar\n        type: 'custom:mini-graph-card'\n<\/code><\/pre>\n<p>\nSi prega di notare che il parametro group_by \u00e8 impostato sul valore interval, e controlla il parametro points_per_hour. Qui si presenta un altro problema di questo componente: points_per_hour funziona bene su grafici di un'ora o meno, ma \u00e8 scadente su intervalli pi\u00f9 lunghi. Pertanto, per ottenere una colonna per un giorno, \u00e8 stato necessario impostare il valore 1\/24=0,04166666. Non parlo nemmeno dei grafici settimanali e mensili.<\/p>\n<h2>Approccio 2<\/h2>\n<p>\nMentre mi abituo a Home Assistant, ho trovato questo 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=\"Riproduci video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nUn amico raccoglie dati sul consumo da diversi tipi di prese Xiaomi. Il suo compito \u00e8 un po' pi\u00f9 semplice: deve solo visualizzare il valore del consumo per oggi, ieri e per il mese. Non sono necessari grafici. <\/p>\n<p>Lasciamo da parte le considerazioni sull'integrazione manuale dei valori istantanei di potenza: sulla \u201cprecisione\u201d di questo approccio ne ho gi\u00e0 scritto sopra. Non \u00e8 chiaro perch\u00e9 non abbia utilizzato i valori accumulati di consumo, gi\u00e0 raccolti dalla stessa presa. A mio avviso, l'integrazione all'interno del dispositivo funzionerebbe meglio. <\/p>\n<p>Dal video prenderemo l'idea di un conteggio manuale del consumo durante un periodo. L'uomo considera solo i valori di oggi e di ieri, ma noi andremo oltre e cercheremo di tracciare un grafico. L'essenza del metodo proposto nel mio caso \u00e8 la seguente.<\/p>\n<p>Definiremo una variabile valore_all_inizio_dell_ora, in cui registreremo le letture attuali del contatore.<br \/>\nA fine ora (o all'inizio della successiva), calcoleremo la differenza tra la lettura attuale e quella memorizzata all'inizio dell'ora. Questa differenza sar\u00e0 il consumo dell'ora corrente \u2014 salveremo il valore nel sensore e in futuro costruiremo un grafico basato su questo valore. <br \/>\nDobbiamo anche \"azzerare\" la variabile valore_all_inizio_dell_ora registrando il valore attuale del contatore.<\/p>\n<p>Tutto questo pu\u00f2 essere fatto tramite i mezzi stessi di home assistant. <\/p>\n<p>Il codice richieder\u00e0 un po' pi\u00f9 di scrittura rispetto all'approccio precedente. Iniziamo a definire queste \"variabili\". Non abbiamo un'entit\u00e0 \"variabile\" pronta all'uso, ma possiamo avvalerci dei servizi di un broker MQTT. Invieremo i valori con il flag retain=true \u2014 questo salver\u00e0 il valore all'interno del broker, e potr\u00e0 essere estratto in qualsiasi momento, anche dopo il riavvio di Home Assistant. Ho creato contatori orari e giornalieri.<\/p>\n<pre><code class=\"python\">- platform: mqtt\n  state_topic: \"test\/water\/hour\"\n  name: water_hour\n  unit_of_measurement: l\n\n- platform: mqtt\n  state_topic: \"test\/water\/hour_begin\"\n  name: water_hour_begin\n  unit_of_measurement: l\n\n- platform: mqtt\n  state_topic: \"test\/water\/day\"\n  name: water_day\n  unit_of_measurement: l\n\n- platform: mqtt\n  state_topic: \"test\/water\/day_begin\"\n  name: water_day_begin\n  unit_of_measurement: l<\/code><\/pre>\n<p>\nTutta la magia avviene nell'automazione, che si attiva ogni ora e ogni notte di conseguenza.<\/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>\nEntrambe le automazioni eseguono 2 azioni:<\/p>\n<ul>\n<li>Calcolano il valore per l'intervallo come differenza tra il valore iniziale e quello finale<\/li>\n<li>Aggiornano il valore di base per il prossimo intervallo<\/li>\n<\/ul>\n<p>\nLa costruzione dei grafici in questo caso si risolve in un normale history-graph:<\/p>\n<pre><code class=\"python\">      - type: history-graph\n        title: 'Consumo d'acqua orario usando variabili'\n        hours_to_show: 48\n        entities:\n          - sensor.water_hour\n\n      - type: history-graph\n        title: 'Consumo d'acqua giornaliero usando variabili'\n        hours_to_show: 360\n        entities:\n          - sensor.water_day<\/code><\/pre>\n<p>\nSi presenta cos\u00ec:<\/p>\n<p><img decoding=\"async\" alt=\"Casa intelligente: Creiamo grafici sul consumo di acqua ed elettricit\u00e0 in Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/ebde2fc5f0a72d7d6ba565c3686dc9c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn linea di principio, questo \u00e8 gi\u00e0 ci\u00f2 di cui hai bisogno. Il vantaggio di questo metodo \u00e8 che i dati vengono generati una sola volta per intervallo. Cio\u00e8, solo 24 registrazioni al giorno per un grafico orario. <\/p>\n<p>Sfortunatamente, questo non risolve il problema generale di una crescente base di dati. Se volessi un grafico del consumo mensile, dovrei conservare i dati per almeno un anno. E poich\u00e9 l'home assistant fornisce solo un'impostazione della durata di archiviazione per l'intera base, ci\u00f2 significa che TUTTI i dati nel sistema dovranno essere conservati per un intero anno. Ad esempio, in un anno consumo 200 metri cubi d'acqua, il che significa 200.000 registrazioni nella base. E se consideriamo anche altri sensori, il numero diventa davvero inappropriato.<\/p>\n<h2>Approccio 3<\/h2>\n<p>\nFortunatamente, persone intelligenti hanno gi\u00e0 risolto questo problema scrivendo il database InfluxDB. Questo database \u00e8 appositamente ottimizzato per la conservazione di dati basati sul tempo ed \u00e8 perfetto per l'archiviazione dei valori dei vari sensori. Il sistema offre inoltre un linguaggio di query simile a SQL, che permette di estrarre valori dal database e poi aggregarli in vari modi. Infine, dati diversi possono essere conservati per tempi diversi. Ad esempio, letture che cambiano frequentemente come temperatura o umidit\u00e0 possono essere conservate per sole due settimane, mentre i dati quotidiani sul consumo d'acqua possono essere conservati per un intero anno.<\/p>\n<p>Oltre a InfluxDB, persone intelligenti hanno anche inventato Grafana, un sistema per la creazione di grafici basato su dati di InfluxDB. Grafana \u00e8 in grado di disegnare diversi tipi di grafici, personalizzandoli in dettaglio e, cosa pi\u00f9 importante, questi grafici possono essere \"inseriti\" nell'interfaccia lovelace di Home Assistant.<\/p>\n<p>Ispirarsi <noindex><a rel=\"nofollow\" href=\"https:\/\/dummylabs.com\/ru\/post\/2019-01-13-influxdb-part1\/\">qui <\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/dummylabs.com\/ru\/post\/2019-05-28-influxdb-part2\/\">qui<\/a><\/noindex>. Gli articoli descrivono dettagliatamente il processo di installazione e connessione di InfluxDB e Grafana a Home Assistant. Io mi concentrer\u00f2 sulla risoluzione del mio compito specifico.<\/p>\n<p>Quindi, per prima cosa iniziamo a registrare il valore del contatore in InfluxDB. Ecco un pezzo di configurazione di Home Assistant (in questo esempio mi divertir\u00f2 non solo con l'acqua fredda, ma anche con quella calda):<\/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>\nDisabilitiamo il salvataggio di questi stessi dati nel database interno di Home Assistant, per non gonfiarlo ulteriormente:<\/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>\nOra passiamo alla console di InfluxDB e configuriamo il nostro database. In particolare, dobbiamo impostare per quanto tempo verranno memorizzati determinati dati. Questo \u00e8 regolato dalla cosiddetta retention policy \u2014 \u00e8 simile a database all'interno del database principale, con ogni database interno che ha le proprie impostazioni. Per impostazione predefinita, tutti i dati vengono memorizzati nella retention policy chiamata autogen, e questi dati verranno conservati per una settimana. Vorrei che i dati orari venissero conservati per un mese, quelli settimanali per un anno e quelli mensili non venissero mai eliminati. Creiamo le relative retention policy.<\/p>\n<pre><code class=\"sql\">CREA LA POLITICA DI CONSERVAZIONE \"mese\" SU \"homeassistant\" DURATA 30d REPLICAZIONE 1\nCREA LA POLITICA DI CONSERVAZIONE \"anno\" SU \"homeassistant\" DURATA 52w REPLICAZIONE 1\nCREA LA POLITICA DI CONSERVAZIONE \"infinito\" SU \"homeassistant\" DURATA INF REPLICAZIONE 1<\/code><\/pre>\n<p>\nOra, in effetti, il trucco principale \u00e8 l'aggregazione dei dati tramite una query continua. Questo \u00e8 un meccanismo che esegue automaticamente una query a intervalli di tempo specificati, aggrega i dati in base a questa query e memorizza il risultato in un nuovo valore. Analizziamo attraverso un esempio (scrivo in colonna per facilitarne la lettura, ma in realt\u00e0 ho dovuto inserire questo comando in un'unica riga).<\/p>\n<pre><code class=\"sql\">CREA QUERY CONTINUA cq_water_hourly SU homeassistant \nINIZIA \n  SELEZIONA max(value) COME valore \n  IN homeassistant.month.water_meter_hour \n  DA homeassistant.autogen.l \n  GRUPPA PER time(1h), entity_id fill(previous) \nFINE<\/code><\/pre>\n<p>\nQuesto comando:<\/p>\n<ul>\n<li>Crea una query continua di nome cq_water_cold_hourly nel database homeassistant<\/li>\n<li>La query verr\u00e0 eseguita ogni ora (time(1h))<\/li>\n<li>La query estrarr\u00e0 tutti i dati dalla misurazione homeassistant.autogen.l (litri), incluse le letture di acqua fredda e calda<\/li>\n<li>I dati aggregati verranno raggruppati per entity_id, creando cos\u00ec valori separati per acqua fredda e calda<\/li>\n<li>Dato che il contatore dei litri \u00e8 una sequenza monotonicamente crescente, per ogni ora dovremo prendere il valore massimo, quindi l'aggregazione verr\u00e0 effettuata attraverso la funzione max(value) <\/li>\n<li>Il nuovo valore verr\u00e0 registrato in homeassistant.month.water_meter_hour, dove month \u00e8 il nome della retention policy con un periodo di conservazione mensile. I dati sull'acqua fredda e calda verranno distribuiti in voci separate con il corrispondente entity_id e valore nel campo value<\/li>\n<\/ul>\n<p>\nDi notte o quando non c'\u00e8 nessuno a casa, il consumo d'acqua \u00e8 assente, e di conseguenza non ci sono nuovi record in homeassistant.autogen.l. Per evitare che ci siano valori mancanti nelle normali query, \u00e8 possibile utilizzare fill(previous). Questo forzer\u00e0 InfluxDB a usare il valore dell'ora precedente. <\/p>\n<p>Purtroppo, la query continua presenta una particolarit\u00e0: il trucco fill(previous) non funziona e i record semplicemente non vengono creati. Inoltre, \u00e8 una questione che <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/influxdata\/influxdb\/issues\/3220\">\u00e8 gi\u00e0 oggetto di discussione da diversi anni.<\/a><\/noindex>Affronteremo questo problema in un secondo momento, mentre fill(previous) nella query continua pu\u00f2 restare \u2014 non crea ingombri. <\/p>\n<p>Controlliamo cosa siamo riusciti a ottenere (ovviamente, bisogna aspettare un paio d'ore):<\/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>\nSi prega di notare che i valori nel database sono salvati in UTC, quindi in questo elenco ci sono differenze di 3 ore \u2014 i valori delle 7 del mattino nell'output di InfluxDB corrispondono ai valori delle 10 del mattino nei grafici sopra. Inoltre, si prega di notare che tra le 2 e le 5 del mattino non ci sono registrazioni \u2014 questa \u00e8 la caratteristica delle query continue.<\/p>\n<p>Come potete vedere, il valore aggregato \u00e8 anch'esso una sequenza monotonamente crescente, solo che le registrazioni sono meno frequenti \u2014 una volta all'ora. Ma non \u00e8 un problema \u2014 possiamo scrivere un'altra query che estrarr\u00e0 i dati corretti per il grafico.<\/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>\nSpiegher\u00f2:<\/p>\n<ul>\n<li>Dalla base di dati homeassistant.month.water_meter_hour estrarremo i dati per entity_id='water_meter_cold' nelle ultime 24 ore (time &gt;= now() -24h). <\/li>\n<li>Come ho gi\u00e0 menzionato, nella sequenza homeassistant.month.water_meter_hour potrebbero mancare alcune registrazioni. Questi dati li genereremo nuovamente eseguendo una query con GROUP BY time(1h). Questa volta fill(previous) funzioner\u00e0 come previsto, generando i dati mancanti (la funzione prender\u00e0 il valore precedente).<\/li>\n<li>La cosa pi\u00f9 importante in questa richiesta \u00e8 la funzione difference, che calcola la differenza tra i timestamp. Di per s\u00e9 non funziona e richiede una funzione di aggregazione. Lasciamo che sia max() a essere utilizzato in precedenza.<\/li>\n<\/ul>\n<p>\nIl risultato dell'esecuzione appare cos\u00ec<\/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>\nDalle 2 alle 5 del mattino (UTC) non c'\u00e8 stato consumo. Tuttavia, la richiesta restituir\u00e0 lo stesso valore di consumo grazie a fill(previous), e la funzione difference sottrarr\u00e0 questo valore da se stesso, ottenendo quindi 0, che \u00e8 esattamente ci\u00f2 che serve.<\/p>\n<p>Ora resta da fare una cosa semplice: costruire un grafico. Per farlo, apriamo Grafana, apriamo un dashboard esistente (o creiamo uno nuovo) e creiamo un nuovo pannello. Le impostazioni del grafico saranno queste.<\/p>\n<p><img decoding=\"async\" alt=\"Casa intelligente: Creiamo grafici sul consumo di acqua ed elettricit\u00e0 in Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/c6f551590cd141438b644b24aa4ddebf.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMostrer\u00f2 i dati sull'acqua fredda e calda in un unico grafico. La richiesta \u00e8 esattamente quella che ho descritto sopra. <\/p>\n<p>Le impostazioni di visualizzazione sono configurate in questo modo. Per me sar\u00e0 un grafico a linee (lines) che segue una forma a gradini (stairs). Spiegher\u00f2 il parametro Stack pi\u00f9 avanti. Ci sono ulteriori parametri di visualizzazione sotto, ma non sono cos\u00ec interessanti.<\/p>\n<p><img decoding=\"async\" alt=\"Casa intelligente: Creiamo grafici sul consumo di acqua ed elettricit\u00e0 in Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/cb47fc8570b7fd1305ce3451e0518f11.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPer aggiungere il grafico ottenuto in Home Assistant, \u00e8 necessario:<\/p>\n<ul>\n<li>uscire dalla modalit\u00e0 di modifica del grafico. Stranamente, le impostazioni corrette per la condivisione dei grafici sono disponibili solo dalla pagina del dashboard.<\/li>\n<li>Clicca sul triangolo accanto al nome del grafico, nel menu seleziona share.<\/li>\n<li>Nella finestra aperta, vai alla scheda embed.<\/li>\n<li>Disattiva la casella current time range \u2014 il range temporale lo imposteremo tramite URL. <\/li>\n<li>Scegli il tema necessario. Nel mio caso, \u00e8 light.<\/li>\n<li>Copia l'URL ottenuto nella scheda delle impostazioni 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>\nSi noti che il range temporale (ultimi 2 giorni) \u00e8 impostato esattamente qui, non nelle impostazioni del dashboard. <\/p>\n<p>Il grafico appare cos\u00ec. Non ho utilizzato acqua calda negli ultimi 2 giorni, quindi viene visualizzato solo il grafico dell'acqua fredda.<\/p>\n<p><img decoding=\"async\" alt=\"Casa intelligente: Creiamo grafici sul consumo di acqua ed elettricit\u00e0 in Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/d18c82712d3b829a97ada8c8e2adce24.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNon ho ancora deciso quale grafico mi piace di pi\u00f9, quello a gradini o con veri e propri colonne. Pertanto, fornir\u00f2 solo un esempio del grafico giornaliero dei consumi, questa volta utilizzando colonne. Le richieste sono costruite in modo simile a quanto descritto sopra. I parametri di visualizzazione sono i seguenti:<\/p>\n<p><img decoding=\"async\" alt=\"Casa intelligente: Creiamo grafici sul consumo di acqua ed elettricit\u00e0 in Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/557297e666f9cd73c3d2aa2fd80c0a2d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuesto \u00e8 come appare il grafico:<\/p>\n<p><img decoding=\"async\" alt=\"Casa intelligente: Creiamo grafici sul consumo di acqua ed elettricit\u00e0 in Home Assistant\" src=\"\/wp-content\/uploads\/2020\/03\/ac8c53569c6b05aeb22e05969de4cd6d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEcco il parametro Stack. In questo grafico, la colonna dell'acqua fredda \u00e8 disegnata sopra quella dell'acqua calda. L'altezza totale corrisponde al consumo combinato di acqua fredda e calda per il periodo. <\/p>\n<p>Tutti i grafici mostrati sono dinamici. Puoi posizionare il mouse su un punto di interesse per visualizzare i dettagli e il valore in un punto specifico. <\/p>\n<p>Sfortunatamente, non \u00e8 mancato un po' di catrame. Nel grafico a colonne (a differenza di quello a gradini), il centro della colonna non si trova a met\u00e0 giornata, ma a mezzanotte. Cio\u00e8, la met\u00e0 sinistra della colonna \u00e8 disegnata al posto del giorno precedente. Quindi i grafici di sabato e domenica sono leggermente spostati a sinistra rispetto all'area bluastro. Finora non ho trovato un modo per risolvere questo. <\/p>\n<p>Un altro problema \u00e8 l'impossibilit\u00e0 di lavorare correttamente con gli intervalli mensili. Infatti, la durata di un'ora\/giorno\/settimana \u00e8 fissa, mentre la durata di un mese cambia ogni volta. InfluxDB riesce a gestire solo intervalli costanti. Finora sono riuscito a impostare un intervallo fisso di 30 giorni. S\u00ec, il grafico si discoster\u00e0 leggermente nel corso dell'anno e le colonne non corrisponderanno perfettamente ai mesi. Ma poich\u00e9 trovo questo strumento interessante come indicatore, va bene cos\u00ec. <\/p>\n<p>Almeno due soluzioni mi vengono in mente:<\/p>\n<ul>\n<li>Ignorare i grafici mensili e limitarsi a quelli settimanali. 52 colonne settimanali in un anno si presentano bene.<\/li>\n<li>Calcolare il consumo mensile come secondo metodo e utilizzare Grafana solo per grafici esteticamente gradevoli. Risultato abbastanza preciso. \u00c8 possibile sovrapporre i grafici dell'anno scorso per un confronto \u2014 Grafana \u00e8 capace di farlo.<\/li>\n<\/ul>\n<h2>Conclusione<\/h2>\n<p>\nNon so perch\u00e9, ma adoro questo tipo di grafici. Dimostrano che la vita \u00e8 dinamica e tutto cambia. Ieri c'era tanto, oggi poco, domani sar\u00e0 in un altro modo. Devo ancora lavorare con i miei familiari sul tema del consumo. Ma anche con le attuali abitudini, una grande e incomprensibile cifra nella bolletta si trasforma gi\u00e0 in un quadro di consumo abbastanza chiaro.<\/p>\n<p>Nonostante quasi 20 anni di carriera come programmatore, non ho mai avuto a che fare con i database. Quindi, l'installazione di un database esterno sembrava qualcosa di fin troppo complesso e astruso. Tutto \u00e8 cambiato <noindex><a rel=\"nofollow\" href=\"https:\/\/dummylabs.com\/ru\/post\/2019-01-13-influxdb-part1\">l'articolo sopra menzionato<\/a><\/noindex> \u2014 si \u00e8 scoperto che collegare lo strumento giusto \u00e8 un'operazione di pochi clic, e con uno strumento specializzato, il compito di costruire grafici diventa un po' pi\u00f9 semplice.<\/p>\n<p>Nel titolo ho menzionato il consumo di elettricit\u00e0. Sfortunatamente, al momento non posso mostrare alcun grafico. Un contatore SDM120 \u00e8 andato in corto, e l'altro si blocca durante la comunicazione via Modbus. Tuttavia, questo non influisce sul contenuto di questo articolo: i grafici verranno costruiti nello stesso modo, come per l'acqua.<\/p>\n<p>In questo articolo ho presentato gli approcci che ho provato personalmente. Sicuramente ci sono altri modi per organizzare la raccolta e la visualizzazione dei dati che non conosco. Raccontatemi nei commenti, mi piacerebbe molto saperlo. Sar\u00f2 felice di ricevere critiche costruttive e nuove idee. Spero che il materiale presentato possa essere utile a qualcuno.<br \/>\n<br \/>Fonte: <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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\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,\" \/>\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\/it\/blog\/administrirovanie\/umnyj-dom-stroim-grafiki-potrebleniya-vody-i-elektrichestva-v-home-assistant\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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 \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,\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/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: Creiamo grafici del consumo di acqua ed elettricit\u00e0 in Home Assistant | ProHoster","description":"Ogni volta che ricevo la bolletta dell'elettricit\u00e0 e dell'acqua, mi sorprendo: davvero la mia famiglia consuma cos\u00ec tanto? Certo, in bagno ho installato un pavimento riscaldato e un boiler, ma non funzionano continuamente. Inoltre, cerchiamo di risparmiare acqua (anche se ci piace fare un bagno rilassante). Qualche anno fa ho gi\u00e0 collegato i contatori dell'acqua e dell'elettricit\u00e0 alla smart home.","canonical_url":"https:\/\/prohoster.info\/it\/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":"it_IT","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 \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,","og:url":"https:\/\/prohoster.info\/it\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/74421","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=74421"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/74421\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/74422"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=74421"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=74421"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=74421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}