Installation Theengs Gateway sans dongle bluetooth

Le "sans dongle" est juste à prendre pour la machine où est installé Theengs Gateway.

La plupart des Shelly Gen2 sont, via script, en mesure d’intercepter les trames Bluetooth et de les publier sur un broker. A son tour, Theengs Gateway sait récupérer les trames non décodées de certains équipements sur le broker et de les renvoyer décodées sur un autre topic (c’est le MQTTtoMQTT). Il ne reste plus qu’à utiliser son plugin MQTT favori pour avoir cela sur Jeedom.

Le Shelly, ici, n’est pas qu’un simple équipement connecté, il devient aussi une antenne Bluetooth.

1 « J'aime »

Bonjour et merci,
Ca confirme bien ce que j’avais compris avec la doc et les schémas de mips.
Je garde ça en mémoire pour servir un jour. J’avoue que le sans dongle annoncé m’avait fortement intrigué.
Je me disais bien que ça marche par « l’opération du saint esprit » était un mythe :joy:
Là c’est plus clair dans mon esprit.
Si je ne me trompe pas les shelly sont basés sur des Esp et j’imagine donc parfaitement que l’on puisse leur confier le rôle d’antenne en plus de leur fonction de base en remplacement d’une antenne esp sous omg ou tasmota. Et du coup le décodage de la trame qui est faite en amont par omg ou tasmota avant de publier en mqtt est faite en aval par Theengs Gateway.
J’imagine bien ou je commet encore une erreur de compréhension ?

Je laisse ici l’ébauche du script (je remercie De kat du forum Shelly qui m’a été d’une grande aide).
Le script évoluera certainement dès que j’aurai pu faire des tests avec mes Shelly BLU qui, à priori, ne sont pas encore dans la dernière stable de TheengsGateway.

TheengsDecoder	#351	v1.5.0				9 juin
TheengsGateway 			v1.1.0				11 juin 	Bump TheengsDecoder to 150
TheengsDecoder	#370	ShellyBLU But1		22 juin
TheengsDecoder	#375	v1.5.5				24 juin
TheengsDecoder	#386	v1.5.7				1 juillet
TheengsDecoder	#396	ShellyBLU D/W		26 juillet
TheengsDecoder	#431	ShellyBLU Motion	24 octobre
TheengsDecoder	#453	v1.6.3				16 novembre
TheengsDecoder	#460	v1.6.4				6 décembre

Si il y a un intérêt pour certains, j’ouvrirai un post spécifique sur ma mise en place.

let debug = false;
//let genTopic = 'shellies/script/bluetooth/';
let genTopic = 'TheengsGateway/undecoded/';
//let uuidsBan = ['fea0', 'fdf7', '3802'];
let uuidsBan = ['fea0'];

function isMacValid(mac) {
  if (mac.length !== 17) {
    return false;
  }
  for (let i=0; i<17; i++) {
    if (i%3 === 2) {
      if (mac.at(i) !== 0x3a) { //0x3a = :
        return false;
      }
    } else {
      //0x30 = 0, 0x39 = 9, 0x61 = a et 0x66 = f
      if (mac.at(i) < 0x30 || (mac.at(i) > 0x39 && mac.at(i) < 0x61) || mac.at(i) > 0x66) {
        return false;
      }
    }
  }
  return true;
}

function ScanCB(status, response) {
    if (status !== BLE.Scanner.SCAN_RESULT || !response.service_data) return; //exit if Scan status stopped or no Sevice Data
    if (!isMacValid(response.addr)) return;
    try{
        let uuids = Object.keys(response.service_data);
        uuids.forEach(function (uuid) {
            if (uuidsBan.indexOf(uuid) !== -1) return;
            //if (uuid === 'fea0') return;
            let manuuuids = Object.keys(response.manufacturer_data);
            let manudata;
            if (typeof manuuuids[0] !== 'undefined') manudata = btoh(response.manufacturer_data[manuuuids[0]]);
            let mqttData = {
                id: response.addr, //ok theengs
                mac_type: response.addr_type, //ok theengs
                advertisementdata: btoh(response.advData),
                scanRsp: response.scanRsp,
                rssi: response.rssi, //ok theengs
                flags: response.flags,
                localname: response.local_name,
                manufacturerdatauuid: manuuuids[0],
                manufacturerdata: manudata, //ok theengs
                servicedatauuid: uuid,
                servicedata: btoh(response.service_data[uuid]), //Convert into Base16 to get around utf8 Error.
                txpower: response.tx_power_level, //ok theengs
            };
            if(debug) print('Debug: ',mqttData);
            let unixtime = (Shelly.getComponentStatus("sys").unixtime + 2 * 3600) * 1000;
            let dateScan = new Date(unixtime);
            if(MQTT.isConnected()){
                if(debug) print('Debug: sending MQTT Data');
                topic = genTopic + response.addr + ':' + uuid;
                MQTT.publish(topic + '/undecoded', JSON.stringify(mqttData), 0, true);
                //MQTT.publish(topic + '/date', dateScan.toLocaleString(), 0, true);
                //MQTT.publish(topic + '/date', JSON.stringify(dateScan), 0, true);
                return;
            }
            print('Error: MQTT is not Ready, cant send MQTT Data');
        });
    }catch(e){print(e);}
}

print('Status: started Script');
BLE.Scanner.Start({ duration_ms: BLE.Scanner.INFINITE_SCAN, active: true}, ScanCB);

Tes interrogations m’ont fait penser qu’il serait bien de décrire les différentes possibilités, c’est fait ici:

2 « J'aime »

Idéalement il faudrait qu’on intègre une sorte de driver dans Theengs gateway suivant le type de device qui émet.
On pourrait ainsi éviter d’avoir à modifier le Shelly et directement traiter ces informations.
Tu penses que c’est jouables avec un Shelly sur étagère ?

Je ne comprends pas bien. Ici, il n’y a pas de "modification". J’utilise juste le langage mis à disposition dans le firmware d’origine.

Je ne comprends pas non plus ce que tu veux dire par "Shelly sur étagère".
Les Shelly sont placés là ou ils doivent être pour commuter des prises, lampes, etc…

désolé si ce n’est pas clair

En fait il s’agirait d’utiliser directement les trames MQTT issue du Shelly sans aucun ajout de script si c’est possible. En transférant le script côté Theengs gateway.
Je ne sais pas si c’est possible mais si ça l’est j’aimerai l’explorer pour réduire le nombre de paramétrage nécessaire pour l’utilisateur.

Sur étagère pour sans modification ou script, un équivalent serait de dire plug and play. Mais bon ça dépend de ce que permet le Shelly en termes de configuration.

Là, je ne suis pas assez calé pour te répondre. Il faudrait te rapprocher de leur support.

Non, surtout pas. Je viens d’apprendre une nouvelle expression "Sur étagère". :sunglasses:

Sur etagere cest la traduction fr de out of the box…

Lol

Off the shelf plutôt mais c’est la même idée: « prêt à l’emploi »
A ne pas confondre avec « on the shelf » qui est radicalement différent: « devenu inutile et donc rangé sur l’étagère (celle du haut là où on ne va jamais voir) »

1 « J'aime »

Ca me rappel que j’ai trouvé ça de gravé sur ma table le jour où j’ai été passer le Bac.
Je ne sais pas si cela m’a aidé à l’avoir :slight_smile:
Les_fonctionnaires_sont_comme_les_livres_d_une_bibliotheque_ce_-_Georges_Clemenceau-32342

Ces Shelly possèdent une API pour les configurer. Les scripts en font partis.

1 « J'aime »