Hello,
Les thermomètres Switch-Bot ne pouvaient pas, par défaut, être intégrés dans Home-Assistant.
Désormais, l’intégration switch-bot native existe et permet d’utiliser les thermomètres en plus du premier appareil de cette marque, qui permet de connecter un interrupteur.
Elle permet maintenant d’utiliser une grande partie des appareils de la marque.
Cependant, il existe une API qui permet, entre autre, de consulter la température de ses thermomètres Switchbot.
Pour une installation de Home Assistant où le §Bluetooth n’est pas envisageable, c’est une alternative, bien que dépendante du cloud.
Il existe également une intégration permettant d’utiliser certains appareils via l’API, notemment les télécommandes.
Les thermomètres ne sont à ma connaissance et selon la documentation pas pris en charge par cette intégration utilisant l’API.
Prérequis
- Avoir installé l’application de la marque
- Avoir créé son compte
- Avoir ajouté ses thermomètres
- Possèder un Hub Switchbot comme le Hub mini
- Avoir activé le mode cloud sur les thermomètres à intégrer, même si ça fonctionne peut-être sans ; la documentation n’est pas claire à ce sujet, pour ça aller dans les paramètres de chaque thermomètre puis aller dans le mode cloud
- Avoir installé curl qui est déjà dispo sous Windows 10 et jq optionnel mais qui aide néanmoins à faciliter les choses pour récupérer les informations.
Récupération du token
Pour accéder à l’API, il faut connaître son jeton d’accès :
Dans l’application Switchbot, aller dans Profile→Paramètres→Developer options et notez le token affiché.
Récupération des identifiants des thermomètres
C’est là que ça devient barbu, tout se passe en ligne de commande.
Voici comment récupérer la liste de vos appareils (désolé pour les utilisateurs de Windows, je ne suis pas entièrement convaincu que ça passe en l’état) :
curl -H "Content-Type: application/json; charset=utf8" -H "Authorization: <token>" https://api.switch-bot.com/v1.0/devices | jq -r ".body.deviceList[] | \"ID : \"+.deviceId+\" ; Nom : \"+.deviceName+\" ; type : \"+.deviceType"
Penser à remplacer <token>
par le token récupéré depuis l’application.
On récupère ainsi une liste présentée comme suit :
ID: <id> ; nom : <nom> ; type : <type>
Pour tous les éléments qui ont le type meter, on aura besoin du id pour les futures sensors.
Le nom nous permettra de savoir comment nommer chaque sensor.
Mise en place des sensors
Nous allons utiliser un ensemble de rest sensors pour tout récupérer d’un coup.
D’autres aproches sont possibles mais c’est celle que je trouve la plus directe.
Dans config.yaml, mettre ceci :
rest:
- resource: "https://api.switch-bot.com/v1.0/devices/<id>/status"
scan_interval: 60
method: GET
headers:
Authorization: <token>
Content-Type: "application/json; charset=utf8"
sensor:
- name: Thermomètre Bureau
value_template: "{{ value_json.body.temperature if value_json.statusCode==100 else states('sensor.thermometre_bureau') }}"
device_class: temperature
unit_of_measurement: "°C"
force_update: true # Peut-être superflu
- name: Hygromètre Bureau
value_template: "{{ value_json.body.humidity if value_json.statusCode==100 else states('sensor.hygrometre_bureau') }}"
device_class: humidity
unit_of_measurement: "%"
force_update: true # Peut-être superflu
Les valeurs retournées par l’API ne tiennent pas compte de l’étalonage qui aurait été fait dans l’application Switch-Bot.
Pour tenir compte de celui-ci, il faut refaire le calcul dans le sensor, par exemple pour ajouter 0.3 :
sensor:
- name: Thermomètre Bureau
value_template: "{{ value_json.body.temperature+0.3 if value_json.statusCode==100 else states('sensor.thermometre_bureau') }}"
device_class: temperature
unit_of_measurement: "°C"
force_update: true # Peut-être superflu
La même chose est à faire dans le sensor hygromètre si l’hygrométrie est à étaloner.
Pensez à remplacer <token>
par votre token API et <id>
par l’identifiant du thermomètre.
Pour rajouter des thermomètres, il suffit de recopier toutes les lignes à partir de - resource: "https://api.switch-bot.com/v1.0/devices/<id>/status"
Le souci que j’ai eu avec cette méthode est qu’il n’est pas possible de placer les entités dans des pièces vu qu’on ne peut pas leur attribuer d’identifiant unique.
L’utilisation d’un rest sensor par thermomètre avec toutes les données en atributs et de deux template sensors un pour la température et l’autre pour l’hygrométrie basé sur l’état des attributs respectifs du rest sensor permettrait de placer les deux dernières entités dans une pièce.
Mais j’ai préféré l’approche pour laquelle j’ai mis la config pour avoir le moins d’entités possible.
atention !
Le nombre d’appels à l’API est limité à 10000 apels par jour et par token.
Pour la fin, Contrôle infrarouge
Depuis la rédaction de ce tuto, l’intégration Switch Bot cloud a été créée et permet de contrôler les télécommandes du Hub Switch Bot ainsi que d’autres appareils.
Seul les états allumé et éteint sont supportés, sauf pour les climatiseurs qui eux sont plus complets.
Avant de mettre les mains dans le YAML, une lecture de la documentation de cette intégration peut être judicieuse si cette intégration fait déjà ce don vous avez besoin.
Si vous avez rajouté des télécommandes, voici comment en contrôler.
On commence donc par récupérer la liste des appareils infrarouge enregistrés.
curl -H "Content-Type: application/json; charset=utf8" -H "Authorization: <token>" https://api.switch-bot.com/v1.0/devices | jq -r ".body.infraredDeviceList[] | \"ID : \"+.deviceId+\" ; Nom : \"+.deviceName+\" ; type : \"+.remoteType"
à l’aide d’une commande rest, on peut envoyer toute commande supportée :
rest_command:
controler_barre_de_son:
url: "https://api.switch-bot.com/v1.0/devices/<id>/commands"
method: post
content_type: "application/json; charset=utf8"
headers:
Authorization: <token>
payload: '{"command": "{{ commande }}", "commandType": "{{ type_commande }}"}'
Ou <id>
est à remplacer par l’identifiant de la télécommande et <token>
par le token API.
Il est donc possible, avec une barre de son par exemple, de créer un switch pour l’allumer ou l’éteindre et de créer deux scripts : un pour augmenter le volume et l’autre pour le baisser :
switch:
- platform: template
switches:
barre_de_son_salon:
friendly_name: "Barre de Son Salon"
unique_id: "switch.barre_de_son_salon"
turn_on:
service: rest_command.controler_barre_de_son
data:
commande: "turnOn"
type_commande: ""
turn_off:
service: rest_command.controler_barre_de_son
data:
commande: "turnOff"
type_commande: "command"
script:
barre_son_volume_plus:
alias: "Augmenter le volume de la barre de son"
description: "Augmente le son de la barre de son"
mode: queued
sequence:
- service: rest_command.controler_barre_de_son
data:
commande: "volumeAdd"
type_commande: "command"
barre_son_volume_moins:
alias: "Diminuer le volume de la barre de son"
description: "Diminue le son de la barre de son"
mode: queued
sequence:
- service: rest_command.controler_barre_de_son
data:
commande: "volumeSub"
type_commande: "command"
Un script serait suffisant pour allumer ou éteindre la barre de son mais on aimait trop la phrase de Google « j’éteint la barre de son salon » qu’on avait quand on utilisait l’intégration Switchbot pour Google Assistant.
Conclusion
Il est donc possible d’intégrer les thermomètres Switchbot à Home Assistant en utilisant autre chose que le Bluetooth, sachant que l’utilisation de l’API rend dépendant du cloud. Une lecture de la documentation de l’API permet de voir le champ d’action.
L’utilisation des télécommandes du hub ne peut pas se faire en utilisant le Bluetooth, par contre il est possible que l’intégration Switchbot Cloud permette d’utiliser certaines sans avoir à toucher au YAML.
Elle permet également de contrôler les Switchbot curtains mais n’ayant pas le produit, je préfère vous renvoyer à la documentation. De plus, ces derniers sont également contrôlables avec l’intégration native de Home Assistant, en Bluetooth.
J’espère que ce tutoriel aura été claire, compte tenu notamment de l’heure de sa rédaction mais aussi du fait que la récupération des informations nécessaire n’est pas forcément aisée.
Changements
- 11/11/2021 : la limite de 10000 demandes à l’API n’est dèsormais plus un secret
- Ajout des modifications à faire si besoin d’étalonner la température ou l’hygrométrie, merci @NuM82
- 09/03/2024 : modification de l’introduction pour spécifier que l’intégration native prend en charge les thermomètres, l’API est donc seulement une alternative
- Mention de l’intégration Switchbot Cloud