Plugin Twinkly: toujours maintenu?

Hello,

Reçu la twinkly 250 ce soir. Idem, plugin non fonctionnel.

sudo /usr/bin/python3 --version
Python 3.5.3

Je suis sur une VM sous synology.

En lançant la commande manuellement, j’ai ça :

/usr/bin/python3 /var/www/html/plugins/twinkly/core/class/main.py --twinkly_ip 192.168.20.52 switch_off
Traceback (most recent call last):
File « /usr/local/lib/python3.5/dist-packages/netaddr-0.8.0-py3.5.egg/netaddr/compat.py », line 91, in
from importlib import resources as _importlib_resources
ImportError: cannot import name ‹ resources ›

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File « /var/www/html/plugins/twinkly/core/class/main.py », line 10, in
import xled.control
File « /usr/local/lib/python3.5/dist-packages/xled-0.5.0-py3.5.egg/xled/init.py », line 25, in
from xled.control import ControlInterface # noqa: F401
File « /usr/local/lib/python3.5/dist-packages/xled-0.5.0-py3.5.egg/xled/control.py », line 30, in
from xled.auth import BaseUrlChallengeResponseAuthSession
File « /usr/local/lib/python3.5/dist-packages/xled-0.5.0-py3.5.egg/xled/auth.py », line 23, in
import xled.security
File « /usr/local/lib/python3.5/dist-packages/xled-0.5.0-py3.5.egg/xled/security.py », line 21, in
import netaddr
File « /usr/local/lib/python3.5/dist-packages/netaddr-0.8.0-py3.5.egg/netaddr/init.py », line 18, in
from netaddr.core import (AddrConversionError, AddrFormatError,
File « /usr/local/lib/python3.5/dist-packages/netaddr-0.8.0-py3.5.egg/netaddr/core.py », line 11, in
from netaddr.compat import _callable, _iter_dict_keys
File « /usr/local/lib/python3.5/dist-packages/netaddr-0.8.0-py3.5.egg/netaddr/compat.py », line 93, in
import importlib_resources as _importlib_resources
ImportError: No module named ‹ importlib_resources ›

En relançant les dépendances, j’ai des erreurs de compilations… Après, déboguer, c’est pas ma tasse de thé.
Tant pis, prise connectée et ça fera l’affaire.

J’ai une Twinkly depuis plus de 2 ans, et j’en ai acheté une nouvelle plus grande l’année dernière, donc l’autre est passée en déco permanente sur mon escalier…

Pour piloter tout ça via Jeedom, je passe actuellement par le plugin script et une classe PHP maison que j’ai construite par rapport au code du projet xled et à la doc associée. C’est du pur PHP, donc aucune dépendance nécessaire.

Ca me permet d’avoir accès à toutes les fonctionnalités depuis Jeedom : on/off évidemment, mais également luminosité et changement d’animation (« movies ») :

La classe a besoin de l’IP (pour contacter l’API locale du contrôleur) et de l’adresse MAC du contrôleur (pour calculer le jeton d’authentification).

/opt/twinkly/jeedom_twinkly.php 192.168.0.20 84:f3:xx:xx:xx:xx on
/opt/twinkly/jeedom_twinkly.php 192.168.0.20 84:f3:xx:xx:xx:xx off
/opt/twinkly/jeedom_twinkly.php 192.168.0.20 84:f3:xx:xx:xx:xx brightness 50
/opt/twinkly/jeedom_twinkly.php 192.168.0.20 84:f3:xx:xx:xx:xx movie /opt/twinkly/movies_escalier/carnival_175_45_66.bin
/opt/twinkly/jeedom_twinkly.php 192.168.0.20 84:f3:xx:xx:xx:xx movie /opt/twinkly/movies_escalier/rainbow_175_75_66.bin

Pour les animations c’est un peu plus complexe, parce que la séquence exacte allumage/extinction/couleur pour chaque animation est calculée par l’application lors de la phase d’analyse, par l’app mobile, donc elle change à chaque mise en place sur le sapin (et évidemment d’une guirlande à une autre).

Pour capturer le fichier binaire représentant la séquence, j’utilise outil proxy type Fiddler pour capturer ce qu’envoie l’application mobile vers le contrôleur Twinkly. Je sauvegarde le fichier et je peux ensuite le réutiliser pour passer d’une animation à l’autre (le fichier .bin dans mes exemples au dessus. C’est donc une manip à refaire chaque année après l’installation et l’analyse des nouvelles positions.
Les 3 nombres dans le nom du fichier correspondent au nombre de leds de la guirlande (175), le nombre de « frames » de l’animation (75) et le délai entre chaque frame (66). Ces valeurs sont aussi trouvables dans la capture Fiddler.
Mon script utilise le nom du fichier pour déterminer les valeurs à passer à l’API.

L’année dernière j’en avais profité pour capturer les animations depuis l’application en gif animé que j’avais inséré dans mon design.

Avec les dernières versions de l’appli mobile, les animations sont présentées sous forme d’un carré, donc c’est moins joli…

Je vais partager mon code, mais je veux vérifier que ça fonctionne avec les dernières générations de Twinkly. Je crois me rappeler que le code d’authentification avait un peu changé, et qu’il peut etre nécessaire de modifier un peu une partie du code.

J’installe le sapin ce week-end, donc j’en profiterai pour mettre à jour mon design et je publierai la classe PHP…

Avec un peu de motivation (et de temps :sweat_smile:), ça doit pouvoir se transformer en plugin.
La partie la plus compliquée serait de gérer la partie « movies », puisqu’il faut pouvoir uploader/remplacer le fichier binaire pour chaque animation souhaitée. Mais pour du on/off/brightness, ça devrait se faire facilement, même pour du multi-équipement.

K.

4 « J'aime »

Je ne peux que t’inciter à le faire, si tu as un peu de temps devant toi ! :+1:
parce que ça met l’eau à la bouche !

Je ne promets rien pour le plugin, en tous cas pas rapidement.

Dans tous les cas, j’essaye de publier mon code ce WE (la classe Twinkly et mon script de commande)

K.

3 « J'aime »

Bonjour,

En tout cas très belle initiative de ta part, bravo et merci pour la communauté

Merci d’avance @kimagure pour ton partage, tu vas en sauver plus d’un!
:+1:

Bon, vous avez de la chance, j’ai passé un peu de temps ce soir pour emballer ma classe dans un plugin…

J’ai demandé l’accès en tant que développeur, dès que c’est fait, je le publie en beta.

C’est mon premier plugin, donc je découvre au fur et à mesure, et il y a encore un peu de nettoyage à faire.

Je vais essayer d’ajouter la partie « animations » ce week-end. Comme ça, je valide tout ça sur le sapin fraîchement installé.

Voici un aperçu. C’est basique, mais ça répond au cahier des charges :slight_smile:




A bientôt !

K.

4 « J'aime »

Bon, j’ai réussi à faire fonctionner la guirlande Twinkly à travers le module xled de python. Pour le coup, je n’utilise plus le plugin Twinkly qui je pense ne fonctionne que pour la version gen1 de la guirlande, et encore pas sur…

Pour ce faire, j’ai lancé les commandes suivantes :

pip install click
pip install xled

Ensuite, je lance ~/.local/bin/xled on et j’ai un beau message d’erreur qui apparemment n’accepte pas l’authentification de la guirlande.

Le moteur de Google m’amène à ça :
Gen II: Invalid challenge-response · Issue #30 · scrool/xled · GitHub

J’exécute la manip du dernier commentaire du sujet, à savoir, commenter les lignes 402 et 403 du fichier auth.py se trouvant dans le ~/.local/lib/python2.7/site-packages/xled/ dans mon cas.

et je relance un ~/.local/bin/xled on et hope, ça fonctionne !

Reste plus qu’à utiliser le module script de Jeedom pour lancer la commande qui va bien et je peux l’éteindre ou l’allumer via Jeedom selon mon agenda.

Have fun !

Oui, c’est globalement ce que je faisais avec mon code PHP, basé sur xled, mais sans les dépendances avec Python.

Le calcul du challenge/response pour l’authentification présent dans xled n’est visiblement plus compatible pour les guirlandes plus récentes que les v1, mais ce n’est pas genant, puisque l’access token est généré dès la première requête, sans avoir besoin de vérifier le challenge/response.

L’API est très bien documentée sur le site de xled.

Pour info, il est également possible de configurer le contrôleur pour qu’il communique via MQTT, et on peut passer l’ensemble des commandes par ce biais (on/off, etc.).

K.

J’ai posté sans voir tes derniers commentaires. Du coup, j’attends avec impatience ton plugin nettement plus beau que ma bidouille ! :slight_smile:

C’est dommage, c’est ultra prometteur, si j’avais eu ce que je vois sous la main plutot que le plugin jeedom ou home assistant, ca aurait été bien plus sympa à montrer dans mon test !

J’aurai même pas la possibilité de tester, je démonte le sapin demain (et oui, je suis le seul qui fait ça dans ce sens) pour passer ma guirlande à la famille ^^ J’espère qu’ils apprécieront le geste !

1 « J'aime »

Hello

Un dernier teaser avant la publication de la première version du plugin.

J’ai ajouté une fonctionnalité de découverte automatique des guirlandes sur le réseau. Il faut que celles-ci aient été configurées au préalable via l’appli mobile, mais un simple clic sur le bouton du plugin va automatiquement créer un équipement pour chaque guirlande détectée : plus besoin d’entrer l’IP ou l’adresse MAC, tout est détecté automatiquement…

Je viens de tester suite à l’installation de ma deuxième Twinkly sur mon sapin, et ça fonctionne très bien. Merci une nouvelle fois au développeur de l’api Python xled qui a tout documenté…

J’ai aussi mis en place la fonctionnalité pour changer l’animation des leds. C’est un peu plus compliqué à utiliser, parce que je n’ai pas (encore ?) trouvé de moyen simple de récupérer les séquences calculées par l’appli mobile sans utiliser un proxy HTTP pour « sniffer » l’upload de l’animation depuis l’appli vers la guirlande. J’essayerai de documenter ça proprement.

J’ai également mis en place une page pour la configuration MQTT. Ce n’est pas vraiment utilie si l’objectif est d’utiliser le plugin, donc je pense plutôt l’externaliser sous forme d’un script à coté pour activer cette fonctionnalité, et pouvoir utiliser les guirlandes sans plugin spécifique pour les utilisateurs de jMQTT. Via MQTT, les fonctionnalités on/off/luminosité sont disponibles, mais pas le changement d’animation.

A très bientôt !

K.

Merci beaucoup pour le travail que tu as effectué pour la communauté.:+1:
Il me tarde de télécharger ton plugin pour tester tout ça !!!
:pray:

Bon, j’ai encore un peu de boulot, mais pour ne pas faire attendre les plus téméraires qui voudraient tester, vous pouvez récupérer une première version directement sur mon github
dans la branche « unstable » : https://github.com/kimagurefr/jeedom_kTwinkly/tree/unstable

Pas encore de doc, mais à part la partie animation, le reste coule de source, donc vous aurez déjà accès à on/off/niveau de luminosité.

N’hésitez pas à me faire vos retours, j’essayerai de corriger les éventuels soucis avant une première publication officielle en bêta.

Déposer les sources téléchargées de github dans un sous-dossier kTwinkly de votre dossier plugins (/var/www/html/plugins/kTwinkly).

Après avoir activé le plugin, il se trouvera dans la section « objects connectés ».

Il suffit de cliquer sur le bouton « Rechercher » pour créer les équipements automatiquement.
S’ils ne sont pas trouvés, il faudra entrer l’IP et l’adresse MAC à la main (ces informations se trouvent dans la page d’informations des équipements sur l’appli mobile).

Il est évidemment nécessaire que l’IP soit fixe, sinon, il faudra corriger l’adresse dans les paramètres de l’équipement à chaque changement…

K.

2 « J'aime »

:wave: :wave: :wave: :wave: :wave: :wave:
Bonjour
Mon 1er retour est plus bon, c’est génial. Je viens de l’installer, configurer c’est top
Juste le conseil de désactiver l’ancien plugin Twinkly sinon ca plante tout :roll_eyes:
Encore Bravo

Oui effectivement. C’est une limitation de l’API, il ne peut y avoir qu’un utilisateur authentifié à la fois sur le contrôleur… C’est précisé dans la FAQ de Twinkly d’ailleurs, on ne peut pas non plus utiliser l’appli sur 2 mobiles simultanément…

Du coup, Il risque aussi d’y avoir conflit si on utilise l’appli mobile en meme temps d’ailleurs, il faut que je regarde comment se protéger de ça, surtout depuis que j’ai implémenté l’auto refresh, ça risque de déconnecter l’appli mobile.

Donc si besoin d’utiliser l’app, je pense qu’il faut temporairement désactiver le plugin,…

K.

Hello !

Ramené ici grâce à @iPapy, je confirme que le plugin fonctionne (j’ai une Guirlande V2 250 leds)

Comme je ne sais pas ce qui est sensé fonctionner ou pas voici quelques retours

Pas eu de détection automatique, pourtant renseignée manuellement (ip et mac) tout fonctionne
Je n’ai pas le numéro de version PRODUIT qui remonte (mais bien la version matériel)
La partie animation ne me montre rien, ajouter permet de charger un fichier, supprimer tourne en boucle (normal y a rien dans la liste :))

Côté Widget, cela fonctionne sauf la playlist active qui ne s’affiche pas (et qui est pourtant en cours dans la Twinkly)

Encore merci pour votre super boulot !


1 « J'aime »

Merci pour les retours.

Les playlists ne sont pas encore gérées pour l’instant, ça va venir.

Pour l’instant, la partie « animation » est à gérer manuellement en chargeant les fichiers binaires correspondant. Je suis en train de travailler sur un process de capture simplifié (merci à @mguyard pour les pistes)

Je n’ai pas non plus retravaillé le widget par défaut, je m’en occupe ensuite (il y a eu quelques ajouts ce matin pour remonter correctement le niveau de luminosité et le mode courant).

Les informations affichées sur l’équipement (versions, etc.) sont un peu en vrac. J’ai le numéro de version produit sur ma v1, mais pas ma v2, je vais voir ce qui est pertinent ici (nom du wifi, version de firmware).

J’essaye d’ajouter un maximum de choses avant de passer en bêta.

K.

1 « J'aime »

Bonjour,

Je n’ai fait que t’orienter vers l’excellent travail fait par @kimagure et que même si je n’est plus de petit enfant à la maison en cette période de fête j’aimerais que @kimagure puisse débuguer au max son plugin afin que tous les utilisateurs de Twinkly soit content et passe de très belle fêtes de fin d’année.

Bravo à toi @kimagure pour cette belle initiative ainsi qu’a @mguyard qui semble aussi t’aider.

1 « J'aime »

Le sapin, c’est pas pour les « petits enfants »: tout le monde y a droit s’il en a envie :grin:
Pas de raison que les adultes, qui ne restent pas moins que des grand enfants, n’aient pas aussi les yeux pleins qui brillent ! :wink:

2 « J'aime »