Giter VIP home page Giter VIP logo

nuki-callback-receiver's Introduction

nuki-callback-receiver

Dieses kleine Script ist dazu da, die von der NUKI-Bridge gesendeten Callbacks zu empfangen, protokolieren und ggf. andere Aktionen auszuführen.

Infos zur Einrichtung eines Callbacks auf der Bridge findest Du hier: https://developer.nuki.io/page/nuki-bridge-http-api-1-13/4/#heading--callback

Was macht das Script

  • Callback Aufruf empfangen
  • Einen Zeitstempel in die Daten "schmuggeln", damit man im Log auch sehen kann, wann der Callback ausgelöst wurde.
  • Zeitfensterprüfen (7-22 Uhr) und bei Klingelaktion in dem Zeitfenster andere Aktionen ausführen (erweiterbar).
  • Im Fall, dass Opener oder Schloss den Status "batteryCritical" melden, eine Mail senden. Diesen Status merken, so dass keine Dopplung der Mails passieren. Der Status wird zurückgesetzt, wenn "batteryCritical" wieder ok ist.
  • Die empfangenen Callback-Daten in eine Log-Datei speichern. (Hier zusätzliches Shell-Script für ein "logrotate") mit Link auf das aktuelle Log.
  • Bei Aufruf des Scripts über einen Browser wird das aktuelle Log angezeigt.

Wie richte ich es ein?

  • Auf einem Webserver mit PHP einen Ordner anlegen und die index.php dort ablegen.
    Beispiel: http://192.168.1.77/nuki/index.php die IP ersetzen mit dem des Webservers/NAS-Webstation.
  • Der Webserver benötigt hier Lese-/Schreibrechte
  • eMail-Adresse im Script anpassen.
  • Aktionen im Script anpassen.
  • PHP muss so konfiguriert sein, dass file_get_contents URLs aufrufen kann, sonst ggf. durch curl-Aufrufe ersetzen. Um das Logrotate Script nutzen zu können, einmal eine leere Logdatei anlegen:
touch nuki_$(date +%Y%m).log
ln -s nuki_$(date +%Y%m).log nuki.log

So erhält man einen Link "nuki.log" der auf die Log-Datei vom aktuellen Monat zeigt z.B.:

nuki.log -> nuki_202305.log Damit kann dann das Script rotate.sh Täglich um 23:55 Uhr anfgerufen werden und sorgt am Monatsende dafür, dass eine neue Datei für den Monat angelegt wird. In dem Script wird auch der aktuelle Tag als Ausgabe geliefert, was cron dann als Mail Ausgabe weiterleitet. Das Script sollte mit root-Rechten gestartet werden, damit es in der Lage ist, die Rechte wieder auf den WEB-User zu ändern (z.B. bei einer Synology). Hier sollte im Fall der Synology bei der Aufgabe über den Aufgabenplaner das Mail-Protokoll aktiviert werden, damit man auch die Ausgabe des Scripts per Mail bekommt.

  • Callback auf der Bridge einrichten, der auf dieser Ordner bzw. die index.php als Ziel zugreift. Anleitung wie von NUKI beschrieben unter Callback. Hier eignet sich z.B. Postman für die Konfiguration der Callbacks auf der Bridge. Es geht aber auch mit dem Browser, die Beispiele in der NUKI-Anleitung sind da sehr gut - nur URL und TOKEN austauschen und es sollte gehen. Zur Sicherheit nach dem add auch mal mit list die URLs prüfen die man bereits hinterlegt hat. Es nur 2 Callback-URLs und nur ohne SSL (https).

Zum Test dann einfach mal klingeln oder das Schloss auf/zu machen. Dann sollten im Log Einträge wie:

{"time":"28.05.2023 - 14:19:47","deviceType":2,"nukiId":xxxxxxx,"mode":2,"state":1,"stateName":"online","batteryCritical":false,"ringactionTimestamp":"2023-05-28T12:19:32+00:00","ringactionState":true,"IFTTT_action":"Ring"}

{"time":"28.05.2023 - 14:41:53","deviceType":0,"nukiId":xxxxxxx,"mode":2,"state":3,"stateName":"unlocked","batteryCritical":false,"batteryCharging":false,"batteryChargeState":90,"doorsensorState":2,"doorsensorStateName":"door closed"}

{"time":"28.05.2023 - 14:42:02","deviceType":0,"nukiId":xxxxxxx,"mode":2,"state":3,"stateName":"unlocked","batteryCritical":false,"batteryCharging":false,"batteryChargeState":90,"doorsensorState":4,"doorsensorStateName":"door state unknown"}

{"time":"28.05.2023 - 14:43:25","deviceType":0,"nukiId":xxxxxxx,"mode":2,"state":3,"stateName":"unlocked","batteryCritical":false,"batteryCharging":false,"batteryChargeState":90,"doorsensorState":2,"doorsensorStateName":"door closed"}

{"time":"28.05.2023 - 14:48:34","deviceType":0,"nukiId":xxxxxxx,"mode":2,"state":1,"stateName":"locked","batteryCritical":false,"batteryCharging":false,"batteryChargeState":90,"doorsensorState":2,"doorsensorStateName":"door closed"}

zu lesen sein. Hier muss man dann etwas ausprobieren wie man damit umgeht - in meinem Script sind 2 Beispiele. Eines reagiert auf die Statusänderung von "batteryCritical" und das andere auf "ringactionState"

Ein aktiviertes RingToOpen kann wie folgt erkannt werden "stateName":

{"time":"27.05.2023 - 20:26:05","deviceType":2,"nukiId":xxxxxxx,"mode":2,"state":3,"stateName":"rto active","batteryCritical":false,"ringactionTimestamp":"2023-05-27T13:42:11+00:00","ringactionState":false}

Man könnte hier also, wenn auf ein "rto active" ein ringactionState: true folgt, eine personalisierte Aktion ausführen, dass jemand der gerade in die Home-Zone kam, geklingelt hat. Ähnlich wie beim Batterie-Status einen Merker bei "rto active" setzen, bei anderen Status-Änderungen zu dem device-Type wieder löschen und wenn bei gemerktem Status eine Ring-Aktion passiert, einen Auslöser starten.

nuki-callback-receiver's People

Contributors

alekscee avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.