[Modul] Nuki Bridge - Elektronisches Türschloss und Opener mittels Bridge HTTP API

@Slummi
@Dustin723

Im Beta Kanal im Module-Store gibt es eine neue beta Version des NUKI Bridge Moduls:
2.0-4
Unterstützung für verschlüsselten API Token, ersetzt den hashed Token.

ACHTUNG!:
Für den verschlüsselten API Token (encrypted API token) wird nachfolgende Firmware der Bridge benötigt:

Bridge 1.0, min. Beta 1.22.1
Bridge 2.0, min. Beta 2.14.0

Diese ist im Moment im beta Stadium bei NUKI.
Wer die beta Firmware ausprobieren möchte, hier geht es weiter bei NUKI Bridge Beta Firmware

Solange die NUKI Firmware beta ist bleibt auch das Modul im beta Kanal. Sobald die Firmware für alle verfügbar ist, werde ich die Änderungen zur Revision einreichen.

Die alte „hashed Token“ Methode wird nicht mehr unterstützt.

Freue mich über Rückmeldungen.

Uli

2 „Gefällt mir“

Ich wollte eigentlich gestern die Beta des Moduls testen, bin vorher aber auf ein Problem mit der Stable gestoßen, welches ich erst lösen musste.

Das Modul wollte mit einer meiner Bridges plötzlich einfach nicht mehr zusammen arbeiten. Egal welchen Request ich an die Bridge geschickt habe, es kam nach 5 Sekunden immer ein HTTP 503. Das einzige was problemlos funktionierte, war das Callback-Interface. Eine andere Bridge lief derweil problemlos weiter mit dem Modul.

Ich dachte erst die Bridge hätte sich vielleicht aufgehangen (obwohl das Callback wie gesagt funktionierte und über die Nuki-App arbeitete die Bridge auch einwandfrei). Also habe ich mal einen Power-Off-Reset gemacht. Nach dem Booten aber das gleiche Thema. Das Modul wollte weiterhin nicht richtig mit der Bridge reden.

Ich habe mir dann mal das Debug angesehen und auf jedes SendDataToParent (was ständig wiederholt wurde) kam nach 5 Sekunden ein „Aborted. Semaphore Reached.“ Und dann folgte der Response mit HTTP 503. Ich dachte, dass die Bridge vielleicht aus irgendeinem Grund zu spät antwortet. Daher habe ich mal den Timeout in der Instanz hoch gesetzt. Trotzdem kam weiterhin immer nach 5 Sekunden besagte Fehlermeldung.

Ich habe dann versucht den Dienst zu beenden, was jedoch ebenfalls scheiterte, weil er endlos auf die Beendigung irgendeines Threads gewartet hat. Ich vermute, dass das was vom Modul war, aber sicher bin ich mir nicht. Ich konnte das im Nachgang leider nicht mehr herausfinden. Nachdem ich den Prozess gekillt und IPS neu gestartet habe, liefen wieder beide Bridges problemlos.

@ubittner Wann genau bringt das Modul denn die Meldung „Aborted. Semaphore Reached.“? Kommt das immer, wenn nach dem eingestellten Timeout keine Antwort von der Bridge kommt oder resultiert das woanders her? Und das HTTP 503 kommt das wirklich als Antwort von der Bridge oder erzeugt das Modul den Fehlercode intern, nach dem erreichen des Timeouts? Mir kam es eher wie letzteres vor, da es wirklich immer exakt 5 Sekunden waren. Eigenartig fand ich, dass die geänderte Einstellung des Timeouts nichts an dem 5 Sekunden Intervall für die Debug-Meldung geändert hat.

Nur für den Fall, dass es wieder mal auftreten sollte, wäre es für die weitere Analyse hilfreich zu wissen, wie sich das Modul hier verhält.

Da jetzt erst mal wieder alles funktioniert, werde ich die Beta mal testen. Die neue Bridge-Firmware ist inzwischen übrigens offiziell released. Aber der alte Hashed Token wird ja erst mal weiter von der Bridge unterstützt, sodass wir keinen Stress mit dem Testen haben.

Die Implementierung des encrypted Token scheint auf den ersten Blick reibungslos zu funktionieren.
Wirklich klasse, wie schnell du das implementiert hast! :+1:t3:

Falls mir doch noch was auffällt, melde ich mich.

1 „Gefällt mir“

Guten Morgen,

In der Vergangenheit war es ja so, dass die Bridge mehrere Schaltbefehle innerhalb kürzester Zeit nicht abarbeiten konnte. NUKI empfiehlt:

Why do i repeatdly get an Error 503 when calling the Bridge API
The Bridge can only handle one incoming request at a time and you therefore have to serialize repeated requests to the Bridge API.

Dies betrifft dann die Fehlermeldung:

