Plugin kTwinkly - Guirlandes connectées Twinkly

Tags: #<Tag:0x00007fc6c04cdc98>

Bonjour

J’ai développé un nouveau plugin pour gérer les guirlandes connectées Twinkly.

L’ancien plugin (Twinkly par @Koleos) ne fonctionnait apparemment plus correctement, et ses fonctionnalités étaient relativement limitées (voir Plugin Twinkly: toujours maintenu?)

Ce nouveau plugin n’utilise pas de librairies tierces, et sa seule dépendance externe est pour la fonction de « capture » des animations à envoyer vers les guirlandes qui utilise « mitmproxy ».

Le plugin gère pour l’instant les fonctionnalités majeures des guirlandes :

  • support de multiples équipements
  • on / off
  • changement de luminosité
  • informations sur l’état de la guirlande
  • chargement d’une animation vers la guirlande
  • fonction de « capture » des animations envoyées à la guirlande depuis l’application mobile Twinkly
  • BETA Gestion des playlists (création, ajout d’une animation à la playlist)

Le plugin est gratuit et est disponible sur le market (versions STABLE et BETA)

image

image

Le widget actuel est basique mais fonctionnel.
kTwinkly-widget

Vous pouvez consulter la documentation du plugin, ainsi que le changelog.

Pour faciliter la résolution d’éventuels soucis que vous rencontrez, merci de suivre la procédure suivante :

  • Passer les logs du plugin au niveau « DEBUG » dans la page de configuration du plugin (Plugins > Gestion des plugins > kTwinkly)
  • Activer les « Logs de debuggage additionelles » dans cette même page
  • Videz les 2 logs
  • Reproduisez votre problème
  • Téléchargez et envoyez moi les 2 logs kTwinkly et kTwinkly_debug par message privé
  • Vous pouvez ensuite désactiver les logs de debug avancée, le fichier risque de grossir vite.

K.

7 J'aime

Bonjour, suivant de près depuis quelques jours les énormes progrès et avancement de ce plugin (après m’être équipé récemment de cette guirlande) j’ai réussi à installer le plugin, faire reconnaître ma guirlande (gen 2).
Toutefois il reste un des intérêt essentiel de ce plugin qui est pour moi une grosse interrogation, la capture des animations…
Mon jeedom tourne sur un raspberry pi 3, mes équipement sont sur le même réseau, et il m’aurait semblé avoir paramétré le proxy convenablement sur mon téléphone, mais je n’arrive pas à réaliser une capture, à chaque essaie j’ai le message : aucune nouvelle animation n’a été récupérée.
Je joint ma config wifi mobile car je ne vois pas autre chose qui pourrait coincer.
IMG_20201206_204144
Nom de l’hôte correspondant à l’ip de mon jeedom et port étant celui par défaut…
Désolé si cela fait un peu noob…

La configuration au niveau du mobile semble correcte.
Peux-tu confirmer que tu as bien installé les dépendances du plugin ?

Si c’est le cas, peux-tu passer le niveau de logs du plugin à « debug » et refaire l’opération de capture, puis me passer les logs ?

Soit le proxy ne démarre pas, soit il y a un autre souci, et les logs aideront probablement à le détecter.

Je vais vérifier ce qu’il se passe si mitmdump ne démarre pas, je ne sais pas si j’ai suffisamment « blindé » le test à ce niveau.

K.

Mes dépendances semblent être bien installées et ont un statut OK,
voici mon log après test d’une capture (lancement de la capture dans l’équipement jeedom, lancement de l’animation sur l’app twinlky etnapplication de celle ci pour l’uploader à la guirlande) puis arrêt de la capture via jeedom.

