Skip to content

2.0.0

Choose a tag to compare

@github-actions github-actions released this 02 Apr 22:24

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}_azi
  • sensor.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_ahead maxim: 2 (nu 3)
  • Corectat window_minutes minim: 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_minutes minim 15: Configurările cu valori 1–14 vor primi eroare la salvare. Trebuie setat la minim 15 minute.

Actualizare de la v1.x

  1. Actualizează fișierele prin HACS sau manual
  2. Restartează Home Assistant
  3. Dacă aveai window_minutes < 15, mergi la Configure → Setări și ajustează la minim 15
  4. (Opțional) Configurează pragurile de preț din Configure → Setări pentru filtrarea pe ferestre
  5. 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