===== Appareils SONOFF : mode cloud et mode DIY (réseau local) ===== Ref : http://developers.sonoff.tech/sonoff-diy-mode-api-protocol.html Les devices SONOFF peuvent fonctionner sous 2 modes : * le mode cloud (ou eWeLink MODE), qui le mode par défaut * le mode DIY, qui correspond à un mode dans lequel le seul réseau nécessaire est le réseau local. Les appareils SONOFF sont alors adressés directement. ==== Cloud mode ==== 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. ==== DIY mode ==== === Activation du mode DIY === The steps of entering the DIY Mode and connecting to an existing WiFi network: - Power on; - Long press the button for 5 seconds to enter Compatible Pairing Mode (AP) - User tips: If the device has been paired with eWeLink APP, reset the device is necessary by long press the pairing button for 5 seconds, then press another 5 seconds for entering Compatible Pairing Mode (AP) - Entering the Compatible Pairing Mode (AP) by long press the paring button for 5 seconds after power on - Connecting the Access Point named ITEAD-XXXXXXXXXX with default password 12345678 via mobile phone or PC - Browser visits http://10.10.7.1/ - Filling in the existing WiFi network SSID and password - Entering DIY Mode successfully with specific WiFi network connected. === Retrouver ses devices en mode DIY === 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); === Retrouver ses devices en mode DIY === Tout ce qui suit fonctionne aussi avec les devices, quand ils sont en mode cloud. == sous windows == 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 == mdns-scan == It can be used to debug only, since it queries continuously sudo apt-get install mdns-scan // To launch, enter : mdns-scan == avahi-browse == sudo apt-get install avahi-utils // To launch, enter : avahi-browse --all // Or avahi-browse --all -t -r == avahi-resolve == 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] === Communiquer avec ses devices en mode DIY === 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 https://www.youtube.com/watch?v=HjzCxA9Fal8 ===== API Nodejs de eWelink ===== Ref : https://ewelink-api.now.sh/docs/available-methods/setdevicepowerstate Cette api permet de controller les devices en mode cloud (eWeLink) ==== Installation des dépendances ==== cd npm install ewelink-api Le dossier node_modules sera créé, avec les dépendances requises. ==== Exemple de script ==== 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 |