Home Assistant - ajouter un switch SONOFF DIY via sa REST API
Voici un exemple d'intégration d'un module SONOFF Mini R2 mode DIY avec Home assistant. Pour cela on va utiliser la REST-API de SONOFF.
Il y aurait d'autres manières de faire, par exemple Flasher le Sonoff pour un firmware Tasmota, ajouter un broker MQTT sur le réseau etc...
Prérequis:
- Un module SONOFF en mode DIY
- Un serveur Home Assistant accès SSH configuré
Ressources:
J'écris ce billet de blog pour vous éviter d'éplucher ces documentations (et m'éviter à moi même de devoir les relire dans quelques mois), mais voici quand même les liens:
- La documentation de l'API SONOFF
- La documentation home assistant pour l’intégration d'un switch REST-FULL
- La documentation home assistant pour un switch "command line"
Lets-go:
La requête pour obtenir l'état d'un switch Sonoff est faite avec la méthode POST. Le module REST-FULL de Home assistant, pour la requête qui permet de connaitre l'état, c'est du GET. Fail. D'où l'utilisation de command_line (et j'aime pas ça, c'est bidouillage beark crado)
Voici un exemple de bloc à ajouter dans le fichier config/configuration.yaml pour 2 lumières:
switch: - platform: command_line switches: desk_light: friendly_name: "Lumière du bureau" command_on: curl -X POST http://192.168.0.31:8081/zeroconf/switch -d '{"deviceid":"1000aaaaaaa","data":{"switch":"on"}}' command_off: curl -X POST http://192.168.0.31:8081/zeroconf/switch -d '{"deviceid":"1000aaaaaa","data":{"switch":"off"}}' command_state: curl -X POST http://192.168.0.31:8081/zeroconf/info -d '{"deviceid":"","data":{}}' value_template: '{{ value_json["data"]["switch"] == "on" }}' cabanon_light: friendly_name: "Lumière du cabanon" command_on: curl -X POST http://192.168.0.26:8081/zeroconf/switch -d '{"deviceid":"1000bbbbbb","data":{"switch":"on"}}' command_off: curl -X POST http://192.168.0.26:8081/zeroconf/switch -d '{"deviceid":"1000bbbbbb","data":{"switch":"off"}}' command_state: curl -X POST http://192.168.0.26:8081/zeroconf/info -d '{"deviceid":"","data":{}}' value_template: '{{ value_json["data"]["switch"] == "on" }}'
Evidemment, vous remplacez les IP par les votres et 1000aaaaaaa et 100bbbbbbbbb par les ids de vos modules Sonoff.
Voila: