Mise en place d’automatisme depuis des actions de mon smartphone vers mon système d’automatisation.
J’utilise souvent mon smartphone pour contrôler Home Assistant (via l’interface Web). Ce dernier étant bourré de capteur, je me suis dit qu’il serait intéressant que certaines de mes actions dessus aient un impact sur mon système d’automatisation. J’ai donc cherché une solution pour le faire et je l’ai trouvé grâce à l’application “Tasker” (2,99 €). L’application n’est malheureusement pas disponible sur l’App Store.
Après avoir trouvé une vidéo sur Youtube et un tutoriel de la communauté de Home Assistant, j’ai pensé partager cela ici (notamment pour que je puisse y revenir quand j’aurais oublié comment faire).
Principe
On va, dans ce tutoriel, utiliser l’api de Home Assistant pour lui envoyer des commandes en méthode POST. Si cela ne veut rien dire, je vous invite à lire l’intégralité du tutoriel.
Afin de sécuriser ces échanges on va utiliser un token (un jeton : sorte de clé) que l’on va générer sur HA (“Home Assistant”, c’est long à écrire…).
Application
Génération du token
Sur l’interface de HA, cliquer sur le badge de votre profile (le rond avec vos initiales en haut à gauche, à côté de “Home Assistant”) afin d’accéder à la section des paramètres de votre profile.
Tout en bas de la page, créer un jeton de longue durée en cliquant sur le bouton de création.
Un pop-up s’ouvre vous demandant un nom. Vous pouvez mettre ce que vous voulez, c’est seulement pour que vous puissiez vous y retrouver (j’ai mis “Tasker”).
Ensuite, vous obtenez alors la clé. Noter là dans un endroit sécurisé (comme un gestionnaire de mot de passe par exemple) car nous en aurons besoin sur l’application Tasker.
Test en CLI
Avant de configurer l’application Tasker, je vous propose de composer un exemple d’utilisation de l’API en ligne de commande avec cURL.
Récupération des informations
Pour récupérer les informations nécessaires, il faut soit lire la documentation officielle ou chercher un peu.
Sur l’interface de HA, dans les outils de développement, le menu “Service” va pas mal nous aider (la première icône, celui qui ressemble a une télécommande).
Dessus, sélectionner une action simple. Dans cet exemple, je vais actionner la LED de ma prise connectée que j’ai intégrée à HA. Je sélectionne donc switch.toogle dans la liste des services. La liste des entités me propose alors les seules entités que ce service peut utiliser :
J’ai choisi la LED rouge, donc switch.gosund_sp1_1_led_red
.
La partie “Service Data” se remplit donc automatiquement avec le contenu suivant :
{
"entity_id": "switch.gosund_sp1_1_led_red"
}
Il me suffit alors de cliquer sur “CALL SERVICE” pour voir ma LED s’allumer et une fois encore pour qu’elle s’éteigne (utiliser switch.turn_on à la place de switch.toogle n’aurais permis que d’allumer la LED).
Gardons cette page ouverte, car nous aurons besoin des informations qui s’y trouve.
Essaie en CLI
J’effectue le test depuis un serveur Linux dans le cloud. Ça me permet en même temps de valider l’accès depuis l’extérieur.
La commande cURL est de cette forme :
curl -H 'Authorization: Bearer pokeball' -X POST https://bulbizarre.salameche.carapuce:8123/api/services/switch/toogle -d '{"entity_id": "switch.gosund_sp1_1_led_red"}'
Remplacer donc les éléments par les vôtres. Dans cet exemple, “pokeball” et mon token et “bulbizarre.salameche.carapuce” mon domaine. Si vous n’avez pas de domaine (ou que vous le faites en LAN), utiliser l’adresse IP de votre serveur.
Avec ce test, on est maintenant sûr que les appels de l’API fonctionnent. On peut donc passer à la configuration de Tasker.
Configuration de l’application
Pour cette partie, je vous conseille de copier les données de cette partie dans un fichier que vous ouvrez sur votre smartphone pour faire du copier-coller. Je vous déconseille de passer par un service cloud pour avoir votre token sur votre téléphone. Il est donc préférable de lire entièrement cette partie, d’adapter les lignes de code pour votre cas et, de tous mettre dans un fichier que vous copierez sur votre téléphone.
Ajout des variables
Dans cette partie, on va créer une variable contenant l’adresse de notre serveur et une autre pour notre token. Cela nous aidera grandement pour la suite.
Adresse
Sur l’application, on va dans l’onglet “VARIABLES” et on ajoute une variable pour contenir l’adresse de notre serveur.
Une fois la variable créée, on l’édite en cliquant dessus et l’on y insère l’adresse de notre serveur.
Token
On fait donc de la même manière pour ajouter une variable “HA_AUTH” qui contient notre token.
Création d’un tache “template”
On va créer une fonction (tâche) d’appel (que je vais appeler “Call HA”) pour exécuter la commande sur le serveur avec le token.
Pour cela, on va dans l’onglet “TÂCHES”, on clique sur le “+” et l’on nomme cette tâche. On arrive ensuite dans l’onglet d’édition de cette tâche.
On ajoute alors l’action “JavaScriptlet” que l’on trouve rapidement avec la barre de recherche et l’on colle le code suivant dans la section correspondante :
const url = global('%HA_ADDR') + local('par1');
const token= 'Bearer ' + global('%HA_AUTH');
const xhttp = new XMLHttpRequest();
xhttp.open('POST', url, false);
xhttp.setRequestHeader('Authorization', token);
xhttp.send(local('par2'));
if( xhttp.status != 200 ) {
console.error(xhttp.status + ' - ' + xhttp.responseText);
}
Si vous n’utilisez pas les mêmes noms de variable que moi, remplacez-les dans le code.
On sort de l’édition de l’action (flèche retour) et de celle de la tâche (idem).
Ces étapes nous on permit de créer le nécessaire pour faire des appels via l’API de Home Assistant. On va maintenant utiliser cela avec un exemple d’application.
Exemples de création de tâches
Je reprends donc l’exemple fait en CLI. Je vais alors faire en sorte d’actionner cet appel de l’API en secouant mon téléphone (inutile non ?).
On créer donc un nouveau profile dans l’onglet “PROFILE” (j’ai appelé le mien “Essaie1”).
On sélectionne ainsi la catégorie “Événement” et l’on navigue jusqu’au capteur de secousse : “Capteur” > “Secousse”.
J’ai laissé les paramètres par défaut. On clique sur la flèche de retour pour revenir au profil.
On nous propose alors de l’associer à une tâche existante ou d’en créer une. On créer donc une nouvelle tâche (j’ai mis “Test1”) puis on clique sur le “+” du menu d’édition de la tâche pour ajouté une action.
L’action à ajouter est “Effectuer la tâche” que l’on trouve facilement avec la barre de recherche (Filtre).
Ensuite, compléter les champs “Paramètre 1” et “Paramètre 2” en mimant mon exemple ci-dessous :
On revient ensuite sur la page des profils et l’on active le profile (interrupteur) et l’on valide le tout (✔).
Test
Malheureusement, l’action ne fonctionne pas… Après avoir revu les étapes, je doute de mon erreur. J’ai alors édité la tâche “Test1” en remplaçant le premier paramètre de switch.toogle
à switch.turn_on
et là ça fonctionne !
Je n’ai, à ce jour, toujours pas trouvé de solutions, il semble que je ne sois pas le seul dans ce cas… Pour allumer et éteindre la LED, je dois donc utiliser switch.turn_on
et switch.turn_off
…
Si quelqu’un à la solution… (ಥ﹏ಥ)
Information
Edit du 26/04/2021 !
On (cf. commentaires) m’as fait réaliser que le problème était un problème de couche 8.
On écrit toggle
et non toogle
!
Bonus
Voici les informations pour envoyé le niveau de batteries de votre téléphone à HA :
J’ai donc crée un profil qui s’active toutes les 15 minutes avec les paramètres d’une tâche comme décris ci-dessous.
Paramètre 1 :
/api/states/sensor.nokia3310
Paramètre 2 :
{
"state": "%BATT",
"attributes": {
"friendly_name": "Batterie Nokia 3310",
"icon": "mdi:battery-outline",
"unit_of_measurement": "%"
}
}
Vous n’avez rien à faire sur Home Assistant, le “sensor” se créer de lui même.