Dans la série « Cause toujours tu m’intéresses » et après la découverte de Jarvis voyons ici comment faire parler notre périphérique Android grâce à l’appli Tasker, cela paraitra basique pour nombre d’entre vous mais je n’avais pas encore fait de topo détaillé sur la liaison entre un Domoticz et Tasker, alors…
Nous avions évoqué Tasker dans un article précédent https://easydomoticz.com/domoticz-et-tasker/
J’aimerais ici décrire complètement le processus de récupération de valeurs entre les 2 systèmes. Le but étant de mettre à disposition dans Tasker une valeur de Domoticz afin d’en faire un widget, une synthèse vocale ….
Nous procèderons par une interrogation de Domoticz via son API dont nous retirerons la valeur souhaitée que nous placerons dans une variable Tasker pour un usage ultérieur.
Prérequis
- Un téléphone/tablette sous Android.
- Le logiciel Tasker. https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm&hl=fr
- Un Domoticz en état de marche.
Coté Domoticz.
Vous devez tout d’abord aller chercher dans votre Domoticz l’IDX du périphérique qui vous intéresse.
Je vais prendre ici exemple d’une sonde de température nommée « Extérieur »
Rendez vous dans « Réglages » puis « Dispositifs » , recherchez votre matériel, puis dans la première colonne, se trouve le fameux IDX.
On voit ici que ma sonde porte l’IDX 230.
L’étape suivante est d’interroger Domoticz pour le matériel 230 via une URL JSON.
Toute la doc est sur le Wiki Domoticz à cette adresse Wiki Domoticz.
Ouvrez un navigateur Internet et tapez dans la barre d’adresse (pas dans la recherche , hein) http://votre_ip_Domoticz:8080/json.htm?type=devices&rid=le_numero_IDX_noté_plus_haut
Et il s’affiche une page Web comme celle si
On l’on retrouve entre autre, la variable Data contenant la température et l’unité et la variable Temp contenant juste la valeur numérique.
Mais on voit qu’il y a aussi plein d’autres données que l’on pourrait extraire pour d’autres besoins (date de mise a jour, signal level (niveau de signal pour les émetteurs radio) )….
Je souhaite ici en utiliser plusieurs, la date de mise à jour (LastUpdate); la température sans son unité et le Status (OK)
Tasker
Nous allons tout d’abord créer des tâches Tasker afin d’interroger Domoticz via son API par un http GET, utiliser un bout de code Javascript pour retirer les valeurs qui nous intéressent, afficher et faire dire ces valeurs.
De façon plus pragmatique il faudra plusieurs variables Tasker, une dans laquelle nous stockerons l’IDX à interroger, puis d’autres dans lesquelles nous irons placer nos valeurs Domoticz et plusieurs actions au sein de cette tâche.
Création de la tâche de lecture de Domoticz.
Pour cela :
Créer une tache en cliquant le le gros + en bas de l’écran
Nommez la
Créez une action en cliquant sur le gros plus en bas
Cliquez sur Variable Puis affecter une variable,
- Créons une variable %idx et donnons lui la valeur de l ‘idx de notre capteur de température (230 ici)
N.B. Une variable en minuscule n’est visible QUE par cette tâche, écrivez la et utilisez en majuscule si vous devez vous en servir dans des scènes, ou d’autres plugins.
Enregistrez en utilisant le bouton « retour »
- Ajoutez une nouvelle action « Get Http » dans la catégorie « Réseau »
Sur la ligne Serveur port vous mettez l’URL de Domoticz et la syntaxe JSON vue plus haut avec tout au bout &rid=%idx, ce %idx faisant référence à la variable Tasker définie à l’étape précédente.
la ligne est donc : http://192.168.1.81:8080/json.htm?type=devices&rid=%idx
On pourrait se passer d’une variable Tasker en mettant « en dur » notre IDX Domoticz :
http://192.168.1.81:8080/json.htm?type=devices&rid=230
mais c’est plus joli comme cela.
- Créons un script de lecture d’un JSON
Depuis votre PC créez un fichier extrait_temp.js contenant ceci :
var tableau_json = []; tableau_json = JSON.parse(global("HTTPD")); var dz_status = tableau_json.status; var dz_temp = tableau_json.result[0].Temp; var dz_date_vu=tableau_json.result[0].LastUpdate;
Ce script lance la commande http précédente, récupère dans tableau_json tout le pavé renvoyé par Domoticz et extrait
le status (OK, ERROR), la Temp (sans unités donc) et LastUpdate (la date de dernière mise à jour ) qui sont placées respectivement dans 3 variables Tasker %dz_status, %dz_temp, %dz_date_vu.
Copiez/collez ce fichier sur votre périphérique Android. Pour moi ce sera dans sdcard01/tasker/extrait_temp.js
- Ajoutons le script à Tasker
Cliquez une fois de plus sur le gros + en bas , puis dans « Code » et ajoutez un « Javascript »
Avec la loupe en haut de l’écran, il faudra aller chercher ce fichier dans le chemin en question.
Dernière étape
- Affichage des valeurs récupérées
A l’étape précédente nous avons rempli 3 variables Tasker, affichons les maintenant.
Cliquez sur le + en bas de l’écran,
Cliquez sur « Alerte » puis « Flash »
Affichez %dz_status, %dz_temp, %dz_date_vu.
Validez.
Un peu de Fun
Cliquez sur le +
Cliquez « Alerte » puis « Dire », tapez %dz_temp ou cliquez sur le gros crayon pour aller chercher cette variable.
Laissez le mot vocal par défaut.
Toutefois si la sortie est en anglais et que vous voulez l’entendre en français, appuyez sur la loupe, puis sur « Synthèse vocale google » en choisissez votre langue favorite (fra-fra pour français). Il vous faudra aussi activer la langue française dans les paramètres « Langue et saisie).
Nous en avons terminé avec nos tâches vous devez obtenir quelque chose comme cela.
Pour vérifier que tout fonctionne bien, cliquez sur le bouton « Play » , à l’étape 4 vous devez avoir les textes puis l’annonce de la température.
Bien que tout cela, mais maintenant choisissons quand ou comment cette tâche va se déclencher.
C’est le rôle des profils.
Un profil correspond à une date, un lieu , un événement, bref c’est le déclencheur de notre tâche.
Le profil
Imaginons que je veuille entendre et voir la température toutes les 5 minutes.
J’ajoute dans « Profil » et je choisis « Heure »
N.B Dans les copies d’écran ci-dessous le délai de répétition est mis à 5 minutes, or il semble que le seuil minimal soit de 10 minutes.
On indique la plage de validité puis en cochant « Répéter » l’intervalle de répétition au sein de la plage choisie.
En validant ceci par la flèche « Retour » on vous propose d’attacher ce profil à une tâche. Sélectionnez la tâche de récupération de la température.
Il ne reste plus qu’à tester tout cela.
Amusez vous bien.
Pas mal, tu te compliques un peu la « tâche » car il y a plus simple mais c’est nickel ?
Salut
Plus simple comment ?
Je fais comme ça :
Get Http ça interroge l’état d’un périphérique avec une requête type 192.168.0.1…… en bas de cette action tu as « Type Mime » là tu mets text/xml et en dessous « Fichier de sortie » tu mets par exemple Tasker/température.xml
Lire une ligne, ce qui va lire la ligne qui t’intéresse dans le fichier précédemment créé, en dessous tu mets la ligne concernée (par exemple 1) et le résultat « Dans une variable » %Temperature par exemple
Pour terminer tu fais changer le widget que tu auras créé (Température par exemple) et dans le libellé tu mets ta variable %Temperature °C
Tu peux même vocaliser cette variable avec un « dire »
Donc dans un seule tâche avec trois actions tu as un widget sur ton bureau avec le résultat que tu veux.
J’utilise un profil qui lorsque l’écran est allumé cette tâche est exécutée. Comme ça j’ai en temps réel les résultats que je souhaite (Températures, états de périphériques…..)
Regarde ici j’ai fait quelques tutos 😉
https://domotiquetechnoseb27.wordpress.com/2015/09/08/rechargement-de-la-batterie-avec-tasker/?preview=true
Salut, super tuto, attention toute fois, si vous utilisez le TTS Google, vous avez un nombre limité d’utilisations, a faire une requête toutes les 5 minutes vous serez vite a bout et ensuite le compte est banni (c’est du vécu).
Ne faire que des notifications super importantes
Bonjour et merci
Pour le TTS on est pas limité me semble t’il.
Il n’y a que la synthèse vocale ou c’est 50 requêtes par jour
Salut….as-tu testé l’autre méthode ?
Qu’en penses-tu ?
😉
bonjour
@ma pomme : ta méthode fonctionne !
j’ai galéré avec la méthode du tuto et la tienne a fonctionner du premier coup
je voulais récupérer la valeur ‘Data’ dans la liste mais en modifiant le fichier json cela ne fonctionne pas il doit y avoir quelque chose a écrire de spéciale …. mais quoi ?
j’ai fais ca :
var tableau_json = [];
tableau_json = JSON.parse(global(« HTTPD »));
var Dz_status = tableau_json.status;
var Dz_data = tableau_json.Data;
var Dz_date_vu = tableau_json.result[0].LastUpdate;
et ca aussi
var Dz_data = tableau_json.result[0].Data;
je n’arrive pas a avoir le ‘Data’
super tuto en tout cas merci pour le partage