Chaque fois que je reçois une facture d'Ă©lectricitĂ© et d'eau, je me demande - ma famille consomme-t-elle vraiment autant? Eh bien, oui, la salle de bain a un plancher chauffant et une chaudiĂšre, mais ils ne sâalimentent pas constamment. Nous semblons Ă©galement Ă©conomiser de l'eau (mĂȘme si nous aimons aussi les Ă©claboussures dans la salle de bain). Il y a quelques annĂ©es, j'avais dĂ©jĂ connectĂ© des compteurs d'eau et d' Ă©lectricitĂ© Ă une maison intelligente, mais c'Ă©tait collĂ© lĂ -dessus. Les mains ne sont arrivĂ©es Ă l'analyse de la consommation que maintenant, Ă propos de laquelle, en fait, cet article concerne.Je suis rĂ©cemment passĂ© Ă Home Assistant en tant que systĂšme de maison intelligente. L'une des raisons Ă©tait simplement la possibilitĂ© d'organiser la collecte d'une grande quantitĂ© de donnĂ©es avec la possibilitĂ© de construire facilement diffĂ©rents types de graphiques.Les informations dĂ©crites dans cet article ne sont pas nouvelles, toutes ces choses avec des sauces diffĂ©rentes ont dĂ©jĂ Ă©tĂ© dĂ©crites sur Internet. Mais chaque article, en rĂšgle gĂ©nĂ©rale, ne dĂ©crit qu'une approche ou un aspect. J'ai dĂ» comparer toutes ces approches et choisir moi-mĂȘme la plus appropriĂ©e. L'article ne fournit toujours pas d'informations complĂštes sur la collecte de donnĂ©es, mais c'est une sorte de rĂ©sumĂ© de la façon dont je l'ai fait. Les critiques constructives et les suggestions d'amĂ©lioration sont donc les bienvenues.Formulation du problĂšme
Ainsi, l'objectif de l'exercice d'aujourd'hui est d'obtenir de beaux graphiques de consommation d'eau et d'électricité:- Toutes les heures pendant 2 jours
- Tous les jours pendant 2 semaines
- (facultatif) hebdomadaire et mensuel
C'est là que quelques difficultés nous attendent:- , , . .
, , . home assistant, , mini-graph-card, :
- , home assistant SQLite
( , , MySQL Postgres), . , , 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}}}
( , ), . SDM220 10-15 , 8. , . .. 100-200 . , ( home assistant raspberry PI), . - , .
. (RS232/RS485/Modbus/Zigbee) .
( ), X - . . , . , , home assistant, , ( home assistant).
1
Tout d'abord, voyons ce que l'assistant Ă domicile est fourni hors de la boĂźte. Mesurer la consommation sur une pĂ©riode est une fonctionnalitĂ© trĂšs demandĂ©e. Bien sĂ»r, il a Ă©tĂ© rĂ©alisĂ© il y a longtemps sous la forme d'un composant spĂ©cialisĂ© - utility_meter.L'essence du composant est qu'il dĂ©marre la variable current_accumulated_value Ă l'intĂ©rieur et la rĂ©initialise aprĂšs une pĂ©riode spĂ©cifiĂ©e (heure / semaine / mois). Le composant lui-mĂȘme surveille la variable entrante (la valeur d'une sorte de capteur), souscrit aux modifications de la valeur elle-mĂȘme - vous obtenez simplement le rĂ©sultat final. Cette chose est dĂ©crite en quelques lignes dans le fichier de configuration.utility_meter:
water_cold_hour_um:
source: sensor.water_meter_cold
cycle: hourly
water_cold_day_um:
source: sensor.water_meter_cold
cycle: daily
Ici sensor.water_meter_cold est la valeur actuelle du compteur en litres, que j'obtiens directement de la piÚce de fer par mqtt. La conception crée 2 nouveaux capteurs water_cold_hour_um et water_cold_day_um, qui accumulent des lectures horaires et quotidiennes, les réinitialisant aprÚs une période. Voici un tableau de batterie d'une demi-heure.
Le code du graphique horaire et quotidien pour lovelace-UI ressemble Ă ceci: - type: history-graph
title: 'Hourly water consumption using vars'
hours_to_show: 48
entities:
- sensor.water_hour
- type: history-graph
title: 'Daily water consumption using vars'
hours_to_show: 360
entities:
- sensor.water_day
En fait, le problĂšme de cette approche rĂ©side dans cet algorithme. Comme je l'ai mentionnĂ©, pour chaque valeur d'entrĂ©e (la lecture actuelle du compteur pour chaque litre suivant), 1 Ko d'enregistrement est gĂ©nĂ©rĂ© dans la base de donnĂ©es. Chaque compteur d'utilitĂ© gĂ©nĂšre Ă©galement une nouvelle valeur, qui s'ajoute Ă©galement Ă la base de donnĂ©es. Si je veux collecter des relevĂ©s horaires / quotidiens / hebdomadaires / mensuels, et pour plusieurs Ă©lĂ©vateurs Ă eau, et mĂȘme ajouter un tas de compteurs Ă©lectriques - ce sera beaucoup de donnĂ©es. Eh bien, plus prĂ©cisĂ©ment, il n'y a pas beaucoup de donnĂ©es, mais comme l'assistant Ă domicile Ă©crit dans la base de donnĂ©es un tas d'informations inutiles, la taille de la base de donnĂ©es augmentera Ă pas de gĂ©ant. J'ai mĂȘme peur d'estimer la taille de la base des graphiques hebdomadaires et mensuels.De plus, le compteur d'utilitĂ© seul ne rĂ©sout pas la tĂąche. Le graphique des valeurs que le compteur d'utilitĂ© donne est une fonction augmentant de façon monotone qui se remet Ă 0 toutes les heures. Nous avons besoin d'un tableau de consommation convivial, combien de litres ont Ă©tĂ© consommĂ©s au cours de la pĂ©riode. Le composant standard de graphique d'historique ne sait pas comment procĂ©der, mais le composant de mini-carte graphique externe peut nous aider.Voici le code de la carte pour lovelace-UI: - aggregate_func: max
entities:
- color: var(--primary-color)
entity: sensor.water_cold_hour_um
group_by: hour
hours_to_show: 48
name: "Hourly water consumption aggregated by utility meter"
points_per_hour: 1
show:
graph: bar
type: 'custom:mini-graph-card'
En plus des paramÚtres standard comme le nom du capteur, le type de graphique, la couleur (je n'ai pas aimé l'orange standard), il est important de noter 3 paramÚtres:- group_by: hour - le graphique sera généré avec les colonnes alignées au début de l'heure
- points_per_hour: 1 - une barre pour chaque heure
- , aggregate_func: max â .
Ne faites pas attention Ă un certain nombre de colonnes sur la gauche - c'est le comportement standard d'un composant s'il n'y a pas de donnĂ©es. Et il n'y avait pas de donnĂ©es - j'ai seulement activĂ© la collecte de donnĂ©es des compteurs d'utilitĂ© il y a quelques heures seulement pour le plaisir de cet article (je vous dirai mon approche actuelle un peu plus tard).Dans cette image, je voulais montrer que parfois l'affichage des donnĂ©es fonctionne mĂȘme et que les barres reflĂštent vraiment les valeurs correctes. Mais ce n'est pas tout. La colonne sĂ©lectionnĂ©e pour l'intervalle de 11 Ă 12 heures du matin pour une raison quelconque affiche 19 litres, bien que sur le tableau Ă pleines dents un peu plus Ă©levĂ© pour la mĂȘme pĂ©riode, nous voyons une consommation de 62 litres Ă partir du mĂȘme capteur. Soit un insecte, soit des mains tordues. Mais je ne comprends pas pourquoi les donnĂ©es de droite se sont interrompues - la consommation y Ă©tait normale, ce qui est Ă©galement visible sur le calendrier Ă pleines dents.En gĂ©nĂ©ral, je n'ai pas rĂ©ussi Ă obtenir la crĂ©dibilitĂ© de cette approche - le graphique montre presque toujours une sorte d'hĂ©rĂ©sie.Le mĂȘme code pour le capteur de jour. - aggregate_func: max
entities:
- color: var(--primary-color)
entity: sensor.water_cold_day_um
group_by: interval
hours_to_show: 360
name: "Daily water consumption aggregated by utility meter"
points_per_hour: 0.0416666666
show:
graph: bar
type: 'custom:mini-graph-card'
Notez que le paramÚtre group_by est défini sur intervalle et que le paramÚtre points_per_hour rÚgle tout. Et c'est un autre problÚme de ce composant - points_per_hour fonctionne bien sur les graphiques en une heure ou moins, mais dégoûtant à de grands intervalles. Donc, pour obtenir une colonne en une journée, je devais entrer la valeur 1/24 = 0,04166666. Je ne parle pas de graphiques hebdomadaires et mensuels.Approche 2
Je viens de dĂ©couvrir l'assistant Ă domicile, je suis tombĂ© sur cette vidĂ©o ici:Un ami recueille les donnĂ©es de consommation de plusieurs types de points de vente Xiaomi. Sa tĂąche est un peu plus facile - il suffit d'afficher la valeur de la consommation pour aujourd'hui, hier et pour le mois. Aucun horaire n'est requis.Laissons de cĂŽtĂ© la discussion sur l'intĂ©gration manuelle des valeurs de puissance instantanĂ©es - j'ai dĂ©jĂ Ă©crit sur la «prĂ©cision» de cette approche. On ne sait pas pourquoi il n'a pas utilisĂ© les valeurs de consommation accumulĂ©es, qui sont dĂ©jĂ collectĂ©es par le mĂȘme point de vente. Ă mon avis, l'intĂ©gration Ă l'intĂ©rieur du morceau de fer fonctionnera mieux.De la vidĂ©o nous prenons l'idĂ©e de calculer manuellement la consommation de la pĂ©riode. Le paysan ne compte que les valeurs d'aujourd'hui et d'hier, mais nous allons aller plus loin et essayer de dessiner un graphique. L'essence de la mĂ©thode proposĂ©e dans mon cas est la suivante.- ___,
- ( ) . â , .
- ââ ___ .
Tout cela peut ĂȘtre fait par le biais de l'assistant Ă domicile lui-mĂȘme.Vous devrez Ă©crire un peu plus de code que dans l'approche prĂ©cĂ©dente. Pour commencer, obtenons ces mĂȘmes «variables». Hors de la boĂźte, nous n'avons pas l'entitĂ© "variable", mais vous pouvez utiliser les services du courtier mqtt. Nous y enverrons des valeurs avec le drapeau retenue = vrai - cela enregistrera la valeur Ă l'intĂ©rieur du courtier, et vous pouvez la retirer Ă tout moment, mĂȘme lorsque l'assistant Ă domicile redĂ©marre. J'ai fait tout de suite des compteurs d'heures et de jours.- platform: mqtt
state_topic: "test/water/hour"
name: water_hour
unit_of_measurement: l
- platform: mqtt
state_topic: "test/water/hour_begin"
name: water_hour_begin
unit_of_measurement: l
- platform: mqtt
state_topic: "test/water/day"
name: water_day
unit_of_measurement: l
- platform: mqtt
state_topic: "test/water/day_begin"
name: water_day_begin
unit_of_measurement: l
Toute la magie opÚre dans l'automatisation, qui s'exécute chaque heure et chaque nuit, respectivement.- id: water_new_hour
alias: water_new_hour
initial_state: true
trigger:
- platform: time_pattern
minutes: 0
action:
- service: mqtt.publish
data:
topic: "test/water/hour"
payload_template: >
{{ (states.sensor.water_meter_cold.state|int) - (states.sensor.water_hour_begin.state|int) }}
retain: true
- service: mqtt.publish
data:
topic: "test/water/hour_begin"
payload_template: >
{{ states.sensor.water_meter_cold.state }}
retain: true
- id: water_new_day
alias: water_new_day
initial_state: true
trigger:
- platform: time
at: "00:00:00"
action:
- service: mqtt.publish
data:
topic: "test/water/day"
payload_template: >
{{ (states.sensor.water_meter_cold.state|int) - (states.sensor.water_day_begin.state|int) }}
retain: true
- service: mqtt.publish
data:
topic: "test/water/day_begin"
payload_template: >
{{ states.sensor.water_meter_cold.state }}
retain: true
Les deux automatisations effectuent 2 actions:- La valeur de l'intervalle est calculée comme la différence entre la valeur de début et la valeur de fin
- Mettre Ă jour la valeur de base pour l'intervalle suivant
Le graphique dans ce cas est résolu par le graphique historique habituel: - type: history-graph
title: 'Hourly water consumption using vars'
hours_to_show: 48
entities:
- sensor.water_hour
- type: history-graph
title: 'Daily water consumption using vars'
hours_to_show: 360
entities:
- sensor.water_day
Cela ressemble Ă ceci:
En principe, c'est dĂ©jĂ ce dont vous avez besoin. L'avantage de cette mĂ©thode est que les donnĂ©es sont gĂ©nĂ©rĂ©es une fois par intervalle. Ceux. seulement 24 entrĂ©es par jour pour le graphique horaire.Malheureusement, cela ne rĂ©sout toujours pas le problĂšme gĂ©nĂ©ral d'une base croissante. Si je veux un calendrier de consommation mensuel, je devrai stocker des donnĂ©es pendant au moins un an. Et comme l'assistant Ă domicile ne fournit qu'un seul paramĂštre pour la durĂ©e de stockage pour l'ensemble de la base de donnĂ©es, cela signifie que TOUTES les donnĂ©es du systĂšme devront ĂȘtre stockĂ©es pendant une annĂ©e entiĂšre. Par exemple, pendant un an, je consomme 200 mĂštres cubes d'eau, ce qui signifie que ce sont 200 000 enregistrements dans la base de donnĂ©es. Et si vous prenez en compte d'autres capteurs, le chiffre devient indĂ©cent du tout.Approche 3
Heureusement, les personnes intelligentes ont dĂ©jĂ rĂ©solu ce problĂšme en Ă©crivant la base de donnĂ©es InfluxDB. Cette base de donnĂ©es est spĂ©cialement optimisĂ©e pour stocker des donnĂ©es temporelles et est idĂ©ale pour stocker les valeurs de diffĂ©rents capteurs. Le systĂšme fournit Ă©galement un langage de requĂȘte de type SQL qui vous permet de sĂ©lectionner des valeurs dans la base de donnĂ©es, puis de les agrĂ©ger de diffĂ©rentes maniĂšres. Enfin, diffĂ©rentes donnĂ©es peuvent ĂȘtre stockĂ©es Ă diffĂ©rents moments. Par exemple, les relevĂ©s changeant frĂ©quemment tels que la tempĂ©rature ou l'humiditĂ© peuvent ĂȘtre stockĂ©s pendant seulement quelques semaines, tandis que les relevĂ©s quotidiens de la consommation d'eau peuvent ĂȘtre stockĂ©s pendant une annĂ©e entiĂšre.En plus d'InfluxDB, les gens intelligents ont Ă©galement inventĂ© Grafana, un systĂšme de cartographie basĂ© sur les donnĂ©es d'InfluxDB. Grafana peut dessiner diffĂ©rents types de graphiques, les personnaliser en dĂ©tail et, plus important encore, ces graphiques peuvent ĂȘtre «collĂ©s» sur l'assistant Ă domicile lovelace-UI.Inspirez-vous ici et ici . Les articles dĂ©crivent en dĂ©tail le processus d'installation et de connexion d'InfluxDB et de Grafana Ă l'assistant domestique. Je vais me concentrer sur la rĂ©solution de mon problĂšme spĂ©cifique.Donc, tout d'abord, commençons Ă additionner la valeur du compteur dans influxDB. Un morceau de la configuration de l'assistant Ă domicile (dans cet exemple, je vais m'amuser non seulement avec du froid, mais aussi avec de l'eau chaude):influxdb:
host: localhost
max_retries: 3
default_measurement: state
database: homeassistant
include:
entities:
- sensor.water_meter_hot
- sensor.water_meter_cold
DĂ©sactivez l'enregistrement des mĂȘmes donnĂ©es dans la base de donnĂ©es interne de l'assistant Ă domicile afin de ne pas les gonfler Ă nouveau:recorder:
purge_keep_days: 10
purge_interval: 1
exclude:
entities:
- sensor.water_meter_hot
- sensor.water_meter_cold
Nous allons maintenant à la console InfluxDB et configurons notre base de données. En particulier, vous devez configurer la durée de stockage de telle ou telle donnée. Ceci est réglementé par le soi-disant politique de rétention - elle est similaire aux bases de données à l'intérieur de la base de données principale, chaque base de données interne ayant ses propres paramÚtres. Par défaut, toutes les données sont stockées dans une politique de rétention appelée autogen, ces données seront stockées pendant une semaine. Je souhaite que les données horaires soient stockées pendant un mois, l'hebdomadaire pendant un an et que le mensuel ne soit jamais supprimé. Créer une politique de rétention appropriéeCREATE RETENTION POLICY "month" ON "homeassistant" DURATION 30d REPLICATION 1
CREATE RETENTION POLICY "year" ON "homeassistant" DURATION 52w REPLICATION 1
CREATE RETENTION POLICY "infinite" ON "homeassistant" DURATION INF REPLICATION 1
Maintenant, en fait, l'astuce principale est l'agrĂ©gation de donnĂ©es Ă l'aide d'une requĂȘte continue. Il s'agit d'un mĂ©canisme qui dĂ©marre automatiquement une requĂȘte Ă des intervalles spĂ©cifiĂ©s, agrĂšge les donnĂ©es de cette requĂȘte et ajoute le rĂ©sultat Ă une nouvelle valeur. Regardons un exemple (j'Ă©cris dans une colonne pour plus de lisibilitĂ©, mais en fait j'ai dĂ» saisir cette commande sur une seule ligne)CREATE CONTINUOUS QUERY cq_water_hourly ON homeassistant
BEGIN
SELECT max(value) AS value
INTO homeassistant.month.water_meter_hour
FROM homeassistant.autogen.l
GROUP BY time(1h), entity_id fill(previous)
END
Cette commande:- CrĂ©e une requĂȘte continue nommĂ©e cq_water_cold_hourly dans la base de donnĂ©es homeassistant
- La demande sera exécutée toutes les heures (temps (1h))
- La demande va récupérer toutes les données de la mesure'a homeassistant.autogen.l (litres), y compris les lectures d'eau froide et chaude
- Les données agrégées seront regroupées par entity_id, ce qui créera des valeurs distinctes pour l'eau froide et l'eau chaude.
- , max(value)
- homeassistant.month.water_meter_hour, month retention policy . entity_id value
La nuit ou lorsque personne n'est Ă la maison, il n'y a pas de consommation d'eau et il n'y a donc pas non plus de nouvelles entrĂ©es dans homeassistant.autogen.l. Pour Ă©viter les valeurs manquantes dans les requĂȘtes rĂ©guliĂšres, vous pouvez utiliser fill (prĂ©cĂ©dent). Cela forcera InfluxDB Ă utiliser la valeur de la derniĂšre heure.Malheureusement, la requĂȘte continue a une particularitĂ©: l'astuce de remplissage (prĂ©cĂ©dente) ne fonctionne pas et les enregistrements ne sont tout simplement pas créés. De plus, il s'agit d'un problĂšme insurmontable qui fait l'objet de discussions depuis plus d'un an . Nous traiterons ce problĂšme plus tard, et laissons remplir (prĂ©cĂ©dent) dans la requĂȘte continue - cela n'interfĂšre pas.VĂ©rifions ce qui s'est passĂ© (bien sĂ»r, vous devez attendre quelques heures):> select * from homeassistant.month.water_meter_hour group by entity_id
...
name: water_meter_hour
tags: entity_id=water_meter_cold
time value
---- -----
...
2020-03-08T01:00:00Z 370511
2020-03-08T02:00:00Z 370513
2020-03-08T05:00:00Z 370527
2020-03-08T06:00:00Z 370605
2020-03-08T07:00:00Z 370635
2020-03-08T08:00:00Z 370699
2020-03-08T09:00:00Z 370761
2020-03-08T10:00:00Z 370767
2020-03-08T11:00:00Z 370810
2020-03-08T12:00:00Z 370818
2020-03-08T13:00:00Z 370827
2020-03-08T14:00:00Z 370849
2020-03-08T15:00:00Z 370921
Veuillez noter que les valeurs de la base de donnĂ©es sont stockĂ©es en UTC, par consĂ©quent, dans cette liste, elles diffĂšrent de 3 heures - les valeurs de 7 h dans la sortie InfluxDB correspondent aux valeurs de 10 h dans les graphiques ci-dessus. Notez Ă©galement qu'entre 2 et 5 heures du matin, il n'y a tout simplement aucun enregistrement - c'est la mĂȘme caractĂ©ristique de la requĂȘte continue.Comme vous pouvez le voir, la valeur agrĂ©gĂ©e est Ă©galement une sĂ©quence Ă augmentation monotone, seuls les enregistrements sont moins frĂ©quents - une fois par heure. Mais ce n'est pas un problĂšme - nous pouvons Ă©crire une autre requĂȘte qui produira les donnĂ©es correctes pour le graphique.SELECT difference(max(value))
FROM homeassistant.month.water_meter_hour
WHERE entity_id='water_meter_cold' and time >= now() -24h
GROUP BY time(1h), entity_id
fill(previous)
Je décrypterai:- De la base de données homeassistant.month.water_meter_hour, nous extrayons les données pour entity_id = 'water_meter_cold' pour le dernier jour (heure> = maintenant () -24h).
- Comme je l'ai mentionnĂ© dans la sĂ©quence homeassistant.month.water_meter_hour, certaines entrĂ©es peuvent ĂȘtre manquantes. Nous rĂ©gĂ©nĂ©rerons ces donnĂ©es en exĂ©cutant une requĂȘte avec l'heure GROUP BY (1h). Ce remplissage de temps (prĂ©cĂ©dent) fonctionnera selon les besoins, gĂ©nĂ©rant les donnĂ©es manquantes (la fonction prendra la valeur prĂ©cĂ©dente)
- La chose la plus importante dans cette demande est la fonction de différence, qui calculera la différence entre les marques horaires. En soi, il ne fonctionne pas et nécessite une fonction d'agrégation. Soit le max () utilisé auparavant.
Le résultat de l'exécution ressemble à ceciname: water_meter_hour
tags: entity_id=water_meter_cold
time difference
---- ----------
...
2020-03-08T02:00:00Z 2
2020-03-08T03:00:00Z 0
2020-03-08T04:00:00Z 0
2020-03-08T05:00:00Z 14
2020-03-08T06:00:00Z 78
2020-03-08T07:00:00Z 30
2020-03-08T08:00:00Z 64
2020-03-08T09:00:00Z 62
2020-03-08T10:00:00Z 6
2020-03-08T11:00:00Z 43
2020-03-08T12:00:00Z 8
2020-03-08T13:00:00Z 9
2020-03-08T14:00:00Z 22
2020-03-08T15:00:00Z 72
De 2 Ă 5 heures du matin (UTC), il n'y avait pas de consommation. NĂ©anmoins, la requĂȘte renverra la mĂȘme valeur de consommation en raison du remplissage (prĂ©cĂ©dent), et la fonction de diffĂ©rence soustraira cette valeur d'elle-mĂȘme et obtiendra 0 Ă la sortie, ce qui est rĂ©ellement requis.Il ne reste plus qu'Ă construire un planning. Pour ce faire, ouvrez Grafana, ouvrez un tableau de bord existant (ou crĂ©ez un nouveau), crĂ©ez un nouveau panneau. Les paramĂštres du graphique seront comme ceci.
Je vais afficher les donnĂ©es sur l'eau froide et chaude sur un graphique. La demande est exactement la mĂȘme que celle dĂ©crite ci-dessus.Les paramĂštres d'affichage sont dĂ©finis comme suit. J'aurai un graphique avec des lignes, qui passe par des escaliers. Je vais expliquer le paramĂštre Stack juste en dessous. Il y a quelques autres options d'affichage ci-dessous, mais elles ne sont pas si intĂ©ressantes.
Pour ajouter le programme reçu à l'assistant à domicile dont vous avez besoin:- . -
- , share
- embed
- current time range â URL
- . light
- URL lovelace-UI
- type: iframe
id: graf_water_hourly
url: "http://192.168.10.200:3000/d-solo/rZARemQWk/water?orgId=1&panelId=2&from=now-2d&to=now&theme=light"
Veuillez noter que la plage de temps (2 derniers jours) est définie ici, et non dans les paramÚtres du tableau de bord.Le graphique ressemble à ceci. Je n'ai pas utilisé d'eau chaude au cours des 2 derniers jours, donc seul un graphique de l'eau froide est dessiné.
Je n'ai pas dĂ©cidĂ© par moi-mĂȘme quel horaire je prĂ©fĂšre, une ligne de pas ou de vrais bars. Par consĂ©quent, je vais simplement donner un exemple de graphique de consommation quotidienne, mais cette fois en colonnes. Les demandes sont construites de la mĂȘme maniĂšre que celle dĂ©crite ci-dessus. Les paramĂštres d'affichage sont les suivants:
Ce graphique ressemble Ă ceci:
Donc Ă propos du paramĂštre Stack. Dans ce graphique, une colonne d'eau froide est dessinĂ©e au-dessus d'une colonne d'eau chaude. La hauteur totale correspond Ă la consommation totale d'eau froide et chaude pour la pĂ©riode.Tous les graphiques prĂ©sentĂ©s sont dynamiques. Vous pouvez passer la souris sur un point d'intĂ©rĂȘt et voir les dĂ©tails et la valeur Ă un point spĂ©cifique.Malheureusement, quelques cuillĂšres Ă soupe de goudron n'ont pas pu faire. Sur le graphique Ă barres (contrairement au graphique avec des lignes de pas), le milieu de la barre n'est pas au milieu de la journĂ©e, mais Ă 00h00. Ceux. la moitiĂ© gauche de la colonne est dessinĂ©e Ă la place de la veille. Les cartes du samedi et du dimanche sont donc un peu plus Ă gauche que la zone bleuĂątre. Jusqu'Ă ce que je comprenne comment le gagner.Un autre problĂšme est l'incapacitĂ© de fonctionner correctement Ă intervalles mensuels. Le fait est que la durĂ©e de l'heure / jour / semaine est fixe, mais la durĂ©e du mois est diffĂ©rente Ă chaque fois. InfluxDB ne peut fonctionner qu'Ă intervalles rĂ©guliers. Jusqu'Ă prĂ©sent, mon cerveau Ă©tait suffisant pour dĂ©finir un intervalle fixe de 30 jours. Oui, le graphique flottera un peu au cours de l'annĂ©e et les colonnes ne correspondront pas exactement aux mois. Mais comme cette chose m'intĂ©resse simplement en tant que pĂ©riphĂ©rique d'affichage, je suis d'accord avec ça.Je vois au moins deux solutions:- Score sur les horaires mensuels et limite hebdomadaire. 52 bars hebdomadaires pour l'annĂ©e ont l'air plutĂŽt bien
- â2, . . â .
Je ne sais pas pourquoi, mais je marche sur ce genre de graphiques. Ils montrent que la vie bat son plein et que tout change. Hier, c'Ă©tait beaucoup, aujourd'hui ne suffit pas, demain sera autre chose. Reste Ă travailler avec les mĂ©nages sur le thĂšme de la consommation. Mais mĂȘme avec les appĂ©tits actuels, juste un chiffre important et incomprĂ©hensible dans le paiement se transforme dĂ©jĂ en une image assez claire de la consommation.MalgrĂ© une carriĂšre de programmeur de prĂšs de 20 ans, je n'ai pratiquement pas croisĂ© les bases de donnĂ©es. Par consĂ©quent, l'installation d'une base de donnĂ©es externe semblait quelque chose d'abstrus et d'incomprĂ©hensible. Tout a Ă©tĂ© changĂ© par l' article susmentionnĂ© - il s'est avĂ©rĂ© que le vissage d'un outil appropriĂ© se fait en quelques clics, et avec un outil spĂ©cialisĂ©, la tĂąche de graphique devient un peu plus facile.Dans le titre, j'ai mentionnĂ© la consommation d'Ă©lectricitĂ©. Malheureusement, pour le moment, je ne peux pas donner un seul graphique. Un compteur SDM120 est mort et l'autre est boguĂ© lors de l'accĂšs via Modbus. Cependant, cela n'affecte pas le sujet de cet article - les graphiques seront construits de la mĂȘme maniĂšre que pour l'eau.Dans cet article, j'ai citĂ© les approches que j'ai moi-mĂȘme essayĂ©es. Il y a sĂ»rement d'autres façons d'organiser la collecte et la visualisation de donnĂ©es que je ne connais pas. Dites-le moi dans les commentaires, ça va ĂȘtre trĂšs intĂ©ressant pour moi. Je serai heureux de recevoir des critiques constructives et de nouvelles idĂ©es. J'espĂšre que le matĂ©riel prĂ©sentĂ© aidera Ă©galement quelqu'un.