Améliorations du plugin Gardena : comment soumettre du code modifié?

Bonjour

J’ai modifié le plugin Gardena pour remonter d’autres infos sur les tondeuses Husqvarna, comme l’historique des 50 dernières positions, la hauteur de coupe, l’heure de dernier rapport, l’heure du prochain départ…
j’ai aussi réussi a faire fonctionner les 2 commandes park et start, avec attributes ‹ duration ›, mais je peine a faire fonctionner le réglage de hauteur de coupe (avec attributes « cuttingheight »)

comment puis je publier le code modifié, y a t’il un environnement Github ?

1 « J'aime »

Bonjour,

Bien sur qu’il y a un git mais il est privé.

Vous pouvez m’envoyer en message privé un zip et j’analyserai les changements pour les intégrer le cas échéant dans le plugin.

Concernant la position, il y a déjà la dernière position dans l’équipement non? et avec jeedom on peut historiser toutes les commandes que l’on veut donc je ne vois pas trop ce qu’il manquait mais soit je verrai selon les changements

pour la position, j’ai en effet essayé d’utiliser l’historique de la dernière position, directement dans un widget customisé. Mais cela ne fonctionne pas aussi bien.

j’envoie le zip en mp

salut Mips

As tu eu l’occasion de jeter un oeil aux modifications de code ?
Si tu as aussi une explication au problème de la commande de réglage de hauteur de coupe, je suis preneur…

pour info, voila la tuile de mon design

Non je n’ai malheureusement pas encore eu le temps, énormément de boulot pour le moment mais je fait ça asap et je ferai un retour.

Et la semaine prochaine je suis en vacances donc ça risque d’être encore après.

J’ai commencé à regarder, je vois l’idée pour les positions
Je regarderai si je trouve qlqch pour la hauteur de coupe.
mais je dois faire aussi un peu de nettoyage et re-modifier certaines parties car il y a des régressions (par exemple des commandes gardena qui ne fonctionnent plus) donc pas encore fini

j’ai résolu le problème du réglage de hauteur de coupe.
la syntaxe de l’URL pour ‹ actions › n’est pas la meme que celle de ‹ settings ›, or le code actuel ne connait que la syntaxe ‹ actions › :

la commande « demarre 10 minutes » par exemple fonctionne avec cette syntaxe :

curl -X POST https://api.amc.husqvarna.dev/v1/mowers/ xxxxxxxxxxxxxxxxxxxxxxxxx/actions -H "accept: */*" -H "X-Api-Key: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy " -H "Authorization: Bearer zzzzzzzzz" 
-H "Authorization-Provider: husqvarna" -H "Content-Type: application/vnd.api+json" -d "{\"data\":{\"type\":\"Start\",\"attributes\":{\"duration\":10}}}"

La commande « régler hauteur de coupe a 6 » fonctionne avec cette syntaxe :

curl -X POST https://api.amc.husqvarna.dev/v1/mowers/xxxxxxxxxxxxxxxxxxxxxxxxx/settings -H "accept: application/vnd.api+json" -H "X-Api-Key: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy" -H "Authorization: Bearer zzzzzzzzz" 
-H "Authorization-Provider: husqvarna" -H "Content-Type: application/vnd.api+json" -d "{\"data\":{\"type\":\"settings\",\"attributes\":{\"cuttingHeight\":6}}}"

la difference c’est
/actions <----> /settings

le header Accept est different aussi mais cela n’a pas d’importance

j’ai donc defini ceci dans plugins/gardena/resources/gardenad/gardena/smart_system.py

     def call_husqvarna_settings(self, automower_id, data):
         args = {"data": data}
         headers = self.create_header(True)
 
         r = self.oauth_session.post(
             self.HUSQVARNA_HOST+'/v1/mowers/'+str(automower_id)+'/settings',
             headers=headers,
             data=json.dumps(args, ensure_ascii=False),
         )
         if r.status_code != 202:
             response = r.json()
 
             raise Exception(str(r.status_code) + ':' + str(response['errors'][0]['title']))

et dans plugins/gardena/resources/gardenad/gardena/automower.py, je modifie en ceci

    def setCuttingHeight(self, cuttingHeight):
        data =  {
            "type": "settings",
            "attributes": {
            	"cuttingHeight" : int(cuttingHeight)
            }
        }
        self.smart_system.call_husqvarna_settings(self.id, data)

Et maintenant ca marche !!!

La beta sera mise à jour demain.
Comme déjà dit, j’ai du remanier des parties car l’intégration avec les équipements gardena était cassée.
J’ai vu que tu avais ajouté des commandes timestamp, pas certain de l’utilité mais je les ai laissées. Je les ai laissé en format timestamp pour l’utilisation dans un scénario par contre à l’affichage elles seront au format date/heure.

Hello
Merci pour la mise à jour.
Par contre, les timestamp sur le dashboard donnent des infos bizarres.
Il y a quelque chose à faire ?
image
Jeedom en V4.2.14

Ah oui, ca c’est pas normal.
Aurais-tu un log avec la valeur réelle?
ou la valeur de la commande?

Bonjour mips.
Je te donne ça cet après-midi.

les timestamps sont en millisecondes et pas en secondes, il faut les diviser par 1000…