[2020-12-06 20:56:52][DEBUG] : Tentative de démarrage de mitmproxy
[2020-12-06 20:56:52][DEBUG] : start_mitmproxy for eqId=329
[2020-12-06 20:56:52][DEBUG] : Start MITM command = mitmdump -p 14233 -s /var/www/html/plugins/kTwinkly/core/class/../../resources/mitmdump/twinkly_v2.py --set filename=/tmp/jeedom/kTwinkly/tmovie_329 --set ipaddress=192.168.1.97 --set confdir=/tmp/jeedom/kTwinkly --confdir=/tmp/jeedom/kTwinkly
[2020-12-06 20:56:52][DEBUG] : mitmproxy démarré avec PID=4408 
[2020-12-06 20:56:52][DEBUG] : kTwinkly deamon_start
[2020-12-06 20:56:52][DEBUG] : kTwinkly deamon_stop
[2020-12-06 20:56:52][DEBUG] : kTwinkly deamon_info : Array (     [log] =>      [state] => nok     [launchable] => ok ) 
[2020-12-06 20:57:07][DEBUG] : Tentative d'arrêt de mitmproxy
[2020-12-06 20:57:07][DEBUG] : Impossible de trouver le process mitm avec le PID enregistré. On recherche le process par son nom
[2020-12-06 20:57:07][DEBUG] : Process trouvé PID=
[2020-12-06 20:57:07][DEBUG] : Process mitmproxy inexistant
[2020-12-06 20:57:07][DEBUG] : Récupération des captures de l'équipement 329
[2020-12-06 20:57:07][DEBUG] : Récupération des captures de l'équipement 329
[2020-12-06 20:57:07][DEBUG] : Génération = 2
[2020-12-06 20:57:07][DEBUG] : Masque de recherche : /tmp/jeedom/kTwinkly/tmovie_329-*.bin
[2020-12-06 20:57:07][INFO] : Aucun fichier n'a été trouvé. Vérifiez le paramétrage du proxy sur le smartphone.
[2020-12-06 20:57:07][DEBUG] : Aucun fichier n'a été enregistré par le proxy.
[2020-12-06 20:57:07][DEBUG] : kTwinkly deamon_start
[2020-12-06 20:57:07][DEBUG] : kTwinkly deamon_stop
[2020-12-06 20:57:08][DEBUG] : kTwinkly deamon_info : Array (     [log] =>      [state] => nok     [launchable] => ok ) 

J’ai corrigé plusieurs soucis dans le processus de démarrage du proxy.
Les erreurs de démarrage n’étaient pas détectées correctement. Ca devrait être le cas, maintenant, donc si le proxy ne démarre pas, tu auras un message explicite, avec le message erreur exact dans la log kTwinkly.

Peux-tu mettre à jour le plugin depuis le market, vérifier que tes logs sont toujours en debug, puis réessayer de démarrer la capture ?

EDIT : je pense qu’il y a un souci avec le mitmproxy des repos Debian 9/Stretch.
Je viens de vérifier sur un autre serveur de test, la version est super ancienne et le proxy ne démarre pas (erreur Python). Voila pourquoi je voulais éviter les dépendances :frowning:
Je vais regarder comment installer une version plus récente via pip3, mais je ne veux pas tout casser…
Pas de problème sur Debian 10/Buster…

Peux-tu me confirmer la version de Raspian de ton Pi, et l’erreur qui est remontée avec la dernière version du plugin beta ?

K.

Bonsoir @kimagure,

Il y a une petite coquille dans le fichier /plugins/kTwinkly/resources/mitmdump/twinkly_v1.py : un guillemet s’est glissé après le %s :

ligne 43 : jsondata = '{"leds_number": %s",...

bonne soirée :slight_smile:

Merci, j’ai corrigé, ça sera dans le prochain commit.

Bon, ce n’est pas gagné pour la partie proxy sur Debian Stretch.
Meme en installant via pip, ça ne fonctionne pas, parce que mitmproxy demande une version 3.6+ de Python, alors que la dernière disponible sous Stretch est la 3.5.3…

K.

En meme temps c’est Debian 10 la version officiellement supporté par Jeedom.

