Volet Selve avec commande centralisée

Bonjour,

Je travaille depuis quelques temps sur la domotisation de mes volets roulant de marque Selve.
Ils se commandent avec des télécommandes sans fils unitaire et une télécommande centralisée. C’est un protocole propriétaire en 868Mhz.

La télécommande centralisé peut être connecté sur un PC pour être programmée, mais aussi pour commander les volets et connaitre leur état avec un logicel Selve.

Avec un sniffer usb, j’ai pu récupérer un certains nombre de trames, et en envoyant ces trames avec RealTerm, j’arrive à commander mes volets et connaitre leur état.

J’aimerais donc faire la même chose avec Jeedom sur mon raspberry.

Ou en suis-je.
J’ai connecté ma télécommande sur mon Raspberry, et avec le plugin Script, je procède à l’exécution d’un script en python pour:
_envoyer la trame pour la demande d’état
_lire les réponses de la télécommande

Par exemple si j’envoie:
_02 FD 60 01 03 (01 est l’ID du volet interrogé)
Elle répond:
_02 FF 60 01 03 (réponse commune à toute les demandes d’état quelque soit le volet interrogé)
_02 FF 60 01 01 00 00 01 00 00 00 00 00 00 00 03
Signification de certains de ces octets
02 -
FF-
60-
01 ces 4 premiers octets doivent avoir un rapport avec de l’identification
01 ID du volet
00 En mouvement (10 pour descente 01 pour montée)
00 position du volet en Hex (00=0% / 64=100%)
01 mode du volet (01 auto / 00 manuel)(Fonction de la télécommande centralisée)
00 Je sais pas
00 Blocage détecté
00 Je sais pas
00 Je sais pas
00 Je sais pas
00 Je sais pas
00 Je sais pas
03 Octet final à toute les trames

Le script en python que j’execute avec jeedom

import serial
import time

def envoyer_trame_hexadecimal(trame_hex, port_serie):
    with serial.Serial(port_serie, baudrate=115200, timeout=1) as ser:
        trame_binaire = bytes.fromhex(trame_hex)
        
        # Envoyer la trame
        ser.write(trame_binaire)
        
        # Attendre que des données soient disponibles dans le tampon de réception
        while ser.in_waiting == 0:
            time.sleep(0.000001)

        # Lire la réponse
        reponse = ser.read_all()

        # Vérifier la première réponse
        if reponse.hex() == "02ff600103":
            while ser.in_waiting == 0:
                time.sleep(0.000001)
            reponse = ser.read_all()

        print(f"{reponse.hex()}")

trame_a_envoyer = "02fd6010FC03"
port_usb = "/dev/ttyACM0"

envoyer_trame_hexadecimal(trame_a_envoyer, port_usb)

ça marche, Jeedom récupère bien la trame intéressante mais c’est pas fiable.
Et surtout, j’arrive à mes limites en programmation. J’ai des bases en C++, j’ai réalisé un projet comparable avec mon poêle à granulé avec un ESP8266, mais python je découvre.

Je ne sais plus trop par ou prendre le bout, et comment aborder le problème.

Mon cahier des charges
_Envoi de 5 commandes différentes (montée, descente, position 1, position 2, stop)
_Demande d’état toutes les 5 secondes en mouvement
_Demande d’état régulière pour mise à jour position (en cas de manipulation avec une télécommande unitaire)

Le tout pour mes 7 volets.

Le rêve serait de créer un plugin.

Quelqu’un pourrait me donner des pistes pour me remettre sur rail?

Bonjour,
Belle démarche, tu as bien progressé sur l’analyse du code.
Je cherche également un moyen de piloter mes moteurs de volet SELVE à l’aide de Jeedom, mais je ne trouve pas beaucoup d’information sur le sujet.
Je suis tombé sur une passerelle AIRSEND DUO qui propose le pilotage de la gamme SELVE.

Si tu as avancé sur le pilotage de tes volets ou même créé un plugin, je serais ravi de découvrir ton boulot.