DEV Community

Remy Jacquand
Remy Jacquand

Posted on • Edited on

Construction des données de contrôle de luminosité d'une lampe Neewer 660

Construction des données de controle de luminosité d'une lampe Neewer 660

Dans le cadre des recherches sur le développement d'une application Windows pour contrôler un panneau LED Neewer 660, je réunis dans ce document les informations concernant la construction des données permettant de changer la luminosité de la lampe.

La lampe Neewer 660

lampe neewer 660
La lampe Neewer est une lampe à LED RGB contrôlable par Bluetooth via l'application smartphone Android ou iPhone.

Voici le lien officiel

Les données

Après des manipulations de reverse engineering et focalisé sur les données de la luminosité de la lampe, il est apparue un code hexadécimal de 16 caractères:
xxxxxx xx xx xx xx xx

La constante: Les 6 premiers caractères sont fixes tout le long des tests et ont la valeur suivante : 788604

La couleur: Les 2 caractères suivants représentent la valeur hexadécimale de la position, en degrés, du curseur dans le cercle chromatique.
cercle chromatique

Le flag: S'en suis 2 caractères variants de 01 à 00 (en hexa). Ce flag change d'état lorsque la couleur dépasse la valeur FF pour retourner à 00

La luminosité: S'ajoute 2 caractères représentant la valeur hexadécimale du pourcentage de luminosité souhaité. Par exemple pour 100% => 64, 50% => 32, 25% => 19 et 0% => 0

La saturation: Ensuite 2 caractères dont la valeur hexadécimale représente le pourcentage de saturation de la couleur sélectionnée.

Le checksum: Concernant les 2 derniers caractères rien n'est sûr. Il semble représenter un genre de checksum allant de 0 à 255 avec un modificateur:

Checksum (base 10) = 2 (base 10)+ flag (base 10) + couleur (base 10) + luminosité (base 10) + saturation (base 10)
Enter fullscreen mode Exit fullscreen mode

Puis convertie en hexadécimal.

Resultat: Une fois cet ensemble de caractère concaténé, nous obtenons les données permettant de contrôler la couleur, la saturation et la luminosité de la lampe.

Voici toutes les données recueillient:

Data light control for Neewer 660 RGB LED Lamp

Les tests

Les tests ont été effectués à l'aide d'un raspberry pi 4 avce Bluez installé.

Pour me connecter, il a été nécessaire de procéder à quelque configuration préalable.

Il semble important de modifier le fichier suivant :

sudo nano /etc/bluetooth/main.conf
Enter fullscreen mode Exit fullscreen mode

d'y ajouter cette ligne en fin de document

DisablePlugins=pnat
Enter fullscreen mode Exit fullscreen mode

et de redémarrer votre systeme

sudo reboot now
Enter fullscreen mode Exit fullscreen mode

Une fois le système réveillé, vous pouvez vous connecter à la lampe avec la commande suivante :

gatttool -t random -b XX:XX:XX:XX:XX:XX -I
Enter fullscreen mode Exit fullscreen mode

Notez que le parametre "-t" s'est vu affecter la valeur "random"

gatttool --help
Usage:
  gatttool [OPTION?]
...
-t, --addr-type=[public | random]         Set LE address type. Default: public
...
Enter fullscreen mode Exit fullscreen mode

Une fois l'interface affichée, vous pouvez vous connecter et envoyer les données de controle.

pi@raspberrypi:~ $ gatttool -t random -b XX:XX:XX:XX:XX:XX -I
[XX:XX:XX:XX:XX:XX][LE]> connect
Attempting to connect to XX:XX:XX:XX:XX:XX
Connection successful
[XX:XX:XX:XX:XX:XX][LE]> char-write-cmd 0x000e 788604d100640037
Enter fullscreen mode Exit fullscreen mode

Top comments (0)