Plugin pour gestion de Spa GECKO avec controleur à distance GECKO in touch 2

bizarre les erreurs ne sont plus dans le script … peux tu supprimer les lignes commentés et relancer le script pour voir stp

Bonjour @chris94440 et les autres,
je m’intéresse fortement à ton plugin parce que je vais réceptionner mon spa BeWell dans les jours qui viennent et il est équipé d’un contrôleur Gecko avec le module in.touch 2. C’est super que quelqu’un se soit déjà penché sur ce sujet! Merci beaucoup!

J’ai une installation Jeedom DIY dans une VM Proxmox entièrement à jour avec plusieurs protocoles déjà installés.
J’ai donc installé ton plugin et j’ai quelques questions à ce sujet :

  • le lien vers la doc semble pointer vers un autre plugin (Tahoma). Est-ce voulu? J’imagine qu’il n’y a pas de lien entre les 2?
  • la découverte d’un spa sur le lan se fait de manière auto au démarrage du démon? Pas d’info à saisir manuellement comme l’IP par exemple?
  • quelles sont les principales fonctionnalités / possibilités offertes par Gecko via l’appli et via le plugin. Toutes les fonctionnalités de l’appli sont-elles accessibles via le plugin?

Merci par avance pour toutes tes réponses

Lionel

Bonjour
Le plugin été initié pour une de mes amis, je n’ai pas de spa chez moi, et il a pas trop le temps de tester
Il en phase d ébauche et pas fonctionnel …mais je vais m’y repencher.
Je suis parti d’une copie d’un autre de mes plugin …le tahomalocalapi du coup c’est normal qu’il y ait des reste de ce plugin…mais je vais faire du ménage
Si tu as du temps a y accorder on va pouvoir travailler ensemble sachant que je dev a l’aveugle donc vraiment pas facile…
@chris94440

Hello,
ça sera avec plaisir.
Ce n’est pas un langage que je connais particulièrement mais après tout on n’est pas pressé :grinning:

Comment le plugin dialogue t’il avec le spa?
Est-ce via des api et on envoie une commande cUrl ou bien du modbus ou autrement?
Je n’ai pas encore trouvé d’info (pas trop cherché non plus je dois dire)

Lionel

Re,
Il s’agit d’une librairie Python : GitHub - gazoodle/geckolib: Library to interface with Gecko Alliance spa pack systems via in.touch2 module
Cela me permet d’apprendre le python … :slight_smile:

Super, je vais y jeter un coup d’oeil ce week end.
Je ne connais pas le Python mais je vais certainement bénéficier d’une formation dans le cadre de mon travail. Je ferai coup double :wink:
Donc pas besoin de box Tahoma on est bien d’accord.
Et quand tu dis que ce n’est pas fonctionnel cela veut dire rien du tout?
La librairie n’est pas fonctionnelle non plus?

Bonjour à vous deux
Je suis également interressé par le sujet , j’ai recu mon module InTouch2 il y a qques semaines et je voudrai gerer mon spa surtout pour controler la consommation electrique et gerer du delestage pour ne pas depasser ma puissance EDF.
J’ai suivi l’installation suivant chris9440 , tout est ok avec les deux scripts quand je les lance via SSH. Par contre je butte sur le 1er scenario qui n’a pas l’air de lancer la commande .py
ci apres ma page santé je suis suis rasberry pi3 à jour
les captures en ssh, le detail et logs du scenario
attention je ne suis pas du tout à l’aise avec le developpement meme si j’ai ajouté qques commentaires dans le scenario pour suivre son deroulement.
ca doit etre tout bete mais je seche
merci
Roland







Hello,
pas encore eu le temps de m’y mettre.
On m’a livré le spa aujourd’hui donc je pense m’y atteler ce week end (si j’ai le temps)

Lionel

Merci
Il n’y a aucune urgence, je tournais sans le contrôle intouch2 depuis plusieurs mois. Maintenant je peux gérer via mon téléphone, la prochaine étape sera avec jeedom.
Bonne soirée
Roland