503 Service Unavailable
Another request already running on the device
Increase intervals between API calls sent to the Bridge as it can only handle one request at a time.

Ich habe im Modul versucht dies mit Semaphore abzufangen. Jeder Schaltbefehl betritt den Semaphore und verlässt diesen auch wieder.

Hier scheint es so zu sein, dass aus einem mir noch nicht bekannten Grund der Semaphore nicht ordentlich verlassen wird, bzw. die Bridge nicht antwortet. Dann gebe ich auch 503 zurück.
Ich hatte dieses Phänomen auch einmal, als ich Bridge über das Modul mit dem Firmwareupdate angestoßen habe. Musste auch Symcon einmal neu starten, damit alles wieder aktiv war. Unschön.

serialize repeated requests

Hier muss ich noch eimal schauen ob Semaphore die richtige Wahl ist, den Semaphore Interval erhöhen muss oder ich eine „Queue“ bauen muss.

Prima, dass es klappt. Nochmals der Hinweis: in der jetzigen Beta Version gibt es den hashed Token nicht mehr. Er wurde durch den neuen crypted Token ersetzt.

Uli

Guten Morgen,

Ja, das ist mir bekannt. Falls das noch mal auftreten sollte, werde ich mal manuell versuchen, die HTTP-API via curl anzusteuern. Ich glaube nämlich nicht, dass das hier das Problem war und die Bridge mit der Abarbeitung nicht hinterher kam. Dann hätte ich auch andere Probleme mit der Bridge erwartet und es hätte nach dem Power-Off-Reset der Bridge wieder funktionieren müssen.

Das vermute ich auch. Das erklärt auch, warum nach genau 5 Sekunden immer der Status kam. Ich habe mir schon gedacht, dass das kein realer Status der Bridge ist, der dort ausgegeben wird.
Habe gerade mal einen schnellen Blick in den Code geworfen. Eigentlich kann das Script dann ja nur im curl-Teil hängen geblieben sein. Oder das IPS_SemaphoreLeave() wurde aus irgendeinem Grund nicht erfolgreich durchgeführt. Ich überlege gerade ob es Sinn macht:

a) Den Rückgabewert von IPS_SemaphoreLeave() mit auszuwerten und bei einem FALSE (wodurch auch immer das zustande kommen könnte) entsprechend zu reagieren.

b) Eine Umgehung für den Notfall zu bauen, die dafür sorgt, dass der Semaphor nach Ablauf einer gewissen Zeit in jedem Fall wieder aufgehoben wird, da das Modul sonst im Fehlerfall für die jeweilige Instanz bis zum nächsten Neustart des Dienstes tot ist. Denn mit der aktuellen Implementierung gibt es keinerlei Möglichkeit, ein einmal fehlgeschlagenes IPS_SemaphoreLeave() jemals wieder zu erreichen.

c) Den Timeout für den Semaphore in Abhängigkeit der Timeout-Property zu setzen. Das dürfte zwar nicht die Ursache für das Problem sein, würde aber bei einem hohen eingestellten Timeout (z.B. 10 Sekunden) dazu führen, dass ein zwischenzeitlich abgesetzter neuer Befehl in jedem Fall scheitert - vorausgesetzt die Bridge benötigt für ihre Antwort wirklich länger als die fixen 5 Sekunden.

Warum sich der IPS-Dienst während des Promles nicht beenden ließ, ist mir aktuell noch ein Rätsel. Dass ein Thread des Moduls komplett hängen geblieben ist, würde ich eigentlich ausschließen. Denn ich sehe im Monitoring keinen Thread, der länger als normal gelaufen wäre und ich habe relativ lange auf den Shutdown gewartet bis ich den Dienst am Ende gekillt habe. Das wird also irgendwas anderes gewesen sein. Wäre ganz hilfreich, wenn man im Nachgang noch über die Logs feststellen könnte, auf welche Scripts IPS beim Beenden (vergeblich) gewartet hat.

@paresy Kann man diese Info nicht irgendwie mit ins Log schreiben?
Also diese Loge-Einträge mit zusätzlichen Informationen anreichern, welche Skripte / Module aktuell noch laufen, auf die gewartet wird?

Warte auf Beendigung aller Skript-Threads...

Skripte können nicht gestartet, sobald Abschaltung eingeleitet wurde

Aktion konnte für Ereignis #123450 nicht ausgeführt werden: Skripte können nicht gestartet, sobald Abschaltung eingeleitet wurde

Weiß jemand, ob es Auswirkungen auf den Shutdown hat, wenn zwar kein Skript mehr läuft, aber noch irgendwo ein Semaphor gesetzt ist? Würde das ebenfalls das Herunterfahren des Dienstes verhindern?

