Construction des données de contrôle de luminosité d'une lampe Neewer 660 
Tags: neewer, bluez, linux, bluetooth
Published: 2021-09-10 15:58:18

---
title: Construction des données de contrôle de luminosité d'une lampe Neewer 660 
published: true
description: Note 
tags: neewer,bluez,linux,bluetooth

---
# 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](https://encrypted-tbn2.gstatic.com/shopping?q=tbn:ANd9GcSWXAlPyC13wczNB5BGfxdVoqcewBYacr1-3AJVDcdZ_l8Jpg3Sc9w&usqp=CAc)
La lampe Neewer est une lampe à LED RGB contrôlable par Bluetooth via l'application smartphone Android ou iPhone.

[Voici le lien officiel](https://neewer.com/products/neewer-cri-97-50w-660-prorgb-led-light-10098770)

## 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](https://i.imgur.com/VjbM9cE.jpg)

***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)
```

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](https://docs.google.com/spreadsheets/d/1eAsZmB00w6uzSIcGgNqXClOPmx4dTHzjtozGwSPP83E/edit?usp=sharing)


## Les tests
Les tests ont été effectués à l'aide d'un raspberry pi 4 avce [Bluez installé](https://learn.adafruit.com/install-bluez-on-the-raspberry-pi/installation).

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
```

d'y ajouter cette ligne en fin de document

```
DisablePlugins=pnat
```

et de redémarrer votre systeme

```
sudo reboot now
```


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
```

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
...
```
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
```