Bonjour, j’ai le message d’erreur suivant quand je lance la capture d’animation.
Je suis sur la dernière version de jeedom stable et sur raspbian 10 64 bits à jour.
Impossible de démarrer mitmproxy. Vérifiez l'installation des dépendances ou un éventuel mesage d'erreur : Traceback (most recent call last): File "/usr/bin/mitmdump", line 11, in load_entry_point('mitmproxy==4.0.4', 'console_scripts', 'mitmdump')() File "/usr/local/lib/python3.7/dist-packages/pkg_resources/__init__.py", line 473, in load_entry_point return get_distribution(dist).load_entry_point(group, name) File "/usr/local/lib/python3.7/dist-packages/pkg_resources/__init__.py", line 2843, in load_entry_point return ep.load() File "/usr/local/lib/python3.7/dist-packages/pkg_resources/__init__.py", line 2447, in load return self.resolve() File "/usr/local/lib/python3.7/dist-packages/pkg_resources/__init__.py", line 2453, in resolve module = __import__(self.module_name, fromlist=['__name__'], level=0) File "/usr/lib/python3/dist-packages/mitmproxy/tools/main.py", line 22, in from ._main import * # noqa File "/usr/lib/python3/dist-packages/mitmproxy/tools/_main.py", line 13, in from mitmproxy.tools import cmdline # noqa File "/usr/lib/python3/dist-packages/mitmproxy/tools/cmdline.py", line 3, in from mitmproxy.addons import core File "/usr/lib/python3/dist-packages/mitmproxy/addons/__init__.py", line 11, in from mitmproxy.addons import onboarding File "/usr/lib/python3/dist-packages/mitmproxy/addons/onboarding.py", line 2, in from mitmproxy.addons.onboardingapp import app File "/usr/lib/python3/dist-packages/mitmproxy/addons/onboardingapp/app.py", line 13, in class Adapter(tornado.wsgi.WSGIAdapter): AttributeError: module 'tornado.wsgi' has no attribute 'WSGIAdapter'

En tout cas beau boulot !!!

Ma compréhension était que Debian 10 était la version supportée pour les nouvelles installations, mais que les box Jeedom (Smart, etc.) étaient encore sous Debian 9.

La seule solution que je vois est une compilation/installation side-by-side de Python 3.7 sur Debian 9 pour pouvoir supporter mitmproxy… Et sur une box avec un CPU limité (ou un Pi), ça risque de prendre « un peu » de temps…

L’alternative est d’indiquer une compatibilité Buster uniquement, évidemment c’est plus simple pour moi !

K.

Ah, les joies des dépendances.
A priori, ici, c’est un module python « tornado » qui n’est sans doute pas dans la bonne version.

Peux tu lancer les commandes suivantes depuis ton serveur en ssh (pour voir quelle version de python3-tornado est installée)

dpkg -l | grep tornado
python3 -m pip list | grep tornado

Sur ma Debian 10 à jour, c’est la version 5.1.1.

K.

Merci @kimagure pour la transposition de ton dev en plugin ! Super Boulot !

J’ai trop hâte de pouvoir cliquer sur ON pour lancer ma playlist car je ne fonctionne qu’avec ça :slight_smile: !

A l’occas (par urgent) pourrais-tu ajouter celle-ci stp ? ->TwinklyStrings400RGBW.jpg
image

car je n’ai pas d’image correspondante à mon mdl :
image

Bon courage et merci encore pour ton partage :slight_smile:

Alors pour ma part j’ai désinstallé le plugin puis réinstallé la version béta du market,
ici aussi impossible de lancer le serveur mitmproxy,
je ne sais pas comment vérifier la version debian sur mon pi3 mais il me semblerait de tête que j’avais installé une version Buster

Voici le nouveau log :

