Vai al contenuto

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 con usleep), api_profile, api_families, api_refresh, health.
  • Client separato door_unlock/relay_on.php per aprire porte e cancelli, che chiama http://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; logout cancella 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)

  1. Funzione ewelink nella v3: client verso eWeLink, token in Redis/MySQL con lock sul rinnovo, endpoint autenticati, impulso come task celery, pagina nel pannello.
  2. 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.
  3. Il watchdog di Cava e i client relay_on.php vanno aggiornati, oppure il midserver espone un endpoint compatibile.
  4. Migrando il container, portare anche data/tokens.json, altrimenti va rifatto l'OAuth.