[Tuto] Worx : landroid et la nouvelle application
Publié : 19 mars 2019, 13:15
Bonjour,
Worx produits des robots tondeuses connectés (le mien un M). L'avantage est de pouvoir le piloter depuis une application "Worx Landroid", or cela a ses limites.
Dans mes scénarios idéaux, il y aurait : lundi il a plut donc le robot n'a pas tondu (je ne le fais pas tondre sous la pluie) ! Or la pelouse a poussé, je voudrais donc que le mardi il tourne un petit peu plus que la programmation horaire le prévois.
Pour cela il faut : récupérer les informations sur le temps de tonte, et pouvoir déclencher automatiquement le robot depuis domoticz.
Pour l'instant la technique est encore artisanale, et de bonnes connaissances en shell / lua et api domoticz sont nécessaires pour la mettre en place mais le plus difficile est fait. Je mets donc ici les premiers éléments permettant à chacun de se construire sa propre solution.
Depuis un Linux.
Landroid M version firmware 5.18
Variables à remplacer :
DEBUT MODIFICATION 10/10/2022 (merci à lacha007)
La partie en rouge écrite tout petit est juste pour "archive", cette méthode ne fonctionne plus suite à mise à jour de l'application.
TOKEN=$(curl -v -X POST -d '{"client_id": 1, "grant_type": "password", "scope": "*", "client_secret": "nCH3A0WvMYn66vGorjSrnGZ2YtjQWDiCvjg7jNxK", "username": "<login_application_LANDROID>", "password":"<password_application_LANDROID>"}' -H 'Content-Type: application/json' https://api.worxlandroid.com/api/v2/oauth/token | jq -r '.access_token')
curl -X GET -H 'Accept: application/json' -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" https://api.worxlandroid.com/api/v2/product-items
curl -X GET -H 'Accept: application/json' -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" https://api.worxlandroid.com/api/v2/pro ... OT>/status
Suite à une évolution de l'application il faut désormais mettre :
FIN MODIFICATION 10/10/2022
Récupération du certificat pour se connecter au mqtt :
(à la demande du mot de passe faire entrer pour mot de passe vide)
(à la demande du mot de passe faire entrer pour mot de passe vide)
Récupérer le certificat CA amazon :
Récupérer le nom du topic pour faire l'envoi des msg mqtt :
La valeur Correspondra au paramètre "-t" des commandes ci-dessous ex : -t 'DB505/0023A7E5G3CB/commandOut'
Souscrire à la queue mqtt :
Arrêter la tondeuse :
Lancer la tondeuse :
Rentrer la tondeuse :
Puis depuis domoticz avec le matériel virtual dummy, j'ai créé des capteurs (compteurs) que je mets à jour depuis un script shell :
(bien sûr les idx des capteurs sont à remplacer)
Pour l'instant je n'ai fait que la remontée d'informations, je ne déclenche pas encore automatiquement le robot. Je réfléchis aux scénarios et je stabilise la solution.
Remerciements particuliers à un ami qui a réalisé toute la partie permettant la connectivité aux robot.
Worx produits des robots tondeuses connectés (le mien un M). L'avantage est de pouvoir le piloter depuis une application "Worx Landroid", or cela a ses limites.
Dans mes scénarios idéaux, il y aurait : lundi il a plut donc le robot n'a pas tondu (je ne le fais pas tondre sous la pluie) ! Or la pelouse a poussé, je voudrais donc que le mardi il tourne un petit peu plus que la programmation horaire le prévois.
Pour cela il faut : récupérer les informations sur le temps de tonte, et pouvoir déclencher automatiquement le robot depuis domoticz.
Pour l'instant la technique est encore artisanale, et de bonnes connaissances en shell / lua et api domoticz sont nécessaires pour la mettre en place mais le plus difficile est fait. Je mets donc ici les premiers éléments permettant à chacun de se construire sa propre solution.
Depuis un Linux.
Landroid M version firmware 5.18
Variables à remplacer :
- <login_application_LANDROID>
<password_application_LANDROID>
<numero_de_serie_ROBOT>
- curl
jq
openssl
mosquitto (Attention sur raspberry si la version est wheezy 7, la version de mosquitto est trop ancienne, il faut une version 1.5.8.)
DEBUT MODIFICATION 10/10/2022 (merci à lacha007)
La partie en rouge écrite tout petit est juste pour "archive", cette méthode ne fonctionne plus suite à mise à jour de l'application.
TOKEN=$(curl -v -X POST -d '{"client_id": 1, "grant_type": "password", "scope": "*", "client_secret": "nCH3A0WvMYn66vGorjSrnGZ2YtjQWDiCvjg7jNxK", "username": "<login_application_LANDROID>", "password":"<password_application_LANDROID>"}' -H 'Content-Type: application/json' https://api.worxlandroid.com/api/v2/oauth/token | jq -r '.access_token')
curl -X GET -H 'Accept: application/json' -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" https://api.worxlandroid.com/api/v2/product-items
curl -X GET -H 'Accept: application/json' -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" https://api.worxlandroid.com/api/v2/pro ... OT>/status
Suite à une évolution de l'application il faut désormais mettre :
Code : Tout sélectionner
TOKEN=$(curl -v -X POST -d '{"client_id": "150da4d2-bb44-433b-9429-3773adc70a2a", "grant_type": "password", "scope": "*", "client_secret": "nCH3A0WvMYn66vGorjSrnGZ2YtjQWDiCvjg7jNxK", "username": "<login_application_LANDROID>", "password":"<password_application_LANDROID>"}' -H 'Content-Type: application/json' https://id.eu.worx.com/oauth/token | jq -r '.access_token')
curl -X GET -H 'Accept: application/json' -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" https://api.worxlandroid.com/api/v2/product-items
curl -X GET -H 'Accept: application/json' -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" https://api.worxlandroid.com/api/v2/product-items/<numero_de_serie_ROBOT>?status=1Récupération du certificat pour se connecter au mqtt :
Code : Tout sélectionner
curl -X GET -H 'Accept: application/json' -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" https://api.worxlandroid.com/api/v2/users/certificate | jq -r '.pkcs12' | base64 --decode > certif.p12
Code : Tout sélectionner
openssl pkcs12 -in certif.p12 -nocerts -nodes -out key.pemCode : Tout sélectionner
openssl pkcs12 -in certif.p12 -clcerts -nokeys -out certificate.pemRécupérer le certificat CA amazon :
Code : Tout sélectionner
curl -O https://www.amazontrust.com/repository/AmazonRootCA1.pemCode : Tout sélectionner
curl -X GET -H 'Accept: application/json' -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" https://api.worxlandroid.com/api/v2/product-items | jq ".[] | {id: .id, command_in: .mqtt_topics }"Souscrire à la queue mqtt :
Code : Tout sélectionner
mosquitto_sub -d --cert certificate.pem --key key.pem --cafile AmazonRootCA1.pem -h a1optpg91s0ydf-ats.iot.eu-west-1.amazonaws.com -p 8883 -t 'DB505/0023A7E5G3CB/commandOut' --id android-123456Code : Tout sélectionner
mosquitto_pub -d --cert certificate.pem --key key.pem --cafile AmazonRootCA1.pem -h a1optpg91s0ydf-ats.iot.eu-west-1.amazonaws.com -p 8883 -t 'DB505/0023A7E5G3CB/commandIn' -m '{"cmd": 2}' --id android-123456Code : Tout sélectionner
mosquitto_pub -d --cert certificate.pem --key key.pem --cafile AmazonRootCA1.pem -h a1optpg91s0ydf-ats.iot.eu-west-1.amazonaws.com -p 8883 -t 'DB505/0023A7E5G3CB/commandIn' -m '{"cmd": 1}' --id android-123456Code : Tout sélectionner
mosquitto_pub -d --cert certificate.pem --key key.pem --cafile AmazonRootCA1.pem -h a1optpg91s0ydf-ats.iot.eu-west-1.amazonaws.com -p 8883 -t 'DB505/0023A7E5G3CB/commandIn' -m '{"cmd": 3}' --id android-123456(bien sûr les idx des capteurs sont à remplacer)
Code : Tout sélectionner
#!/bin/sh
TOKEN=$(curl -v -X POST -d '{"client_id": "150da4d2-bb44-433b-9429-3773adc70a2a", "grant_type": "password", "scope": "*", "client_secret": "nCH3A0WvMYn66vGorjSrnGZ2YtjQWDiCvjg7jNxK", "username": "<login_application_LANDROID>", "password":"<password_application_LANDROID>"}' -H 'Content-Type: application/json' https://id.eu.worx.com/oauth/token | jq -r '.access_token')
curl -X GET -H 'Accept: application/json' -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" https://api.worxlandroid.com/api/v2/product-items > /home/pi/domoticz/scripts/shell/worx_curl1.json
DISTANCE_COVERED=`cat /home/pi/domoticz/scripts/shell/worx_curl1.json | jq '.[].distance_covered'`
echo "EXEC"
exec="http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=3299&svalue=${DISTANCE_COVERED}"
echo $exec
curl $exec
MOWER_WORK_TIME=`cat /home/pi/domoticz/scripts/shell/worx_curl1.json | jq '.[].mower_work_time'`
echo "EXEC"
exec="http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=3300&svalue=${MOWER_WORK_TIME}"
echo $exec
curl $exec
BLADE_WORK_TIME=`cat /home/pi/domoticz/scripts/shell/worx_curl1.json | jq '.[].blade_work_time'`
echo "EXEC"
exec="http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=3301&svalue=${BLADE_WORK_TIME}"
echo $exec
curl $exec
BATTERY_CHARGE_CYCLES=`cat /home/pi/domoticz/scripts/shell/worx_curl1.json | jq '.[].battery_charge_cycles'`
echo "EXEC"
exec="http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=3302&svalue=${BATTERY_CHARGE_CYCLES}"
echo $exec
curl $exec
curl -X GET -H 'Accept: application/json' -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" https://api.worxlandroid.com/api/v2/product-items/201830173205000071DB?status=1 > /home/pi/domoticz/scripts/shell/worx_curl2.json
POURCENTAGEBATTERIE=`cat /home/pi/domoticz/scripts/shell/worx_curl2.json | jq .last_status.payload.dat.bt.p`
echo "EXEC"
exec="http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=3298&svalue=${POURCENTAGEBATTERIE}"
echo $exec
curl $execRemerciements particuliers à un ami qui a réalisé toute la partie permettant la connectivité aux robot.