[2020-12-07 12:29:23][DEBUG] : is_mitm_running appelé sans PID
[2020-12-07 12:29:46][DEBUG] : Tentative de démarrage de mitmproxy
[2020-12-07 12:29:46][DEBUG] : Démarre mitmproxy pour eqId=330
[2020-12-07 12:29:46][DEBUG] : is_mitm_running appelé sans PID
[2020-12-07 12:29:46][DEBUG] : Start MITM command = mitmdump -p 14233 -s /var/www/html/plugins/kTwinkly/core/class/../../resources/mitmdump/twinkly_v2.py --set filename=/tmp/jeedom/kTwinkly/tmovie_330 --set ipaddress=192.168.1.97 --set confdir=/tmp/jeedom/kTwinkly --confdir=/tmp/jeedom/kTwinkly
[2020-12-07 12:29:49][DEBUG] : is_mitm_running appelé avec PID=543 
[2020-12-07 12:29:49][ERROR] : Impossible de démarrer mitmproxy. Vérifiez l'installation des dépendances ou un éventuel mesage d'erreur : Traceback (most recent call last):   File "/usr/bin/mitmdump", line 11, in <module>     load_entry_point('mitmproxy==4.0.4', 'console_scripts', 'mitmdump')()   File "/usr/local/lib/python3.7/dist-packages/pkg_resources/__init__.py", line 490, in load_entry_point     return get_distribution(dist).load_entry_point(group, name)   File "/usr/local/lib/python3.7/dist-packages/pkg_resources/__init__.py", line 2859, in load_entry_point     return ep.load()   File "/usr/local/lib/python3.7/dist-packages/pkg_resources/__init__.py", line 2450, in load     return self.resolve()   File "/usr/local/lib/python3.7/dist-packages/pkg_resources/__init__.py", line 2456, in resolve     module = __import__(self.module_name, fromlist=['__name__'], level=0)   File "/usr/lib/python3/dist-packages/mitmproxy/tools/main.py", line 22, in <module>     from ._main import *  # noqa   File "/usr/lib/python3/dist-packages/mitmproxy/tools/_main.py", line 13, in <module>     from mitmproxy.tools import cmdline  # noqa   File "/usr/lib/python3/dist-packages/mitmproxy/tools/cmdline.py", line 3, in <module>     from mitmproxy.addons import core   File "/usr/lib/python3/dist-packages/mitmproxy/addons/__init__.py", line 11, in <module>     from mitmproxy.addons import onboarding   File "/usr/lib/python3/dist-packages/mitmproxy/addons/onboarding.py", line 2, in <module>     from mitmproxy.addons.onboardingapp import app   File "/usr/lib/python3/dist-packages/mitmproxy/addons/onboardingapp/app.py", line 13, in <module>     class Adapter(tornado.wsgi.WSGIAdapter): AttributeError: module 'tornado.wsgi' has no attribute 'WSGIAdapter' 
[2020-12-07 12:29:55][DEBUG] : Tentative de démarrage de mitmproxy
[2020-12-07 12:29:55][DEBUG] : Démarre mitmproxy pour eqId=330
[2020-12-07 12:29:55][DEBUG] : is_mitm_running appelé sans PID
[2020-12-07 12:29:55][DEBUG] : Start MITM command = mitmdump -p 14233 -s /var/www/html/plugins/kTwinkly/core/class/../../resources/mitmdump/twinkly_v2.py --set filename=/tmp/jeedom/kTwinkly/tmovie_330 --set ipaddress=192.168.1.97 --set confdir=/tmp/jeedom/kTwinkly --confdir=/tmp/jeedom/kTwinkly
[2020-12-07 12:29:58][DEBUG] : is_mitm_running appelé avec PID=1020 
[2020-12-07 12:29:58][ERROR] : Impossible de démarrer mitmproxy. Vérifiez l'installation des dépendances ou un éventuel mesage d'erreur : Traceback (most recent call last):   File "/usr/bin/mitmdump", line 11, in <module>     load_entry_point('mitmproxy==4.0.4', 'console_scripts', 'mitmdump')()   File "/usr/local/lib/python3.7/dist-packages/pkg_resources/__init__.py", line 490, in load_entry_point     return get_distribution(dist).load_entry_point(group, name)   File "/usr/local/lib/python3.7/dist-packages/pkg_resources/__init__.py", line 2859, in load_entry_point     return ep.load()   File "/usr/local/lib/python3.7/dist-packages/pkg_resources/__init__.py", line 2450, in load     return self.resolve()   File "/usr/local/lib/python3.7/dist-packages/pkg_resources/__init__.py", line 2456, in resolve     module = __import__(self.module_name, fromlist=['__name__'], level=0)   File "/usr/lib/python3/dist-packages/mitmproxy/tools/main.py", line 22, in <module>     from ._main import *  # noqa   File "/usr/lib/python3/dist-packages/mitmproxy/tools/_main.py", line 13, in <module>     from mitmproxy.tools import cmdline  # noqa   File "/usr/lib/python3/dist-packages/mitmproxy/tools/cmdline.py", line 3, in <module>     from mitmproxy.addons import core   File "/usr/lib/python3/dist-packages/mitmproxy/addons/__init__.py", line 11, in <module>     from mitmproxy.addons import onboarding   File "/usr/lib/python3/dist-packages/mitmproxy/addons/onboarding.py", line 2, in <module>     from mitmproxy.addons.onboardingapp import app   File "/usr/lib/python3/dist-packages/mitmproxy/addons/onboardingapp/app.py", line 13, in <module>     class Adapter(tornado.wsgi.WSGIAdapter): AttributeError: module 'tornado.wsgi' has no attribute 'WSGIAdapter' 
[2020-12-07 12:30:06][DEBUG] : is_mitm_running appelé sans PID

Merci en tout cas de tes réponses rapide et de ton implication au développement de ce nouveau plugin.

Merci @kimagure pour la transposition de ton dev en plugin ! Super Boulot !

J’ai trop hâte de pouvoir cliquer sur ON pour lancer ma playlist car je ne fonctionne qu’avec ça :slight_smile: !


A l’occas (par urgent) pourrais-tu ajouter celle-ci stp ? ->TwinklyStrings400RGBW.jpg
image

car je n’ai pas d’image correspondante à mon mdl :
image


Un peu trop barbu pour moi :slight_smile: et pas essentiel par rapport à la gestion attendue de Playlist mais je partage quand même si cela peut aider.

Je tourne sous Debian9 et impossible de faire fonctionner la capture d’animation :
image

  • Dépendances ok et même relancées
    image

  • Log : [2020-12-07 11:51:13][ERROR] : Impossible de démarrer mitmproxy. Vérifiez l’installation des dépendances ou un éventuel mesage d’erreur : usage: mitmdump [options] [filter] mitmdump: error: unrecognized arguments: --confdir

image

Bon courage et merci encore pour ton partage :slight_smile:

Oui, tu es bien en Buster avec mitmproxy 4.0.4. Le message d’erreur dans ta log est le meme que celui de @gzk, visiblement une dépendance de mitmproxy (tornado) qui n’est pas correcte.

Cette image n’existe même pas dans l’APK. Je vais prévoir une image générique dans le cas où le modèle n’existe pas. Pour ton produit, si tu te sens une âme d’artiste, tu peux me fournir une image basée sur la 250 leds RGBW que j’ajouterai :slight_smile:

Oui, c’est le problème mentionné au dessus, avec Debian 9 qui propose une version super ancienne de mitmproxy (0.18, alors qu’on en est à la 5) qui ne peut fonctionner en l’état. Je n’ai pas réussi à la lancer manuellement avec le script de capture.

Je n’ai pas encore de solution pour l’instant, je vais voir si ajouter la compilation de Python 3.7 dans le script des dépendances est une solution viable, mais je ne veux pas casser les installations existantes, donc j’avance prudemment.

Pour du simple « on/off », je devrais pouvoir ajouter ça simplement. Une fois ta playlist configurée via l’application mobile, il devrait être possible de la lancer.
C’est la combinaison des playlists avec la fonction upload qui sera plus compliquée à intégrer.

K.

@MrPatate et @gzk, pouvez-vous lancer ces commandes si vous savez vous connecter au shell de votre serveur jeedom ?

dpkg -l | grep tornado
python3 -m pip list | grep tornado

Je voudrais vérifier si le souci avec la lib « tornado » est lié à la version ou pas…

K.

TwinklyStrings400RGBW

Merci.

L’image pour la String 400 RGBW est ajoutée, et le plugin affiche maintenant une image par défaut si l’image n’est pas trouvée.

K.

Nickel :slight_smile:

image image

…et en attendant une MAJ pour gérer les playlist, je me suis permis de modifier en local le fichier kTwinklyCmd.class.php
image

ça répond à 100% à mon use case :slight_smile:
(c’est moche oui je sais mais c’est temporaire, hein)