Retrouvez ici la configuration du Dashboard Grafana donné en exemple.
Le dashboard Grafana que j’utilise reprend plus ou moins les mêmes informations que dans Home Assistant. Il se source sur les données MQTT collectées grâce à Telegraf dans une base de données InfluxDb et intégrées dans Grafana dans une table mqtt_consumer
. La configuration de Telegraf pour lire les messages MQTT est donnée en bas de cette page.
L’histogramme de consommation journalier prend les index heures creuses et heures pleines pour calculer les consommation par heure :
La requête utilisée est basée sur la fonction non_negative_derivative
(exemple pour les heures pleines teleinfokit/hp
) :
SELECT non_negative_derivative(mean("value"), 1h) FROM "mqtt_consumer" WHERE ("topic" = 'teleinfokit/hp') AND $timeFilter GROUP BY time(1h) fill(previous)
Pour le second graphe journalier sur les 6 derniers mois le principe est le même, avec les valeurs HC et HP « stackées » :
Les requêtes sont sur ce schéma :
SELECT non_negative_derivative(mean("value"), 1d) FROM "mqtt_consumer" WHERE ("topic" = 'teleinfokit/hp' ) AND $timeFilter GROUP BY time(1d) fill(previous)
Fichier JSON de ce dashboard Grafana
Pour ceux qui sont intéressés, vous trouverez ici le fichier de configuration complet de mon dashboard au format json.
Configuration Telegraf
Afin d’alimenter la base InfluxDb, le composant Telegraf est configuré pour lire les topics MQTT sur lesquels le teleinfokit va pousser les données. Il s’agit d’une section [[inputs.mqtt_consumer]]
:
# Read metrics from MQTT topic(s)
[[inputs.mqtt_consumer]]
## MQTT broker URLs to be used. The format should be scheme://host:port,
## schema can be tcp, ssl, or ws.
servers = ["tcp://localhost:1883"]
## QoS policy for messages
## 0 = at most once
## 1 = at least once
## 2 = exactly once
##
## When using a QoS of 1 or 2, you should enable persistent_session to allow
## resuming unacknowledged messages.
qos = 0
## Connection timeout for initial connection in seconds
connection_timeout = "30s"
## Maximum messages to read from the broker that have not been written by an
## output. For best throughput set based on the number of metrics within
## each message and the size of the output's metric_batch_size.
##
## For example, if each message from the queue contains 10 metrics and the
## output metric_batch_size is 1000, setting this to 100 will ensure that a
## full batch is collected and the write is triggered immediately without
## waiting until the next flush_interval.
# max_undelivered_messages = 1000
## Topics to subscribe to
topics = [
"teleinfokit/#"
]
# if true, messages that can't be delivered while the subscriber is offline
# will be delivered when it comes back (such as on service restart).
# NOTE: if true, client_id MUST be set
persistent_session = false
# If empty, a random client ID will be generated.
client_id = ""
## username and password to connect MQTT server.
username = "#REDACTED#"
password = "#REDACTED#"
# ## Optional TLS Config
# # tls_ca = "/etc/telegraf/ca.pem"
# # tls_cert = "/etc/telegraf/cert.pem"
# # tls_key = "/etc/telegraf/key.pem"
# ## Use TLS but skip chain & host verification
# # insecure_skip_verify = false
#
# ## Data format to consume.
# ## Each data format has its own unique set of configuration options, read
# ## more about them here:
# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
# data_format = "influx"
data_format = "value"
data_type = "float"
Ceci est une configuration « standard », qui sera a adapter à votre cas en particulier sur l’adresse du serveur MQTT et le login/password.