Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Nuki Smart Lock 3.0 pro in ioBroker einbinden

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    23
    1
    1.3k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

Nuki Smart Lock 3.0 pro in ioBroker einbinden

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
237 Beiträge 57 Kommentatoren 63.2k Aufrufe 49 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • RK62R RK62

    Ich habe für das Nuki SmartLock 3.0 Pro ein Javascript erstellt um es via WebAPI auslesen & steuern zu können.
    . Es nutzt und benötigt keine Bridge.
    . Es ist daher allerdings abhängig von der Cloud und benötigt Zugriff auf die freigeschaltete NUKI WebApi.
    . Es ist keine Realtimeabfrage, die ausgelesenen Daten werden zyklisch alle 10 Minuten aktualisiert. Steuern (Öffnen / Schließen) wird sofort ausgeführt.
    Wenn es jemanden interessiert, kann ich das Script hier oder einem separaten Threat zur Verfügung stellen.

    M Offline
    M Offline
    martin
    schrieb am zuletzt editiert von
    #92

    @rk62 Hallo! Ich stehe gerade vor der Anschaffung und überlege was ich alles kaufen soll / muss. Heißt also, dass mit deinem Skript nur das 3.0 Pro ohne Bridge benötigt wird und es in iobroker eingebunden werden kann? Wie wird die Nuki WebApi eingerichtet?

    RK62R 1 Antwort Letzte Antwort
    0
    • M martin

      @rk62 Hallo! Ich stehe gerade vor der Anschaffung und überlege was ich alles kaufen soll / muss. Heißt also, dass mit deinem Skript nur das 3.0 Pro ohne Bridge benötigt wird und es in iobroker eingebunden werden kann? Wie wird die Nuki WebApi eingerichtet?

      RK62R Offline
      RK62R Offline
      RK62
      schrieb am zuletzt editiert von
      #93

      @martin Genau. Entweder 3.0 pro und via WebAPI / Script steuern oder mit Bridge und ioBroker-Adapter. Bei dem Script muss man das Lock via App mit dem NUKI-Web verbinden und kann dann dort die API freischalten und ein API-Login-Key generieren. Ist schon etwas fummelig und Du musst JavaScript können. Sonst lieber die Sorglos-Lösung Bridge und Adapter verwenden.

      1 Antwort Letzte Antwort
      1
      • M Offline
        M Offline
        mopedradler
        schrieb am zuletzt editiert von
        #94

        @martin
        Ich habe mein 3.0 pro mit diesem Projekt eingebunden.
        link text
        Man kann den ESP32 als Hub benutzen und über MQTT einbinden.
        Funktioniert einwandfrei.

        1 Antwort Letzte Antwort
        4
        • RK62R RK62

          Ich habe für das Nuki SmartLock 3.0 Pro ein Javascript erstellt um es via WebAPI auslesen & steuern zu können.
          . Es nutzt und benötigt keine Bridge.
          . Es ist daher allerdings abhängig von der Cloud und benötigt Zugriff auf die freigeschaltete NUKI WebApi.
          . Es ist keine Realtimeabfrage, die ausgelesenen Daten werden zyklisch alle 10 Minuten aktualisiert. Steuern (Öffnen / Schließen) wird sofort ausgeführt.
          Wenn es jemanden interessiert, kann ich das Script hier oder einem separaten Threat zur Verfügung stellen.

          frankthegreatF Offline
          frankthegreatF Offline
          frankthegreat
          schrieb am zuletzt editiert von
          #95

          @rk62 sagte in Nuki Smart Lock 3.0 pro in ioBroker einbinden:

          Ich habe für das Nuki SmartLock 3.0 Pro ein Javascript erstellt um es via WebAPI auslesen & steuern zu können.
          . Es nutzt und benötigt keine Bridge.
          . Es ist daher allerdings abhängig von der Cloud und benötigt Zugriff auf die freigeschaltete NUKI WebApi.
          . Es ist keine Realtimeabfrage, die ausgelesenen Daten werden zyklisch alle 10 Minuten aktualisiert. Steuern (Öffnen / Schließen) wird sofort ausgeführt.
          Wenn es jemanden interessiert, kann ich das Script hier oder einem separaten Threat zur Verfügung stellen.

          Hi, ich möchte mir auch das Nuki 3.0 pro zulegen.
          Magst du dein Script hier mal reinstellen? Würde es gerne testen.

          Danke :sunglasses:

          1 Antwort Letzte Antwort
          1
          • RK62R RK62

            Ich habe für das Nuki SmartLock 3.0 Pro ein Javascript erstellt um es via WebAPI auslesen & steuern zu können.
            . Es nutzt und benötigt keine Bridge.
            . Es ist daher allerdings abhängig von der Cloud und benötigt Zugriff auf die freigeschaltete NUKI WebApi.
            . Es ist keine Realtimeabfrage, die ausgelesenen Daten werden zyklisch alle 10 Minuten aktualisiert. Steuern (Öffnen / Schließen) wird sofort ausgeführt.
            Wenn es jemanden interessiert, kann ich das Script hier oder einem separaten Threat zur Verfügung stellen.

            H Offline
            H Offline
            homecineplexx
            schrieb am zuletzt editiert von
            #96

            @rk62 said in Nuki Smart Lock 3.0 pro in ioBroker einbinden:

            Ich habe für das Nuki SmartLock 3.0 Pro ein Javascript erstellt um es via WebAPI auslesen & steuern zu können.
            . Es nutzt und benötigt keine Bridge.
            . Es ist daher allerdings abhängig von der Cloud und benötigt Zugriff auf die freigeschaltete NUKI WebApi.
            . Es ist keine Realtimeabfrage, die ausgelesenen Daten werden zyklisch alle 10 Minuten aktualisiert. Steuern (Öffnen / Schließen) wird sofort ausgeführt.
            Wenn es jemanden interessiert, kann ich das Script hier oder einem separaten Threat zur Verfügung stellen.

            Wäre für alle sicher sehr hilfreich...DANKE

            1 Antwort Letzte Antwort
            0
            • RK62R RK62

              Ich habe für das Nuki SmartLock 3.0 Pro ein Javascript erstellt um es via WebAPI auslesen & steuern zu können.
              . Es nutzt und benötigt keine Bridge.
              . Es ist daher allerdings abhängig von der Cloud und benötigt Zugriff auf die freigeschaltete NUKI WebApi.
              . Es ist keine Realtimeabfrage, die ausgelesenen Daten werden zyklisch alle 10 Minuten aktualisiert. Steuern (Öffnen / Schließen) wird sofort ausgeführt.
              Wenn es jemanden interessiert, kann ich das Script hier oder einem separaten Threat zur Verfügung stellen.

              ? Offline
              ? Offline
              Ein ehemaliger Benutzer
              schrieb am zuletzt editiert von
              #97

              @rk62 sagte in Nuki Smart Lock 3.0 pro in ioBroker einbinden:

              Ich habe für das Nuki SmartLock 3.0 Pro ein Javascript erstellt um es via WebAPI auslesen & steuern zu können.
              . Es nutzt und benötigt keine Bridge.
              . Es ist daher allerdings abhängig von der Cloud und benötigt Zugriff auf die freigeschaltete NUKI WebApi.
              . Es ist keine Realtimeabfrage, die ausgelesenen Daten werden zyklisch alle 10 Minuten aktualisiert. Steuern (Öffnen / Schließen) wird sofort ausgeführt.
              Wenn es jemanden interessiert, kann ich das Script hier oder einem separaten Threat zur Verfügung stellen.

              Ich wäre ebenfalls sehr am Script interessiert, da ich ein 3.0 Pro besitze und diesen gerne im ioBroker integrieren möchte. Habe ein 2.0 mit Bridge ebenfalls im Betrieb, da läuft es tadellos. Habe zwar auch noch eine vorige Bridge zur Verfügung und könnte allenfalls mit dieser und dem 3.0 Pro arbeiten aber es sollte doch irgendwie möglich sein, auch den 3.0 Pro zu integrieren.

              ste_gleiS 1 Antwort Letzte Antwort
              1
              • ? Ein ehemaliger Benutzer

                @rk62 sagte in Nuki Smart Lock 3.0 pro in ioBroker einbinden:

                Ich habe für das Nuki SmartLock 3.0 Pro ein Javascript erstellt um es via WebAPI auslesen & steuern zu können.
                . Es nutzt und benötigt keine Bridge.
                . Es ist daher allerdings abhängig von der Cloud und benötigt Zugriff auf die freigeschaltete NUKI WebApi.
                . Es ist keine Realtimeabfrage, die ausgelesenen Daten werden zyklisch alle 10 Minuten aktualisiert. Steuern (Öffnen / Schließen) wird sofort ausgeführt.
                Wenn es jemanden interessiert, kann ich das Script hier oder einem separaten Threat zur Verfügung stellen.

                Ich wäre ebenfalls sehr am Script interessiert, da ich ein 3.0 Pro besitze und diesen gerne im ioBroker integrieren möchte. Habe ein 2.0 mit Bridge ebenfalls im Betrieb, da läuft es tadellos. Habe zwar auch noch eine vorige Bridge zur Verfügung und könnte allenfalls mit dieser und dem 3.0 Pro arbeiten aber es sollte doch irgendwie möglich sein, auch den 3.0 Pro zu integrieren.

                ste_gleiS Offline
                ste_gleiS Offline
                ste_glei
                schrieb am zuletzt editiert von
                #98

                Hallo
                Mit der neuen Beta-App von Nuki ist jetzt möglich das Nuki Pro via MQTT mit iobroker zu verbinden.

                6c7dbe4a-76d0-4d44-af14-998d03610b6f-image.png

                Hier die gelieferten Datenpunke

                c07d2a3e-4e7c-46cc-af66-c9951664115e-image.png

                H M 2 Antworten Letzte Antwort
                1
                • ste_gleiS ste_glei

                  Hallo
                  Mit der neuen Beta-App von Nuki ist jetzt möglich das Nuki Pro via MQTT mit iobroker zu verbinden.

                  6c7dbe4a-76d0-4d44-af14-998d03610b6f-image.png

                  Hier die gelieferten Datenpunke

                  c07d2a3e-4e7c-46cc-af66-c9951664115e-image.png

                  H Offline
                  H Offline
                  homecineplexx
                  schrieb am zuletzt editiert von
                  #99

                  @ste_glei said in Nuki Smart Lock 3.0 pro in ioBroker einbinden:

                  Hallo
                  Mit der neuen Beta-App von Nuki ist jetzt möglich das Nuki Pro via MQTT mit iobroker zu verbinden.

                  6c7dbe4a-76d0-4d44-af14-998d03610b6f-image.png

                  Hier die gelieferten Datenpunke

                  c07d2a3e-4e7c-46cc-af66-c9951664115e-image.png

                  wie kommt man zu dieser BETA App???

                  ste_gleiS 1 Antwort Letzte Antwort
                  0
                  • H homecineplexx

                    @ste_glei said in Nuki Smart Lock 3.0 pro in ioBroker einbinden:

                    Hallo
                    Mit der neuen Beta-App von Nuki ist jetzt möglich das Nuki Pro via MQTT mit iobroker zu verbinden.

                    6c7dbe4a-76d0-4d44-af14-998d03610b6f-image.png

                    Hier die gelieferten Datenpunke

                    c07d2a3e-4e7c-46cc-af66-c9951664115e-image.png

                    wie kommt man zu dieser BETA App???

                    ste_gleiS Offline
                    ste_gleiS Offline
                    ste_glei
                    schrieb am zuletzt editiert von
                    #100

                    @homecineplexx
                    im Play Store als Beta-Tester beitreten

                    H 1 Antwort Letzte Antwort
                    0
                    • ste_gleiS ste_glei

                      @homecineplexx
                      im Play Store als Beta-Tester beitreten

                      H Offline
                      H Offline
                      homecineplexx
                      schrieb am zuletzt editiert von
                      #101

                      @ste_glei super danke...habs schon funktioniert auch gleich
                      aber hast du eine ahnung was die ganze modi sind und wie man da nun zusperren kann?

                      1 Antwort Letzte Antwort
                      0
                      • RK62R Offline
                        RK62R Offline
                        RK62
                        schrieb am zuletzt editiert von
                        #102

                        Hier gibt es die Beta für iOS:
                        https://testflight.apple.com/join/yuoh6a6B

                        Und hier ist die Schnittstelle in einer pdf beschrieben:
                        https://developer.nuki.io/t/mqtt-api-specification-v1-4/19223

                        Werde ich am Wochenende mal testen und sonst mein Script aufräumen & posten

                        H 1 Antwort Letzte Antwort
                        1
                        • RK62R RK62

                          Hier gibt es die Beta für iOS:
                          https://testflight.apple.com/join/yuoh6a6B

                          Und hier ist die Schnittstelle in einer pdf beschrieben:
                          https://developer.nuki.io/t/mqtt-api-specification-v1-4/19223

                          Werde ich am Wochenende mal testen und sonst mein Script aufräumen & posten

                          H Offline
                          H Offline
                          homecineplexx
                          schrieb am zuletzt editiert von
                          #103

                          @rk62 könntest du uns dein script mal vorstellen?

                          RK62R 1 Antwort Letzte Antwort
                          0
                          • H homecineplexx

                            @rk62 könntest du uns dein script mal vorstellen?

                            RK62R Offline
                            RK62R Offline
                            RK62
                            schrieb am zuletzt editiert von
                            #104

                            @homecineplexx @Vazi @frankthegreat
                            Hier das gewünschte Script. Ich hoffe, es erklärt sich alles von selbst ;-)
                            Ich habe eben auch mal MQTT aktiviert und werde darauf umsteigen. States werden automatisch aktualisiert, die Steuerung ist direkter und nicht abhängig vom NUKI-Web.

                            /*  =====================================================================
                                Steuerung für NUKI Smart Lock
                                https://developer.nuki.io/page/nuki-web-api-1-4/3/#heading--curl-call-swagger
                            
                                19.12.2022 R.Krüger --- Erstellung
                                ===================================================================== */
                            
                            const cAB           = '<Hier APIKEY Bearer ..... eintragen>';   // API-Key in NUKI WEB-vergeben
                            
                            const axios         = require('axios');
                            var   t01;
                            
                            /*  =====================================================================
                                VERARBEITUNG
                                ===================================================================== */
                            
                            // Bei Start initialisieren
                            Main('INIT'); 
                            
                            // Auslöser alle 10 Minuten
                            schedule('*/10 * * * *', async function () { Main('UPDATE'); });
                            
                            // HAUPT-Programm
                            async function Main(pOption) {
                            //  -------------------------------------------------------------------------------            
                                // States für jedes Nuki-Objekt anlegen
                                let rd = await ReadNukiAPI('https://api.nuki.io/smartlock');
                                rd.forEach(async function (item) { 
                                //  -------------------------------------------------------------------------------     
                                    let jsh = '0_userdata.0.nuki1.' + item.smartlockId;
                            
                                    // INIT: Benötigte States anlegen
                                    if (pOption.includes('INIT')) {
                                        await createStateAsync(jsh + '.Command',                    { name: 'Steuerung SmartLock',      role: 'state', type: 'string',  color: '#dcf901' });
                                        await createStateAsync(jsh + '.Name',                       { name: 'SmartLock-Name',           role: 'state', type: 'string',  write: false});
                                        await createStateAsync(jsh + '.BatteryCharge',              { name: 'Batterieladung',           role: 'state', type: 'number',  write: false, unit: '%'});
                                        await createStateAsync(jsh + '.BatteryCharging',            { name: 'Batterie wird geladen',    role: 'state', type: 'boolean', write: false});
                                        await createStateAsync(jsh + '.BatteryCritical',            { name: 'Batteriestatus SmartLock', role: 'state', type: 'boolean', write: false});
                                        await createStateAsync(jsh + '.BatteryCriticalDoorSensor',  { name: 'Batteriestatus Türsensor', role: 'state', type: 'boolean', write: false});
                                        await createStateAsync(jsh + '.Firmware',                   { name: 'Firmware',                 role: 'state', type: 'string',  write: false});
                                        await createStateAsync(jsh + '.StateLock',                  { name: 'Status Türschloss',        role: 'state', type: 'number',  write: false, 
                                                                                                    states: {   0: "uncalibrated",
                                                                                                                1: "locked",
                                                                                                                2: "unlocking",
                                                                                                                3: "unlocked",
                                                                                                                4: "locking",
                                                                                                                5: "unlatched",
                                                                                                                6: "unlocked (lock'n'go)",
                                                                                                                7: "unlatching",
                                                                                                                253: "boot run",
                                                                                                                254: "motor blocked",
                                                                                                                255: "undefined"  } });
                                        await createStateAsync(jsh + '.StateDoor',                  { name: 'Status Tür',               role: 'state', type: 'number',  write: false, 
                                                                                                    states: {   0: "unavailable", 
                                                                                                                1: "deactivated", 
                                                                                                                2: "door closed", 
                                                                                                                3: "door opened", 
                                                                                                                4: "door state unknown",
                                                                                                                5: "calibrating"    } });
                                        await createStateAsync(jsh + '.StateSummary',               { name: 'Status Gesamt',            role: 'state', type: 'number',  write: false,                                                                                     
                                                                                                    states: {   0: "Unklar!", 
                                                                                                                1: "Tür offen", 
                                                                                                                2: "Tür unverschlossen", 
                                                                                                                3: "Tür abgeschlossen"  } });
                                        await createStateAsync(jsh + '.StateVIS',                   { name: 'State für VIS-Lock',       role: 'state', type: 'string', color: '#dcf901'});
                                        await createStateAsync(jsh + '.UpdateDate',                 { name: 'Last Update Web-API',      role: 'state', type: 'string', write: false});
                                    };
                            
                                    // States aktualisieren 
                                    setState(jsh + '.Name',                       item.config.name, true);
                                    setState(jsh + '.BatteryCharge',              item.state.batteryCharge, true);
                                    setState(jsh + '.BatteryCharging',            item.state.batteryCharging, true);
                                    setState(jsh + '.BatteryCritical',            item.state.batteryCritical, true);
                                    setState(jsh + '.BatteryCriticalDoorSensor',  item.state.doorsensorBatteryCritical, true);
                                    setState(jsh + '.Firmware',                   String(item.firmwareVersion), true);
                                    setState(jsh + '.StateLock',                  item.state.state, true);
                                    setState(jsh + '.StateDoor',                  item.state.doorState, true);
                                    setState(jsh + '.UpdateDate',                 item.updateDate, true);
                                   
                                    // State für Grafik in VIS  
                                    if      ( item.state.doorState == 3 )                           vStateSummary = 3   // open
                                    else if ( item.state.doorState == 2 && item.state.state == 3)   vStateSummary = 2   // unverschlossen
                                    else if ( item.state.doorState == 2 && item.state.state == 1)   vStateSummary = 1   // verschlossen
                                    else                                                        var vStateSummary = 0;  // unklar
                                    setState(jsh + '.StateSummary', vStateSummary, true);
                                    
                                    let vStateVIS = (item.state.state == 1) ? 'ZUSPERREN' : 'AUFSPERREN';
                                    setState(jsh + '.StateVIS', vStateVIS, true);
                            
                                    // Name des Folders auf Schlossname anpassen 
                                    let  vObj = getObject(jsh);
                                    vObj.common.name = item.config.name;
                                    setObject(jsh, vObj, function (err) {
                                        if (err) log('Cannot write Object: ' + err, 'error');
                                    })       
                                //  -------------------------------------------------------------------------------         
                                })   
                            //  -------------------------------------------------------------------------------         
                            }
                            
                            
                            /*  =====================================================================
                                FUNCTIONEN
                                ===================================================================== */
                            
                            // LESEN NUKI-API
                            async function ReadNukiAPI(pURL) {
                            //  -------------------------------------------------------------------------------         
                                let response = await axios.get(pURL, 
                                    { headers: { 'Accept': 'application/json', 'Authorization': cAB }
                                    });
                                return response.data;
                            //  -------------------------------------------------------------------------------         
                            }
                            
                            
                            // SCHREIBEN NUKI-API
                            async function PostNukiAPI(pAction, pOption, pLockID) {
                            //  -------------------------------------------------------------------------------         
                                let  response = await axios.post(`https://api.nuki.io/smartlock/${pLockID}/action`,
                                        { 'action': pAction, 'option': pOption },
                                        { headers: {'Accept': 'application/json', 'Authorization': cAB, 'Content-Type': 'application/json' }
                                        });
                                t01 = setTimeout(function () { Main('UPDATE'); }, 20000);       // 20 Sek Nach Schliessvorgang neu auslesen
                                return response.status;
                            //  -------------------------------------------------------------------------------         
                            }  
                            
                            
                            /*  =====================================================================
                                TRIGGER
                                ===================================================================== */
                            
                            // REAKTION auf ein Command an das Device via State .Command
                            on({id: /^0_userdata\.0\.nuki1\..*\.Command$/, change: "any"}, function (obj) {
                            // ------------------------------------------------------------------------------------------ 
                                let vCmdU   = obj.state.val.toUpperCase();      // Befehl in Grosschrift umsetzen
                                let vLockID = obj.id.split('.')[3];             // LockID aus auslösendem State ermitteln
                                
                                if      (vCmdU == 'AUFSPERREN') PostNukiAPI(1, 0, vLockID)
                                else if (vCmdU == 'ZUSPERREN')  PostNukiAPI(2, 0, vLockID)
                                else if (vCmdU == 'ÖFFNEN')     PostNukiAPI(3, 0, vLockID)
                                else if (vCmdU == 'LOCK-N-GO')  PostNukiAPI(4, 0, vLockID);
                            // ------------------------------------------------------------------------------------------ 
                            })
                            
                            ? 1 Antwort Letzte Antwort
                            1
                            • RK62R RK62

                              @homecineplexx @Vazi @frankthegreat
                              Hier das gewünschte Script. Ich hoffe, es erklärt sich alles von selbst ;-)
                              Ich habe eben auch mal MQTT aktiviert und werde darauf umsteigen. States werden automatisch aktualisiert, die Steuerung ist direkter und nicht abhängig vom NUKI-Web.

                              /*  =====================================================================
                                  Steuerung für NUKI Smart Lock
                                  https://developer.nuki.io/page/nuki-web-api-1-4/3/#heading--curl-call-swagger
                              
                                  19.12.2022 R.Krüger --- Erstellung
                                  ===================================================================== */
                              
                              const cAB           = '<Hier APIKEY Bearer ..... eintragen>';   // API-Key in NUKI WEB-vergeben
                              
                              const axios         = require('axios');
                              var   t01;
                              
                              /*  =====================================================================
                                  VERARBEITUNG
                                  ===================================================================== */
                              
                              // Bei Start initialisieren
                              Main('INIT'); 
                              
                              // Auslöser alle 10 Minuten
                              schedule('*/10 * * * *', async function () { Main('UPDATE'); });
                              
                              // HAUPT-Programm
                              async function Main(pOption) {
                              //  -------------------------------------------------------------------------------            
                                  // States für jedes Nuki-Objekt anlegen
                                  let rd = await ReadNukiAPI('https://api.nuki.io/smartlock');
                                  rd.forEach(async function (item) { 
                                  //  -------------------------------------------------------------------------------     
                                      let jsh = '0_userdata.0.nuki1.' + item.smartlockId;
                              
                                      // INIT: Benötigte States anlegen
                                      if (pOption.includes('INIT')) {
                                          await createStateAsync(jsh + '.Command',                    { name: 'Steuerung SmartLock',      role: 'state', type: 'string',  color: '#dcf901' });
                                          await createStateAsync(jsh + '.Name',                       { name: 'SmartLock-Name',           role: 'state', type: 'string',  write: false});
                                          await createStateAsync(jsh + '.BatteryCharge',              { name: 'Batterieladung',           role: 'state', type: 'number',  write: false, unit: '%'});
                                          await createStateAsync(jsh + '.BatteryCharging',            { name: 'Batterie wird geladen',    role: 'state', type: 'boolean', write: false});
                                          await createStateAsync(jsh + '.BatteryCritical',            { name: 'Batteriestatus SmartLock', role: 'state', type: 'boolean', write: false});
                                          await createStateAsync(jsh + '.BatteryCriticalDoorSensor',  { name: 'Batteriestatus Türsensor', role: 'state', type: 'boolean', write: false});
                                          await createStateAsync(jsh + '.Firmware',                   { name: 'Firmware',                 role: 'state', type: 'string',  write: false});
                                          await createStateAsync(jsh + '.StateLock',                  { name: 'Status Türschloss',        role: 'state', type: 'number',  write: false, 
                                                                                                      states: {   0: "uncalibrated",
                                                                                                                  1: "locked",
                                                                                                                  2: "unlocking",
                                                                                                                  3: "unlocked",
                                                                                                                  4: "locking",
                                                                                                                  5: "unlatched",
                                                                                                                  6: "unlocked (lock'n'go)",
                                                                                                                  7: "unlatching",
                                                                                                                  253: "boot run",
                                                                                                                  254: "motor blocked",
                                                                                                                  255: "undefined"  } });
                                          await createStateAsync(jsh + '.StateDoor',                  { name: 'Status Tür',               role: 'state', type: 'number',  write: false, 
                                                                                                      states: {   0: "unavailable", 
                                                                                                                  1: "deactivated", 
                                                                                                                  2: "door closed", 
                                                                                                                  3: "door opened", 
                                                                                                                  4: "door state unknown",
                                                                                                                  5: "calibrating"    } });
                                          await createStateAsync(jsh + '.StateSummary',               { name: 'Status Gesamt',            role: 'state', type: 'number',  write: false,                                                                                     
                                                                                                      states: {   0: "Unklar!", 
                                                                                                                  1: "Tür offen", 
                                                                                                                  2: "Tür unverschlossen", 
                                                                                                                  3: "Tür abgeschlossen"  } });
                                          await createStateAsync(jsh + '.StateVIS',                   { name: 'State für VIS-Lock',       role: 'state', type: 'string', color: '#dcf901'});
                                          await createStateAsync(jsh + '.UpdateDate',                 { name: 'Last Update Web-API',      role: 'state', type: 'string', write: false});
                                      };
                              
                                      // States aktualisieren 
                                      setState(jsh + '.Name',                       item.config.name, true);
                                      setState(jsh + '.BatteryCharge',              item.state.batteryCharge, true);
                                      setState(jsh + '.BatteryCharging',            item.state.batteryCharging, true);
                                      setState(jsh + '.BatteryCritical',            item.state.batteryCritical, true);
                                      setState(jsh + '.BatteryCriticalDoorSensor',  item.state.doorsensorBatteryCritical, true);
                                      setState(jsh + '.Firmware',                   String(item.firmwareVersion), true);
                                      setState(jsh + '.StateLock',                  item.state.state, true);
                                      setState(jsh + '.StateDoor',                  item.state.doorState, true);
                                      setState(jsh + '.UpdateDate',                 item.updateDate, true);
                                     
                                      // State für Grafik in VIS  
                                      if      ( item.state.doorState == 3 )                           vStateSummary = 3   // open
                                      else if ( item.state.doorState == 2 && item.state.state == 3)   vStateSummary = 2   // unverschlossen
                                      else if ( item.state.doorState == 2 && item.state.state == 1)   vStateSummary = 1   // verschlossen
                                      else                                                        var vStateSummary = 0;  // unklar
                                      setState(jsh + '.StateSummary', vStateSummary, true);
                                      
                                      let vStateVIS = (item.state.state == 1) ? 'ZUSPERREN' : 'AUFSPERREN';
                                      setState(jsh + '.StateVIS', vStateVIS, true);
                              
                                      // Name des Folders auf Schlossname anpassen 
                                      let  vObj = getObject(jsh);
                                      vObj.common.name = item.config.name;
                                      setObject(jsh, vObj, function (err) {
                                          if (err) log('Cannot write Object: ' + err, 'error');
                                      })       
                                  //  -------------------------------------------------------------------------------         
                                  })   
                              //  -------------------------------------------------------------------------------         
                              }
                              
                              
                              /*  =====================================================================
                                  FUNCTIONEN
                                  ===================================================================== */
                              
                              // LESEN NUKI-API
                              async function ReadNukiAPI(pURL) {
                              //  -------------------------------------------------------------------------------         
                                  let response = await axios.get(pURL, 
                                      { headers: { 'Accept': 'application/json', 'Authorization': cAB }
                                      });
                                  return response.data;
                              //  -------------------------------------------------------------------------------         
                              }
                              
                              
                              // SCHREIBEN NUKI-API
                              async function PostNukiAPI(pAction, pOption, pLockID) {
                              //  -------------------------------------------------------------------------------         
                                  let  response = await axios.post(`https://api.nuki.io/smartlock/${pLockID}/action`,
                                          { 'action': pAction, 'option': pOption },
                                          { headers: {'Accept': 'application/json', 'Authorization': cAB, 'Content-Type': 'application/json' }
                                          });
                                  t01 = setTimeout(function () { Main('UPDATE'); }, 20000);       // 20 Sek Nach Schliessvorgang neu auslesen
                                  return response.status;
                              //  -------------------------------------------------------------------------------         
                              }  
                              
                              
                              /*  =====================================================================
                                  TRIGGER
                                  ===================================================================== */
                              
                              // REAKTION auf ein Command an das Device via State .Command
                              on({id: /^0_userdata\.0\.nuki1\..*\.Command$/, change: "any"}, function (obj) {
                              // ------------------------------------------------------------------------------------------ 
                                  let vCmdU   = obj.state.val.toUpperCase();      // Befehl in Grosschrift umsetzen
                                  let vLockID = obj.id.split('.')[3];             // LockID aus auslösendem State ermitteln
                                  
                                  if      (vCmdU == 'AUFSPERREN') PostNukiAPI(1, 0, vLockID)
                                  else if (vCmdU == 'ZUSPERREN')  PostNukiAPI(2, 0, vLockID)
                                  else if (vCmdU == 'ÖFFNEN')     PostNukiAPI(3, 0, vLockID)
                                  else if (vCmdU == 'LOCK-N-GO')  PostNukiAPI(4, 0, vLockID);
                              // ------------------------------------------------------------------------------------------ 
                              })
                              
                              ? Offline
                              ? Offline
                              Ein ehemaliger Benutzer
                              schrieb am zuletzt editiert von
                              #105

                              @rk62 Vielen Dank für den Script.

                              Hilf mir bitte schnell auf die Sprünge:

                              Im NUKI-Web habe ich mehrere Auswahlen zur Verfügung um ein API zu erstellen. Welches musss ich nun nehmen und - wie genau sieht dann die Zeile
                              const cAB aus?

                              RK62R 1 Antwort Letzte Antwort
                              0
                              • ? Ein ehemaliger Benutzer

                                @rk62 Vielen Dank für den Script.

                                Hilf mir bitte schnell auf die Sprünge:

                                Im NUKI-Web habe ich mehrere Auswahlen zur Verfügung um ein API zu erstellen. Welches musss ich nun nehmen und - wie genau sieht dann die Zeile
                                const cAB aus?

                                RK62R Offline
                                RK62R Offline
                                RK62
                                schrieb am zuletzt editiert von
                                #106

                                @vazi Das hier:
                                843A6954-87FB-43B3-A130-3855A792FF3D.jpeg
                                Und dann den generierten Schlüssel zwischen die beiden einfachen Anführungszeichen setzen.

                                ? 1 Antwort Letzte Antwort
                                0
                                • RK62R RK62

                                  @vazi Das hier:
                                  843A6954-87FB-43B3-A130-3855A792FF3D.jpeg
                                  Und dann den generierten Schlüssel zwischen die beiden einfachen Anführungszeichen setzen.

                                  ? Offline
                                  ? Offline
                                  Ein ehemaliger Benutzer
                                  schrieb am zuletzt editiert von
                                  #107

                                  @rk62 Danke.

                                  Leider funktioniert es "noch" nicht.... Habe im Protokoll diese Fehlermeldungen:

                                  Fehlermeldung.png

                                  RK62R 1 Antwort Letzte Antwort
                                  0
                                  • ? Ein ehemaliger Benutzer

                                    @rk62 Danke.

                                    Leider funktioniert es "noch" nicht.... Habe im Protokoll diese Fehlermeldungen:

                                    Fehlermeldung.png

                                    RK62R Offline
                                    RK62R Offline
                                    RK62
                                    schrieb am zuletzt editiert von
                                    #108

                                    @vazi Google sagt: Der HTTP-Code „401 Unauthorized Access“ ist ein clientseitiger Fehler. Es zeigt an, dass der Server der Website eine „WWW-Authenticate“-Header-Antwort mit einer Aufforderung an den Besucher zurücksendet. Da der Besucher keine gültigen Anmeldedaten angegeben hat, wurde der Zugriff verweigert und die Fehlerseite geladen.

                                    Versuche mal die API auf einem PC mit curl anzusprechen:
                                    Alles in einer Zeile angeben und "xxxx..." durch Deinen API-Schlüssel ersetzen.

                                    curl -X GET --header "Accept: application/json" --header "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" https://api.nuki.io/smartlock
                                    
                                    ? 1 Antwort Letzte Antwort
                                    0
                                    • RK62R RK62

                                      @vazi Google sagt: Der HTTP-Code „401 Unauthorized Access“ ist ein clientseitiger Fehler. Es zeigt an, dass der Server der Website eine „WWW-Authenticate“-Header-Antwort mit einer Aufforderung an den Besucher zurücksendet. Da der Besucher keine gültigen Anmeldedaten angegeben hat, wurde der Zugriff verweigert und die Fehlerseite geladen.

                                      Versuche mal die API auf einem PC mit curl anzusprechen:
                                      Alles in einer Zeile angeben und "xxxx..." durch Deinen API-Schlüssel ersetzen.

                                      curl -X GET --header "Accept: application/json" --header "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" https://api.nuki.io/smartlock
                                      
                                      ? Offline
                                      ? Offline
                                      Ein ehemaliger Benutzer
                                      schrieb am zuletzt editiert von Ein ehemaliger Benutzer
                                      #109

                                      @rk62 sagte in Nuki Smart Lock 3.0 pro in ioBroker einbinden:

                                      curl -X GET --header "Accept: application/json" --header "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" https://api.nuki.io/smartlock

                                      Diese Befehlszeile muss ja in der "Eingabeaufforderung" eingetragen werden.... Sorry.. nicht im Browser...

                                      Da bekomme ich schon etliche Angaben zurück gemeldet...

                                      RK62R 1 Antwort Letzte Antwort
                                      0
                                      • ? Ein ehemaliger Benutzer

                                        @rk62 sagte in Nuki Smart Lock 3.0 pro in ioBroker einbinden:

                                        curl -X GET --header "Accept: application/json" --header "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" https://api.nuki.io/smartlock

                                        Diese Befehlszeile muss ja in der "Eingabeaufforderung" eingetragen werden.... Sorry.. nicht im Browser...

                                        Da bekomme ich schon etliche Angaben zurück gemeldet...

                                        RK62R Offline
                                        RK62R Offline
                                        RK62
                                        schrieb am zuletzt editiert von
                                        #110

                                        @vazi Dann sollte es im JavaScript mit dem gleichen Authorisation-String auch funktionieren. Der muss auch hier mit „Bearer<Leerstelle>“ starten.

                                        ? 1 Antwort Letzte Antwort
                                        0
                                        • RK62R RK62

                                          @vazi Dann sollte es im JavaScript mit dem gleichen Authorisation-String auch funktionieren. Der muss auch hier mit „Bearer<Leerstelle>“ starten.

                                          ? Offline
                                          ? Offline
                                          Ein ehemaliger Benutzer
                                          schrieb am zuletzt editiert von
                                          #111

                                          @rk62 sagte in Nuki Smart Lock 3.0 pro in ioBroker einbinden:

                                          @vazi Dann sollte es im JavaScript mit dem gleichen Authorisation-String auch funktionieren. Der muss auch hier mit „Bearer<Leerstelle>“ starten.

                                          Du bist spiiiitze:+1: herzlichen Dank @RK62

                                          In meiner Zeite im Script fehlte das Wort Bearer...... nun hat es geklappt und ich sehe die Daten unter 0_userdata und kann somit mein NUKI 3.0 Plus wieder voll im ioBroker verwenden. Toll.

                                          Für Deine / Eure Hilfe vielen vielen herzlichen Dank an dieser Stelle. Ich muss wirklich sagen, dieses Forum hier ist absolut spitze.

                                          Wünsche Euch allen bereits jetzt Frohe Ostern. :egg:

                                          Gruss
                                          vazi

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

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

                                          738

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe