Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. [Vorlage] Einbinden des Xiaomi Mijia Bluetooth Thermo- und Hygrometer

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    829

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    18
    1
    6.3k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.6k

[Vorlage] Einbinden des Xiaomi Mijia Bluetooth Thermo- und Hygrometer

Scheduled Pinned Locked Moved ioBroker Allgemein
22 Posts 13 Posters 16.9k Views 12 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Lenny.CBL Offline
    Lenny.CBL Offline
    Lenny.CB
    Most Active
    wrote on last edited by
    #4

    muss ich mal testen…

    Habe das Teil auch schon ne Weile lang rumliegen...

    1 Reply Last reply
    0
    • S Offline
      S Offline
      skonteron
      wrote on last edited by
      #5

      Ich hab das mal versucht, das HT bei mir einzubinden. Leider bekomme ich keine Daten geliefert.

      Per Console kann ich mich allerdings mit dem Teil verbinden und bekomme auch Daten ausgeliefert. Leider sehe ich da zur Zeit keinen Fehler, aber so richtig kenne ich mich leider auch nicht aus.

      Eventuell hast du ja noch ne Idee. Habe insgesmt 4 THs, wäre ja schön, wenn ich die mal zum laufen bekommen würde :)
      ` > [bluetooth]# info 4C:65:A8:D0:27:8F

      Device 4C:65:A8:D0:27:8F

      Name: MJ_HT_V1

      Alias: MJ_HT_V1

      Paired: no

      Trusted: no

      Blocked: no

      Connected: no

      LegacyPairing: no

      UUID: Battery Service (0000180f-0000-1000-8000-00805f9b34fb)

      UUID: Device Information (0000180a-0000-1000-8000-00805f9b34fb)

      ServiceData Key: 0000fe95-0000-1000-8000-00805f9b34fb

      ServiceData Value: 0x50

      ServiceData Value: 0x20

      ServiceData Value: 0xaa

      ServiceData Value: 0x01

      ServiceData Value: 0xc9

      ServiceData Value: 0x8f

      ServiceData Value: 0x27

      ServiceData Value: 0xd0

      ServiceData Value: 0xa8

      ServiceData Value: 0x65

      ServiceData Value: 0x4c

      ServiceData Value: 0x0d

      ServiceData Value: 0x10

      ServiceData Value: 0x04

      ServiceData Value: 0x89

      ServiceData Value: 0x00

      ServiceData Value: 0x14

      ServiceData Value: 0x02

      ServiceData Key: 0000ffff-0000-1000-8000-00805f9b34fb

      ServiceData Value: 0xc2

      ServiceData Value: 0x58

      ServiceData Value: 0x3a

      ServiceData Value: 0xfc

      ServiceData Value: 0xb0

      ServiceData Value: 0xbc

      [bluetooth]# pair 4C:65:A8:D0:27:8F

      Attempting to pair with 4C:65:A8:D0:27:8F

      [CHG] Device 4C:65:A8:D0:27:8F Connected: yes

      [CHG] Device 4C:65:A8:D0:27:8F Connected: no

      Failed to pair: org.bluez.Error.AuthenticationCanceled

      [bluetooth]# pair 4C:65:A8:D0:27:8F

      Attempting to pair with 4C:65:A8:D0:27:8F

      [CHG] Device 4C:65:A8:D0:27:8F Connected: yes

      [CHG] Device 4C:65:A8:D0:27:8F Connected: no

      [CHG] Device 4C:65:A8:D0:27:8F Paired: yes

      Pairing successful `

      1 Reply Last reply
      0
      • AlCalzoneA Offline
        AlCalzoneA Offline
        AlCalzone
        Developer
        wrote on last edited by
        #6

        Falls es jemanden interessiert: Dieses Gerät sollte in v0.4.0 des BLE-Adapters unterstützt sein.

        Bitte um Tester und ein paar Rohdaten aus dem Debug-Log!

        => viewtopic.php?f=36&t=7932&p=136475#p136475

        Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

        1 Reply Last reply
        0
        • S Offline
          S Offline
          ShishaTobi
          wrote on last edited by
          #7

          Hallo zusammen,

          ich bin neu was den IoBroker betrifft.

          Für meinen Mijia Temperatur- und Feuchtigkeitssensor bin ich der Vorlage von Soulforged gefolgt.

          In der BLE Instanz kann ich den Sensor sehen. Es werden auch die Werte für Batterie, Temperatur und Feuchtigkeit angezeigt.

          Lediglich das Skript meldet immer

          21:00:06.313 [info] javascript.0 script.js.XiaomiHygroTemp: Xiaomi hat nicht geantwortet. Warte auf nächsten Poll

          Ich habe aber keine Ahnung woran es hängt. Im BLE habe ich als überwachendes Plugin "xiaomi" angegeben.

          Muss ich sonst noch etwas machen?

          Ich hoffe es kann mir jemand weiterhelfen.

          Sagt mir welche Infos ihr noch braucht.

          BLE Version ist 0.5.2

          Schonmal vielen Dank für die Hilfe.

          Gruß

          ShishaTobi

          8500_ble.jpg
          8500_java.jpg
          8500_script.jpg

          1 Reply Last reply
          0
          • AlCalzoneA Offline
            AlCalzoneA Offline
            AlCalzone
            Developer
            wrote on last edited by
            #8

            @ShishaTobi:

            Hallo zusammen,

            In der BLE Instanz kann ich den Sensor sehen. Es werden auch die Werte für Batterie, Temperatur und Feuchtigkeit angezeigt.

            Lediglich das Skript meldet immer

            21:00:06.313 [info] javascript.0 script.js.XiaomiHygroTemp: Xiaomi hat nicht geantwortet. Warte auf nächsten Poll

            Ich habe aber keine Ahnung woran es hängt. Im BLE habe ich als überwachendes Plugin "xiaomi" angegeben. `
            Wenn es mit dem Adapter doch läuft, warum willst du noch das Skript nutzen?

            Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

            1 Reply Last reply
            0
            • S Offline
              S Offline
              ShishaTobi
              wrote on last edited by
              #9

              Achso, ich dachte ich brauch das Script damit die Daten auf der VIS Tabelle angezeigt werden.

              Was im Moment eben nicht der Fall ist.

              Aber stimmt, ich könnte ja einfach die Values über den ble Adapter auslesen und auf dem VIS anzeigen, richtig?

              1 Reply Last reply
              0
              • S Soulforged

                Mir ist es endlich gelungen mein Bluetooth Thermo- und Hygrometer in ioBroker einzubinden. Nun möchte ich meine Lösung allen anderen natürlich auch zur Verfügung stellen. Ich Kürze das Gerät im folgenden mit TH ab.

                Fangen wir mit den Vorraussetzungen an: Wir benötigen auf unserem Host-System (in meinem Fall ein Raspi3) das Programm gatttool um auf die Bluetooth LE Schnittstelle zugreifen zu können. Wer den Bluetooth Adapter installier hat, wird diesen Schritt schon durchlaufen haben. Für alle anderen heißt es zunächt die Consolte zu öffnen

                sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
                

                Als nächstes müsst ihr die MAC-Adresse eures TH herausbekommen. Ich habe hierzu eine Android-App namens nRF Connect benutzt. Diese wurde beim Bluetooth Adapter empfohlen und hat sehr gut funktoiniert https://play.google.com/store/apps/deta … ndroid.mcp

                Nun werden wir in einem kleinen JavaScript in ioBroker mit Hilfe des gatttools in regelmäßigen Abständen Messwerte vom TH anfordern. In den ersten 3 Zeilen des Scripts trag ihr bitte die MAC Adresse eures TH ein und wählt ein Abfrageintervall aus. Ich habe meines auf 5 Minuten gestellt, da Temperatur und Luftfeuchte in aller Regel sich sehr langsam verändernde größen sind. Je seltener man es durchführt umso schonender ist es für die Batterie in dem kleinen Gerät. die Sekunden bitte auf 0 stehen lassen sofern euer Intervall auch in Minuten angegeben wird.

                ! ````
                const pollrate_s = 0; //Abfrageintervall in Sekunden (bei nutzung der Minuten auf 0 Stellen)
                const pollrate_m = 5; //Abfrageintervall in Minuten (Empfehlung alle 5 Minuten / Temperaturänderung ist langsam / Schont die Batterie)
                const bluetooth_mac = '4C:65:A8:D0:13:83';
                ! const s_temp = "javascript.0.Bluetooth.XiaomiHygroTemp.Temperatur";
                const s_hygro = "javascript.0.Bluetooth.XiaomiHygroTemp.Luftfeuchte";
                ! createState(s_temp, 0,{unit: "°C", name: "Temperatur"});
                createState(s_hygro, 0,{unit: "%", name: "Luftfeuchte"});
                ! var cronstring;
                if (pollrate_s > 0) {
                cronstring = "*/" + pollrate_s + " * * * * ";
                }
                else {
                cronstring = "
                /" + pollrate_m + " * * * *";
                }
                ! schedule(cronstring, function () {
                poll_XiaomiHygroTemp(bluetooth_mac);
                });
                ! function poll_XiaomiHygroTemp(mac){
                var i = 1;
                var bluetooth_message = '';
                var messwerte;
                var temperatur;
                var feuchte;

                var spawn = require('child_process').spawn,
                gattool    = spawn('gatttool',['-b', mac , '--char-write-req', '-a', '0x10', '-n', '0100' ,'--listen']);
                
                gattool.stdout.on('data', function (data) {
                  //console.log('stdout: ' + data.toString());
                  bluetooth_message += data.toString();
                  if(i==5) { //5 stdout nachrichten abfangen. Ergibt overhead + ca 1,5-2 mal einen Messwert.
                      gattool.kill('SIGQUIT'); //gatttool in kommandozeile unsanft beenden
                      //console.log('message:' + bluetooth_message);
                      messwerte = bluetooth_message.substr(82,38); 
                      stellen = bluetooth_message.substr(82,38).split(" "); //Messwerte extrahieren (stehen immer an der gleichen stelle der Ausgabe) und an leerzeichen auftrennen. 
                      //Temperatur ist dann im Array an 2 (Zehner) 3 (Einer) 4 (Komma) und 5(Nachkommestelle) Stelle
                      //Feuchte an Stelle 9 (Zehner) 10 (Einer) 11 (Komma) und 12 (Nachkommestelle) 
                      //Ziffern ins ASCII sind 30+Ziffer. Also je 30 abziehen und mit der Zehnerpotenz multiplizieren
                      temperatur = (stellen[2]-30)*10+(stellen[3]-30)+(stellen[5]-30)/10;
                      feuchte = (stellen[9]-30)*10+(stellen[10]-30)+(stellen[12]-30)/10;
                      //console.log('Temp:' + temperatur);
                      //console.log('Feuchte:' + feuchte);
                      setState(s_temp, temperatur, true);
                      setState(s_hygro, feuchte, true);
                  }
                  i++;
                });
                
                gattool.stderr.on('data', function (data) {
                  //console.log('stderr: ' + data.toString());
                  log("Xiaomi hat nicht geantwortet. Warte auf nächsten Poll")
                });
                

                }

                
                Das Script erzeugt nach dem ersten Durchlauf zwei States in javascript.0.Bluetooth.XiaomiHygroTemp für Temperatur und Luftfeuchte.
                
                Diese kann man im vis z.B. in eine HTML-Tabelle packen:
                
                >! ````
                [{"tpl":"tplHtml","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":true,"g_css_border":true,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html":"Klima\n\n    \n        \n        \n    \n    \n        \n        \n    \n
                >! | Temperatur: | {javascript.0.Bluetooth.XiaomiHygroTemp.Temperatur} °C |
                | Luftfeuchte: | {javascript.0.Bluetooth.XiaomiHygroTemp.Luftfeuchte}% |
                >! "},"style":{"left":"860px","top":"180px","color":"#EEEEEE","border-width":"2px","border-style":"solid","width":"227px","height":"85px","font-size":"larger","z-index":"0","line-height":"25px","border-radius":"10px","border-color":"#EEEEEE","padding-left":"6px","padding-top":"3px"},"widgetSet":"basic"}]
                
                2 Offline
                2 Offline
                2000ede
                wrote on last edited by
                #10

                @Soulforged

                Der „lywsd03mmc“ ist wohl das neuste Modell – er ist darüber hinaus viel günstiger und hat noch einen MEGA-Vorteil: Das Gerät selber hat eine eigene Datenspeicherung! Laut der Seite https://de.gearbest.com/home-gadgets/pp_009542841338.html sind es 3 Monate. Ich kann bestätigen, dass es speichert, habe ihn aber erst sehr kurz. Leider ist die orignal app großer Mist.
                Vielleicht reizt Dich der Hinweis auf die Speicherung, Deinen Code zu erweitern.
                Dies als Hinweis und würde mich freuen!

                1 Reply Last reply
                0
                • H Offline
                  H Offline
                  Henning
                  wrote on last edited by
                  #11

                  das Modell habe ich jetzt auch. Laufen recht gut, leider nicht im IOBroker.
                  Meine Versuche, die Stelle zu finden wo im BLE die MAC- Adressen etc. hinterlegt sind, sind leider gescheitert.
                  Vielleicht kann mir jemanden einen Tip geben, wo die Daten hinterlegt sind.

                  Die MAC- Adressen/ FE95 lauten:
                  a4:c1:38:01:f8:27 30585b05ad27f80138c1a408
                  a4:c1:38:03:2c:19 30585b05b3192c0338c1a408
                  a4:c1:38:60:55:ee 30585b05a1ee556038c1a408

                  30585b05 dürfte die Gerätekennung sein
                  38c1a408 gehört wohl auch dazu
                  a1ee5560 sind vielleicht die eigentlichen Daten (Temperatur, Feuchtigkeit, Batterie)

                  Als logischen Wert finde ich nur die Temperatur. Die ersten zwei Ziffern von Hex in Dez. umgerechnet ergibt logische Werte für die Gradzahl inkl. einer Kommastelle (dummerweise aktualisieren die sich gerade nicht)

                  Vielleicht kann ja jemand was damit anfangen :-)
                  Viele Grüße,
                  Henning

                  1 Reply Last reply
                  0
                  • C Offline
                    C Offline
                    Colt
                    wrote on last edited by
                    #12

                    Hallo zusammen,
                    gibt es mittlerweile eine möglichkeit den LYWSD03MMC in den iObroker zu bekommen?

                    SBorgS T 2 Replies Last reply
                    0
                    • C Colt

                      Hallo zusammen,
                      gibt es mittlerweile eine möglichkeit den LYWSD03MMC in den iObroker zu bekommen?

                      SBorgS Offline
                      SBorgS Offline
                      SBorg
                      Forum Testing Most Active
                      wrote on last edited by
                      #13

                      @Colt @AlCalzone schrieb, dass es da wohl mehrere Monate für eine Lösung dauern könnte. Es müsste aber mittels des Phyton-Scripts auf GitHub möglich sein.

                      LG SBorg ( SBorg auf GitHub)
                      Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                      1 Reply Last reply
                      0
                      • S Offline
                        S Offline
                        Stoni
                        wrote on last edited by
                        #14

                        Hallo, kann jemand was zur BT Reichweite sagen? Pi4 mit ioB hängt im EG, Thermostate sollen im ganzen Haus hängen, also bis zu 10 Meter durch Wände in Fertigbauweise, bzw Stahlbetondecke in den Keller.
                        Erfahrungen?

                        Gruß Stoni

                        SBorgS 1 Reply Last reply
                        0
                        • S Stoni

                          Hallo, kann jemand was zur BT Reichweite sagen? Pi4 mit ioB hängt im EG, Thermostate sollen im ganzen Haus hängen, also bis zu 10 Meter durch Wände in Fertigbauweise, bzw Stahlbetondecke in den Keller.
                          Erfahrungen?

                          Gruß Stoni

                          SBorgS Offline
                          SBorgS Offline
                          SBorg
                          Forum Testing Most Active
                          wrote on last edited by
                          #15

                          @Stoni sagte

                          Erfahrungen? ... Stahlbetondecke ...

                          Diesbzgl. keine guten ;)
                          Genau wird dir das aber niemand beantworten können, da dies von zu vielen Faktoren abhängt. Ich mache dann immer einen rudimentären Reichweitencheck: BT-Stick am Laptop an den einen Standort, Smartphone an den anderen und dann schauen ob sie sich verbinden können...
                          Wenn es BT sein muss, könnte man auch notfalls einen PI Zero oä. als 2. Verbindungspunkt einsetzen.

                          LG SBorg ( SBorg auf GitHub)
                          Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                          S 1 Reply Last reply
                          0
                          • SBorgS SBorg

                            @Stoni sagte

                            Erfahrungen? ... Stahlbetondecke ...

                            Diesbzgl. keine guten ;)
                            Genau wird dir das aber niemand beantworten können, da dies von zu vielen Faktoren abhängt. Ich mache dann immer einen rudimentären Reichweitencheck: BT-Stick am Laptop an den einen Standort, Smartphone an den anderen und dann schauen ob sie sich verbinden können...
                            Wenn es BT sein muss, könnte man auch notfalls einen PI Zero oä. als 2. Verbindungspunkt einsetzen.

                            S Offline
                            S Offline
                            Stoni
                            wrote on last edited by
                            #16

                            @SBorg Danke für den Tipp. Hab gerade mal mein Handy in den Keller gelegt und per Laptop gesucht. Wurde nicht gefunden, ergo scheinbar keine Verbindung durch Stahlbeton.
                            Es muss nicht zwangsläufig BT sein, ich suche halt noch günstige Alternativen zu den HM-Thermostaten mit ner Anzeige und da stieß ich auf die Mijia. Hab schon einige Aqara im Einsatz, aber wollte was mit Display.

                            1 Reply Last reply
                            0
                            • S Soulforged

                              Mir ist es endlich gelungen mein Bluetooth Thermo- und Hygrometer in ioBroker einzubinden. Nun möchte ich meine Lösung allen anderen natürlich auch zur Verfügung stellen. Ich Kürze das Gerät im folgenden mit TH ab.

                              Fangen wir mit den Vorraussetzungen an: Wir benötigen auf unserem Host-System (in meinem Fall ein Raspi3) das Programm gatttool um auf die Bluetooth LE Schnittstelle zugreifen zu können. Wer den Bluetooth Adapter installier hat, wird diesen Schritt schon durchlaufen haben. Für alle anderen heißt es zunächt die Consolte zu öffnen

                              sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
                              

                              Als nächstes müsst ihr die MAC-Adresse eures TH herausbekommen. Ich habe hierzu eine Android-App namens nRF Connect benutzt. Diese wurde beim Bluetooth Adapter empfohlen und hat sehr gut funktoiniert https://play.google.com/store/apps/deta … ndroid.mcp

                              Nun werden wir in einem kleinen JavaScript in ioBroker mit Hilfe des gatttools in regelmäßigen Abständen Messwerte vom TH anfordern. In den ersten 3 Zeilen des Scripts trag ihr bitte die MAC Adresse eures TH ein und wählt ein Abfrageintervall aus. Ich habe meines auf 5 Minuten gestellt, da Temperatur und Luftfeuchte in aller Regel sich sehr langsam verändernde größen sind. Je seltener man es durchführt umso schonender ist es für die Batterie in dem kleinen Gerät. die Sekunden bitte auf 0 stehen lassen sofern euer Intervall auch in Minuten angegeben wird.

                              ! ````
                              const pollrate_s = 0; //Abfrageintervall in Sekunden (bei nutzung der Minuten auf 0 Stellen)
                              const pollrate_m = 5; //Abfrageintervall in Minuten (Empfehlung alle 5 Minuten / Temperaturänderung ist langsam / Schont die Batterie)
                              const bluetooth_mac = '4C:65:A8:D0:13:83';
                              ! const s_temp = "javascript.0.Bluetooth.XiaomiHygroTemp.Temperatur";
                              const s_hygro = "javascript.0.Bluetooth.XiaomiHygroTemp.Luftfeuchte";
                              ! createState(s_temp, 0,{unit: "°C", name: "Temperatur"});
                              createState(s_hygro, 0,{unit: "%", name: "Luftfeuchte"});
                              ! var cronstring;
                              if (pollrate_s > 0) {
                              cronstring = "*/" + pollrate_s + " * * * * ";
                              }
                              else {
                              cronstring = "
                              /" + pollrate_m + " * * * *";
                              }
                              ! schedule(cronstring, function () {
                              poll_XiaomiHygroTemp(bluetooth_mac);
                              });
                              ! function poll_XiaomiHygroTemp(mac){
                              var i = 1;
                              var bluetooth_message = '';
                              var messwerte;
                              var temperatur;
                              var feuchte;

                              var spawn = require('child_process').spawn,
                              gattool    = spawn('gatttool',['-b', mac , '--char-write-req', '-a', '0x10', '-n', '0100' ,'--listen']);
                              
                              gattool.stdout.on('data', function (data) {
                                //console.log('stdout: ' + data.toString());
                                bluetooth_message += data.toString();
                                if(i==5) { //5 stdout nachrichten abfangen. Ergibt overhead + ca 1,5-2 mal einen Messwert.
                                    gattool.kill('SIGQUIT'); //gatttool in kommandozeile unsanft beenden
                                    //console.log('message:' + bluetooth_message);
                                    messwerte = bluetooth_message.substr(82,38); 
                                    stellen = bluetooth_message.substr(82,38).split(" "); //Messwerte extrahieren (stehen immer an der gleichen stelle der Ausgabe) und an leerzeichen auftrennen. 
                                    //Temperatur ist dann im Array an 2 (Zehner) 3 (Einer) 4 (Komma) und 5(Nachkommestelle) Stelle
                                    //Feuchte an Stelle 9 (Zehner) 10 (Einer) 11 (Komma) und 12 (Nachkommestelle) 
                                    //Ziffern ins ASCII sind 30+Ziffer. Also je 30 abziehen und mit der Zehnerpotenz multiplizieren
                                    temperatur = (stellen[2]-30)*10+(stellen[3]-30)+(stellen[5]-30)/10;
                                    feuchte = (stellen[9]-30)*10+(stellen[10]-30)+(stellen[12]-30)/10;
                                    //console.log('Temp:' + temperatur);
                                    //console.log('Feuchte:' + feuchte);
                                    setState(s_temp, temperatur, true);
                                    setState(s_hygro, feuchte, true);
                                }
                                i++;
                              });
                              
                              gattool.stderr.on('data', function (data) {
                                //console.log('stderr: ' + data.toString());
                                log("Xiaomi hat nicht geantwortet. Warte auf nächsten Poll")
                              });
                              

                              }

                              
                              Das Script erzeugt nach dem ersten Durchlauf zwei States in javascript.0.Bluetooth.XiaomiHygroTemp für Temperatur und Luftfeuchte.
                              
                              Diese kann man im vis z.B. in eine HTML-Tabelle packen:
                              
                              >! ````
                              [{"tpl":"tplHtml","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":true,"g_css_border":true,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html":"Klima\n\n    \n        \n        \n    \n    \n        \n        \n    \n
                              >! | Temperatur: | {javascript.0.Bluetooth.XiaomiHygroTemp.Temperatur} °C |
                              | Luftfeuchte: | {javascript.0.Bluetooth.XiaomiHygroTemp.Luftfeuchte}% |
                              >! "},"style":{"left":"860px","top":"180px","color":"#EEEEEE","border-width":"2px","border-style":"solid","width":"227px","height":"85px","font-size":"larger","z-index":"0","line-height":"25px","border-radius":"10px","border-color":"#EEEEEE","padding-left":"6px","padding-top":"3px"},"widgetSet":"basic"}]
                              
                              J Offline
                              J Offline
                              jhuebner1
                              wrote on last edited by
                              #17

                              @Soulforged
                              Mal ne doofe Frage:
                              Für 3x Hyrgometer, muss ich 3x Scripte anleghen oder kann ich die MAC Adressen irgendwo hintereinander schreiben?

                              1 Reply Last reply
                              0
                              • C Colt

                                Hallo zusammen,
                                gibt es mittlerweile eine möglichkeit den LYWSD03MMC in den iObroker zu bekommen?

                                T Offline
                                T Offline
                                Torsten G.
                                wrote on last edited by
                                #18

                                @Colt said in [Vorlage] Einbinden des Xiaomi Mijia Bluetooth Thermo- und Hygrometer:

                                Hallo zusammen,
                                gibt es mittlerweile eine möglichkeit den LYWSD03MMC in den iObroker zu bekommen?

                                Ich habe mir 2 Stück für 9 Euro zugelegt und stehe nun auch vor der Frage ob jemand schon eine Lösung gefunden hat. Ich habe mir die für die Luftfeuchtigkeit im Keller gekauft und würde die gerne über VIS anzeigen lassen bzw. den Luftentfeuchter starten lassen.

                                Wenn jemand schon eine Lösung gefunden hat immer her damit. Aber für Anfänger geeignet :)

                                Viele Grüße
                                Torsten

                                SBorgS Lenny.CBL 2 Replies Last reply
                                0
                                • T Torsten G.

                                  @Colt said in [Vorlage] Einbinden des Xiaomi Mijia Bluetooth Thermo- und Hygrometer:

                                  Hallo zusammen,
                                  gibt es mittlerweile eine möglichkeit den LYWSD03MMC in den iObroker zu bekommen?

                                  Ich habe mir 2 Stück für 9 Euro zugelegt und stehe nun auch vor der Frage ob jemand schon eine Lösung gefunden hat. Ich habe mir die für die Luftfeuchtigkeit im Keller gekauft und würde die gerne über VIS anzeigen lassen bzw. den Luftentfeuchter starten lassen.

                                  Wenn jemand schon eine Lösung gefunden hat immer her damit. Aber für Anfänger geeignet :)

                                  Viele Grüße
                                  Torsten

                                  SBorgS Offline
                                  SBorgS Offline
                                  SBorg
                                  Forum Testing Most Active
                                  wrote on last edited by
                                  #19

                                  @Torsten-G sagte in [Vorlage] Einbinden des Xiaomi Mijia Bluetooth Thermo- und Hygrometer:

                                  Wenn jemand schon eine Lösung gefunden hat immer her damit. Aber für Anfänger geeignet

                                  Lösung ja, aber auch für Anfänger? Zumindest ist es nicht sooo schwer: alternative Firmware flashen
                                  Gibt auch hier im Forum schon paar Posts dazu: Projekt auf GitHub

                                  LG SBorg ( SBorg auf GitHub)
                                  Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                                  1 Reply Last reply
                                  0
                                  • T Torsten G.

                                    @Colt said in [Vorlage] Einbinden des Xiaomi Mijia Bluetooth Thermo- und Hygrometer:

                                    Hallo zusammen,
                                    gibt es mittlerweile eine möglichkeit den LYWSD03MMC in den iObroker zu bekommen?

                                    Ich habe mir 2 Stück für 9 Euro zugelegt und stehe nun auch vor der Frage ob jemand schon eine Lösung gefunden hat. Ich habe mir die für die Luftfeuchtigkeit im Keller gekauft und würde die gerne über VIS anzeigen lassen bzw. den Luftentfeuchter starten lassen.

                                    Wenn jemand schon eine Lösung gefunden hat immer her damit. Aber für Anfänger geeignet :)

                                    Viele Grüße
                                    Torsten

                                    Lenny.CBL Offline
                                    Lenny.CBL Offline
                                    Lenny.CB
                                    Most Active
                                    wrote on last edited by Lenny.CB
                                    #20

                                    @Torsten-G schau dir mal die Anleitung an:
                                    https://forum.iobroker.net/topic/28388/xiaomi-temp-and-humidity-monitor-2-ble-adapter/97

                                    T 1 Reply Last reply
                                    0
                                    • Lenny.CBL Lenny.CB

                                      @Torsten-G schau dir mal die Anleitung an:
                                      https://forum.iobroker.net/topic/28388/xiaomi-temp-and-humidity-monitor-2-ble-adapter/97

                                      T Offline
                                      T Offline
                                      Torsten G.
                                      wrote on last edited by
                                      #21

                                      @Lenny-CB said in [Vorlage] Einbinden des Xiaomi Mijia Bluetooth Thermo- und Hygrometer:

                                      @Torsten-G schau dir mal die Anleitung an:
                                      https://forum.iobroker.net/topic/28388/xiaomi-temp-and-humidity-monitor-2-ble-adapter/97

                                      Vielen Dank hat geholfen. Ist Anfänger geeignet :)

                                      1 Reply Last reply
                                      0
                                      • S Soulforged

                                        Mir ist es endlich gelungen mein Bluetooth Thermo- und Hygrometer in ioBroker einzubinden. Nun möchte ich meine Lösung allen anderen natürlich auch zur Verfügung stellen. Ich Kürze das Gerät im folgenden mit TH ab.

                                        Fangen wir mit den Vorraussetzungen an: Wir benötigen auf unserem Host-System (in meinem Fall ein Raspi3) das Programm gatttool um auf die Bluetooth LE Schnittstelle zugreifen zu können. Wer den Bluetooth Adapter installier hat, wird diesen Schritt schon durchlaufen haben. Für alle anderen heißt es zunächt die Consolte zu öffnen

                                        sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
                                        

                                        Als nächstes müsst ihr die MAC-Adresse eures TH herausbekommen. Ich habe hierzu eine Android-App namens nRF Connect benutzt. Diese wurde beim Bluetooth Adapter empfohlen und hat sehr gut funktoiniert https://play.google.com/store/apps/deta … ndroid.mcp

                                        Nun werden wir in einem kleinen JavaScript in ioBroker mit Hilfe des gatttools in regelmäßigen Abständen Messwerte vom TH anfordern. In den ersten 3 Zeilen des Scripts trag ihr bitte die MAC Adresse eures TH ein und wählt ein Abfrageintervall aus. Ich habe meines auf 5 Minuten gestellt, da Temperatur und Luftfeuchte in aller Regel sich sehr langsam verändernde größen sind. Je seltener man es durchführt umso schonender ist es für die Batterie in dem kleinen Gerät. die Sekunden bitte auf 0 stehen lassen sofern euer Intervall auch in Minuten angegeben wird.

                                        ! ````
                                        const pollrate_s = 0; //Abfrageintervall in Sekunden (bei nutzung der Minuten auf 0 Stellen)
                                        const pollrate_m = 5; //Abfrageintervall in Minuten (Empfehlung alle 5 Minuten / Temperaturänderung ist langsam / Schont die Batterie)
                                        const bluetooth_mac = '4C:65:A8:D0:13:83';
                                        ! const s_temp = "javascript.0.Bluetooth.XiaomiHygroTemp.Temperatur";
                                        const s_hygro = "javascript.0.Bluetooth.XiaomiHygroTemp.Luftfeuchte";
                                        ! createState(s_temp, 0,{unit: "°C", name: "Temperatur"});
                                        createState(s_hygro, 0,{unit: "%", name: "Luftfeuchte"});
                                        ! var cronstring;
                                        if (pollrate_s > 0) {
                                        cronstring = "*/" + pollrate_s + " * * * * ";
                                        }
                                        else {
                                        cronstring = "
                                        /" + pollrate_m + " * * * *";
                                        }
                                        ! schedule(cronstring, function () {
                                        poll_XiaomiHygroTemp(bluetooth_mac);
                                        });
                                        ! function poll_XiaomiHygroTemp(mac){
                                        var i = 1;
                                        var bluetooth_message = '';
                                        var messwerte;
                                        var temperatur;
                                        var feuchte;

                                        var spawn = require('child_process').spawn,
                                        gattool    = spawn('gatttool',['-b', mac , '--char-write-req', '-a', '0x10', '-n', '0100' ,'--listen']);
                                        
                                        gattool.stdout.on('data', function (data) {
                                          //console.log('stdout: ' + data.toString());
                                          bluetooth_message += data.toString();
                                          if(i==5) { //5 stdout nachrichten abfangen. Ergibt overhead + ca 1,5-2 mal einen Messwert.
                                              gattool.kill('SIGQUIT'); //gatttool in kommandozeile unsanft beenden
                                              //console.log('message:' + bluetooth_message);
                                              messwerte = bluetooth_message.substr(82,38); 
                                              stellen = bluetooth_message.substr(82,38).split(" "); //Messwerte extrahieren (stehen immer an der gleichen stelle der Ausgabe) und an leerzeichen auftrennen. 
                                              //Temperatur ist dann im Array an 2 (Zehner) 3 (Einer) 4 (Komma) und 5(Nachkommestelle) Stelle
                                              //Feuchte an Stelle 9 (Zehner) 10 (Einer) 11 (Komma) und 12 (Nachkommestelle) 
                                              //Ziffern ins ASCII sind 30+Ziffer. Also je 30 abziehen und mit der Zehnerpotenz multiplizieren
                                              temperatur = (stellen[2]-30)*10+(stellen[3]-30)+(stellen[5]-30)/10;
                                              feuchte = (stellen[9]-30)*10+(stellen[10]-30)+(stellen[12]-30)/10;
                                              //console.log('Temp:' + temperatur);
                                              //console.log('Feuchte:' + feuchte);
                                              setState(s_temp, temperatur, true);
                                              setState(s_hygro, feuchte, true);
                                          }
                                          i++;
                                        });
                                        
                                        gattool.stderr.on('data', function (data) {
                                          //console.log('stderr: ' + data.toString());
                                          log("Xiaomi hat nicht geantwortet. Warte auf nächsten Poll")
                                        });
                                        

                                        }

                                        
                                        Das Script erzeugt nach dem ersten Durchlauf zwei States in javascript.0.Bluetooth.XiaomiHygroTemp für Temperatur und Luftfeuchte.
                                        
                                        Diese kann man im vis z.B. in eine HTML-Tabelle packen:
                                        
                                        >! ````
                                        [{"tpl":"tplHtml","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":true,"g_css_border":true,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html":"Klima\n\n    \n        \n        \n    \n    \n        \n        \n    \n
                                        >! | Temperatur: | {javascript.0.Bluetooth.XiaomiHygroTemp.Temperatur} °C |
                                        | Luftfeuchte: | {javascript.0.Bluetooth.XiaomiHygroTemp.Luftfeuchte}% |
                                        >! "},"style":{"left":"860px","top":"180px","color":"#EEEEEE","border-width":"2px","border-style":"solid","width":"227px","height":"85px","font-size":"larger","z-index":"0","line-height":"25px","border-radius":"10px","border-color":"#EEEEEE","padding-left":"6px","padding-top":"3px"},"widgetSet":"basic"}]
                                        
                                        M Offline
                                        M Offline
                                        Martin 5
                                        wrote on last edited by
                                        #22

                                        @soulforged Hallo, ich habe das Script etwas angepasst. Bei mir läuft es nun mit 6 Thermometern (die kleinen quadratischen Kästchen).

                                        const pollrate_m = 5; //Abfrageintervall in Minuten (Empfehlung alle 5 Minuten / Temperaturänderung ist langsam / Schont die Batterie)
                                        const bluetooth_macs = ['A4:C1:38:15:0D:18','A4:C1:38:19:34:B7','A4:C1:38:2B:A7:0C','A4:C1:38:5E:0B:9B','A4:C1:38:6A:F8:3C','A4:C1:38:FA:CC:07'];
                                        const bluetooth_str  = ['Bad','Schlafzimmer','Küche','Arbeitszimmer','Wohnzimmer','Gästezimmer'];
                                        const dpID = "javascript.0.Bluetooth.XiaomiHygroTemp";
                                        const s_temp  = "Temperatur";
                                        const s_hygro = "Luftfeuchte";
                                        const s_spann = "Spannung";
                                        for(let i = 0; i < bluetooth_str.length; i++){
                                            createState(dpID + "." + bluetooth_str[i] + "." + s_temp, 0,{unit: "°C", name: "Temperatur"});
                                            createState(dpID + "." + bluetooth_str[i] + "." + s_hygro, 0,{unit: "%", name: "Luftfeuchte"});
                                            createState(dpID + "." + bluetooth_str[i] + "." + s_spann, 0,{unit: "V", name: "Spannung"});
                                        }
                                        var cronstring = "*/" + pollrate_m + " * * * *";
                                        
                                        schedule(cronstring, async function () {
                                            for(let i = 0; i < bluetooth_macs.length; i++)
                                                poll_XiaomiHygroTemp(bluetooth_macs[i], i);
                                                await sleep(5000);
                                        });
                                        
                                        function poll_XiaomiHygroTemp(mac, i){
                                            var bluetooth_message = '';
                                            var temperatur;
                                            var feuchte;
                                            var spannung;
                                            var spawn = require('child_process').spawn,
                                            gattool = spawn('gatttool',['-b', mac , '--char-write-req', '-a', '0x0038', '-n', '0100' ,'--listen']);
                                            gattool.stdout.on('data', function (data) {
                                                bluetooth_message += data.toString();
                                                if(bluetooth_message.length > 96) {
                                                    gattool.kill(/*'SIGQUIT'*/'SIGKILL'); //gatttool in kommandozeile unsanft beenden
                                                    const pos1 = bluetooth_message.indexOf("value: ") + 7;
                                                    const tempStr = bluetooth_message.substring(pos1, pos1 + 15).split(" ");
                                                    temperatur = Math.round(parseInt(tempStr[1]+tempStr[0], 16)/10)/10;
                                                    spannung =   parseInt(tempStr[4]+tempStr[3], 16)/1000;
                                                    feuchte =    parseInt(tempStr[2], 16);
                                                    console.log(i + ": " + temperatur + ", " + feuchte + ", " + spannung + ", " + bluetooth_str[i]);
                                                    setState(dpID + "." + bluetooth_str[i] + "." + s_temp, temperatur, true);
                                                    setState(dpID + "." + bluetooth_str[i] + "." + s_hygro, feuchte, true);
                                                    setState(dpID + "." + bluetooth_str[i] + "." + s_spann, spannung, true);
                                        
                                                /*  Antwort: Characteristic value was written successfully
                                                             Notification handle = 0x0036 value: f8 07 4a d6 0b
                                                    Bescheibung:
                                                    f8 07 is the temperature as signed INT16 in little endian format. Divide it by 100 to get the temperature in degree Celsius. 
                                                    4a is the humidity. Only integer output.
                                                    d6 0b are the battery voltage in Millivolts in little endian format.
                                                    Terminal:
                                                    sudo hcitool lescan - Nach BLE Geräten suchen.
                                                */
                                                }
                                            });
                                         
                                            gattool.stderr.on('data', function (data) {
                                                //console.log('stderr: ' + data.toString());
                                                log(i + ": " + bluetooth_str[i] + " hat nicht geantwortet. Warte auf nächsten Poll")
                                            })
                                        };
                                        

                                        Grüße Martin

                                        1 Reply Last reply
                                        0

                                        Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                        Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                        With your input, this post could be even better 💗

                                        Register Login
                                        Reply
                                        • Reply as topic
                                        Log in to reply
                                        • Oldest to Newest
                                        • Newest to Oldest
                                        • Most Votes


                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate
                                        FAQ Cloud / IOT
                                        HowTo: Node.js-Update
                                        HowTo: Backup/Restore
                                        Downloads
                                        BLOG

                                        369

                                        Online

                                        32.8k

                                        Users

                                        82.7k

                                        Topics

                                        1.3m

                                        Posts
                                        Community
                                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                        ioBroker Community 2014-2025
                                        logo
                                        • Login

                                        • Don't have an account? Register

                                        • Login or register to search.
                                        • First post
                                          Last post
                                        0
                                        • Home
                                        • Recent
                                        • Tags
                                        • Unread 0
                                        • Categories
                                        • Unreplied
                                        • Popular
                                        • GitHub
                                        • Docu
                                        • Hilfe