Integrare custom pentru Home Assistant care permite gestionarea vehiculelor și documentelor acestora — asigurări, taxe, revizii, anvelope, frâne, baterie, trusă de prim ajutor și extinctor — direct din interfața HA.
Fără dependențe externe, fără API-uri, fără conexiune la internet. Totul rulează local.
- Vehicule multiple: adaugă un număr nelimitat de vehicule, fiecare identificat prin placa de înmatriculare
- Documente cu termen: RCA, Casco, ITP, rovinieta, impozit, leasing — cu calculul automat al zilelor rămase
- Mentenanță: revizie ulei, distribuție, anvelope, baterie, plăcuțe și discuri de frână — cu calculul km rămași
- Echipament obligatoriu: trusă de prim ajutor, extinctor — cu avertizare la expirare
- Costuri mentenanță: câmpuri de cost la toate categoriile de mentenanță
- Istoric cu confirmare: la reînnoirea unui document sau mentenanță, datele vechi pot fi arhivate (cu bifa explicită din formular)
- Senzor cost total pe ani: costul anului curent cu defalcare pe categorii și totaluri pe ani anteriori (curente + arhivate)
- Senzori condiționați: apar doar când au date completate (nu aglomererază dashboard-ul)
- Curățare automată: la schimbarea condițiilor (ex: treci de la leasing la proprietate), entitățile orfane sunt eliminate automat
- Date în format românesc: ZZ.LL.AAAA în interfață, ISO intern
- Verificare km obligatoriu: ITP, revizie ulei, distribuție și frâne necesită setarea prealabilă a kilometrajului curent
- Leasing dinamic: la prima selectare a tipului „Leasing", apare automat un pas suplimentar pentru data de expirare
- Serviciu actualizare:
vehicule.actualizeaza_datepentru automatizarea km-ului - Backup / Restore: servicii
vehicule.exporta_dateșivehicule.importa_datepentru export/import JSON (ideal pentru flote) - Traduceri complete: Română (ro.json) + Engleză (en.json + strings.json)
- Deschide HACS în Home Assistant
- Click pe cele 3 puncte (⋮) din colțul dreapta sus → Custom repositories
- Adaugă URL-ul:
https://github.com/cnecrea/vehicule - Categorie: Integration
- Click Add → găsește „Vehicule" → Install
- Restartează Home Assistant
- Copiază folderul
custom_components/vehicule/în directorulconfig/custom_components/din Home Assistant - Restartează Home Assistant
- Settings → Devices & Services → Add Integration
- Caută „Vehicule"
- Introdu numărul de înmatriculare, fără spații (ex:
B123ABC) - Click Submit
Integrarea creează un device cu un singur senzor (Informații). Restul senzorilor apar pe măsură ce completezi date.
- Settings → Devices & Services → click pe intrarea vehiculului
- Click pe Configure (⚙️)
- Alege categoria dorită din meniu:
Gestionare vehicul
├── Date de identificare
├── Asigurare RCA
├── Asigurare Casco
├── Inspecție tehnică (ITP)
├── Rovinieta
├── Date administrative / fiscale
├── Mentenanță
│ ├── Revizie ulei
│ ├── Distribuție
│ ├── Anvelope
│ ├── Baterie
│ ├── Frâne (plăcuțe și discuri)
│ ├── Trusă de prim ajutor
│ └── Extinctor
└── Actualizare kilometraj
Datele calendaristice se introduc în format ZZ.LL.AAAA (ex: 18.04.2026). Câmpurile de an acceptă valori cu 4 cifre, validate server-side.
Pentru fiecare vehicul, integrarea creează până la 17 senzori. Aceștia apar condiționat — doar dacă au date completate.
Entity ID-urile urmează formatul: sensor.vehicule_{nr_normalizat}_{tip_senzor}
Unde {nr_normalizat} este numărul de înmatriculare normalizat (litere mici). De exemplu, pentru placa B123ABC, entity ID-urile ar fi sensor.vehicule_b123abc_informatii, sensor.vehicule_b123abc_rca, etc.
| Senzor | Cheie | Unitate | Vizibil când... | Valoare |
|---|---|---|---|---|
| Informații | informatii |
— | Mereu | Marcă + Model (sau nr. înmatriculare) |
| Kilometraj | kilometraj |
km | km_curent completat |
Km curent |
| RCA | rca |
zile | rca_data_expirare completat |
Zile rămase până la expirare |
| Casco | casco |
zile | casco_data_expirare completat |
Zile rămase până la expirare |
| ITP | itp |
zile | itp_data_expirare completat |
Zile rămase până la expirare |
| Rovinieta | rovinieta |
zile | rovinieta_data_sfarsit completat |
Zile rămase până la expirare |
| Impozit | impozit |
zile | impozit_scadenta completat |
Zile rămase până la scadență |
| Leasing | leasing |
zile | tip_proprietate = leasing |
Zile rămase până la expirare |
| Revizie ulei | revizie_ulei |
km | revizie_ulei_km_urmator completat |
Km rămași până la revizie |
| Distribuție | distributie |
km | distributie_km_urmator completat |
Km rămași până la schimbare |
| Anvelope | anvelope |
— | Cel puțin o dată de montare | Sezonul curent (Vară / Iarnă) |
| Baterie | baterie |
luni | baterie_data_schimb completat |
Luni de la ultimul schimb |
| Plăcuțe frână | placute_frana |
km | placute_frana_km_urmator completat |
Km rămași |
| Discuri frână | discuri_frana |
km | discuri_frana_km_urmator completat |
Km rămași |
| Trusă prim ajutor | trusa_prim_ajutor |
zile | trusa_prim_ajutor_data_expirare completat |
Zile rămase până la expirare |
| Extinctor | extinctor |
zile | extinctor_data_expirare completat |
Zile rămase până la expirare |
| Cost total | cost_total |
RON | Cel puțin un cost completat | Costul total al anului curent |
Fiecare senzor expune atribute suplimentare. Câteva exemple:
RCA — atribute: Număr poliță, Companie, Data emitere, Data expirare, Cost (RON), Stare (Valid/Expirat)
Casco — atribute: Număr poliță, Companie, Data emitere, Data expirare, Cost (RON), Stare (Valid/Expirat)
ITP — atribute: Data expirare, Stație, Kilometraj la ITP, Stare (Valid/Expirat)
Rovinieta — atribute: Data început, Data sfârșit, Categorie, Preț (RON), Stare (Valid/Expirat)
Impozit — atribute: Sumă (RON), Scadență, Localitate, Proprietar, Tip proprietate
Revizie ulei — atribute: Km ultima revizie, Km următoarea revizie, Data ultima revizie, Cost (RON), Km curent
Anvelope — atribute: Data montare vară, Data montare iarnă, Cost (RON), Sezon recomandat
Trusă prim ajutor — atribute: Data expirare, Stare (Valid/Expirat)
Extinctor — atribute: Data expirare, Stare (Valid/Expirat)
Cost total — atribute: Asigurări {an} (RON), Taxe {an} (RON), Mentenanță {an} (RON), Total {an-1} (RON), Total {an-2} (RON), Total general (RON). Costurile sunt atribuite anului din data lor de referință. Totalurile per an includ și costurile arhivate.
Istoric per senzor: Senzorii arhivabili (RCA, Casco, ITP, Rovinieta, Revizie ulei, Distribuție, Anvelope, Baterie, Plăcuțe frână, Discuri frână) afișează în atribute și detaliile ultimei reînnoiri anterioare (Reînnoiri anterioare, Ultima arhivare, câmpurile anterioare cu prefix „Anterior – ", Cost total anterior)
Datele din atribute sunt afișate în format românesc (ZZ.LL.AAAA), iar valorile numerice sunt afișate ca numere întregi (fără zecimale).
Actualizează kilometrajul curent al unui vehicul.
| Parametru | Tip | Obligatoriu | Descriere |
|---|---|---|---|
nr_inmatriculare |
string | Da | Numărul de înmatriculare (ex: B123ABC) |
km_curent |
int | Da | Kilometrajul actual (0–9.999.999) |
Exemplu:
action: vehicule.actualizeaza_date
data:
nr_inmatriculare: "B123ABC"
km_curent: 85000Exportă datele unui vehicul într-un fișier JSON în directorul /config/.
| Parametru | Tip | Obligatoriu | Descriere |
|---|---|---|---|
nr_inmatriculare |
string | Da | Numărul de înmatriculare (ex: B123ABC) |
Exemplu:
action: vehicule.exporta_date
data:
nr_inmatriculare: "B123ABC"Fișierul generat: /config/vehicule_backup_b123abc.json
Importă datele unui vehicul dintr-un fișier JSON de backup. Dacă vehiculul nu există, va fi creat automat.
| Parametru | Tip | Obligatoriu | Descriere |
|---|---|---|---|
cale_fisier |
string | Da | Calea completă către fișierul JSON (ex: /config/vehicule_backup_b123abc.json) |
Exemplu:
action: vehicule.importa_date
data:
cale_fisier: "/config/vehicule_backup_b123abc.json"Notă: La import, dacă vehiculul există deja, opțiunile sunt actualizate. Dacă nu există, este creat automat o nouă intrare.
Automatizarea verifică zilnic (la ora 11:00) toți senzorii relevanți și trimite notificări pe telefon pentru documentele sau componentele care necesită atenție.
De ce nu
numeric_state? Trigger-ulnumeric_statese activează doar la tranziția valorii sub prag — dacă HA a fost repornit sau senzorul era deja sub prag, notificarea nu se mai trimite. Varianta cutime+repeat.for_eachverifică efectiv valorile în fiecare zi.
automation:
- alias: "Vehicul B123ABC — Notificări zilnice"
description: "Verifică documente și mentenanță, trimite notificări pe telefon"
triggers:
- trigger: time
at: "11:00:00"
actions:
- repeat:
for_each:
- entity: sensor.vehicule_b123abc_rca
name: "RCA"
prag: 30
unitate: "zile"
- entity: sensor.vehicule_b123abc_casco
name: "Casco"
prag: 30
unitate: "zile"
- entity: sensor.vehicule_b123abc_itp
name: "ITP"
prag: 30
unitate: "zile"
- entity: sensor.vehicule_b123abc_rovinieta
name: "Rovinieta"
prag: 30
unitate: "zile"
- entity: sensor.vehicule_b123abc_impozit
name: "Impozit"
prag: 30
unitate: "zile"
- entity: sensor.vehicule_b123abc_revizie_ulei
name: "Revizie ulei"
prag: 1000
unitate: "km"
- entity: sensor.vehicule_b123abc_distributie
name: "Distribuție"
prag: 5000
unitate: "km"
- entity: sensor.vehicule_b123abc_placute_frana
name: "Plăcuțe frână"
prag: 3000
unitate: "km"
- entity: sensor.vehicule_b123abc_discuri_frana
name: "Discuri frână"
prag: 5000
unitate: "km"
- entity: sensor.vehicule_b123abc_trusa_prim_ajutor
name: "Trusă prim ajutor"
prag: 30
unitate: "zile"
- entity: sensor.vehicule_b123abc_extinctor
name: "Extinctor"
prag: 30
unitate: "zile"
sequence:
- variables:
val: "{{ states(repeat.item.entity) }}"
- if:
- condition: template
value_template: >
{{ val not in ['unknown','unavailable'] and val | int(999) in [10, 3] }}
then:
- action: notify.mobile_app
data:
title: "⚠️ {{ repeat.item.name }} — B123ABC"
message: >
Mai ai {{ val }} {{ repeat.item.unitate }} rămase.
{% if repeat.item.unitate == 'zile' and val | int(0) < 0 %}
⛔ EXPIRAT de {{ val | int(0) | abs }} zile!
{% endif %}Notă: Înlocuiește
notify.mobile_appcu serviciul tău de notificare (ex:notify.mobile_app_telefonul_meu). Pragurile și lista de senzori se pot ajusta după preferințe.
automation:
- alias: "Actualizare km din OBD/GPS"
triggers:
- trigger: time_pattern
hours: "/1"
actions:
- action: vehicule.actualizeaza_date
data:
nr_inmatriculare: "B123ABC"
km_curent: "{{ states('sensor.obd_odometer') | int(0) }}"Integrarea vine cu un design profesional de dashboard — culori condiționate (verde / portocaliu / roșu), icoane per categorie și layout responsive.
Există două metode de configurare:
Vehicule Card este un card custom care generează automat întregul dashboard cu o singură linie de configurare. Detectează vehiculele, afișează doar secțiunile cu date completate și ascunde automat ce nu este relevant (ex: dacă nu ai leasing, cardul de leasing nu apare).
type: custom:vehicule-cardInstalare din HACS → Frontend → Custom repository: cnecrea/vehicule-card
Detalii complete, parametri și cerințe: github.com/cnecrea/vehicule-card
Pentru control total asupra layout-ului, poți copia configurațiile YAML secțiune cu secțiune din LOVELACE.md. Această variantă necesită editare manuală și înlocuirea prefixului vehiculului în fiecare entity ID.
Ambele variante folosesc același set de carduri custom (button-card, stack-in-card, bubble-card, card-mod, mini-graph-card) și produc același rezultat vizual.
Integrarea suportă exportarea datelor de diagnostic prin mecanismul standard HA:
- Settings → Devices & Services → click pe vehicul
- Click pe cele 3 puncte (⋮) → Download diagnostics
Datele sunt structurate pe categorii (identificare, kilometraj, rca, casco, itp, rovinieta, administrativ, revizie_ulei, distributie, anvelope, baterie, frane, echipament_obligatoriu), cu secțiune separată pentru istoric și lista senzorilor activi.
Informațiile sensibile (VIN, serie CIV, nr. înmatriculare, nr. poliță, proprietar) sunt mascate automat.
custom_components/vehicule/
├── __init__.py # Setup/unload integrare, servicii
├── config_flow.py # ConfigFlow + OptionsFlow cu meniuri categorisate
├── const.py # Constante, liste opțiuni, normalizeaza_numar()
├── diagnostics.py # Export diagnostics cu mascare date sensibile
├── helpers.py # Funcții comune (conversii date, validări, calcule)
├── manifest.json # Metadata integrare
├── sensor.py # Senzori condiționați per vehicul
├── services.yaml # Definiții servicii
├── strings.json # Traduceri en (sursă)
├── hacs.json # Configurație HACS
└── translations/
├── en.json # Traduceri limba engleză
└── ro.json # Traduceri limba română
- Home Assistant 2025.11.0 sau mai nou
- HACS (opțional, pentru instalare ușoară)
- Fără dependențe externe, fără conexiune la internet
- Datele sunt locale — stocate în configurația HA, nu sunt sincronizate cu alte sisteme
- Fără imagini vehicul — nu există suport pentru fotografii sau avatare per vehicul
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. 🙌
Mulțumesc pentru sprijin și apreciez fiecare gest de susținere! 🤗
Contribuțiile sunt binevenite! Simte-te liber să trimiți un pull request sau să raportezi probleme aici.
Dacă îți place această integrare, oferă-i un ⭐ pe GitHub! 😊