pour tester sans modif de code, utiliser #value#/1000 dans « calcul et arrondi » de la commande correspondante

Effectivement en tenant compte du / 1000 de @t0urista , cela corrige les timestamp.
image
Par contre je ne comprends pas les infos.
14:08:07 doit etre le dernier rapport,
ma prog est de 18:00 à 23:00
Je mets les log comme demandé

[2022-04-19 13:50:02][DEBUG] : Send to jeedom :  {'husqvarna_automower': {'id': 'xxxxxxxxxxxxxxxxxxxxx', 'type': 'mower', 'name': 'Justin', 'model_type': 'HUSQVARNA AUTOMOWER® 315X', 'serial': xxxxxxxxxxxxxxx, 'battery_level': 100, 'battery_type': 'Rechargeable', 'mode': 'MAIN_AREA', 'activity': 'PARKED_IN_CS', 'state': 'RESTRICTED', 'errorCode': 0, 'errorDesc': '', 'planner_nextStartTimestamp': 1650477600000, 'planner_override': {'action': 'WEEK_TIMER'}, 'planner_restrictedReason': 'WEEK_SCHEDULE', 'cuttingHeight': 1, 'positions': 'xx,xxxxxxx,4.87643/xx,xxxxxxx,4.87644/45.851125,4.876445/xx,xxxxxxx,4.8764316/xx,xxxxxxx,4.8764/45.8511166,4.8764166/xx,xxxxxxx,4.8764466/xx,xxxxxxx66,4.8764416/xx,xxxxxxx,4.8764266/xx,xxxxxxx,4.876395/xx,xxxxxxx,4.8764/45.8511433,4.8764333/45.8511466,4.8764833/xx,xxxxxxx,4.8764816/45.8511516,4.876425/45.8511499,4.8764583/45.8511499,4.87648/xx,xxxxxxx83,4.8764083/45.8511616,4.8763916/xx,xxxxxxx,4.8764566/45.8511516,4.8764033/xx,xxxxxxx,4.876455/xx,xxxxxxx16,4.8764733/xx,xxxxxxx,4.8764383/xx,xxxxxxx,4.8764216/xx,xxxxxxx,4.8764533/xx,xxxxxxx,4.87648/45.85114,4.876455/xx,xxxxxxx16,4.876415/xx,xxxxxxx16,4.8765116/xx,xxxxxxx,4.8765599/45.8511,4.8765016/xx,xxxxxxx16,4.8764683/xx,xxxxxxx83,4.8764433/xx,xxxxxxx,4.8764316/xx,xxxxxxx16,4.8763966/xx,xxxxxxx5,4.8764633/xx,xxxxxxx,4.8764516/xx,xxxxxxx5,4.8764383/xx,xxxxxxx,4.8764383/xx,xxxxxxx,4.87643/xx,xxxxxxx,4.8764133/45.8511066,4.8764716/xx,xxxxxxx,4.8764866/xx,xxxxxxx,4.876425/xx,xxxxxxx,4.87637/xx,xxxxxxx,4.8764266/45.8511666,4.876375/xx,xxxxxxx,4.87641/xx,xxxxxxx,4.8764333', 'position': 'xx,xxxxxxx,y,yyyyy', 'latitude': xx,xxxxxxx, 'longitude': y,yyyyy, 'connected': True, 'statusTimestamp': 1650368407952, 'calendarTasks': [{'start': 1080, 'duration': 300, 'monday': (True,), 'tuesday': (False,), 'wednesday': (True,), 'thursday': (False,), 'friday': (True,), 'saturday': (False,), 'sunday': (True,)}]}}

Je ne suis pas sur de comprendre la question:

  • dernier rapport c’est selon moi l’heure du dernier envoi de données par le robot
  • l’autre (demain 20h), c’est l’heure de prochain départ prévu.

pour le dernier rapport, oui, c’est bien ce que j’ai compris.
Par contre la tondeuse va démarrer demain à 18:00 et il est affiché 20:00
‹ start ›: 1080, ‹ duration ›: 300
18 x 60 et 5 x 60
18 à 23h, ce qui correspond à ma programmation

Un préavis de grève p-e? :smiley:

sinon je ne sais pas, c’est la valeur retournée par le robot donc à priori elle est correcte…
je vois qu’il y a un override de la programmation dû au nombre d’heure de tonte sur le semaine, t’es sur qu’elle va démarrer demain à 18h? l’avenir nous le dira

:grinning_face_with_smiling_eyes::grinning_face_with_smiling_eyes::grinning_face_with_smiling_eyes:
Oui, quand je dit elle va démarrer à 18:00, c’est ce que j’ai mis dans ma prog et que l’on retrouve dans les log.
Maintenant, à part de vérifier demain, …

Edit : Lorsque tu parles de la restriction, c’est {‹ action ›: ‹ WEEK_TIMER ›}, ‹ planner_restrictedReason ›: ‹ WEEK_SCHEDULE ›, ?

Oui, cela semble dire qu’il y a une exception prévue par rapport à la programmation normale… pourquoi ca je l’ignore

J’essaie de voir demain à quelle heure elle démarre.
Merci

Hello @t0urista
Comment fait tu pour avoir la map ?