XXX Die ist die Anleitung über die direkte API von Nuki. Über IFTTT ist es einfacher und es wird kein Webserver benötigt. Schaut dazu in die Kommentare! XXX
So Leute, hier mal meine kurze Erklärung, wie ich das mit dem HTTP-Request und der Web-API von Nuki gemacht habe. Ich nutze es nur zum abschließen, man kann aber auch alle anderen Funktionen über die API ansprechen.
Was ich brauche:
- Nuki Schloss
- Nuki Bridge (in meinem Fall über die Bridge App auf einem alten Android Tablet)
- Einen Webserver (Raspberry Pi reicht dafür, ich habe aber sowieso einen CentOS Server bei mir stehen)
Zuerst muss die Nuki API aktiviert werden, das funktioniert einfach über die App unter Administration -> Nuki Web aktivieren.
Danach über den Browser unter https://web.nuki.io einloggen. Über das Menü oben rechts muss man auf den Punkt API gehen und einen neuen Token generieren. Dem gibt man die Berechtigung "Geräte bedienen". Diesen API Key jetzt gut notieren! Danach geht man auf die Seite seines Smartlocks und schreibt sich aus der URL die ID des Schlosses ab (die Zahl ganz hints: https://web.nuki.io/de/#/admin/smartlocks/123456789).
So, nun ist das Schloss und die API vorbereitet, jetzt muss der Befehl nur noch dort hinkommen. Die API kann über cUrl angesprochen werden, hiermit lassen sich die benötigten Header und der Body setzen, damit das Smartlock den korrekten Befehl ausführt.
Die PHP-Seite, die unter dem Webserver laufen muss, sieht so aus. (Beispiel abschließen oder aufschließen):
<?php@@@WCF_PRE_LINEBREAK@@@$command = $_GET['cmd'];@@@WCF_PRE_LINEBREAK@@@if ($command == 'zu')@@@WCF_PRE_LINEBREAK@@@ $postData = "{ 'action': 2, 'option': 0 }";@@@WCF_PRE_LINEBREAK@@@if ($command == 'auf')@@@WCF_PRE_LINEBREAK@@@ $postData = "{ 'action': 1, 'option': 0 }";@@@WCF_PRE_LINEBREAK@@@$handler = curl_init();@@@WCF_PRE_LINEBREAK@@@curl_setopt($handler, CURLOPT_URL, "https://api.nuki.io/smartlock/HIER_DIE_LOCK_ID/action");@@@WCF_PRE_LINEBREAK@@@curl_setopt($handler, CURLOPT_POSTFIELDS, $postData);@@@WCF_PRE_LINEBREAK@@@curl_setopt($handler, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Accept: application/json','Authorization: Bearer HIER_DEN_API_TOKEN_EINFÜGEN'));@@@WCF_PRE_LINEBREAK@@@curl_setopt($handler, CURLOPT_POST, true);@@@WCF_PRE_LINEBREAK@@@curl_setopt($handler, CURLOPT_SSL_VERIFYPEER, false);@@@WCF_PRE_LINEBREAK@@@$output = curl_exec($handler);@@@WCF_PRE_LINEBREAK@@@curl_close($handler);@@@WCF_PRE_LINEBREAK@@@?>@@@WCF_PRE_LINEBREAK@@@
Wichtig ist natürlich, die eigene Lock-ID und den API Token an den beschriebenen Stellen hinzuzufügen.
Wenn man statt Aufschließen z.B. Tür öffnen haben möchte, wäre die Action-ID nicht die 1, sondern die 3 (bei PostData).
So, die PHP-Datei wird auf dem Webserver abgelegt und kann nun angesprochen werden:
http://webserver/tuer.php?cmd=auf oder http://webserver/tuer.php?cmd=zu
Jetzt müssen wir nur noch den HTTP-Request in innogy anlegen:

Diesen können wir jetzt auf der Startseite unter Entertainment sehen oder in Szenarien verwenden. Ich z.B. nutze es für "Wenn Alarm eingeschaltet wird, schließe Tür zu".
Viel Spaß damit!