2.4.0
CNAIR eRovinieta v2.4.0
Migrare completă la arhitectura async
Clientul HTTP a fost rescris integral de la requests (sincron, blocant) la aiohttp (async nativ). Sesiunea HTTP utilizează cookie jar pentru persistența JSESSIONID și include timeout de 30 de secunde. Token-ul de autentificare este monitorizat cu time.monotonic() și se reautentifică automat la expirare sau la răspunsuri 401/403. Sesiunea este închisă corect atât la dezinstalare, cât și la erori de setup.
Fișiere noi
exceptions.py— Ierarhie proprie de excepții (ErovinietaAuthError,ErovinietaConnectionError,ErovinietaApiError), toate derivate dinHomeAssistantError.helpers.py— Funcții utilitare partajate:format_timestamp_ms,safe_get,sanitize_plate_no,capitalize_name,redact_data.diagnostics.py— Export diagnostic complet cu redactare automată a datelor sensibile (username, password, CNP/CUI, email, telefon, adresă, VIN, serie certificat, număr de înmatriculare, JSESSIONID, câmpulcont).
Bugfix-uri critice
- Overflow atribute 16KB — Senzorii
TreceriPodSensorșiPlataTreceriPodSensorstocau toate trecerile de pod ca atribute de stare, depășind limita recorder-ului. Acum se păstrează doar ultimele 20 de înregistrări, sortate descrescător după timestamp. - Date învechite la VehiculSensor — Senzorul stoca o referință la dicționarul vehiculului din
__init__, care nu se actualiza niciodată la refresh. Acum datele sunt citite proaspăt din coordinator la fiecare acces. - URL-uri
.format()defecte —URL_TRANZACTIIșiURL_DETALII_TRANZACTIEaveau un bug de formatare (linia a doua nu era f-string, iar{{dateFrom}}rămânea literal). Rezolvat prin concatenareBASE_URL + "...". - Timestamps fără timezone — Toate apelurile
datetime.fromtimestamp()au fost înlocuite cudt_util.utc_from_timestamp().astimezone(dt_util.DEFAULT_TIME_ZONE). - Diagnostics —
AttributeError— Se accesacoordinator.last_update_success_time(inexistent). Corectat lacoordinator.last_update_success(bool).
Config Flow modernizat
- Reconfigure flow — Permite schimbarea parolei din meniul de opțiuni al integrării, fără dezinstalare.
- Reauth flow — Se declanșează automat când credențialele expiră sau se schimbă.
- Selectoare moderne —
NumberSelector(BOX pentru interval, SLIDER pentru istoric) șiTextSelectorcu tip PASSWORD. - Eliminare checkbox — Toate câmpurile folosesc
vol.Requiredcu valori implicite.vol.Optionalgenera un checkbox de activare/dezactivare în UI-ul HA, fără sens în acest context.
Corectare ID-uri entități
Device name schimbat de la "CNAIR eRovinieta" la "eRovinieta". Entitățile se creează acum cu prefixul sensor.erovinieta_* în loc de sensor.cnair_erovinieta_*.
Redactare date sensibile în diagnostice
Funcția redact_data acoperă: username, password, cnpCui, email, telefon, adresa, vin, certificateSeries, nume, cont, plateNo, paymentPlateNo, JSESSIONID.
Actualizare traduceri
Toate cele 5 limbi (ro, en, de, fr, es) au fost actualizate cu textele pentru reconfigure, reauth_confirm și mesajele noi de eroare/abort.
Alte îmbunătățiri
DeviceInfoca dataclass (nu dict), cumanufacturer="CNAIR"șisw_versiondin constante.- Toți senzorii folosesc
native_value(modern) în loc destate(legacy). manifest.jsoninclude"integration_type": "service".- Coordinator modern cu
ConfigEntryAuthFailed(declanșează reauth) șiUpdateFailed(declanșează retry). - Validare sintactică trecută pentru toate cele 9 fișiere Python și 6 fișiere JSON.
📈 Integrarea în cifre
| ⭐ Stars | 📥 Instalări | 🔄 Clone (14z) |
|---|---|---|
| 36 | 568 | 275 |
Dacă integrarea CNAIR eRovinieta îț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