re…
alors j’ai vite fait tenté d’utiliser le plugin hier soir avec ma nouvelle bête et ça a marché du premier coup.
J’ai bien les infos qui remontent et je peux envoyer des actions.
Par contre, je ne te suis pas sur la méthode d’installation du plugin.
A partir du moment où le spa est sur le réseau local, tu installes le plugin, tu l’actives.
Ensuite il suffit juste de lancer les dépendances ce qui va créer ton objet spa et c’est fini (vérifie quand même que le démon tourne).
C’est passé comme une lettre à la poste en 5 minutes hier soir (tard)

Lionel

Bonsoir
Y’a un truc qui m’échappe alors. Tu parles d un plugin alors que moi j’ai installé deux scrypt . Py et j’ai créé trois scénarios. As tu le nom du plugin ? Il est en bêta seulement ?
Merci pour tes réponses
Bonne soirée
Roland

Oui, il s’agit de GeckoSpa.
2023-12-21 22_02_59-Gestion Plugins - Jeedom — Mozilla Firefox

Lionel

Super, en effet j’ai installé le plugin en deux minutes juste en ayant relancé les dépendances deux fois. Mon spa a été trouvé de suite. Merci c est nickel

Par contre je pense qu’il manque une info importante au niveau de water_heater, on a bien la consigne de température et la valeur actuelle mais il manque la current_operation qui peut être cooling ou heating, afin da savoir si le spa est en train de chauffer ou pas.
Je pense que c’est juste un oubli pour l’afficher car l’info est bien remontée dans l’interview du spa.
Pour une prochaine mise à jour…
Merci et passez de bonnes fêtes de Noel
Roland

Hello
Attention le plugin n’est pour moi pas du tout fonctionnel … cela fait longtemps que j’ai pas m’y le nez dedans mais le daemon avait du mal a tenir et les actions ne devaient pas etre fonctionnelles.
N’ayant pas de spa je l’avais initié pour un pote mais j’ai pas trop le temps en ce moment et lui non plus c’est pour cette raison que le plugin est à l’arrêt … mais si il y a des gens interressés je m’y remettrais en 2024

Bonne fêtes à tous
@chris94440

Update : si vraiment vous voulez tester je crois qu’il faut partir de la branche alpha

Merci Chris,
Je vais patienter et surveiller le démon, je ne suis pas expert et bien incapable de savoir aller sur la branche alpha, je ne sais même pas ce que cela signifie :thinking:
C est déjà bien d avoir ce que tu as fait.
Merci

Merci @chris94440 pour ces infos. Je vais passer en alpha dans ce cas. C’est les vacances!!!

Lionel

Bonjour,
Du coup j’ai pu faire des essais depuis la version alpha (voir installation d’un plugin par GitHub).
Le daemon ne se lançait pas.
J’ai du installer manuellement 2 library:
$ pip install aiohttp
$ pip install aiodns
voir url : Welcome to AIOHTTP — aiohttp 3.9.3 documentation

Après ça le daemon se lance correctement et reste fonctionnel pendant 1h30. Il s’arrête sans aucun log.
Du coup je relance le daemon par scénario toutes les heures + 2 min.
Je peux vous envoyer le scénario si besoin.
J’utilise seulement la remontée de la température (je n’ai pas besoin des autres fonctionnalités). J’imagine que toutes les informations fonctionnent, je ne sais pas pour les commandes.

Hello
Pour les dépendances je pensais avoir résolu le soucis mais peut être ai-je oublié de comiter.
Concernant l’arrêt du fonctionnement du daemon je m’en suis rendu compte mais n’ayant pas de spas il était difficile pour moi … j’ai pas trop le temps en ce moment mais je vais essayer de m’y remettre … je te tiens au courant

@chris94440

1 « J'aime »

