Grafana dashboard flexibilite/agregation
This commit is contained in:
92
scripts/create_simulation_assets.py
Normal file
92
scripts/create_simulation_assets.py
Normal 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 ===")
|
||||
Reference in New Issue
Block a user