{"id":25059847,"url":"https://github.com/cnecrea/eonromania","last_synced_at":"2026-04-01T22:18:39.399Z","repository":{"id":270197219,"uuid":"909577154","full_name":"cnecrea/eonromania","owner":"cnecrea","description":"Integrare pentru accesarea informațiilor contului E.ON România. Preia și monitorizează datele tale de utilități E.ON România direct în Home Assistant.","archived":false,"fork":false,"pushed_at":"2026-03-26T16:47:57.000Z","size":1162,"stargazers_count":54,"open_issues_count":0,"forks_count":5,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-03-27T05:36:09.970Z","etag":null,"topics":["electricitate","eon","eonromania","gaz","home-assistant","monitorizare"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cnecrea.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"buy_me_a_coffee":"cnecrea","github":"cnecrea"}},"created_at":"2024-12-29T06:07:03.000Z","updated_at":"2026-03-26T16:48:01.000Z","dependencies_parsed_at":null,"dependency_job_id":"b1396344-9b78-48a4-9c92-a1d36f75d589","html_url":"https://github.com/cnecrea/eonromania","commit_stats":null,"previous_names":["cnecrea/eonromania"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/cnecrea/eonromania","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnecrea%2Feonromania","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnecrea%2Feonromania/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnecrea%2Feonromania/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnecrea%2Feonromania/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cnecrea","download_url":"https://codeload.github.com/cnecrea/eonromania/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnecrea%2Feonromania/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31292637,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T21:15:39.731Z","status":"ssl_error","status_checked_at":"2026-04-01T21:15:34.046Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["electricitate","eon","eonromania","gaz","home-assistant","monitorizare"],"created_at":"2025-02-06T15:55:17.695Z","updated_at":"2026-04-01T22:18:39.389Z","avatar_url":"https://github.com/cnecrea.png","language":"Python","funding_links":["https://buymeacoffee.com/cnecrea","https://github.com/sponsors/cnecrea"],"categories":[],"sub_categories":[],"readme":"# E·ON România — Integrare Home Assistant\n\n[![Home Assistant](https://img.shields.io/badge/Home%20Assistant-2025.11%2B-41BDF5?logo=homeassistant\u0026logoColor=white)](https://www.home-assistant.io/)\n[![HACS Custom](https://img.shields.io/badge/HACS-Custom-41BDF5.svg)](https://github.com/hacs/integration)\n[![GitHub Release](https://img.shields.io/github/v/release/cnecrea/eonromania)](https://github.com/cnecrea/eonromania/releases)\n[![GitHub Stars](https://img.shields.io/github/stars/cnecrea/eonromania?style=flat\u0026logo=github)](https://github.com/cnecrea/eonromania/stargazers)\n[![Instalări](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/cnecrea/eonromania/main/statistici/shields/descarcari.json)](https://github.com/cnecrea/eonromania)\n[![Ultima versiune](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/cnecrea/eonromania/main/statistici/shields/ultima_release.json)](https://github.com/cnecrea/eonromania/releases/latest)\n\nIntegrare custom pentru [Home Assistant](https://www.home-assistant.io/) care monitorizează datele contractuale, consumul și facturile prin API-ul [E·ON România](https://www.eon.ro/) (aplicația mobilă E·ON Myline).\n\nOferă senzori dedicați per cod de încasare pentru contract, index curent, sold, facturi, plăți, istoric citiri, convenție consum, citire permisă, și butoane de trimitere index per utilitate. Suportă complet contracte DUO (colective gaz + electricitate).\n\n---\n\n## Ce face integrarea\n\n- **Descoperire automată** a contractelor asociate contului E·ON Myline\n- **Selectare granulară** a contractelor pe care vrei să le monitorizezi (checkbox-uri cu adrese complete)\n- **Multi-contract** — un singur cont E·ON poate monitoriza mai multe coduri de încasare simultan\n- **Suport complet DUO** — contractele colective (gaz + electricitate sub un singur cod) sunt detectate automat, cu senzori separați per subcontract (index, citire permisă, convenție consum)\n- **Senzori dedicați** per contract selectat — fiecare contract devine un device dedicat\n- **Sold și facturi** — existență sold (Da/Nu), facturi restante cu detalii în atribute, format românesc (1.234,56 lei)\n- **Istoric citiri** — indexuri lunare cu tip citire (autocitit / estimat / citit distribuitor)\n- **Arhivă plăți** — plățile efectuate pe an, cu total anual\n- **Arhivă consum** — consum lunar și mediu zilnic per an, cu separatorul zecimal românesc (virgulă)\n- **Adrese normalizate** — formatare corectă din datele API în format românesc\n- **Mapping județe** — coduri scurte (AB, BV, CJ) convertite automat în denumiri complete (Alba, Brașov, Cluj)\n- **Reconfigurare fără reinstalare** — OptionsFlow pentru modificarea credențialelor și selecției contractelor\n\n---\n\n## Sursa datelor\n\nDatele vin prin API-ul aplicației mobile E·ON Myline (`api2.eon.ro`), care expune endpoint-uri REST pentru:\n\n| Endpoint | Descriere |\n|----------|-----------|\n| contract-details | Detalii contract (prețuri, adresă, PCS) |\n| account-contracts/list | Listă subcontracte (pentru contracte DUO) |\n| invoices/list | Facturi neachitate |\n| invoices/list-prosum | Facturi prosumator |\n| invoice-balance | Sold factură |\n| invoice-balance-prosum | Sold prosumator |\n| rescheduling-plans | Planuri de eșalonare |\n| graphic-consumption | Grafic consum anual (arhivă consum) |\n| meter-reading/index | Index curent contor |\n| meter-reading/history | Istoric citiri contor |\n| consumption-convention | Convenție consum |\n| payments/payment-list | Istoric plăți |\n\nAutentificarea se face cu email + parolă + semnătură HMAC-MD5 (mobile-login). Token-ul expirat (401) este reînnoit automat.\n\n---\n\n## Instalare\n\n### HACS (recomandat)\n\n1. Deschide HACS în Home Assistant\n2. Click pe cele 3 puncte (⋮) din colțul dreapta sus → **Custom repositories**\n3. Adaugă URL-ul: `https://github.com/cnecrea/eonromania`\n4. Categorie: **Integration**\n5. Click **Add** → găsește „E·ON România\" → **Install**\n6. Restartează Home Assistant\n\n### Manual\n\n1. Copiază folderul `custom_components/eonromania/` în directorul `config/custom_components/` din Home Assistant\n2. Restartează Home Assistant\n\n---\n\n## Configurare\n\n### Pasul 1 — Adaugă integrarea\n\n1. **Setări** → **Dispozitive și Servicii** → **Adaugă Integrare**\n2. Caută „**E·ON românia**\"\n3. Completează formularul:\n\n| Câmp | Descriere | Implicit |\n|------|-----------|----------|\n| **Email** | Adresa de email a contului E·ON Myline | — |\n| **Parolă** | Parola contului E·ON Myline | — |\n| **Interval actualizare** | Secunde între interogările API | `3600` (1 oră) |\n\n### Pasul 2 — Selectează contractele\n\nDupă autentificare, contractele sunt descoperite automat. Fiecare contract apare cu adresa completă normalizată:\n\n```\nStrada Florilor 15, ap. 8, Cluj-Napoca, jud. Cluj ➜ 004412345678 (Gaz)\nBulevardul Independenței 42, Brașov, jud. Brașov ➜ 009900123456 (Colectiv/DUO)\n```\n\nSelectezi individual sau bifezi „Selectează toate contractele\".\n\n### Pasul 3 — Reconfigurare (opțional)\n\nToate setările pot fi modificate după instalare, fără a șterge integrarea:\n\n1. **Setări** → **Dispozitive și Servicii** → click pe **E·ON România**\n2. Click pe **Configurare** (⚙️)\n3. Modifică setările dorite → **Salvează**\n4. Integrarea se reîncarcă automat cu noile setări\n\nDetalii complete în [SETUP.md](SETUP.md).\n\n---\n\n## Entități create\n\nIntegrarea creează un **device** per contract selectat. Sub fiecare device se creează senzori și butoane de trimitere index (câte un buton per utilitate).\n\n### Contract individual (gaz sau electricitate)\n\n| Entitate | Descriere | Valoare principală |\n|----------|-----------|-------------------|\n| `Date contract` | Detalii contract (prețuri, adresă, PCS) | Cod încasare |\n| `Sold factură` | Există sold de plată? | Da / Nu |\n| `Sold prosumator` | Există sold prosumator? | Da / Nu |\n| `Index gaz` / `Index energie electrică` | Index contor curent | Valoare index |\n| `Citire permisă` | Autocitire activă? | Da / Nu |\n| `Factură restantă` | Facturi neachitate cu calcul zile scadență | Da / Nu |\n| `Factură restantă prosumator` | Facturi prosumator (datorii + credite) | Da / Nu |\n| `Convenție consum` | Consum lunar convenit | Da / Nu |\n| `Planuri eșalonare` | Planuri de eșalonare (condiționat) | Număr planuri |\n| `{an} → Arhivă index gaz` / `energie electrică` | Indexuri lunare per an | Număr citiri |\n| `{an} → Arhivă plăți` | Plăți lunare per an | Număr plăți |\n| `{an} → Arhivă consum gaz` / `energie electrică` | Consum lunar + mediu zilnic per an | Total consum |\n\n### Contract colectiv / DUO (gaz + electricitate)\n\nPe lângă senzorii de bază (Date contract, Sold factură, Factură restantă, etc.), contractele DUO generează senzori suplimentari per subcontract:\n\n| Entitate | Descriere | Valoare principală |\n|----------|-----------|-------------------|\n| `Index gaz` | Index contor gaz (subcontract) | Valoare index |\n| `Index energie electrică` | Index contor electricitate (subcontract) | Valoare index |\n| `Citire permisă gaz` | Autocitire activă pe gaz? | Da / Nu |\n| `Citire permisă electricitate` | Autocitire activă pe electricitate? | Da / Nu |\n| `Convenție consum` | Convenție per utilitate (gaz + electricitate) | Da / Nu |\n\nSenzorul `Date contract` pentru DUO afișează în atribute: detalii contract colectiv, subcontracte cu coduri și adrese, plus detalii complete per subcontract (prețuri, contor, OD, NLC, POD).\n\n### Butoane\n\n| Entitate | Descriere | Când apare |\n|----------|-----------|------------|\n| `Trimite index gaz` | Trimite indexul contorului de gaz din `input_number.gas_meter_reading` | Contract gaz sau DUO (subcontract gaz) |\n| `Trimite index energie electrică` | Trimite indexul contorului de electricitate din `input_number.energy_meter_reading` | Contract electricitate sau DUO (subcontract electricitate) |\n\nLa contractele individuale apare un singur buton (gaz SAU electricitate, detectat automat). La contractele DUO apar ambele butoane, fiecare trimițând indexul pentru subcontractul corespunzător.\n\n---\n\n### Senzor: Date contract\n\n**Valoare principală**: codul de încasare\n\n**Atribute (contract individual)**:\n```yaml\nCod încasare: \"004412345678\"\nCod loc de consum (NLC): \"...\"\nCLC - Cod punct de măsură: \"...\"\nOperator de Distribuție (OD): \"...\"\nPreț final (fără TVA): \"...\"\nPreț final (cu TVA): \"...\"\nPreț furnizare: \"...\"\nTarif reglementat distribuție: \"...\"\nTarif reglementat transport: \"...\"\nPCS: \"...\"\nAdresă consum: \"Strada Florilor 15, ap. 8, Cluj-Napoca, jud. Cluj\"\nUrmătoarea verificare a instalației: \"...\"\nData inițierii reviziei: \"...\"\nUrmătoarea revizie tehnică: \"...\"\n```\n\n**Atribute (contract DUO)**:\n```yaml\nCod încasare (DUO): \"009900123456\"\nTip contract: \"Colectiv / DUO (gaz + curent)\"\nAdresă de corespondență: \"...\"\n────: \"\"\nNumăr subcontracte: 2\nGaz — Cod încasare: \"002100234567\"\nGaz — Cod loc consum (NLC): \"...\"\nElectricitate — Cod încasare: \"002200345678\"\nElectricitate — Cod loc consum (NLC): \"...\"\n──── Gaz Natural ────: \"\"\nGaz Natural — Cod încasare: \"002100234567\"\nGaz Natural — Operator Distribuție (OD): \"...\"\nGaz Natural — Preț final (cu TVA): \"...\"\nGaz Natural — PCS: \"10.657\"\n──── Energie Electrică ────: \"\"\nEnergie Electrică — Cod încasare: \"002200345678\"\nEnergie Electrică — Operator Distribuție (OD): \"...\"\n```\n\n### Senzor: Sold factură\n\n**Valoare principală**: Da / Nu (există sold de plată?)\n\n**Atribute** (traduse automat din API în română):\n```yaml\nSold: \"934,07 lei\"\nRambursare disponibilă: \"Nu\"\nData sold: \"04.03.2026\"\nRambursare în curs: \"Nu\"\nGaranție activă: \"Nu\"\nGaranție neachitată: \"Nu\"\nSold de plată: \"Da\"\nDocumente rambursare necesare: \"Nu\"\nAsociație: \"Nu\"\n```\n\n### Senzor: Index gaz / Index energie electrică\n\n**Valoare principală**: valoarea indexului curent\n\n**Atribute**:\n```yaml\nNumărul dispozitivului: \"01234567/2020\"\nNumărul ID intern citire contor: \"...\"\nData de începere a următoarei citiri: \"2026-03-01\"\nData de final a citirii: \"2026-03-07\"\nAutorizat să citească contorul: \"Da\"\nPermite modificarea citirii: \"Da\"\nDispozitiv inteligent: \"Nu\"\nTipul citirii curente: \"Autocitire\"\nCitire anterioară: \"6.030\"\nUltima citire validată: \"6.030\"\n```\n\n### Senzor: Citire permisă\n\n**Valoare principală**: Da / Nu\n\nLogica de determinare (în ordinea priorității):\n1. `readingPeriod.inPeriod` — indicator direct de la API\n2. `readingPeriod.allowedReading` — fallback\n3. Calcul manual pe `startDate` / `endDate` — fallback final\n\n**Atribute**:\n```yaml\nID intern citire contor (SAP): \"...\"\nIndexul poate fi trimis până la: \"2026-03-07\"\nPerioadă transmitere index: \"2026-03-01 — 2026-03-07\"\nÎn perioadă de citire: \"Da\"\nCitire autorizată: \"Da\"\nCod încasare: \"002100234567\"\n```\n\n### Senzor: Factură restantă\n\n**Valoare principală**: Da / Nu\n\n**Atribute** (când există restanțe):\n```yaml\nFactură 1: \"125,50 lei — scadentă în 3 zile\"\nFactură 2: \"98,20 lei — termen depășit cu 15 zile\"\nTotal neachitat: \"223,70 lei\"\n```\n\n### Senzor: Convenție consum\n\n**Valoare principală**: Da / Nu\n\n**Atribute (contract individual)**:\n```yaml\nConvenție din luna ianuarie: \"150 m³\"\nConvenție din luna februarie: \"150 m³\"\n...\n```\n\n**Atribute (contract DUO)** — afișate per utilitate:\n```yaml\n──── Gaz ────: \"\"\nGaz — ianuarie: \"150 m³\"\nGaz — februarie: \"150 m³\"\n...\nGaz — Valabilă din: \"2025-06-06\"\nGaz — Preț contractual: \"0.25637 lei\"\nGaz — PCS: \"10.657\"\n──── Electricitate ────: \"\"\nElectricitate — ianuarie: \"85 kWh\"\n...\n```\n\n### Senzor: Arhivă consum gaz / energie electrică\n\n**Valoare principală**: consum total anual\n\n**Atribute** (cu separatorul zecimal românesc):\n```yaml\nConsum lunar ianuarie: \"124,91 m³\"\nConsum lunar februarie: \"91,45 m³\"\n...\n────: \"\"\nConsum mediu zilnic în ianuarie: \"4,029 m³\"\nConsum mediu zilnic în februarie: \"3,048 m³\"\n...\n```\n\n### Butoane: Trimite index gaz / Trimite index energie electrică\n\nTrimite indexul contorului către API-ul E·ON (endpoint meter-reading/index). Fiecare buton folosește propriul `input_number`:\n\n| Buton | input_number necesar | Entity ID (individual) | Entity ID (DUO subcontract) |\n|-------|---------------------|----------------------|----------------------------|\n| Trimite index gaz | `input_number.gas_meter_reading` | `button.eonromania_{cod}_trimite_index_gaz` | `button.eonromania_{cod_subcontract}_trimite_index_gaz` |\n| Trimite index energie electrică | `input_number.energy_meter_reading` | `button.eonromania_{cod}_trimite_index_energie_electrica` | `button.eonromania_{cod_subcontract}_trimite_index_energie_electrica` |\n\n**Cerințe**:\n- `input_number.gas_meter_reading` și/sau `input_number.energy_meter_reading` — definite de utilizator în `configuration.yaml`\n- Perioada de citire activă (senzorul „Citire permisă\" = Da)\n\n---\n\n## Exemple de automatizări\n\n### Notificare factură restantă\n\n```yaml\nautomation:\n  - alias: \"Notificare factură restantă E·ON\"\n    trigger:\n      - platform: state\n        entity_id: sensor.eonromania_004412345678_factura_restanta\n        to: \"Da\"\n    action:\n      - service: notify.mobile_app_telefonul_meu\n        data:\n          title: \"Factură restantă E·ON\"\n          message: \u003e\n            Ai {{ state_attr('sensor.eonromania_004412345678_factura_restanta', 'Total neachitat') }}\n            de plătit.\n```\n\n### Card pentru Dashboard\n\n```yaml\ntype: entities\ntitle: E·ON România\nentities:\n  - entity: sensor.eonromania_004412345678_date_contract\n    name: Contract\n  - entity: sensor.eonromania_004412345678_sold_factura\n    name: Sold factură\n  - entity: sensor.eonromania_004412345678_citire_permisa\n    name: Citire permisă\n  - entity: sensor.eonromania_004412345678_factura_restanta\n    name: Factură restantă\n  - entity: sensor.eonromania_004412345678_conventie_consum\n    name: Convenție consum\n```\n\n---\n\n## Structura fișierelor\n\n```\ncustom_components/eonromania/\n├── __init__.py          # Setup/unload integrare (runtime_data pattern, multi-contract)\n├── api.py               # Manager API — login HMAC-MD5, GET/POST cu retry pe 401\n├── button.py            # Butoane trimitere index per utilitate (gaz / electricitate / DUO)\n├── config_flow.py       # ConfigFlow + OptionsFlow (autentificare, selecție contracte)\n├── const.py             # Constante, URL-uri API\n├── coordinator.py       # DataUpdateCoordinator — fetch paralel per contract (inclusiv DUO)\n├── helpers.py           # Funcții utilitare, mapping județe, formatare adrese, traduceri\n├── manifest.json        # Metadata integrare\n├── sensor.py            # Clase senzor cu suport individual + colectiv/DUO\n├── strings.json         # Traduceri implicite (engleză)\n└── translations/\n    └── ro.json          # Traduceri române\n```\n\n---\n\n## Cerințe\n\n- **Home Assistant** 2024.x sau mai nou (pattern `entry.runtime_data`)\n- **HACS** (opțional, pentru instalare ușoară)\n- **Cont E·ON Myline** activ cu email + parolă\n\nNu necesită dependențe externe (nu instalează pachete pip/npm).\n\n---\n\n## Limitări cunoscute\n\n1. **O singură instanță per cont** — dacă încerci să adaugi același email de două ori, vei primi eroare „Acest cont E·ON este deja configurat\".\n\n2. **Senzorii de index și citire permisă** — apar cu date doar în perioada de citire. În rest, afișează `0` sau `Nu`.\n\n3. **Trimitere index** — butoanele necesită `input_number.gas_meter_reading` și/sau `input_number.energy_meter_reading` definite manual de utilizator în `configuration.yaml`. Nu se creează automat.\n\n4. **Planuri eșalonare** — senzorul apare doar dacă API-ul returnează date de eșalonare.\n\n5. **DUO — Arhivă consum și Arhivă index** — aceste senzori nu sunt disponibili pe contractul colectiv (endpoint-urile nu funcționează pe contractul părinte). Datele de index și convenție sunt disponibile per subcontract.\n\n---\n\n## ☕ Susține dezvoltatorul\n\nDacă ți-a plăcut această integrare și vrei să sprijini munca depusă, **invită-mă la o cafea**! 🫶\nNu costă nimic, iar contribuția ta ajută la dezvoltarea viitoare a proiectului. 🙌\n\n[![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-Susține%20dezvoltatorul-orange?style=for-the-badge\u0026logo=buy-me-a-coffee)](https://buymeacoffee.com/cnecrea)\n\n---\n\n## 🧑‍💻 Contribuții\n\nContribuțiile sunt binevenite! Simte-te liber să trimiți un pull request sau să raportezi probleme [aici](https://github.com/cnecrea/eonromania/issues).\n\n---\n\n## 🌟 Suport\nDacă îți place această integrare, oferă-i un ⭐ pe [GitHub](https://github.com/cnecrea/eonromania/)! 😊\n\n\n## Licență\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcnecrea%2Feonromania","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcnecrea%2Feonromania","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcnecrea%2Feonromania/lists"}