UNPKG

homebridge-elmo

Version:

Homebridge plugin per integrare i sistemi di antifurto Elmo con HomeKit

289 lines (220 loc) 10.3 kB
# homebridge-elmo Plugin Homebridge per integrare i sistemi di antifurto Elmo con HomeKit. ## Descrizione Questo plugin permette di controllare il tuo sistema di antifurto Elmo tramite l'app Casa di Apple. Supporta le seguenti funzionalità: - Visualizzazione dello stato del sistema (armato/disarmato) - Armamento e disarmamento del sistema - Supporto per diverse modalità di armamento (Casa, Via, Notte) - Configurazione personalizzata dei settori per ogni modalità - **Supporto per dispositivi individuali** (sensori di movimento, contatti magnetici, sensori di fumo) - **Polling veloce per dispositivi** con aggiornamenti in tempo reale (fino a 1 secondo) - Creazione automatica di accessori HomeKit per ogni dispositivo rilevato ## Sistemi supportati - Elmo e-Connect - IESS Metronet ## Dispositivi supportati Il plugin rileva automaticamente e crea accessori HomeKit per: - **Sensori di movimento/PIR** - Visualizzati come sensori di movimento in HomeKit - **Contatti magnetici** - Visualizzati come sensori di contatto (porte/finestre) - **Sensori di fumo** - Visualizzati come sensori di fumo - **Altri sensori** - Visualizzati come sensori di contatto generici Ogni dispositivo viene aggiornato con un polling veloce (configurabile da 1 a 60 secondi) per fornire aggiornamenti in tempo reale dello stato. ## Requisiti - Homebridge v1.3.0 o superiore - Node.js v14 o superiore - Python 3.6 o superiore - python3-venv - Un sistema di antifurto Elmo con accesso alle API cloud ## Installazione 1. Installa Homebridge (se non l'hai già fatto) 2. Installa questo plugin tramite l'interfaccia web di Homebridge o con il comando: ```bash npm install -g homebridge-elmo ``` 3. Configura il plugin tramite l'interfaccia web di Homebridge o modificando manualmente il file `config.json` ## Configurazione Ecco un esempio di configurazione: ```json { "platforms": [ { "platform": "ElmoSecuritySystem", "name": "Elmo Security System", "username": "il_tuo_username", "password": "la_tua_password", "code": "il_tuo_codice", "system": "e-connect", "domain": "default", "pollInterval": 30, "debug": false } ] } ``` ### Parametri di configurazione | Parametro | Tipo | Obbligatorio | Predefinito | Descrizione | |-----------|------|--------------|-------------|-------------| | `name` | string | No | `Elmo Security System` | Nome del dispositivo nell'app Casa | | `username` | string | Sì | - | Username per accedere al sistema Elmo | | `password` | string | Sì | - | Password per accedere al sistema Elmo | | `code` | string | Sì | - | Codice numerico per armare/disarmare il sistema | | `system` | string | No | `e-connect` | Tipo di sistema Elmo (`e-connect` o `metronet`) | | `domain` | string | No | `default` | Dominio utilizzato per accedere alla pagina di login via web | | `pollInterval` | number | No | `30` | Intervallo in secondi tra le richieste di aggiornamento dello stato del sistema | | `devicePollInterval` | number | No | `10` | Intervallo in secondi tra le richieste di aggiornamento dello stato dei dispositivi (1-60) | | `enableDevices` | boolean | No | `true` | Abilita la creazione di accessori per dispositivi individuali | | `debug` | boolean | No | `false` | Abilita i log di debug | | `homeSectors` | string | No | `""` | Settori da armare in modalità Casa (es: "1,3") | | `awaySectors` | string | No | `""` | Settori da armare in modalità Via (es: "1,2,3") | | `nightSectors` | string | No | `""` | Settori da armare in modalità Notte (es: "2,3") | ### Esempio di configurazione con polling ultra-veloce ```json { "platforms": [ { "platform": "ElmoSecuritySystem", "name": "Elmo Security System", "username": "il_tuo_username", "password": "la_tua_password", "code": "il_tuo_codice", "system": "e-connect", "domain": "default", "pollInterval": 30, "devicePollInterval": 2, "enableDevices": true, "debug": false, "homeSectors": "1,3", "awaySectors": "1,2,3", "nightSectors": "2,3" } ] } ``` ### Esempio di configurazione con dispositivi personalizzati ```json { "platforms": [ { "platform": "ElmoSecuritySystem", "name": "Elmo Security System", "username": "il_tuo_username", "password": "la_tua_password", "code": "il_tuo_codice", "system": "e-connect", "domain": "default", "pollInterval": 30, "devicePollInterval": 10, "enableDevices": true, "defaultDeviceType": "contact", "devices": [ { "id": 1, "type": "contact", "name": "Porta Ingresso" }, { "id": 2, "type": "motion", "name": "Sensore Salone" }, { "id": 3, "type": "motion", "name": "Sensore Camera" } ], "debug": false } ] } ``` ## Configurazione dei dispositivi ### Scoperta degli ID dispositivi Per configurare i dispositivi correttamente, devi prima scoprire i loro ID: 1. **Abilita il debug**: Imposta `"debug": true` nella configurazione 2. **Riavvia Homebridge**: I dispositivi verranno scoperti automaticamente 3. **Controlla i log**: Cerca righe come "Dispositivi trovati:" che mostrano ID, nome e stato 4. **Annota gli ID**: Ogni dispositivo ha un ID numerico univoco (campo "element") ### Configurazione manuale dei tipi Una volta ottenuti gli ID, puoi configurare ogni dispositivo: ```json "devices": [ { "id": 1, // ID del dispositivo dal sistema Elmo "type": "contact", // Tipo di sensore in HomeKit "name": "Porta" // Nome personalizzato (opzionale) } ] ``` **Tipi disponibili:** - **`contact`**: Sensori di contatto (porte, finestre, contatti magnetici) - **`motion`**: Sensori di movimento o PIR - **`smoke`**: Sensori di fumo ### Tipo predefinito Se non configuri un dispositivo specificamente, verrà utilizzato il `defaultDeviceType`: ```json "defaultDeviceType": "contact" // Tutti i dispositivi non configurati saranno sensori di contatto ``` ## Come funziona Il plugin utilizza la libreria Python `econnect-python` per comunicare con le API cloud di Elmo. Quando viene avviato, il plugin installa automaticamente le dipendenze Python necessarie e crea gli script per comunicare con il sistema Elmo. Il plugin esegue un polling periodico per aggiornare lo stato del sistema e reagisce ai comandi inviati dall'app Casa. ## Gestione dei dispositivi ### Polling ottimizzato Il plugin utilizza due intervalli di polling diversi: - **Sistema di sicurezza**: Polling ogni 30 secondi (configurabile, 10-300 secondi) - **Dispositivi individuali**: Polling configurabile da 1 a 60 secondi (default: 10 secondi) #### Raccomandazioni per l'intervallo di polling dispositivi: - **1-3 secondi**: Aggiornamenti quasi istantanei, ma può causare conflitti frequenti se usi spesso l'app mobile - **5-10 secondi**: Buon compromesso tra reattività e stabilità (raccomandato) - **15-30 secondi**: Più conservativo, ideale se usi frequentemente l'app mobile - **30+ secondi**: Minimizza i conflitti ma riduce la reattività ⚠️ **IMPORTANTE**: Intervalli molto bassi (1-3 secondi) possono causare: - Conflitti di lock più frequenti con l'app mobile Elmo - Maggiore carico sul server Elmo - Possibili rate limiting da parte del servizio cloud ### Ottimizzazione per polling veloce Per utilizzare al meglio il polling veloce: 1. **Evita l'uso simultaneo dell'app mobile** quando hai impostato intervalli sotto i 5 secondi 2. **Monitora i log** per verificare la presenza di errori di lock frequenti 3. **Aumenta l'intervallo** se noti instabilità o errori ricorrenti 4. **Usa il debug** per monitorare le prestazioni del polling ## Risoluzione dei problemi ### Problema: Errore "Sistema occupato" **Causa**: Il sistema Elmo è attualmente utilizzato da un'altra sessione (app mobile, interfaccia web, ecc.). **Soluzione**: - Chiudi completamente l'app Elmo sul telefono - Attendi 1-2 minuti prima di riprovare - Il plugin riproverà automaticamente con intervalli crescenti - Se il problema persiste, riavvia l'app Elmo e aspetta qualche minuto ### Problema: Comandi lenti o che falliscono occasionalmente **Causa**: Conflitti di accesso simultaneo al sistema Elmo. **Soluzione**: - Il plugin include un sistema di retry automatico con gestione intelligente dei conflitti - Evita di usare l'app mobile contemporaneamente ai comandi HomeKit - I comandi di lettura (polling) hanno timeout più brevi e fallimenti silenziosi - I comandi di controllo (arm/disarm) hanno timeout più lunghi e retry multipli ### Problema: Il plugin non appare in Homebridge **Soluzione**: - Verifica che il plugin sia installato correttamente - Riavvia Homebridge - Verifica i log di Homebridge per eventuali errori ### Problema: Errori di lock frequenti con polling veloce **Causa**: Intervallo di polling troppo aggressivo che entra in conflitto con altre sessioni. **Soluzione**: - Aumenta il valore di `devicePollInterval` (prova 5-10 secondi) - Evita di usare l'app mobile durante il polling veloce - Considera se hai realmente bisogno di aggiornamenti così frequenti - Usa la modalità debug per monitorare i conflitti ## Gestione avanzata degli errori Il plugin include una gestione avanzata degli errori specifici di Elmo: - **Lock conflicts**: Rilevamento automatico quando il sistema è occupato da altre sessioni - **Retry intelligente**: Tentativi multipli con tempi di attesa progressivi - **Timeout ottimizzati**: Timeout diversi per operazioni di lettura vs controllo - **Fallback graceful**: Continua a funzionare anche con errori temporanei ### Tempi di retry - **Polling normale**: Continua senza interruzioni anche in caso di conflitti temporanei - **Polling veloce (1-3s)**: Maggiore tolleranza ai fallimenti per evitare spam di log - **Comandi di controllo**: Fino a 5 tentativi con attesa da 10 a 40 secondi - **Autenticazione**: Fino a 3 tentativi con attesa da 5 a 15 secondi ## Crediti Questo plugin è fortemente ispirato dall'integrazione di Elmo per Home Assistant di [palazzem](https://github.com/palazzem), e utilizza la sua libreria [econnect-python](https://pypi.org/project/econnect-python/) per interagire con il sistema Elmo.