Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Tester
    4. Shelly >= 6.6.0 mit BLU-Geräten (Bluetooth Low Energy)

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Shelly >= 6.6.0 mit BLU-Geräten (Bluetooth Low Energy)

    This topic has been deleted. Only users with topic management privileges can see it.
    • Thomas Braun
      Thomas Braun Most Active @Joesch80 last edited by Thomas Braun

      @joesch80

      Am Rande:
      node: v18.17.1
      veraltet und offenbar aus dem obsoleten nodesource-Repo. Stell das um:

      iob stop
      iob fix
      iob nodejs-update
      
      Joesch80 1 Reply Last reply Reply Quote 0
      • Joesch80
        Joesch80 @Thomas Braun last edited by

        @thomas-braun said in Shelly >= 6.6.0 mit BLU-Geräten (Bluetooth Low Energy):

        ob stop iob fix iob nodejs-update

        danke schön, das hab ich gemacht

        1 Reply Last reply Reply Quote 0
        • Joesch80
          Joesch80 @haus-automatisierung last edited by Joesch80

          @haus-automatisierung

          ich habe die log in meinem shelly eingeschaltet, drücke ich den button auf dem h&t sehe ich folgende Meldungen im Protokoll:

          shelly_bluetooth_rel:91 ADV 7c:c6:b6:57:c5:c7: mfd={}, svc={"fcd2":"RADeAWQuMjoBRRoB"}
          17:48:54
          Error: unknown type 46
          17:48:54
          Received {"encryption":false,"BTHome_version":2,"pid":222,"battery":100,"rssi":-97,"address":"7c:c6:b6:57:c5:c7"}

          hilft das weiter?

          haus-automatisierung Joesch80 2 Replies Last reply Reply Quote 0
          • haus-automatisierung
            haus-automatisierung Developer Most Active @Joesch80 last edited by

            @joesch80 sagte in Shelly >= 6.6.0 mit BLU-Geräten (Bluetooth Low Energy):

            Error: unknown type 46

            Mh, 46 ist 0x2E hex. Und das steht für die Luftfeuchtigkeit in bthome. Das komische ist, dass das bei mir 0x03 geliefert wird und funktioniert. Bitte schau nochmal genau welche Firmware auf dem H&T ist.

            Screenshot 2024-05-03 at 19.01.34.png

            Joesch80 2 Replies Last reply Reply Quote 0
            • Joesch80
              Joesch80 @Joesch80 last edited by

              @joesch80
              die Firmware ist 20240408-184609/v1.0.16@716b307b, laut app wäre ich up to date

              1 Reply Last reply Reply Quote 0
              • Joesch80
                Joesch80 @haus-automatisierung last edited by

                @haus-automatisierung
                ich will wirklich nicht nerven, aber hast du keine weitere Idee was ich machen könnte? Habe mittlerweile 4 von den Sensoren hier. Ich habe testweise für den fehlenden Typ 46 im Script einfach mal diesen deklariert (0x2e). Habe dafür den von der Temperatur kopiert, es wird ein Datenpunkt erstellt mit 1700 Grad. Dazu kommen weitere Meldungen, Typ 253(0xfd), dann 246(0xf6) und dann 255(0xff). Wenn ich diese ebenfalls anlege, dann kommt zwar keine Fehlermeldung mehr, weiter komm ich dann aber nicht. Könnte ich ein unterschiedliches Model haben?
                Wenn es eine Hilfe ist, schicke ich Dir gern ein Sensor zu.

                1 Reply Last reply Reply Quote 0
                • Joesch80
                  Joesch80 @haus-automatisierung last edited by

                  @haus-automatisierung

                  es ist nun gelöst, mit der zusätzlichen Zeile:

                  0x2e: { n: 'humidity', t: uint8, u: '%' },

                  wird plötzlich neben der korrekten Darstellung der Luftfeuchtigkeit auch der richtige Temperaturwert angezeigt, sämtliche Fehlermeldungen sind damit ebenfalls verschwunden. Vielleicht kannst Du dies in die nächste Version deinen Scriptes mit aufnehmen.
                  Vielen Dank für die Hilfe

                  haus-automatisierung 1 Reply Last reply Reply Quote 0
                  • haus-automatisierung
                    haus-automatisierung Developer Most Active @Joesch80 last edited by

                    @joesch80 Na die Lösung bzw das Problem hatte ich in meiner ersten Antwort ja schon genannt. Keine Ahnung warum das bei dir anders ist mit der gleichen Firmware.

                    Man müsste also in der nächsten Version des Scripts mal alles hinzufügen was das Protokoll kann. Nur fehlt mir dafür die Zeit aktuell.

                    D A 2 Replies Last reply Reply Quote 0
                    • D
                      dubrain @haus-automatisierung last edited by

                      @haus-automatisierung
                      Vielen Dank für die Diskussion. Ich hatte das gleiche Problem wie Joesch80.
                      Mit der Ergänzung "0x2e: { n: 'humidity', t: uint8, u: '%' }," im Skript ist das Problem bei mir gelöst.
                      Danke auch @Joesch80

                      haselchen 1 Reply Last reply Reply Quote 0
                      • haselchen
                        haselchen Most Active @dubrain last edited by haselchen

                        @dubrain

                        Blöd nachgefragt , heißt das wirklich uint?
                        Beim Lesen dachte ich mir , muss das nicht unit heißen? 🤔

                        Edit: vergiss es 😂 gerade selbst gelesen . Alles gut. Ist zu heiß anscheinend

                        1 Reply Last reply Reply Quote 1
                        • Humidor
                          Humidor @haus-automatisierung last edited by Humidor

                          @haus-automatisierung Hallo, ich habe weitere BL Geräte (Fenster/Türkontakte) in mein Shelly-System integriert, dh ich habe aktuell 5 Stück. Die ersten 2 zeigen nun keine Veränderung mehr? Die neuen funktionieren soweit.
                          Ich habe das Script auf den Pro laufen, wo die BLE beheimatet sind, kann das Script ev. nur auf einem im Shellysystem laufen?

                          bekomme die ersten 2 einfach nicht mehr ans laufen...

                          Joesch80 1 Reply Last reply Reply Quote 0
                          • Joesch80
                            Joesch80 @Humidor last edited by Joesch80

                            @humidor sagte in Shelly >= 6.6.0 mit BLU-Geräten (Bluetooth Low Energy):

                            @haus-automatisierung Hallo, ich habe weitere BL Geräte (Fenster/Türkontakte) in mein Shelly-System integriert, dh ich habe aktuell 5 Stück. Die ersten 2 zeigen nun keine Veränderung mehr? Die neuen funktionieren soweit.
                            Ich habe das Script auf den Pro laufen, wo die BLE beheimatet sind, kann das Script ev. nur auf einem im Shellysystem laufen?

                            bekomme die ersten 2 einfach nicht mehr ans laufen...

                            bei mir läuft das script auf 11 shellyplus 2pm

                            Humidor 1 Reply Last reply Reply Quote 0
                            • Humidor
                              Humidor @Joesch80 last edited by

                              @joesch80 dann liegt es nicht an der mehrfach Verwendung, aber woran dann?

                              Joesch80 Jey Cee 2 Replies Last reply Reply Quote 0
                              • Joesch80
                                Joesch80 @Humidor last edited by

                                @humidor sagte in Shelly >= 6.6.0 mit BLU-Geräten (Bluetooth Low Energy):

                                @joesch80 dann liegt es nicht an der mehrfach Verwendung, aber woran dann?

                                Siehst du denn eine Statusänderung bei Betätigung der ersten beiden Sensoren in der Shelly-App?

                                1 Reply Last reply Reply Quote 0
                                • Jey Cee
                                  Jey Cee Developer @Humidor last edited by

                                  @humidor Batterien mal geprüft? Bei meinen Blu Buttons waren die nach kurzer Zeit leer. Ein Firmware Update soll das beheben.
                                  Hab mir das changelog angesehen und die Firmware ist auch für die Motion und noch ein anderes Gerät.
                                  Vielleicht hilft ja ein Firmware update bei deinem Problem.

                                  Humidor 1 Reply Last reply Reply Quote 0
                                  • Humidor
                                    Humidor @Jey Cee last edited by

                                    @jey-cee sind grad mal 2 Wochen im Einsatz, bei Montage habe ich die Batterien getestet und das FW-Update gemacht. In der Shelly-App sehe ich die Änderung. Nur im Objektbau wird nicht aktualisiert.

                                    Jey Cee 1 Reply Last reply Reply Quote 0
                                    • Jey Cee
                                      Jey Cee Developer @Humidor last edited by

                                      @humidor es gibt ja zwei Einträge im Adapter für BLE, einmal die Allgemeine Übersicht und dann nochmal unter dem jeweiligen shelly. Da tut sich in keinem davon etwas?
                                      Sind noch weitere BLE Geräte über diesen Shelly eingebunden und kommen da Daten an?
                                      Weiteres was mir einfällt:
                                      Hast du vielleicht versehentlich das Skript auf dem Shelly deaktiviert?
                                      Ist in den BLE Einstellungen auf dem Shelly das Bluetooth Gateway (die dritte Option bei Bluetooth) aktiviert? Die verhindert auch das Daten an den Adapter geschickt werden.

                                      Humidor 1 Reply Last reply Reply Quote 0
                                      • Humidor
                                        Humidor @Jey Cee last edited by Humidor

                                        @jey-cee das Script läuft auf einem 1 PM, der Übermittelt mir Daten, das Gateway ist deaktiviert.
                                        allerdings sehe ich gerade, dass am 0-10V Dimmer das Gateway aktiviert ist, wo die 3 neuen BLE hängen und diese funktionieren.
                                        Script läuft natürlich.

                                        Humidor 1 Reply Last reply Reply Quote 0
                                        • Humidor
                                          Humidor @Humidor last edited by

                                          @humidor die 2 ersten BL‘s kommen nicht mehr rein, die neuen 3 fkt einwandfrei?

                                          1 Reply Last reply Reply Quote 0
                                          • A
                                            Apfelwurm last edited by

                                            Ich hab mal das Script angepasst.
                                            MAC Adresse in Namen übersetzen und die Zeile ersetzt damit ein BLU H&T die Werte richtig überträgt. Vielleicht hilft es ja dem ein oder anderen.

                                            // v0.2 custom 
                                            let SCRIPT_VERSION = '0.2';
                                            let BTHOME_SVC_ID_STR = 'fcd2';
                                            
                                            let uint8 = 0;
                                            let int8 = 1;
                                            let uint16 = 2;
                                            let int16 = 3;
                                            let uint24 = 4;
                                            let int24 = 5;
                                            
                                            let BTH = {};
                                            let SHELLY_ID = undefined;
                                            
                                            const BTH = {
                                                0x00: { n: 'pid', t: uint8 },
                                                0x01: { n: 'battery', t: uint8, u: '%' },
                                                0x02: { n: 'temperature', t: int16, f: 0.01, u: 'tC' },
                                                0x45: { n: 'temperature', t: int16, f: 0.1, u: 'tC' },
                                                0x03: { n: 'humidity', t: uint16, f: 0.01, u: '%' },
                                                0x2e: { n: 'humidity', t: uint8, u: '%' },
                                                0x05: { n: 'illuminance', t: uint24, f: 0.01 },
                                                0x1a: { n: 'door', t: uint8 },
                                                0x20: { n: 'moisture', t: uint8 },
                                                0x21: { n: 'motion', t: uint8 },
                                                0x2d: { n: 'window', t: uint8 },
                                                0x3a: { n: 'button', t: uint8 },
                                                0x3f: { n: 'rotation', t: int16, f: 0.1 }
                                            };
                                            
                                            // Mapping of MAC addresses to individual names
                                            let macToName = {
                                                'aa:bb:cc:dd:ee:ff': 'Device1',
                                                '11:22:33:44:55:66': 'Device2'
                                            };
                                            
                                            function getByteSize(type) {
                                                if (type === uint8 || type === int8) return 1;
                                                if (type === uint16 || type === int16) return 2;
                                                if (type === uint24 || type === int24) return 3;
                                                // impossible as advertisements are much smaller
                                                return 255;
                                            }
                                            
                                            let BTHomeDecoder = {
                                                utoi: function (num, bitsz) {
                                                    let mask = 1 << (bitsz - 1);
                                                    return num & mask ? num - (1 << bitsz) : num;
                                                },
                                                getUInt8: function (buffer) {
                                                    return buffer.at(0);
                                                },
                                                getInt8: function (buffer) {
                                                    return this.utoi(this.getUInt8(buffer), 8);
                                                },
                                                getUInt16LE: function (buffer) {
                                                    return 0xffff & ((buffer.at(1) << 8) | buffer.at(0));
                                                },
                                                getInt16LE: function (buffer) {
                                                    return this.utoi(this.getUInt16LE(buffer), 16);
                                                },
                                                getUInt24LE: function (buffer) {
                                                    return (
                                                        0x00ffffff & ((buffer.at(2) << 16) | (buffer.at(1) << 8) | buffer.at(0))
                                                    );
                                                },
                                                getInt24LE: function (buffer) {
                                                    return this.utoi(this.getUInt24LE(buffer), 24);
                                                },
                                                getBufValue: function (type, buffer) {
                                                    if (buffer.length < getByteSize(type)) return null;
                                                    let res = null;
                                                    if (type === uint8) res = this.getUInt8(buffer);
                                                    if (type === int8) res = this.getInt8(buffer);
                                                    if (type === uint16) res = this.getUInt16LE(buffer);
                                                    if (type === int16) res = this.getInt16LE(buffer);
                                                    if (type === uint24) res = this.getUInt24LE(buffer);
                                                    if (type === int24) res = this.getInt24LE(buffer);
                                                    return res;
                                                },
                                                unpack: function (buffer) {
                                                    // beacons might not provide BTH service data
                                                    if (typeof buffer !== 'string' || buffer.length === 0) return null;
                                                    let result = {};
                                                    let _dib = buffer.at(0);
                                                    result['encryption'] = _dib & 0x1 ? true : false;
                                                    result['BTHome_version'] = _dib >> 5;
                                                    if (result['BTHome_version'] !== 2) return null;
                                                    // can not handle encrypted data
                                                    if (result['encryption']) return result;
                                                    buffer = buffer.slice(1);
                                            
                                                    let _bth;
                                                    let _value;
                                                    while (buffer.length > 0) {
                                                        _bth = BTH[buffer.at(0)];
                                                        if (typeof _bth === 'undefined') {
                                                            console.log('Error: unknown type ' + buffer.at(0));
                                                            break;
                                                        }
                                                        buffer = buffer.slice(1);
                                                        _value = this.getBufValue(_bth.t, buffer);
                                                        if (_value === null) break;
                                                        if (typeof _bth.f !== 'undefined') _value = _value * _bth.f;
                                                        result[_bth.n] = _value;
                                                        buffer = buffer.slice(getByteSize(_bth.t));
                                                    }
                                                    return result;
                                                }
                                            };
                                            
                                            let lastPacketId = 0x100;
                                            
                                            // Callback for the BLE scanner object
                                            function bleScanCallback(event, result) {
                                                // exit if not a result of a scan
                                                if (event !== BLE.Scanner.SCAN_RESULT) {
                                                    return;
                                                }
                                            
                                                // exit if service_data member is missing
                                                if (
                                                    typeof result.service_data === 'undefined' ||
                                                    typeof result.service_data[BTHOME_SVC_ID_STR] === 'undefined'
                                                ) {
                                                    // console.log('Error: Missing service_data member');
                                                    return;
                                                }
                                            
                                                let unpackedData = BTHomeDecoder.unpack(
                                                    result.service_data[BTHOME_SVC_ID_STR]
                                                );
                                            
                                                // exit if unpacked data is null or the device is encrypted
                                                if (
                                                    unpackedData === null ||
                                                    typeof unpackedData === "undefined" ||
                                                    unpackedData["encryption"]
                                                ) {
                                                    console.log('Error: Encrypted devices are not supported');
                                                    return;
                                                }
                                            
                                                // exit if the event is duplicated
                                                if (lastPacketId === unpackedData.pid) {
                                                    return;
                                                }
                                            
                                                lastPacketId = unpackedData.pid;
                                            
                                                unpackedData.rssi = result.rssi;
                                                unpackedData.address = result.addr;
                                            
                                                // Convert MAC address to lowercase for case insensitive matching
                                                let macLower = result.addr.toLowerCase();
                                                let deviceName = macToName[macLower] || result.addr;
                                            
                                                // create MQTT-Payload
                                                let message = {
                                                    scriptVersion: SCRIPT_VERSION,
                                                    src: SHELLY_ID,
                                                    srcBle: {
                                                        type: result.local_name,
                                                        mac: deviceName
                                                    },
                                                    payload: unpackedData
                                                };
                                            
                                                console.log('Received ' + JSON.stringify(unpackedData));
                                            
                                                if (MQTT.isConnected()) {
                                                    MQTT.publish(SHELLY_ID + '/events/ble', JSON.stringify(message));
                                                }
                                            }
                                            
                                            // Initializes the script and performs the necessary checks and configurations
                                            function init() {
                                                // get the config of ble component
                                                let bleConfig = Shelly.getComponentConfig('ble');
                                            
                                                // exit if the BLE isn't enabled
                                                if (!bleConfig.enable) {
                                                    console.log('Error: The Bluetooth is not enabled, please enable it in the settings');
                                                    return;
                                                }
                                            
                                                // check if the scanner is already running
                                                if (BLE.Scanner.isRunning()) {
                                                    console.log('Info: The BLE gateway is running, the BLE scan configuration is managed by the device');
                                                } else {
                                                    // start the scanner
                                                    let bleScanner = BLE.Scanner.Start({
                                                        duration_ms: BLE.Scanner.INFINITE_SCAN,
                                                        active: true
                                                    });
                                            
                                                    if (!bleScanner) {
                                                        console.log('Error: Can not start new scanner');
                                                    }
                                                }
                                            
                                                BLE.Scanner.Subscribe(bleScanCallback);
                                            }
                                            
                                            Shelly.call('Mqtt.GetConfig', '', function (res, err_code, err_msg, ud) {
                                                SHELLY_ID = res['topic_prefix'];
                                            
                                                init();
                                            });
                                            
                                            Humidor 1 Reply Last reply Reply Quote 1
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            673
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            35
                                            153
                                            18558
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo