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.