Hello @chris94440 ,
en vacances pour une semaine, je me suis remis (après pas mal de temps) sur ton plugin.
Je dois dire que j’ai avancé mais je sèche sur un truc :
Il semble que les infos descendent bien depuis le spa vers Jeedom à chaque démarrage de Jeedom MAIS les cron suivants renvoient toujours les mêmes valeurs (à croire que le refresh des infos de la façade ne se fait pas ou n’est pas appelé.
J’ai pu tester GeckoShell en direct ça marche parfaitement donc je ne pense pas que cela vienne la lib mais en tout cas le souci est situé assez haut dans le code car la fonction state() dans geckospadV2.py renvoie déjà une valeur figée.

Autre chose, je ne sais pas si c’est normal mais suite au démarrage du démon, j’ai toutes les tâches qui sont « cancelled » alors que je ne sais pas pourquoi :

[2024-04-20 18:40:28] DEBUG  : Cancel task <Task pending name='SPAMAN:Sequence Pump' coro=<GeckoAsyncSpaMan._sequence_pump() running at /var/www/html/plugins/geckospa/resources/_pyenv/versions/3.9.16/lib/python3.9/site-packages/geckolib/async_spa_manager.py:545> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x7fc6676e4fa0>()]>>
[2024-04-20 18:40:28] DEBUG  : Cancel task <Task pending name='ASYNC:Tidy tasks' coro=<AsyncTasks._tidy() running at /var/www/html/plugins/geckospa/resources/_pyenv/versions/3.9.16/lib/python3.9/site-packages/geckolib/async_tasks.py:44> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x7fc667757280>()]>>
[2024-04-20 18:40:28] DEBUG  : Cancel task <Task pending name='SPAMAN:Sequence Pump' coro=<GeckoAsyncSpaMan._sequence_pump() running at /var/www/html/plugins/geckospa/resources/_pyenv/versions/3.9.16/lib/python3.9/site-packages/geckolib/async_spa_manager.py:545> wait_for=<Future cancelled>>
[2024-04-20 18:40:28] DEBUG  : Cancel task <Task cancelled name='LOC:Hello handler' coro=<GeckoUdpProtocolHandler.consume() done, defined at /var/www/html/plugins/geckospa/resources/_pyenv/versions/3.9.16/lib/python3.9/site-packages/geckolib/driver/udp_protocol_handler.py:145>>
[2024-04-20 18:40:28] DEBUG  : Cancel task <Task cancelled name='LOC:Broadcast loop' coro=<GeckoAsyncLocator._broadcast_loop() done, defined at /var/www/html/plugins/geckospa/resources/_pyenv/versions/3.9.16/lib/python3.9/site-packages/geckolib/async_locator.py:107>>
[2024-04-20 18:40:28] DEBUG  : Cancel task <Task cancelled name='LOC:Hello handler' coro=<GeckoUdpProtocolHandler.consume() done, defined at /var/www/html/plugins/geckospa/resources/_pyenv/versions/3.9.16/lib/python3.9/site-packages/geckolib/driver/udp_protocol_handler.py:145>>
[2024-04-20 18:40:28] DEBUG  : Cancel task <Task cancelled name='LOC:Broadcast loop' coro=<GeckoAsyncLocator._broadcast_loop() done, defined at /var/www/html/plugins/geckospa/resources/_pyenv/versions/3.9.16/lib/python3.9/site-packages/geckolib/async_locator.py:107>>
[2024-04-20 18:40:28] DEBUG  : Cancel task <Task cancelled name='LOC:Hello handler' coro=<GeckoUdpProtocolHandler.consume() done, defined at /var/www/html/plugins/geckospa/resources/_pyenv/versions/3.9.16/lib/python3.9/site-packages/geckolib/driver/udp_protocol_handler.py:145>>
[2024-04-20 18:40:28] DEBUG  : Cancel task <Task cancelled name='LOC:Broadcast loop' coro=<GeckoAsyncLocator._broadcast_loop() done, defined at /var/www/html/plugins/geckospa/resources/_pyenv/versions/3.9.16/lib/python3.9/site-packages/geckolib/async_locator.py:107>>
[2024-04-20 18:40:28] DEBUG  : Cancel task <Task pending name='SPA:Unhandled packet' coro=<GeckoUnhandledProtocolHandler.consume() running at /var/www/html/plugins/geckospa/resources/_pyenv/versions/3.9.16/lib/python3.9/site-packages/geckolib/driver/protocol/unhandled.py:31> wait_for=<Future finished result=None>>
[2024-04-20 18:40:28] DEBUG  : Cancel task <Task pending name='SPA:Packet handler' coro=<GeckoUdpProtocolHandler.consume() running at /var/www/html/plugins/geckospa/resources/_pyenv/versions/3.9.16/lib/python3.9/site-packages/geckolib/driver/udp_protocol_handler.py:157> wait_for=<Future finished result=None>>
[2024-04-20 18:40:28] DEBUG  : Cancel task <Task pending name='SPA:Partial status block handler' coro=<GeckoUdpProtocolHandler.consume() running at /var/www/html/plugins/geckospa/resources/_pyenv/versions/3.9.16/lib/python3.9/site-packages/geckolib/driver/udp_protocol_handler.py:157> wait_for=<Future finished result=None>>
[2024-04-20 18:40:28] DEBUG  : Cancel task <Task pending name='SPA:RFErr handler' coro=<GeckoUdpProtocolHandler.consume() running at /var/www/html/plugins/geckospa/resources/_pyenv/versions/3.9.16/lib/python3.9/site-packages/geckolib/driver/udp_protocol_handler.py:157> wait_for=<Future finished result=None>>
[2024-04-20 18:40:28] DEBUG  : Cancel task <Task pending name='SPA:WCErr handler' coro=<GeckoUdpProtocolHandler.consume() running at /var/www/html/plugins/geckospa/resources/_pyenv/versions/3.9.16/lib/python3.9/site-packages/geckolib/driver/udp_protocol_handler.py:157> wait_for=<Future finished result=None>>
[2024-04-20 18:40:28] DEBUG  : Cancel task <Task pending name='SPA:Ping loop' coro=<GeckoAsyncSpa._ping_loop() running at /var/www/html/plugins/geckospa/resources/_pyenv/versions/3.9.16/lib/python3.9/site-packages/geckolib/async_spa.py:457> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x7fc667716430>()]>>
[2024-04-20 18:40:28] DEBUG  : Cancel task <Task pending name='SPA:Refresh loop' coro=<GeckoAsyncSpa._refresh_loop() running at /var/www/html/plugins/geckospa/resources/_pyenv/versions/3.9.16/lib/python3.9/site-packages/geckolib/async_spa.py:488> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x7fc667716100>()]>>
[2024-04-20 18:40:28] DEBUG  : Cancel task <Task pending name='FACADE:Facade update' coro=<GeckoAsyncFacade._facade_update() running at /var/www/html/plugins/geckospa/resources/_pyenv/versions/3.9.16/lib/python3.9/site-packages/geckolib/automation/async_facade.py:82>>
[2024-04-20 18:40:28] DEBUG  :     Task ASYNC:Tidy tasks result `CancelledError('')`
[2024-04-20 18:40:28] DEBUG  :     Task SPAMAN:Sequence Pump result `CancelledError('')`
[2024-04-20 18:40:28] DEBUG  :     Task LOC:Hello handler result `CancelledError('')`
[2024-04-20 18:40:28] DEBUG  :     Task LOC:Broadcast loop result `CancelledError('')`
[2024-04-20 18:40:28] DEBUG  :     Task LOC:Hello handler result `CancelledError('')`
[2024-04-20 18:40:28] DEBUG  :     Task LOC:Broadcast loop result `CancelledError('')`
[2024-04-20 18:40:28] DEBUG  :     Task LOC:Hello handler result `CancelledError('')`
[2024-04-20 18:40:28] DEBUG  :     Task LOC:Broadcast loop result `CancelledError('')`
[2024-04-20 18:40:28] DEBUG  :     Task SPA:Unhandled packet result `CancelledError('')`
[2024-04-20 18:40:28] DEBUG  :     Task SPA:Packet handler result `CancelledError('')`
[2024-04-20 18:40:28] DEBUG  :     Task SPA:Partial status block handler result `CancelledError('')`
[2024-04-20 18:40:28] DEBUG  :     Task SPA:RFErr handler result `CancelledError('')`
[2024-04-20 18:40:28] DEBUG  :     Task SPA:WCErr handler result `CancelledError('')`
[2024-04-20 18:40:28] DEBUG  :     Task SPA:Ping loop result `CancelledError('')`
[2024-04-20 18:40:28] DEBUG  :     Task SPA:Refresh loop result `CancelledError('')`
[2024-04-20 18:40:28] DEBUG  :     Task FACADE:Facade update result `CancelledError('')`

Je me dis que ça a peut-être un lien avec le fait qu’on ne refresh plus les données.
Est-ce que ça te rappelle quelque chose?