Mes passions, le boulots, mes coups de gueule...




Connaitre l’état d’un élément domotique WiFi piloté par Tuya / Smart Life

Catégories : Domotique, Geek, Informatique, Linux, Raspberry Pi · par 21 Juin 2020

Introduction

Nous allons voir ci-dessous comment utiliser l’API de Tuya pour connaitre l’état d’un élément domotique WiFi piloté par Tuya / Smart Life.

Dans mon cas, il s’agit de la commande de mes volets électriques, une Zemismart Curtain Switch dont j’ai déjà parlé ici : https://www.fanjoe.be/?p=3339

Scripts

Token

On va placer les scripts dans le dossier : /home/pi/scripts/tuya/

Tout d’abord, il va falloir récupérer le token qui aura une validité de 10 jours.

Pour cela, on crée un fichier nommé renew_token.sh et on le rend exécutable :

$ chmod +x renew_token.sh

On y place le code suivant :

#!/bin/bash

username="login@monmail.com"
password="AbC123DE"

# Récupérer les Token avec les codes de l'App Smart Life

token=$( curl -s -X POST -k -H 'Content-Type: application/x-www-form-urlencoded' -i 'https://px1.tuyaeu.com/homeassistant/auth.do' --data 'userName='$username'&password='$password'&countryCode=32&bizType=smart_life&from=tuya' | tail -n 1 | jq '.access_token' )

if [ $? -eq 0 ];
then
	echo $token > /home/pi/scripts/tuya/token.txt
fi

Le token sera enregistré dans le fichier : token.txt

Les login et mot-de-passe sont ceux de l’application Tuya ou Smart Life que vous utilisez sur votre smartphone.

Il faudra ajouter une ligne dans le crontab pour l’exécuter toutes les semaines et ainsi renouveler le token avant son expiration :

$ sudo crontab -e

Et on ajoute :

# Renouvelle le token des volets tous les lundis à 16h00
00 16 * * 1 sudo /home/pi/scripts/tuya/renew-token.sh 2>&1

Lire le statut

À la demande, on va lire le statut de l’élément domotique à contrôler.

On crée un fichier statut_volets.sh et on le rend exécutable :

$ chmod +x statut_volets.sh

On y place le code suivant :

#!/bin/bash

token=$(head -n 1 /home/pi/scripts/tuya/token.txt)

Statut=$(curl -s -X POST -k -H 'Content-Type: application/json' -i 'https://px1.tuyaeu.com/homeassistant/skill' --data '{"header": {"name": "Discovery","namespace": "discovery","payloadVersion": 1},"payload": {"accessToken": '$token'}}' | tail -n 1 | jq '.payload.devices[].data.state' 2> /dev/null | head -n 1 )

# State 1 : Ouverts
# State 2 : Fermés
# State 3 : Pause

case "$Statut" in

	1)
		echo "Ouverts"
		;;
         
        2)
		echo "Fermés"
		;;
         
	3)
		echo "Pause"
		;;
         
	*)
		echo "Statut inconnu"
		;;

esac

Le script va lire le token et interroger le serveur pour connaitre la position de mes volets.


Notes :

Je ne parviens pas à envoyer une commande via l’API avec une commande cURL pour ouvrir ou fermer mes volets.

Je suis donc, pour l’instant, obligé d’utiliser le webhook du service SEQUEmatic décrit dans cet article pour les piloter via cURL.

Si vous avez une solution ou des pistes, je suis preneur… 🙂

(2) comments

Adrien
2 mois ago · Répondre

Je n’arrive pas à obtenir le retour de status, votre script fonctionne t’il toujour ?
Je tombe sur une erreur 404

    fanjoe
    2 mois ago · Répondre

    Bonjour,

    Oui, le script fonctionne toujours avec POST dans une commande curl.
    Si la requête est mal formulée, le serveur renvoie une erreur 404.

    Didier.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.