Ref : http://developers.sonoff.tech/sonoff-diy-mode-api-protocol.html
Les devices SONOFF peuvent fonctionner sous 2 modes :
C'est le mode par défaut. D'une manière ou d'une autre, l'appli android est capable de détecter le nouveau device, lui attribuer le wifi, lui donner les identifiants du compte ewelink avec lesquels s'adresser au serveur cloud, et dire à l'appareil qu'il devra dorénavant fonctionner en mode cloud, i.e en échangeant en permanence avec un serveur du cloud, pour recevoir ses commandes, ou pour régulièrement fournir son état.
The steps of entering the DIY Mode and connecting to an existing WiFi network:
DIY Mode LAN discovery implements IETF Multicast DNS protocol and DNS‑Based Service Discovery protocol The discovery process must follow the mDNS/DNS-SD Discovery protocol to discover the Sonoff DIY Mode device with “_ewelink._tcp” service type when your application or client connect with Internet (WiFi or Ethernet);
Tout ce qui suit fonctionne aussi avec les devices, quand ils sont en mode cloud.
Télécharger et utiliser cet exe pour découvrir les devices et commencer à jouer avec
https://github.com/itead/Sonoff_Devices_DIY_Tools/blob/master/tool/tool_01DIY85_v330(log).exe
It can be used to debug only, since it queries continuously
sudo apt-get install mdns-scan // To launch, enter : mdns-scan
sudo apt-get install avahi-utils // To launch, enter : avahi-browse --all // Or avahi-browse --all -t -r
To get ip of a device :
avahi-resolve --name eWeLink_1000b176a7.local
Ici, eWeLink_1000b176a7.local peut être retrouvé à partir de la commande avahi-browse –all -t -r hostname = [eWeLink_1000997285.local]
On communique via des appels REST de type HTTP POST.
Visiblement, les appareils écoutent sur le port 8081.
En mode cloud, les device se connectent au cloud et conserve une session pour les échanges ; néanmoins, ils conservent le port 8081 ouvert, mais ils ne répondent à aucune requête … :)
Exemple d'appel On considère que avahi-resolve –name eWeLink_1000b176a7.local a retourné 192.168.1.36
Pour obtenir les infos du device, on fait :
curl -X POST http://192.168.1.36:8081/zeroconf/info -d '{ "deviceid":"","data":{} }'
Pour commander le device :
curl -X POST http://192.168.1.36:8081/zeroconf/switch -d '{ "deviceid":"","data":{"switch":"on"} }'
Quelques références : https://www.youtube.com/watch?v=wOtS091ikQw
Ref : https://ewelink-api.now.sh/docs/available-methods/setdevicepowerstate
Cette api permet de controller les devices en mode cloud (eWeLink)
cd <le dossier dans lequel faire son projet de commade eWelink> npm install ewelink-api
Le dossier node_modules sera créé, avec les dépendances requises.
const ewelink = require('ewelink-api');
const connection = new ewelink({
email: 'xavier.marquis@gmail.com',
password: 'free1979',
region: 'eu'
});
async function Main() {
const devices = await connection.getDevices();
console.log(devices);
const device = await connection.getDevice('1000910231'); //deviceid
console.log(device);
const status = await connection.setDevicePowerState('1000910231', 'off');
console.log(status);
}
Main();
| name | deviceid | params.staMac |
|---|---|---|
| Chambre1 sonoff plafond | 1000910231 | |
| Sonoff salon | 1000997285 | |
| Couloir | 1000b176a7 | |
| Chambre2 sonoff plafond | 1000995f10 | |
| Sonoff Entree | 1000b1772a |