Ich werde das mal weiter beobachten. Falls es noch mal auftritt, versuche ich noch weitere Daten zu sammeln, die bei der Ursachenfindung helfen könnten. Aber bisher war das wirklich die Ausnahme. War glaube ich erst das zweite Mal seit ich das Modul nutze, dass da was komplett hängen geblieben ist.

Gruß
Slummi

Das ist nicht möglich. Gesetze Semaphoren werden am Ende des Skripts immer freigegeben und mit einer gelben Meldung im Log quittiert, wenn du nicht korrekt gearbeitet hast.

paresy

Hallo,

kleine Verständnis Frage: Mit einem Nuki Smart Lock 3.0 Pro brauche ich keine separate Bridge da diese integriert ist?

Oder ist sie für das Modul zwingt Notwendig?

Dank im Voraus.

Mit freundlichen Grüßen,
DATA78Lux

ein ganz klares JEIN :slight_smile:

Für die Integration des SL gibt es für IPS zwei Module:

Nuki Bridge:
Hier brauchst du auch für das Pro eine Bridge, da zur Zeit die Bridge API auf dem Pro nicht zur Verfügung steht.

Hinweis : Die Bridge-API wird vom integrierten WLAN Modul des Smart Locks 3.0 Pro NICHT unterstützt. Um die Bridge API verwenden zu können, verbinde dein Smart Lock 3.0 Pro mit der Nuki Bridge. Auf diese Weise erhältst du alle Nutzungsmöglichkeiten.

Nuki Web:
Dies ist die „Cloud Anbindung“ des SL. Ich selber habe leider zur Zeit kein Pro, so dass ich definitiv nicht sagen kann, ob dies funktioniert.

Fazit:
Wenn du es in IPS local einbinden willst brauchst du zur Zeit auch für das Pro eine Bridge.

Uli

1 „Gefällt mir“

Guten Morgen Zusammen,
ich hatte heute morgen vor vom „alten“ Nuki-Modul auf das neue „Nuki-Bridge“-Modul umzusteigen. Die Discovery hat auch beide Bridges erkannt, ich konnte die Token abrufen durch drücken des Knopfes an der Bridge. Beim Anlegen der SL weiß ich jetzt aber net so genau, was ich machen muss - da ist alles doppelt und dreifach drin beim Anlegen der Instanz:
image
image

Über den Modul-Store sieht man, das was ich instelliert habe:

Hat jemand einen Tipp für mich?
LG Dennis.

Guten Morgen Dennis,

das mit (Bridge API) ist die neue Version.

Uli

Moin Uli,
danke für die fixe Antwort. Also die mit der Klammer sind die neuen, die ohne Klammer die alten - korrekt?
LG Dennis.

Ja, genau so.

Wenn du das alte Modul löscht, dann wirst du sehen, dass nur noch die () angezeigt werden.

Uli

Und die Bridge heisst:

Nuki Splitter (Bridge API)

Uli

Cool, danke Uli. Das hat jetzt fast geklappt.
Wie muss denn der Callback aussehen? Zur Situation: Ich nutze zwei Nukis und zwei Bridges.
Aktuell kommt im Protokoll folgende Meldung:

Dann hasst du ja auch zwei Splitter Instanzen, richtig?

Du musst das Gateway (Splitter Instanz) bei dem jeweiligen Device richtig zuordnen. D.h. das Smart Lock muss mit der richtigen Splitter Instanz kommunizieren. Du kannst das in der Instanzkonfiguration des SmartLocks einstellen.

Prüfe die Callbacks der beiden Bridges und die dazugehörigen WebHooks (Kern-Instanzen).

Dann werden die Informationen von der Bridge zum jeweiligen SmartLock geschickt.

Uli

Moin, habs total verpennt.
Soll ich da noch die Beta testen?

PS.
ich liebe das Modul :slight_smile: !
Vorallem funktionen: wenn die Tür abgeschlossen wird, das Auto zuhause ist, dann schieße auch das Auto ab. Habs halt immer vergessen.

Wenn du den neuen verschlüsselten Token ausprobieren möchtest, dann ja.

Bitte die Bridge Firmware beachten.

Uli

1 „Gefällt mir“

Moin,
mein NUKI war von dem Produktionsfehler betroffen. Nun habe ich heute das neue bekommen installiert und die BETA Version aus dem Store installiert.

Ich würde jetzt sagen es funtkioniert immer noch :slight_smile:

Brauchst Du mehr Infos? Ich kann auch das zweite Nuki noch auf einer anderen Symcon Instanz noch Updaten.

Ich denke es funktioniert, muss es die Tage mal zum Review einreichen, dass es in den Stable Kanal verfügbar ist.

Uli

Ich habe die neue Version jetzt seit mehr als zwei Monaten in Betrieb und keinerlei Probleme festgestellt.