You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Revise EV data model to replace 'EV' with 'Charger' and introduce detailed charger data model with metrics for charge/discharge capabilities and phase-level measurements.
@@ -307,3 +307,91 @@ Grid meter data with import/export and phase-level measurements:
307
307
|`L3_W`| W | float | L3 Phase Power |
308
308
|`total_import_Wh`| Wh | integer | Total Energy Imported |
309
309
|`total_export_Wh`| Wh | integer | Total Energy Exported |
310
+
311
+
### Charger Data Model
312
+
313
+
EV charger data with charge/discharge metrics and phase-level measurements. This DER type represents the charger's capability as a flexible load/source (uni- or bi-directional), with optional vehicle-specific attributes.
|`W`| W | integer | Active Power (+ charge/import to vehicle, - discharge/export from vehicle) |
355
+
|`lower_limit_W`| W | integer | Most-negative allowable power (e.g., -11000 for V2G discharge capability; 0 for uni-directional chargers without discharge support) |
356
+
|`upper_limit_W`| W | integer | Most-positive allowable power (e.g., 11000 for max charge) |
357
+
|`L1_V`| V | float | L1 Phase Voltage |
358
+
|`L1_A`| A | float | L1 Phase Current |
359
+
|`L1_W`| W | float | L1 Phase Power (computed as V * A) |
360
+
|`L2_V`| V | float | L2 Phase Voltage |
361
+
|`L2_A`| A | float | L2 Phase Current |
362
+
|`L2_W`| W | float | L2 Phase Power (computed as V * A) |
363
+
|`L3_V`| V | float | L3 Phase Voltage |
364
+
|`L3_A`| A | float | L3 Phase Current |
365
+
|`L3_W`| W | float | L3 Phase Power (computed as V * A) |
366
+
|`offered_A`| A | float | Current offered by charger (from OCPP) |
367
+
|`connected`| - | boolean | Is a vehicle connected? |
368
+
|`charging`| - | boolean | Is active charging/discharging occurring? |
369
+
|`vehicle_id`| - | string, optional | User-supplied or detected vehicle reference (null if unknown) |
|`total_import_Wh`| Wh | integer | Total Energy Imported (lifetime charge energy) |
375
+
|`total_export_Wh`| Wh | integer | Total Energy Exported (lifetime discharge energy; 0 if no V2G support) |
376
+
|`session_import_Wh`| Wh | integer | Session Energy Imported (reset on connect/disconnect) |
377
+
|`session_export_Wh`| Wh | integer | Session Energy Exported (reset on connect/disconnect) |
378
+
379
+
### Implications for EMS and Optimization
380
+
381
+
-**Control (realtime)**: EMS uses only W, lower_limit_W, upper_limit_W – it works regardless of data quality. If connected: false, clamp limits to 0. For phase balancing, use phase-data directly (e.g., to avoid overload on one phase). For chargers with V2G support (e.g., Ambibox), lower_limit can go negative – great for grid stabilization. For uni-directional chargers, lower_limit is 0.
382
+
383
+
-**Optimization (planning)**: This is where it gets interesting. If SoC and capacity are null/unknown, fallback to defaults (e.g., 60 kWh, start-SoC 0.3) and run conservatively: Optimize only based on limits, without long-term planning (e.g., "charge max now if spot price low, but no SoC-prediction"). With rich data (Ambibox/ISO 15118), full steam ahead: Calculate remaining Wh to full (capacity * (1 - SoC)), schedule discharge for peak hours. Estimation works ok for simple cases: At connect, set initial_SoC (user/default), update with session_import_Wh / capacity – but as you said, ignore losses initially (add 10% factor later). If the user charges elsewhere, reset at reconnect via user prompt.
384
+
385
+
-**Hierarchy-fit**: DEVICE becomes the charger's comm-point (OCPP/MQTT), DER is "charger". Fits perfectly with your example – SITE optimizes charger-DER alongside battery/PV. No need for sub-DERs.
386
+
387
+
### Thoughts on UX and Defaults for Launch
388
+
389
+
For December (V2X-launch), prioritize minimal viable: Run with Alt A (automatic + override) – it's user-friendly without being annoying. At connect (detect via OCPP):
390
+
391
+
1. If Ambibox/ISO 15118: Pull SoC/capacity auto.
392
+
393
+
2. Otherwise: Prompt "Car connected on charger X. Is it your [last/default car]? Yes/No" – choose from registry.
394
+
395
+
3. Override: Always button for manual SoC/input.
396
+
397
+
Defaults: 60 kWh capacity (average EV), 0.3 initial SoC (typical "low" level). For optimization, if unknown: Assume infinite capacity (no SoC-clamp) or conservative (plan for 20 kWh flex). That's enough for launch – accurate SoC is nice-to-have for advanced optimization, but realtime control (limits) is must-have. You can A/B-test API integrations (Tesla/Volvo) post-launch to automate more – e/acc-style, iterate fast.
0 commit comments