2.0.0
OPCOM România v2.0.0
Data release: 2026-04-03
Versiune anterioară: 1.8.0
Ce aduce v2.0.0
Această versiune majoră introduce filtrarea pe prag de preț pentru senzorii binari de fereastră, senzori noi pentru toate prețurile zilei și percentilă, și mai multe corecturi care îmbunătățesc fiabilitatea și acuratețea datelor.
Funcționalități noi
Filtrare pe prag de preț — senzorii „Ar trebui să încarce/exporte acum"
Senzorii binari de fereastră (binary_sensor.ar_trebui_sa_incarce_acum_pt* și binary_sensor.ar_trebui_sa_exporte_acum_pt*) respectă acum pragurile de preț configurate:
- Import (încărcare): senzorul se activează doar dacă intervalul curent e într-o fereastră ieftină ȘI prețul curent ≤
price_threshold_low - Export: senzorul se activează doar dacă intervalul curent e într-o fereastră scumpă ȘI prețul curent ≥
price_threshold_high - Fără prag configurat: comportamentul rămâne identic cu v1.x (doar pe baza ferestrei)
Atribute noi expuse de acești senzori:
Pret curent— prețul intervalului activ (RON/MWh)Prag— valoarea pragului configurat sau „dezactivat"Blocat de prag— apare doar când senzorul e OFF din cauza pragului (ex: „preț sub prag export")
Senzori „Toate prețurile" (2 per rezoluție)
Senzori noi care expun toate prețurile zilei într-un singur loc:
sensor.toate_preturile_azi_pt{res}_azisensor.toate_preturile_maine_pt{res}_maine
Valoare principală (state): media aritmetică a prețurilor zilei (RON/MWh).
Atribute: dicționar complet HH:MM → preț pentru fiecare interval, orele convertite în timezone-ul local HA. Ideal pentru Apexcharts, Node-RED, template sensors, sau orice automatizare care are nevoie de profilul complet al prețurilor.
Senzor percentilă (1 per rezoluție)
sensor.percentila_pret_pt{res}_azi
Valoare 0–100% indicând poziția prețului curent în distribuția zilei. 0% = cel mai ieftin, 100% = cel mai scump. Util în automatizări: „dacă percentila < 30%, încarcă bateria".
Corecturi (Bug Fixes)
Validare window_minutes aliniată cu coordinator-ul
Problemă: config_flow accepta valori 1–14 minute pentru fereastră, dar coordinator-ul le clamp-a silențios la 15. Utilizatorul vedea „am setat 10 minute" dar integrarea folosea 15.
Rezolvare: Validarea din config_flow respinge acum valori sub 15 minute (window_minutes < 15 → eroare), consistent cu limita reală a coordinator-ului.
state_class = "measurement" pe OpcomAllPricesSensor
Problemă: Senzorul „Toate prețurile" nu avea state_class, ceea ce împiedica Home Assistant să colecteze statistici long-term (min/max/medie în History).
Rezolvare: Adăugat _attr_state_class = "measurement" — HA înregistrează acum statistici corecte.
Eliminat apelul dublu safe_float() în OpcomAllPricesSensor
Problemă: Fiecare rând era procesat cu două apeluri safe_float() — o dată pentru filtrare, o dată pentru valoare. Ineficient pe 96 de intervale.
Rezolvare: Refactorizat într-un singur apel per rând, stocat în variabilă intermediară:
# Înainte (v1.x):
prices = [
safe_float(r.get("pret_lei_mwh"))
for r in rows
if safe_float(r.get("pret_lei_mwh")) is not None
]
# Acum (v2.0.0):
prices: list[float] = []
for r in rows:
p = safe_float(r.get("pret_lei_mwh"))
if p is not None:
prices.append(p)Documentație
Toate cele 4 fișiere de documentație au fost rescrise complet pentru a reflecta starea reală a integrării:
- README.md — Referință completă cu toate cele 21 entități per rezoluție (63 total), entity ID-uri corecte, comportament praguri, exemple de automatizări
- SETUP.md — Ghid de instalare actualizat cu toți cei 9 parametri de configurare, inclusiv pragurile de preț
- FAQ.md — Întrebări frecvente actualizate cu secțiuni despre licență, praguri, percentilă, rolling vs individual
- DEBUG.md — Ghid de depanare cu log-uri reale, mesaje de retry/backoff, izolare per-zi/per-rezoluție, și diagnostice licență
Modificări cheie în documentație:
- Corectat numărul de entități: 63 total (nu 36)
- Corectat
days_aheadmaxim: 2 (nu 3) - Corectat
window_minutesminim: 15 (nu 1) - Adăugată documentație licență (transparent despre cerința de licență, trial, activare)
- Adăugat badge HA actualizat la 2024.1.0+
- Adăugată structura completă a fișierelor (inclusiv license.py, strings.json)
Entități — Referință rapidă
Cu configurarea implicită (rezoluții 15, 30, 60) integrarea creează 63 entități (21 per rezoluție):
11 senzori per rezoluție:
| Senzor | Entity ID (ex. res=15) |
|---|---|
| Preț acum | sensor.pret_acum_pt15_azi |
| Preț următor | sensor.pret_urmator_pt15_azi |
| Cea mai ieftină fereastră azi | sensor.cea_mai_ieftina_fereastra_azi_pt15_azi |
| Cea mai scumpă fereastră azi | sensor.cea_mai_scumpa_fereastra_azi_pt15_azi |
| Cea mai ieftină fereastră mâine | sensor.cea_mai_ieftina_fereastra_maine_pt15_maine |
| Cea mai scumpă fereastră mâine | sensor.cea_mai_scumpa_fereastra_maine_pt15_maine |
| Intervale rămase cumpărare | sensor.intervale_ramase_cumparare_pt15_azi |
| Intervale rămase vânzare | sensor.intervale_ramase_vanzare_pt15_azi |
| Percentilă preț | sensor.percentila_pret_pt15_azi |
| Toate prețurile azi | sensor.toate_preturile_azi_pt15_azi |
| Toate prețurile mâine | sensor.toate_preturile_maine_pt15_maine |
10 senzori binari per rezoluție:
| Senzor binar | Entity ID (ex. res=15) |
|---|---|
| Ar trebui să încarce acum (fereastră + prag) | binary_sensor.ar_trebui_sa_incarce_acum_pt15 |
| Ar trebui să exporte acum (fereastră + prag) | binary_sensor.ar_trebui_sa_exporte_acum_pt15 |
| Interval ieftin acum (individual) | binary_sensor.interval_ieftin_acum_pt15 |
| Interval scump acum (individual) | binary_sensor.interval_scump_acum_pt15 |
| Preț sub prag | binary_sensor.pret_sub_prag_pt15 |
| Preț peste prag | binary_sensor.pret_peste_prag_pt15 |
| Preț ieftin percentilă (bottom 25%) | binary_sensor.pret_ieftin_percentila_pt15 |
| Preț scump percentilă (top 25%) | binary_sensor.pret_scump_percentila_pt15 |
| Ieftin din intervalele rămase (rolling) | binary_sensor.ieftin_din_ramase_pt15 |
| Scump din intervalele rămase (rolling) | binary_sensor.scump_din_ramase_pt15 |
Breaking Changes
window_minutesminim 15: Configurările cu valori 1–14 vor primi eroare la salvare. Trebuie setat la minim 15 minute.
Actualizare de la v1.x
- Actualizează fișierele prin HACS sau manual
- Restartează Home Assistant
- Dacă aveai
window_minutes < 15, mergi la Configure → Setări și ajustează la minim 15 - (Opțional) Configurează pragurile de preț din Configure → Setări pentru filtrarea pe ferestre
- Noii senzori (Toate prețurile, Percentilă) apar automat
Nu necesită ștergerea și reconfigurarea integrării.
Fișiere modificate
custom_components/opcom/
├── manifest.json — versiune 1.8.0 → 2.0.0
├── config_flow.py — validare window_minutes < 15
├── sensor.py — state_class pe AllPrices, refactor safe_float
├── binary_sensor.py — filtrare prag pe OpcomBinaryWindow (3 metode noi + is_on + atribute)
├── README.md — rescris complet
├── SETUP.md — rescris complet
├── FAQ.md — rescris complet
└── DEBUG.md — rescris complet
📈 Integrarea în cifre
| ⭐ Stars | 📥 Instalări | 🔄 Clone (14z) |
|---|---|---|
| 2 | 930 | 444 |
Dacă integrarea OPCOM România îți este utilă, lasă un ⭐ pe repository — îi ajută și pe alți utilizatori să o descopere.
💛 Dezvoltarea consumă timp și resurse. Dacă vrei să susții proiectul:
☕ Buy Me a Coffee · 💰 GitHub Sponsors