{"id":25059835,"url":"https://github.com/cnecrea/myelectrica","last_synced_at":"2026-04-01T22:23:21.300Z","repository":{"id":270399618,"uuid":"910266956","full_name":"cnecrea/myelectrica","owner":"cnecrea","description":"Integrare pentru accesarea datelor contului MyElectrica România. Preia și monitorizează informațiile despre consumul de energie direct în Home Assistant.","archived":false,"fork":false,"pushed_at":"2026-03-27T17:46:35.000Z","size":232,"stargazers_count":22,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-28T01:43:53.934Z","etag":null,"topics":["electricitate","home-assistant","monitorizare","myelectrica","romania"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","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-30T20:47:58.000Z","updated_at":"2026-03-27T17:46:39.000Z","dependencies_parsed_at":"2025-04-14T14:29:35.866Z","dependency_job_id":"e33f4c6f-9b93-4f82-87ad-e5b3a3ead43f","html_url":"https://github.com/cnecrea/myelectrica","commit_stats":null,"previous_names":["cnecrea/myelectrica"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/cnecrea/myelectrica","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnecrea%2Fmyelectrica","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnecrea%2Fmyelectrica/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnecrea%2Fmyelectrica/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnecrea%2Fmyelectrica/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cnecrea","download_url":"https://codeload.github.com/cnecrea/myelectrica/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnecrea%2Fmyelectrica/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31292639,"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","home-assistant","monitorizare","myelectrica","romania"],"created_at":"2025-02-06T15:55:14.869Z","updated_at":"2026-04-01T22:23:21.289Z","avatar_url":"https://github.com/cnecrea.png","language":"Python","funding_links":["https://buymeacoffee.com/cnecrea","https://github.com/sponsors/cnecrea"],"categories":[],"sub_categories":[],"readme":"# MyElectrica 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/myelectrica)](https://github.com/cnecrea/myelectrica/releases)\n[![GitHub Stars](https://img.shields.io/github/stars/cnecrea/myelectrica?style=flat\u0026logo=github)](https://github.com/cnecrea/myelectrica/stargazers)\n[![Instalări](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/cnecrea/myelectrica/main/statistici/shields/descarcari.json)](https://github.com/cnecrea/myelectrica)\n[![Ultima versiune](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/cnecrea/myelectrica/main/statistici/shields/ultima_release.json)](https://github.com/cnecrea/myelectrica/releases/latest)\n\nIntegrare custom pentru [Home Assistant](https://www.home-assistant.io/) care monitorizează datele contractuale, consumul și facturile prin API-ul [MyElectrica România](https://myelectrica.ro/).\n\nOferă senzori dedicați per loc de consum (NLC) pentru contract, index curent, facturi, plăți, istoric citiri, convenție consum, autocitire permisă, și un buton de trimitere autocitire.\n\n---\n\n## Ce face integrarea\n\n- **Descoperire automată** a ierarhiei de conturi: Cont → Coduri client → Contracte → NLC-uri (locuri de consum)\n- **Selectare granulară** a NLC-urilor pe care vrei să le monitorizezi\n- **9 senzori + 1 buton** per NLC selectat — fiecare NLC devine un device dedicat\n- **Facturi și plăți** — ultimele 12, în ordine cronologică inversă, cu sume în format românesc\n- **Istoric citiri** — ultimele 12 citiri cu tip (autocitit / citit distribuitor)\n- **Factură restantă** — detectare automată cu calcul zile scadență\n- **Autocitire** — senzor care indică dacă perioada de autocitire e activă + buton de trimitere index\n- **Adrese normalizate** — formatare corectă din ALL CAPS (API) în format românesc (`Furcilor 90A, ap. 17, 510128 Alba Iulia, Alba`)\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 NLC\n\n---\n\n## Sursa datelor\n\nDatele vin prin API-ul MyElectrica România (`api.myelectrica.ro`), care expune endpoint-uri REST pentru:\n\n| Endpoint | Descriere |\n|----------|-----------|\n| 3.1 | Ierarhie date cont (coduri client → contracte → NLC) |\n| 3.2 | Date client detaliate |\n| 3.3 | Detalii contract per NLC |\n| 4.1 | Facturi per cod client (ultimii 2 ani) |\n| 5.1 | Istoric plăți per cod client (ultimii 2 ani) |\n| 6.1 | Lista contoare + cadrane per NLC |\n| 6.2 | Trimitere autocitire (set-index) |\n| 7.1 | Istoric citiri per NLC |\n| 8.1 | Convenție consum per NLC |\n\nAutentificarea se face cu email + parolă. 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/myelectrica`\n4. Categorie: **Integration**\n5. Click **Add** → găsește „MyElectrica România\" → **Install**\n6. Restartează Home Assistant\n\n### Manual\n\n1. Copiază folderul `custom_components/myelectrica/` î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. **Settings** → **Devices \u0026 Services** → **Add Integration**\n2. Caută „**MyElectrica**\" sau „**MyElectrica România**\"\n3. Completează formularul:\n\n| Câmp | Descriere | Implicit |\n|------|-----------|----------|\n| **Email** | Adresa de email a contului MyElectrica | — |\n| **Parolă** | Parola contului MyElectrica | — |\n| **Interval actualizare** | Secunde între interogările API | `3600` (1 oră) |\n\n### Pasul 2 — Selectează NLC-urile\n\nDupă autentificare, ierarhia contului este descoperită automat. Fiecare NLC apare cu adresa completă normalizată:\n\n```\nFurcilor 90A, ap. 17, Alba Iulia → NLC: 7002020110 (Electricitate)\nȘtefan cel Mare 20, Timișoara → NLC: 7001236723 (Electricitate)\n```\n\nSelectezi individual sau bifezi „Monitorizează toate locurile de consum\".\n\n### Pasul 3 — Reconfigurare (opțional)\n\nToate setările pot fi modificate după instalare, fără a șterge integrarea:\n\n1. **Settings** → **Devices \u0026 Services** → click pe integrarea **MyElectrica**\n2. Click pe **Configure** (⚙️)\n3. Modifică setările dorite → **Submit**\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 NLC selectat. Sub fiecare device se creează **9 senzori + 1 buton**.\n\nCu 3 NLC-uri selectate = 3 device-uri × 10 entități = **30 entități** total.\n\n### Senzori\n\n| Entitate | Descriere | Valoare principală |\n|----------|-----------|-------------------|\n| `Date contract` | Detalii contract (3.3) | Status contract |\n| `Date client` | Date client (3.2) | Nume client |\n| `Index curent` | Index contor (6.1) | Ultimul index validat |\n| `Istoric citiri` | Ultimele 12 citiri (7.1) | Număr citiri |\n| `Citire permisă` | Autocitire activă? (6.1 PAC) | Da / Nu |\n| `Convenție consum` | Consum lunar convenit (8.1) | Total kWh |\n| `Arhivă facturi` | Ultimele 12 facturi (4.1) | Număr facturi |\n| `Factură restantă` | Facturi neachitate (4.1 filtrat) | Da / Nu |\n| `Arhivă plăți` | Ultimele 12 plăți (5.1) | Număr plăți |\n\n### Buton\n\n| Entitate | Descriere |\n|----------|-----------|\n| `Trimite index` | Trimite autocitirea contorului către API (6.2) |\n\n---\n\n### Senzor: Date contract\n\n**Valoare principală**: status contract (activ/inactiv)\n\n**Atribute**:\n```yaml\nNLC: \"7002020110\"\nCod client: \"9004018471\"\nCont contract: \"...\"\nTip contract: \"nedeterminat\"\nProdus: \"Energie electrică\"\nDată contract: \"5 ianuarie 2020\"\nStatus: \"activ\"\nMetodă estimare: \"...\"\nAutocitire disponibilă: \"Da\"\nPeriodicitate citiri: \"lunar\"\nGrupă regională: \"...\"\nAdresă consum: \"Furcilor 90A, ap. 17, 510128 Alba Iulia, Alba\"\nTip serviciu: \"Electricitate\"\n```\n\n### Senzor: Date client\n\n**Valoare principală**: numele clientului\n\n**Atribute**:\n```yaml\nCod client: \"9004018471\"\nTip client: \"Persoană fizică\"\nAdresă: \"Furcilor 90A, ap. 17, 510128 Alba Iulia, Alba\"\nJudeț: \"Alba\"\nTelefon: \"07...\"\n```\n\n### Senzor: Index curent\n\n**Valoare principală**: ultimul index validat\n\n**Atribute**:\n```yaml\nSerie contor: \"ABC123456\"\nData citirii: \"20 februarie 2026\"\nIndex validat: \"4993\"\nTip citire: \"Citire contor de către client - SAP\"\nCod registru: \"001\"\nDescriere registru: \"...\"\n```\n\nDacă există date PAC (perioadă autocitire), se adaugă: Index PAC, Data citire PAC, Perioadă autocitire început/sfârșit.\n\n### Senzor: Istoric citiri\n\n**Valoare principală**: numărul de citiri afișate (max 12)\n\nFiecare citire apare ca atribut cu formatul:\n\n```yaml\nIndex (autocitit) 20 februarie 2026: \"4993\"\nIndex (citit distribuitor) 15 ianuarie 2026: \"4850\"\nSerie contor: \"ABC123456\"\nData instalării: \"10 martie 2019\"\nTotal citiri: \"12\"\n```\n\nTipurile de citire sunt traduse automat: „Citire contor de către client\" → `autocitit`, „Citire contor de comp.utilități\" → `citit distribuitor`.\n\n### Senzor: Citire permisă\n\n**Valoare principală**: Da / Nu\n\n**Iconiță dinamică**: `clock-check-outline` (Da), `clock-alert-outline` (Nu), `cog-stop-outline` (nedeterminat)\n\n**Atribute**: Început perioadă, Sfârșit perioadă (dacă sunt disponibile).\n\n### Senzor: Convenție consum\n\n**Valoare principală**: total kWh convenție (suma lunilor nenule)\n\n**Atribute**: consum per lună (`Luna ianuarie: 150 kWh`, `Luna februarie: 120 kWh` etc.).\n\n### Senzor: Arhivă facturi\n\n**Valoare principală**: numărul de facturi afișate (max 12)\n\nFiecare factură apare ca atribut:\n\n```yaml\nEmisă pe 8 martie 2024: \"125,50 lei\"\nEmisă pe 5 februarie 2024: \"98,20 lei\"\nTotal facturi: \"12\"\nTotal facturat: \"1.450,30 lei\"\n```\n\nFacturile sunt filtrate pe ContractAccount-ul NLC-ului curent. Se afișează cele mai recente 12, în ordine cronologică inversă. Totalurile reflectă exclusiv cele 12 afișate.\n\n### Senzor: Factură restantă\n\n**Valoare principală**: Da / Nu\n\n**Atribute** (când există restanțe):\n\n```yaml\nRestanță luna martie (#1): \"125,50 lei — termen depășit cu 15 zile\"\nRestanță luna februarie (#2): \"98,20 lei — scadentă în 3 zile\"\nTotal neachitat: \"223,70 lei\"\n```\n\nCalcul automat: termen depășit cu X zile / scadentă astăzi / scadentă în X zile.\n\n### Senzor: Arhivă plăți\n\n**Valoare principală**: numărul de plăți afișate (max 12)\n\nFiecare plată apare ca atribut:\n\n```yaml\nPlătită pe 8 martie 2024: \"125,50 lei\"\nPlătită pe 5 februarie 2024: \"98,20 lei\"\nTotal plăți: \"12\"\nTotal plătit: \"1.450,30 lei\"\n```\n\nPlățile sunt corelate cu facturile NLC-ului curent prin FiscalNumber/InvoiceID.\n\n### Buton: Trimite index\n\nTrimite autocitirea contorului către API-ul MyElectrica (endpoint 6.2).\n\n**Cerințe**:\n- `input_number.energy_meter_reading` (electricitate) sau `input_number.gas_meter_reading` (gaz) — definit de utilizator\n- Perioada de autocitire activă (senzorul „Citire permisă\" = Da)\n\n**Atribute**: NLC, Serie contor, Cod registru, Produs, Sursă index.\n\n---\n\n## Exemple de automatizări\n\n### Notificare factură restantă\n\n```yaml\nautomation:\n  - alias: \"Notificare factură restantă\"\n    trigger:\n      - platform: state\n        entity_id: sensor.myelectrica_7002020110_factura_restanta\n        to: \"Da\"\n    action:\n      - service: notify.mobile_app_your_phone\n        data:\n          title: \"Factură restantă MyElectrica\"\n          message: \u003e\n            Ai {{ state_attr('sensor.myelectrica_7002020110_factura_restanta', 'Total neachitat') }}\n            de plătit.\n```\n\n### Notificare perioadă autocitire\n\n```yaml\nautomation:\n  - alias: \"Perioadă autocitire deschisă\"\n    trigger:\n      - platform: state\n        entity_id: sensor.myelectrica_7002020110_citire_permisa\n        to: \"Da\"\n    action:\n      - service: notify.mobile_app_your_phone\n        data:\n          title: \"Autocitire disponibilă\"\n          message: \"Poți trimite indexul contorului pentru NLC 7002020110.\"\n```\n\n### Card pentru Dashboard\n\n```yaml\ntype: entities\ntitle: MyElectrica — Furcilor 90A\nentities:\n  - entity: sensor.myelectrica_7002020110_date_contract\n    name: Contract\n  - entity: sensor.myelectrica_7002020110_index_curent\n    name: Index curent\n  - entity: sensor.myelectrica_7002020110_citire_permisa\n    name: Citire permisă\n  - entity: sensor.myelectrica_7002020110_factura_restanta\n    name: Factură restantă\n  - entity: sensor.myelectrica_7002020110_conventie_consum\n    name: Convenție consum\n```\n\n---\n\n## Structura fișierelor\n\n```\ncustom_components/myelectrica/\n├── __init__.py          # Setup/unload integrare (runtime_data pattern)\n├── api.py               # Manager API — login, GET/POST cu retry pe 401\n├── button.py            # Buton trimitere autocitire per NLC\n├── config_flow.py       # ConfigFlow + OptionsFlow (autentificare, selecție NLC)\n├── const.py             # Constante, URL-uri API, mapping luni\n├── coordinator.py       # DataUpdateCoordinator — fetch centralizat per NLC\n├── helper.py            # Funcții utilitare, mapping județe, formatare adrese\n├── manifest.json        # Metadata integrare\n├── sensor.py            # 9 clase senzor cu clasă de bază comună\n├── strings.json         # Traduceri implicite\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 MyElectrica România** 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 „already configured\".\n\n2. **Ultimele 12 înregistrări** — senzorii Arhivă facturi, Arhivă plăți și Istoric citiri afișează cele mai recente 12 intrări. Totalurile reflectă exclusiv cele 12 afișate, nu toate datele din API.\n\n3. **Facturi pe ultimii 2 ani** — API-ul este interogat cu interval de 730 zile. Facturile mai vechi nu sunt incluse.\n\n4. **Trimitere index** — butonul necesită `input_number` definit manual de utilizator. Nu se creează automat.\n\n5. **Normalizare adrese** — funcția `normalize_title` transformă ALL CAPS în Title Case prin `.lower().title()`. Nu adaugă diacritice lipsă dacă API-ul nu le furnizează.\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\nMulțumesc pentru sprijin și apreciez fiecare gest de susținere! 🤗\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/myelectrica/issues).\n\n---\n\n## 🌟 Suport\nDacă îți place această integrare, oferă-i un ⭐ pe [GitHub](https://github.com/cnecrea/myelectrica/)! 😊\n\n\n## Licență\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcnecrea%2Fmyelectrica","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcnecrea%2Fmyelectrica","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcnecrea%2Fmyelectrica/lists"}