Grafana dashboard flexibilite/agregation

This commit is contained in:
Eric F
2026-06-09 18:59:37 -04:00
parent 1ab3a4a643
commit d1b57769c0
7 changed files with 986 additions and 0 deletions

View File

@@ -0,0 +1,92 @@
#!/usr/bin/env python3
"""Cariflex - Crée les assets et sensors pour la simulation météo et prix DSO."""
import json
import requests
import re
import warnings
warnings.filterwarnings("ignore")
from datetime import datetime, timezone, timedelta
FM_HOST = "https://cariflex.digitribe.fr"
CREDS_FILE = "/tmp/fm_creds.json"
with open(CREDS_FILE) as f:
creds = json.load(f)
session = requests.Session()
session.verify = False
# Login
r = session.get(f"{FM_HOST}/login")
match = re.search(r'<input[^>]*csrf_token[^>]*value="([^"]+)"', r.text)
csrf = match.group(1)
r = session.post(f"{FM_HOST}/login", data={
"email": creds["email"], "password": creds["password"],
"csrf_token": csrf, "remember": "y"
}, allow_redirects=True)
print(f"Login: {'OK' if 'dashboard' in r.url else 'FAILED'}")
# Get auth token for API
token = r.cookies.get("session", "")
headers = {"Authorization": f"Bearer {token}"} if token else {}
def fm_post(path, data=None, json_data=None):
url = f"{FM_HOST}/api/v3_0{path}"
r = session.post(url, data=data, json=json_data)
return r
def fm_get(path):
url = f"{FM_HOST}/api/v3_0{path}"
r = session.get(url)
return r
# ========================================
# 1. Créer les assets météo
# ========================================
print("\n=== Création des assets météo ===")
meteo_assets = [
{
"name": "Météo Martinique",
"asset_type_name": "Weather Station",
"latitude": 14.6091,
"longitude": -61.2155,
"sensors": [
{"name": "irradiance", "unit": "W/m²"},
{"name": "temperature", "unit": "°C"},
{"name": "wind_speed", "unit": "m/s"},
{"name": "humidity", "unit": "%"},
]
},
{
"name": "Prix DSO",
"asset_type_name": "Market",
"latitude": 14.6091,
"longitude": -61.2155,
"sensors": [
{"name": "consumption_price", "unit": "EUR/MWh"},
{"name": "production_price", "unit": "EUR/MWh"},
]
}
]
for asset in meteo_assets:
r = fm_post("/assets", json_data={
"name": asset["name"],
"latitude": asset["latitude"],
"longitude": asset["longitude"],
})
print(f" Asset '{asset['name']}': HTTP {r.status_code}")
if r.status_code in [200, 201]:
try:
resp = r.json()
asset_id = resp.get("id")
print(f" ID: {asset_id}")
except:
print(f" Response: {r.text[:200]}")
else:
print(f" Error: {r.text[:200]}")
print("\n=== Simulation setup complete ===")