« InfluxDB » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| (4 versions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 10 : | Ligne 10 : | ||
Peut s'utiliser avec Python qui se charge de la partie amont pour alimenter influxDB. | Peut s'utiliser avec Python qui se charge de la partie amont pour alimenter influxDB. | ||
Avec Home Assistant le couplage est automatisé, il faut ajouter quelques lignes dans le fichier configuration.yaml. | |||
== Configuration Home Assistant == | == Configuration Home Assistant == | ||
Ajouter ceci dans configuration.xml, | Ajouter ceci dans configuration.xml, en mettant l'adresse publique de la box et en mettant une source personnalisée, source: xxxx | ||
<pre> | <pre> | ||
| Ligne 34 : | Ligne 36 : | ||
--header "Content-Type: text/plain; charset=utf-8" \ | --header "Content-Type: text/plain; charset=utf-8" \ | ||
--data-binary "sensor_temp,source=HAdenis,entity=sensor.temp_tuya_19_3_2014_2_temperature value=8.5" | --data-binary "sensor_temp,source=HAdenis,entity=sensor.temp_tuya_19_3_2014_2_temperature value=8.5" | ||
</pre> | |||
Un exemple en précisant le capteur à suivre, | |||
<pre> | |||
influxdb: | |||
api_version: 2 | |||
ssl: false | |||
host: "88.136.157.51" | |||
port: 8086 | |||
token: "rkFHS03mqejy32-FLeY7ASscBs8cnBsILRFZ9M6_UijtA09-vkT5lZhxzxFJXIf6XUDgnYlueyyp0eqEW9lGzA==" | |||
organization: "mv" | |||
bucket: "temperature-exterieure" | |||
tags: | |||
source: "HAdenis" | |||
include: | |||
entities: | |||
- sensor.temp_tuya_19_3_2014_2_temperature | |||
</pre> | |||
Et un exemple de script de consultation des données en Python, | |||
<pre> | |||
from influxdb_client import InfluxDBClient | |||
import matplotlib.pyplot as plt | |||
import pandas as pd | |||
from datetime import datetime, timedelta, timezone | |||
# Connexion à InfluxDB | |||
url = "http://88.136.157.51:8086" # Remplacez par l'URL de votre InfluxDB | |||
token = "rkFHS03mqejy32-FLeY7ASscBs8cnBsILRFZ9M6_UijtA09-vkT5lZhxzxFJXIf6XUDgnYlueyyp0eqEW9lGzA==" # Remplacez par votre token d'accès | |||
org = "mv" # Remplacez par votre organisation | |||
bucket = "temperature-exterieure" | |||
client = InfluxDBClient(url=url, token=token, org=org) | |||
query_api = client.query_api() | |||
# Requête Flux | |||
query = f''' | |||
from(bucket: "{bucket}") | |||
|> range(start: -1d, stop: now()) | |||
|> filter(fn: (r) => r["source"] == "Fred" or r["source"] == "HA37" or r["source"] == "HAdenis" or r["source"] == "HAdominique") | |||
|> filter(fn: (r) => r["_measurement"] == "°C") | |||
|> filter(fn: (r) => r["entity_id"] == "ewelink_th01_temperature_2" or r["entity_id"] == "daikinap43817_climatecontrol_outdoor_temperature" or r["entity_id"] == "t_ext" or r["entity_id"] == "temp_tuya_19_3_2014_2_temperature") | |||
|> filter(fn: (r) => r["_field"] == "value") | |||
|> aggregateWindow(every: 1h, fn: mean, createEmpty: false) | |||
|> yield(name: "mean") | |||
''' | |||
# Exécuter la requête | |||
result = query_api.query(query) | |||
# Préparer les données pour le graphique | |||
timestamps = [] | |||
values = [] | |||
labels = [] | |||
for table in result: | |||
for record in table.records: | |||
timestamps.append(record.get_time()) | |||
values.append(record.get_value()) | |||
labels.append(record.values.get('entity_id', '')) | |||
# Créer un DataFrame pour faciliter l'affichage | |||
df = pd.DataFrame({ | |||
'timestamp': timestamps, | |||
'value': values, | |||
'entity_id': labels | |||
}) | |||
# Afficher les données sous forme de graphique | |||
plt.figure(figsize=(10, 6)) | |||
for entity_id in df['entity_id'].unique(): | |||
subset = df[df['entity_id'] == entity_id] | |||
plt.plot(subset['timestamp'], subset['value'], label=entity_id) | |||
plt.xlabel('Temps') | |||
plt.ylabel('Température (°C)') | |||
plt.title('Température extérieure par source') | |||
plt.xticks(rotation=45) | |||
plt.legend() | |||
plt.tight_layout() | |||
plt.show() | |||
</pre> | </pre> | ||
Dernière version du 29 janvier 2025 à 21:50
Installation sous Proxmox,
https://community-scripts.github.io/ProxmoxVE/scripts?id=influxdb
Version 2, avec Telegraph.
Objectif : stocker des données en séries temporelles pour les exploiter ensuite sous forme de graphique ou tableau de bord.
En lien avec une source de données temps réel par exemple.
Peut s'utiliser avec Python qui se charge de la partie amont pour alimenter influxDB.
Avec Home Assistant le couplage est automatisé, il faut ajouter quelques lignes dans le fichier configuration.yaml.
Configuration Home Assistant
Ajouter ceci dans configuration.xml, en mettant l'adresse publique de la box et en mettant une source personnalisée, source: xxxx
influxdb:
api_version: 2
ssl: false
host: 192.168.1.84
port: 8086
token: rkFHS03mqejy32-FLeY7ASscBs8cnBsILRFZ9M6_UijtA09-vkT5lZhxzxFJXIf6XUDgnYlueyyp0eqEW9lGzA==
organization: mv
bucket: temperature-exterieure
tags:
source: HAmv
Exemple de requete curl pour envoyer une requête à influxDB,
curl -i -X POST "http://88.136.157.51:8086/api/v2/write?org=mv&bucket=temperature-exterieure" \ --header "Authorization: Token rkFHS03mqejy32-FLeY7ASscBs8cnBsILRFZ9M6_UijtA09-vkT5lZhxzxFJXIf6XUDgnYlueyyp0eqEW9lGzA==" \ --header "Content-Type: text/plain; charset=utf-8" \ --data-binary "sensor_temp,source=HAdenis,entity=sensor.temp_tuya_19_3_2014_2_temperature value=8.5"
Un exemple en précisant le capteur à suivre,
influxdb:
api_version: 2
ssl: false
host: "88.136.157.51"
port: 8086
token: "rkFHS03mqejy32-FLeY7ASscBs8cnBsILRFZ9M6_UijtA09-vkT5lZhxzxFJXIf6XUDgnYlueyyp0eqEW9lGzA=="
organization: "mv"
bucket: "temperature-exterieure"
tags:
source: "HAdenis"
include:
entities:
- sensor.temp_tuya_19_3_2014_2_temperature
Et un exemple de script de consultation des données en Python,
from influxdb_client import InfluxDBClient
import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime, timedelta, timezone
# Connexion à InfluxDB
url = "http://88.136.157.51:8086" # Remplacez par l'URL de votre InfluxDB
token = "rkFHS03mqejy32-FLeY7ASscBs8cnBsILRFZ9M6_UijtA09-vkT5lZhxzxFJXIf6XUDgnYlueyyp0eqEW9lGzA==" # Remplacez par votre token d'accès
org = "mv" # Remplacez par votre organisation
bucket = "temperature-exterieure"
client = InfluxDBClient(url=url, token=token, org=org)
query_api = client.query_api()
# Requête Flux
query = f'''
from(bucket: "{bucket}")
|> range(start: -1d, stop: now())
|> filter(fn: (r) => r["source"] == "Fred" or r["source"] == "HA37" or r["source"] == "HAdenis" or r["source"] == "HAdominique")
|> filter(fn: (r) => r["_measurement"] == "°C")
|> filter(fn: (r) => r["entity_id"] == "ewelink_th01_temperature_2" or r["entity_id"] == "daikinap43817_climatecontrol_outdoor_temperature" or r["entity_id"] == "t_ext" or r["entity_id"] == "temp_tuya_19_3_2014_2_temperature")
|> filter(fn: (r) => r["_field"] == "value")
|> aggregateWindow(every: 1h, fn: mean, createEmpty: false)
|> yield(name: "mean")
'''
# Exécuter la requête
result = query_api.query(query)
# Préparer les données pour le graphique
timestamps = []
values = []
labels = []
for table in result:
for record in table.records:
timestamps.append(record.get_time())
values.append(record.get_value())
labels.append(record.values.get('entity_id', ''))
# Créer un DataFrame pour faciliter l'affichage
df = pd.DataFrame({
'timestamp': timestamps,
'value': values,
'entity_id': labels
})
# Afficher les données sous forme de graphique
plt.figure(figsize=(10, 6))
for entity_id in df['entity_id'].unique():
subset = df[df['entity_id'] == entity_id]
plt.plot(subset['timestamp'], subset['value'], label=entity_id)
plt.xlabel('Temps')
plt.ylabel('Température (°C)')
plt.title('Température extérieure par source')
plt.xticks(rotation=45)
plt.legend()
plt.tight_layout()
plt.show()