Initial Cariflex project
- 40 FlexMeasures assets (10 PV, 10 Bat, 10 Chg, 10 EV) - Geolocated on Martinique - Documentation: architecture, deployment, concepts - Standards: Flex Ready, S2, OpenADR, EPEX SPOT - R&D tools: HAMLET, OPLEM, lemlab - Map patch: Mapbox -> OpenStreetMap
This commit is contained in:
79
scripts/init_flexmeasures_db.py
Normal file
79
scripts/init_flexmeasures_db.py
Normal file
@@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Cariflex - Initialise les actifs FlexMeasures dans la base de donnees."""
|
||||
import subprocess
|
||||
|
||||
def run_sql(query):
|
||||
result = subprocess.run([
|
||||
"docker", "exec", "flexmeasures-db", "psql", "-U", "flexmeasures", "-d", "flexmeasures",
|
||||
"-t", "-c", query
|
||||
], capture_output=True, text=True)
|
||||
return result.stdout.strip()
|
||||
|
||||
# 1. Create asset types
|
||||
print("=== Creating asset types ===")
|
||||
asset_types = [
|
||||
("Panneau Photovoltaique", "Installation de production d'energie solaire"),
|
||||
("Batterie de Stockage", "Systeme de stockage d'energie par batterie"),
|
||||
("Borne de Recharge VE", "Station de recharge pour vehicules electriques"),
|
||||
("Vehicule Electrique", "Vehicule electrique avec capacite vehicle-to-grid"),
|
||||
]
|
||||
for name, desc in asset_types:
|
||||
run_sql("INSERT INTO generic_asset_type (name, description) SELECT '{}', '{}' WHERE NOT EXISTS (SELECT 1 FROM generic_asset_type WHERE name = '{}');".format(name, desc, name))
|
||||
|
||||
types = run_sql("SELECT id, name FROM generic_asset_type;")
|
||||
print(types)
|
||||
|
||||
# Get type IDs from DB
|
||||
type_map = {}
|
||||
for line in types.split('\n'):
|
||||
parts = [p.strip() for p in line.split('|')]
|
||||
if len(parts) == 2:
|
||||
type_map[parts[1]] = int(parts[0])
|
||||
|
||||
pv_type = type_map.get('Panneau Photovoltaique', 1)
|
||||
bat_type = type_map.get('Batterie de Stockage', 2)
|
||||
chg_type = type_map.get('Borne de Recharge VE', 3)
|
||||
ev_type = type_map.get('Vehicule Electrique', 4)
|
||||
|
||||
print("Type IDs: PV={}, Bat={}, Charger={}, EV={}".format(pv_type, bat_type, chg_type, ev_type))
|
||||
|
||||
# 2. Create 10 assets of each type
|
||||
print("\n=== Creating assets ===")
|
||||
base_lat = 14.6091
|
||||
base_lon = -61.2155
|
||||
|
||||
configs = [
|
||||
('PV', pv_type, 'kW', 'capacity', 5),
|
||||
('Bat', bat_type, 'kWh', 'capacity', 100),
|
||||
('Chg', chg_type, 'kW', 'max_power', 22),
|
||||
('EV', ev_type, 'kWh', 'capacity', 75),
|
||||
]
|
||||
|
||||
for prefix, type_id, unit, attr_key, attr_val in configs:
|
||||
for i in range(1, 11):
|
||||
name = "{}_{:02d}".format(prefix, i)
|
||||
lat = base_lat + (i * 0.01)
|
||||
lon = base_lon + (i * 0.01)
|
||||
sensor = "{}_{:02d}_power".format(prefix.lower(), i)
|
||||
|
||||
# Create asset
|
||||
run_sql("""INSERT INTO generic_asset (name, latitude, longitude, generic_asset_type_id, account_id, attributes, flex_context, flex_model, sensors_to_show, sensors_to_show_as_kpis)
|
||||
SELECT '{}', {}, {}, {}, 1, '{{"{}": {}}}'::jsonb, '{{}}'::jsonb, '{{}}'::jsonb, '[]'::jsonb, '[]'::jsonb
|
||||
WHERE NOT EXISTS (SELECT 1 FROM generic_asset WHERE name = '{}');""".format(name, lat, lon, type_id, attr_key, attr_val, name))
|
||||
|
||||
# Get asset ID
|
||||
aid = run_sql("SELECT id FROM generic_asset WHERE name = '{}';".format(name))
|
||||
if aid:
|
||||
# Create sensor
|
||||
run_sql("""INSERT INTO sensor (name, unit, timezone, event_resolution, knowledge_horizon_fnc, knowledge_horizon_par, generic_asset_id, attributes)
|
||||
SELECT '{}', '{}', 'America/Martinique', '00:05:00', 'x_days_ago_at_y_oclock', '{{"x": 1, "y": 13, "z": "America/Martinique"}}'::json, {}, '{{}}'::jsonb
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sensor WHERE name = '{}');""".format(sensor, unit, aid, sensor))
|
||||
print(" {} (ID:{}) -> sensor {}".format(name, aid, sensor))
|
||||
else:
|
||||
print(" {} already exists".format(name))
|
||||
|
||||
print("\n=== Summary ===")
|
||||
for prefix, type_id, unit, _, _ in configs:
|
||||
n_assets = run_sql("SELECT COUNT(*) FROM generic_asset WHERE generic_asset_type_id = {};".format(type_id))
|
||||
n_sensors = run_sql("SELECT COUNT(*) FROM sensor WHERE generic_asset_id IN (SELECT id FROM generic_asset WHERE generic_asset_type_id = {});".format(type_id))
|
||||
print(" {}: {} assets, {} sensors".format(prefix, n_assets, n_sensors))
|
||||
Reference in New Issue
Block a user