Skip to content

1.3.0

Latest

Choose a tag to compare

@github-actions github-actions released this 13 Mar 23:48

Curs valutar BNR — Release Notes

v1.3.0 — 14 Martie 2026

Rescrierea completă a integrării pentru compatibilitate cu Home Assistant 2024.1+ și corectarea tuturor problemelor din versiunea anterioară.


Structură nouă

Fișier Rol
const.py Constante centralizate, definiții senzori data-driven
coordinator.py NOU — DataUpdateCoordinator separat
__init__.py Setup / unload / options listener
config_flow.py ConfigFlow + OptionsFlow (acum conectat)
sensor.py SensorManager dinamic + clase senzori
helpers.py NOU — Funcții utilitare de extragere date
diagnostics.py NOU — Suport diagnostice HA
strings.json NOU — Strings de bază pentru traduceri
manifest.json Actualizat la standardele moderne

Erori corectate

init.py

  • Înlocuit aiohttp.ClientSession() creat manual cu async_get_clientsession(hass) — pattern-ul corect HA care reutilizează sesiunea globală
  • Înlocuit datetime.now() cu homeassistant.util.dt.now() — timezone-aware
  • Eliminat importuri nefolosite (asyncio, Entity)
  • Adăugat update_listener pentru reîncărcarea automată la schimbarea opțiunilor
  • Adăugat config_entry_only_config_schema pentru validare corectă
  • Structurat hass.data[DOMAIN][entry_id] ca dict pentru extensibilitate

config_flow.py

  • Conectat OptionsFlow prin async_get_options_flow (anterior nu era legat)
  • Adăugat _abort_if_unique_id_configured() pentru prevenirea configurării multiple
  • Corectat accesul la opțiunile curente cu fallback la entry.data
  • Adăugat decoratorul @staticmethod și @callback lipsă

sensor.py

  • Eliminat setarea manuală a entity_id (HA gestionează asta automat)
  • Eliminat duplicarea masivă de cod (12 clase aproape identice → abordare data-driven)
  • Adăugat protecție completă la None / date lipsă în toate proprietățile
  • Eliminat state_class și native_unit_of_measurement pentru compatibilitate cu statisticile long-term existente (prevenire warning Recorder)

coordinator.py (extras din init.py)

  • Adăugat content_type=None la response.json() pentru toleranță content-type
  • Adăugat timeout explicit (30s) la request
  • Retry graceful: la eroare de fetch, păstrează datele anterioare în loc să dea UpdateFailed
  • Logare clară a intervalului orar și a motivului de skip/fetch

Funcționalități noi

Management dinamic al senzorilor (SensorManager)

  • Senzorii se creează doar când datele sunt disponibile în API
  • Când datele dispar, senzorii sunt eliminați complet din entity registry (nu „Unavailable")
  • Când datele revin, senzorii sunt recreați automat
  • La fiecare update al coordinator-ului, se face sincronizare automată

helpers.py

  • safe_float() — conversie robustă cu suport format românesc (virgulă → punct)
  • Extractori dedicați pentru fiecare tip de date:
    • extract_currency_data() — curs valutar (actual + anterior)
    • extract_fx_data() — schimb valutar CEC (sell + buy)
    • extract_robor_data() — ROBOR pe perioade
    • extract_euribor_data() — EURIBOR pe perioade
    • extract_ircc_zilnic_data() — IRCC zilnic + modificare
    • extract_ircc_trimestrial_data() — IRCC trimestrial + modificare
  • Toate funcțiile returnează None dacă datele lipsesc (fără excepții)

diagnostics.py

  • Suport complet pentru pagina de diagnostice din HA
  • Raportează: config entry, starea coordinator-ului, senzorii activi, rezumatul datelor
  • Nu expune date sensibile

strings.json

  • Fișier de bază pentru traduceri (folosit de HA pentru generare automată)

Manifest actualizat

{
  "homeassistant": "2024.1.0",
  "integration_type": "service",
  "version": "2.0.0"
}

Compatibilitate

  • Home Assistant 2024.1.0+
  • Python 3.11+
  • HACS compatibil
  • Backward-compatible cu statisticile long-term existente (fără native_unit_of_measurement)

☕ Susține dezvoltatorul

Dacă ți-a plăcut această integrare și vrei să sprijini munca depusă, invită-mă la o cafea! 🫶
Nu costă nimic, iar contribuția ta ajută la dezvoltarea viitoare a proiectului. 🙌

Buy Me A Coffee

Mulțumesc pentru sprijin și apreciez fiecare gest de susținere! 🤗