Relè Sonoff (ewelink-integration)¶
Proxy PHP (un solo file ewelink.php, PHP 8.3 + Apache) verso le API cloud eWeLink, che comandano relè e interruttori Sonoff associati a un account. Non parla con i dispositivi in rete locale.
Dove gira¶
ServerIT, container ewelink_integration-ewelink-1, porta 8080. Il codice in prod coincide con il repository (verificato 27/10/2026). Deve restare attivo finché le sue funzioni non saranno nel midserver.
Cosa offre¶
- OAuth con l'account eWeLink; token salvati in
data/tokens.json(nessun database). - Console web e API JSON (
?action=):api_devices,api_status,api_switch,api_inching(impulso conusleep),api_profile,api_families,api_refresh,health. - Client separato
door_unlock/relay_on.phpper aprire porte e cancelli, che chiamahttp://172.16.16.253:8080/ewelink.php?action=api_switch.
Chi lo usa (log dall'avvio, circa 7 settimane, al 27/10/2026)¶
| Chiamante | Cosa fa |
|---|---|
171.16.16.100 (sede di Cava) |
api_devices ogni minuto (monitoraggio, ~72.000 richieste); api_switch off → on a ~16 s (riavvio di impianti, 78 volte); uso della console |
172.16.16.48 (un peer VPN) |
api_switch (11 volte): apertura porta/cancello |
Il watchdog è con ogni probabilità lo script Sonoff di Michele (raw/michele/sonoff/), eseguito in centrale.
Esposizione¶
- Da internet: no (pfSense inoltra solo 8080/UDP, il servizio è TCP).
- Dalla VPN: sì, da tutti i peer, senza autenticazione. Ogni box potrebbe comandare i relè (M17).
Problemi¶
- Nessuna autenticazione; azioni che cambiano stato via
GET; nessuna protezione CSRF;logoutcancella i token per tutti. - Rinnovo dei token senza lock; impulso bloccante (se il processo muore dopo ON, il relè resta acceso).
Porting nel midserver (pianificato)¶
- Funzione
ewelinknella v3: client verso eWeLink, token in Redis/MySQL con lock sul rinnovo, endpoint autenticati, impulso come task celery, pagina nel pannello. - Un solo proprietario dei token durante la transizione: eWeLink probabilmente ruota il refresh token a ogni rinnovo, quindi PHP e midserver non possono rinnovare in parallelo lo stesso account. O il midserver chiama il PHP, o si usa un secondo account/app.
- Il watchdog di Cava e i client
relay_on.phpvanno aggiornati, oppure il midserver espone un endpoint compatibile. - Migrando il container, portare anche
data/tokens.json, altrimenti va rifatto l'OAuth.