La commande "s:" sert à envoyer une commande (send en anglais quoi).
Le format général est s:<chaine en base64>
Pour illustrer voici la commande générée par la modification du décalage de température sur un thermostat dont l'adresse est 00fb6d.
s:AAARAAAAAPttACoiPQkJGAM=
Le décodage ramène une chaine binaire (ici en hexa) :
00 00 11 00 00 00 00 fb 6d 00 2a 22 3d 09 09 18 03 #0 #1 #2 #3 #4 #5 #6 #7 #8 #9 #A #B #C #D #E #F #10
Si on décortique, en premier lieu, on trouve tout de suite à partir de #6 une adresse de périphérique.
Une modification du même paramètre fait varier uniquement l'octet #E tandis que le changement d'autres paramètres de température font varier individuellement les autres octets de #A à #10.
Ces valeurs ne sont cependant pas encodées directement. Ainsi une température qui se règle par pas de 0,5° et encodée sous la forme T°x2 et le décalage de température qui peut aller de -3,5 à 3,5 est encodé par dT°x2+7 .
Au final voici le payload de la fonction 11(hex) :
00 00 01 Bitfield : 76543210 10 = broadcast (?) 02 11 COMMANDE (ici réglage des températures par défaut) 03 00 04 00 05 00 06 AABBCC Adresse d'émission 07 .. 08 .. 09 XX RoomId 10 XX Température de comfort 11 XX Température éco 12 XX Température max réglable sur la tête 13 XX Température min réglable sur la tête 14 XX Décalage de température 15 XX Température lorsqu'une fenêtre est ouverte 16 XX Durée de la consigne de fenêtre ouverte
Le retour de l'envoi d'une telle commande est une ligne "S:"
Celle-ci contient 3 champs séparés par des virgules :
1 : Ce chiffre semble augmenter de temps en temps 2 : Succés/Echec (0/1) 3 : Ce chiffre diminue au maximum de 1 à chaque commande passée, il peut aussi augmenter le maximum est 30(hex) soit 48(dec).
Je pense que les commandes sont envoyées aux têtes par bloc ou par cycles, le champ 1 identifie le bloc courant et le 3 le nombre d'emplacements libres dans ce bloc. C'est pour cela que le champ 3 ne diminue pas toujours ; des commandes sont envoyées en même temps que d'autres sont reçues.