[ NUKI Smartlock ] 73_NUKIBridge.pm und 74_NUKDevice.pm

Begonnen von CoolTux, 18 Juli 2016, 23:50:11

Vorheriges Thema - Nächstes Thema

olaf

Zitat von: CoolTux am 14 Januar 2017, 14:53:21
Bitte einmal einspielen und schauen was passiert. Es müsste wenn wieder 503 kommt diesmal im Error Reading der Bridge "Smartlock offline" stehen und im state des jeweiligen Smartlock ebenfalls "Smartlock offline"

Ich möchte nochmal auf den Fehler 503 zurückkommen.
Damit habe ich momentan noch größere Probleme.
Ich poste mal einen Logauszug:
-------------------> normaler "Alive Check"
2017.11.06 16:18:48 4: NUKIBridge (NB1) - NUKIBridge_GetCheckBridgeAlive
2017.11.06 16:18:48 4: NUKIBridge (NB1) - Send HTTP POST with URL http://192.168.178.21:8080/info?token=xxxxx
2017.11.06 16:18:48 4: NUKIBridge (NB1) - run NUKIBridge_Call
2017.11.06 16:18:48 4: NUKIBridge (NB1) - Call InternalTimer for NUKIBridge_GetCheckBridgeAlive
2017.11.06 16:18:48 5: NUKIBridge (NB1) - Response JSON: {"bridgeType": 1, "ids": {"hardwareId": 112896353, "serverId": 600025564}, "versions": {"firmwareVersion": "1.8.0", "wifiFirmwareVersion": "1.1.0"}, "uptime": 362291, "currentTime": "2017-11-06T15:18:48+00:00", "serverConnected": false, "scanResults": [{"nukiId": yyyyyy, "name": "Nuki_zzzzz", "rssi": -79, "paired": true}]}
2017.11.06 16:18:48 5: NUKIBridge (NB1) - Response ERROR:
2017.11.06 16:18:48 5: NUKIBridge (NB1) - Response CODE: 200
2017.11.06 16:18:48 5: NUKIBridge (NB1) - Bridge ist online
2017.11.06 16:18:48 4: NUKIDevice (NUKILock1) - Received scanResults for matching NukiID yyyyyy at device NUKILock1
2017.11.06 16:18:48 5: NUKIDevice (NUKILock1) - Parse with result: {"rssi":-79,"paired":true,"name":"Nuki_zzzzz"}
2017.11.06 16:18:48 5: NUKIDevice (NUKILock1) - parse status message for NUKILock1
2017.11.06 16:18:48 5: NUKIDevice (NUKILock1) - readings set for NUKILock1

-------------------> Befehl "unlatch" an NukiLock
2017.11.06 16:19:05 4: NUKIDevice (NUKILock1) - NUKIDevice_ReadFromNUKIBridge check Bridge connected
2017.11.06 16:19:05 4: NUKIDevice (NUKILock1) - NUKIDevice_ReadFromNUKIBridge Bridge is connected call IOWrite
2017.11.06 16:19:05 4: NUKIBridge (NB1) - Send HTTP POST with URL http://192.168.178.21:8080/lockAction?token=xxxxx&action=3&nukiId=yyyyyy
-------------------> Fast gleichzeitig der "Alive Check"
2017.11.06 16:19:09 4: NUKIBridge (NB1) - NUKIBridge_GetCheckBridgeAlive
2017.11.06 16:19:09 4: NUKIBridge (NB1) - Send HTTP POST with URL http://192.168.178.21:8080/info?token=xxxxx
2017.11.06 16:19:09 4: NUKIBridge (NB1) - run NUKIBridge_Call
2017.11.06 16:19:09 4: NUKIBridge (NB1) - Call InternalTimer for NUKIBridge_GetCheckBridgeAlive
-------------------> Antwort "nicht verfügbar" (auf den Alive Check, da schon mit unlatch beschäftigt)
2017.11.06 16:19:10 5: NUKIBridge (NB1) - Response JSON: HTTP 503 Unavailable
2017.11.06 16:19:10 5: NUKIBridge (NB1) - Response ERROR:
2017.11.06 16:19:10 5: NUKIBridge (NB1) - Response CODE: 503
2017.11.06 16:19:10 3: NUKIBridge (NB1) - invalid json detected: HTTP 503 Unavailable
-------------------> Antwort auf "unlatch"
2017.11.06 16:19:19 5: NUKIBridge (NB1) - Response JSON: {"success": true, "batteryCritical": false}
2017.11.06 16:19:19 5: NUKIBridge (NB1) - Response ERROR:
2017.11.06 16:19:19 5: NUKIBridge (NB1) - Response CODE: 200
2017.11.06 16:19:19 5: NUKIDevice (NUKILock1) - Parse with result: {"success": true, "batteryCritical": false}
2017.11.06 16:19:19 5: NUKIDevice (NUKILock1) - parse status message for NUKILock1
2017.11.06 16:19:19 5: NUKIDevice (NUKILock1) - lockAction readings set for NUKILock1
2017.11.06 16:19:24 4: NUKIDevice (NUKILock1) - Received webhook for matching NukiId at device NUKILock1
2017.11.06 16:19:24 5: NUKIDevice (NUKILock1) - Parse with result: {"nukiId": yyyyyy, "state": 3, "stateName": "unlocked", "batteryCritical": false}
2017.11.06 16:19:24 5: NUKIDevice (NUKILock1) - parse status message for NUKILock1
2017.11.06 16:19:24 5: NUKIDevice (NUKILock1) - readings set for NUKILock1

-------------------> Befehl "lock" an NukiLock
2017.11.06 16:19:27 4: NUKIDevice (NUKILock1) - NUKIDevice_ReadFromNUKIBridge check Bridge connected
2017.11.06 16:19:27 4: NUKIDevice (NUKILock1) - NUKIDevice_ReadFromNUKIBridge Bridge is connected call IOWrite
2017.11.06 16:19:27 4: NUKIBridge (NB1) - Send HTTP POST with URL http://192.168.178.21:8080/lockAction?token=xxxxx&action=2&nukiId=yyyyyy
-------------------> Antwort "nicht verfügbar" (auf den lock-Befehl, da noch beschäftigt)
2017.11.06 16:19:27 5: NUKIBridge (NB1) - Response JSON: HTTP 503 Unavailable
2017.11.06 16:19:27 5: NUKIBridge (NB1) - Response ERROR:
2017.11.06 16:19:27 5: NUKIBridge (NB1) - Response CODE: 503
2017.11.06 16:19:27 5: NUKIDevice (NUKILock1) - Parse with result: HTTP 503 Unavailable
2017.11.06 16:19:27 3: NUKIDevice (NUKILock1) - invalid json detected: HTTP 503 Unavailable
-------------------> normaler "Alive Check"
2017.11.06 16:19:35 4: NUKIBridge (NB1) - NUKIBridge_GetCheckBridgeAlive
2017.11.06 16:19:35 4: NUKIBridge (NB1) - Send HTTP POST with URL http://192.168.178.21:8080/info?token=xxxxx
2017.11.06 16:19:35 4: NUKIBridge (NB1) - run NUKIBridge_Call
2017.11.06 16:19:35 4: NUKIBridge (NB1) - Call InternalTimer for NUKIBridge_GetCheckBridgeAlive
-------------------> Antwort "nicht verfügbar" (auf den Alive Check, da noch beschäftigt)
2017.11.06 16:19:35 5: NUKIBridge (NB1) - Response JSON: HTTP 503 Unavailable
2017.11.06 16:19:35 5: NUKIBridge (NB1) - Response ERROR:
2017.11.06 16:19:35 5: NUKIBridge (NB1) - Response CODE: 503
2017.11.06 16:19:35 3: NUKIBridge (NB1) - invalid json detected: HTTP 503 Unavailable
-------------------> normaler "Alive Check"
2017.11.06 16:19:52 4: NUKIBridge (NB1) - NUKIBridge_GetCheckBridgeAlive
2017.11.06 16:19:52 4: NUKIBridge (NB1) - Send HTTP POST with URL http://192.168.178.21:8080/info?token=xxxxx
2017.11.06 16:19:52 4: NUKIBridge (NB1) - run NUKIBridge_Call
2017.11.06 16:19:52 4: NUKIBridge (NB1) - Call InternalTimer for NUKIBridge_GetCheckBridgeAlive
2017.11.06 16:19:52 5: NUKIBridge (NB1) - Response JSON: {"bridgeType": 1, "ids": {"hardwareId": 112896353, "serverId": 600025564}, "versions": {"firmwareVersion": "1.8.0", "wifiFirmwareVersion": "1.1.0"}, "uptime": 362355, "currentTime": "2017-11-06T15:19:52+00:00", "serverConnected": false, "scanResults": [{"nukiId": yyyyyy, "name": "Nuki_zzzzz", "rssi": -79, "paired": true}]}
2017.11.06 16:19:52 5: NUKIBridge (NB1) - Response ERROR:
2017.11.06 16:19:52 5: NUKIBridge (NB1) - Response CODE: 200
2017.11.06 16:19:52 5: NUKIBridge (NB1) - Bridge ist online
2017.11.06 16:19:52 4: NUKIDevice (NUKILock1) - Received scanResults for matching NukiID yyyyyy at device NUKILock1
2017.11.06 16:19:52 5: NUKIDevice (NUKILock1) - Parse with result: {"name":"Nuki_zzzzz","rssi":-79,"paired":true}
2017.11.06 16:19:52 5: NUKIDevice (NUKILock1) - parse status message for NUKILock1
2017.11.06 16:19:52 5: NUKIDevice (NUKILock1) - lockAction readings set for NUKILock1
-------------------> normaler "Alive Check"
2017.11.06 16:20:17 4: NUKIBridge (NB1) - NUKIBridge_GetCheckBridgeAlive
2017.11.06 16:20:17 4: NUKIBridge (NB1) - Send HTTP POST with URL http://192.168.178.21:8080/info?token=xxxxx
2017.11.06 16:20:17 4: NUKIBridge (NB1) - run NUKIBridge_Call
2017.11.06 16:20:17 4: NUKIBridge (NB1) - Call InternalTimer for NUKIBridge_GetCheckBridgeAlive
2017.11.06 16:20:17 5: NUKIBridge (NB1) - Response JSON: {"bridgeType": 1, "ids": {"hardwareId": 112896353, "serverId": 600025564}, "versions": {"firmwareVersion": "1.8.0", "wifiFirmwareVersion": "1.1.0"}, "uptime": 362380, "currentTime": "2017-11-06T15:20:17+00:00", "serverConnected": false, "scanResults": [{"nukiId": yyyyyy, "name": "Nuki_zzzzz", "rssi": -79, "paired": true}]}
2017.11.06 16:20:17 5: NUKIBridge (NB1) - Response ERROR:
2017.11.06 16:20:17 5: NUKIBridge (NB1) - Response CODE: 200
2017.11.06 16:20:17 5: NUKIBridge (NB1) - Bridge ist online
2017.11.06 16:20:17 4: NUKIDevice (NUKILock1) - Received scanResults for matching NukiID yyyyyy at device NUKILock1
2017.11.06 16:20:17 5: NUKIDevice (NUKILock1) - Parse with result: {"name":"Nuki_zzzzz","paired":true,"rssi":-79}
2017.11.06 16:20:17 5: NUKIDevice (NUKILock1) - parse status message for NUKILock1
2017.11.06 16:20:17 5: NUKIDevice (NUKILock1) - readings set for NUKILock1
-------------------> Befehl "lock" an NukiLock
2017.11.06 16:21:42 4: NUKIDevice (NUKILock1) - NUKIDevice_ReadFromNUKIBridge check Bridge connected
2017.11.06 16:21:42 4: NUKIDevice (NUKILock1) - NUKIDevice_ReadFromNUKIBridge Bridge is connected call IOWrite
2017.11.06 16:21:42 4: NUKIBridge (NB1) - Send HTTP POST with URL http://192.168.178.21:8080/lockAction?token=xxxxx&action=2&nukiId=yyyyyy
2017.11.06 16:21:55 5: NUKIBridge (NB1) - Response JSON: {"success": true, "batteryCritical": false}
2017.11.06 16:21:55 5: NUKIBridge (NB1) - Response ERROR:
2017.11.06 16:21:55 5: NUKIBridge (NB1) - Response CODE: 200
2017.11.06 16:21:55 5: NUKIDevice (NUKILock1) - Parse with result: {"success": true, "batteryCritical": false}
2017.11.06 16:21:55 5: NUKIDevice (NUKILock1) - parse status message for NUKILock1
2017.11.06 16:21:55 5: NUKIDevice (NUKILock1) - lockAction readings set for NUKILock1
2017.11.06 16:22:02 4: NUKIDevice (NUKILock1) - Received webhook for matching NukiId at device NUKILock1
2017.11.06 16:22:02 5: NUKIDevice (NUKILock1) - Parse with result: {"nukiId": yyyyyy, "state": 1, "stateName": "locked", "batteryCritical": false}
2017.11.06 16:22:02 5: NUKIDevice (NUKILock1) - parse status message for NUKILock1
2017.11.06 16:22:02 5: NUKIDevice (NUKILock1) - readings set for NUKILock1
-------------------> normaler "Alive Check"
2017.11.06 16:22:07 4: NUKIBridge (NB1) - NUKIBridge_GetCheckBridgeAlive
2017.11.06 16:22:07 4: NUKIBridge (NB1) - Send HTTP POST with URL http://192.168.178.21:8080/info?token=xxxxx
2017.11.06 16:22:07 4: NUKIBridge (NB1) - run NUKIBridge_Call
2017.11.06 16:22:07 4: NUKIBridge (NB1) - Call InternalTimer for NUKIBridge_GetCheckBridgeAlive
-------------------> Antwort "nicht verfügbar" (auf den Alive Check, da noch beschäftigt)
2017.11.06 16:22:07 5: NUKIBridge (NB1) - Response JSON: HTTP 503 Unavailable
2017.11.06 16:22:07 5: NUKIBridge (NB1) - Response ERROR:
2017.11.06 16:22:07 5: NUKIBridge (NB1) - Response CODE: 503
2017.11.06 16:22:07 3: NUKIBridge (NB1) - invalid json detected: HTTP 503 Unavailable
-------------------> normaler "Alive Check"
2017.11.06 16:22:28 4: NUKIBridge (NB1) - NUKIBridge_GetCheckBridgeAlive
2017.11.06 16:22:28 4: NUKIBridge (NB1) - Send HTTP POST with URL http://192.168.178.21:8080/info?token=xxxxx
2017.11.06 16:22:28 4: NUKIBridge (NB1) - run NUKIBridge_Call
2017.11.06 16:22:28 4: NUKIBridge (NB1) - Call InternalTimer for NUKIBridge_GetCheckBridgeAlive
2017.11.06 16:22:29 5: NUKIBridge (NB1) - Response JSON: {"bridgeType": 1, "ids": {"hardwareId": 112896353, "serverId": 600025564}, "versions": {"firmwareVersion": "1.8.0", "wifiFirmwareVersion": "1.1.0"}, "uptime": 362511, "currentTime": "2017-11-06T15:22:28+00:00", "serverConnected": false, "scanResults": [{"nukiId": yyyyyy, "name": "Nuki_zzzzz", "rssi": -79, "paired": true}]}
2017.11.06 16:22:29 5: NUKIBridge (NB1) - Response ERROR:
2017.11.06 16:22:29 5: NUKIBridge (NB1) - Response CODE: 200
2017.11.06 16:22:29 5: NUKIBridge (NB1) - Bridge ist online
2017.11.06 16:22:29 4: NUKIDevice (NUKILock1) - Received scanResults for matching NukiID yyyyyy at device NUKILock1
2017.11.06 16:22:29 5: NUKIDevice (NUKILock1) - Parse with result: {"name":"Nuki_zzzzz","paired":true,"rssi":-79}
2017.11.06 16:22:29 5: NUKIDevice (NUKILock1) - parse status message for NUKILock1
2017.11.06 16:22:29 5: NUKIDevice (NUKILock1) - readings set for NUKILock1


Was mir auffällt:
- die Antwort HTTP 503 Unavailable wird nicht richtig behandelt, es kommt ein "invalid json"
- der 15-sekündige "Alive-Check" überschneidet sich z.T. mit den Schaltbefehlen und dann kommen die Antworten außer Reihe oder aber der Response Code 503 wenn das NukiLock gerade beschäftigt ist.

Ich denke, man müsste:
- die Antwort HTTP 503 Unavailable abfangen, damit die nicht in den json-Interpreter kommt
- die Anfragen an das Schloss serialisieren, d.h. die eine Antwort abwarten bevor man einen neue Anfrage stellt.

Was meinst Du, @CoolTux?


Ich würde mir den Code von Github auch clonen, die Überarbeitungen vornehmen und dann einen PR absetzen. Es sei denn, Du möchtest nicht, dass anderer in Deinem Code "rumfummeln"

CoolTux

Hallo Olaf,

Ich habe kein Problem damit wenn jemand Verbesserungsvorschläge in Form von Patches ein bringt.
Möchte nur kurz darauf hinweisen das ich die Module aktuell umbaue. Beim kurzen drauf, drüber und drunter schauen ist mir aber nicht aufgefallen das sich dies in irgendeiner Weise im Wege steht. Kannst also gerne was dran machen und ich werde versuchen es dann gleich in die neue Version ein zu setzen.



Grüße
Leon
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

olaf

Hallo Leon,
dann werde ich mich mal dransetzen ...
Ich hoffe, ich bin nicht langsamer als Dein Umbau ;-)

CoolTux

Denke nicht. Habe da so meine liebe Not mit. Aber das ist auch nicht wild, der Umbau ist für den User eh uninteressant. Ist eher Designtechn. Natur und für mein gutes Gewissen  ;D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

danillo

Hallo zusammen,
irgendwie finde ich nicht, wo ich einstellen kann, wie oft der Status des Nuki abgefragt wird. Wenn ich das Schloss per App bzw FHEM bediene, wird der Staus aktualisiert. Aber manchmal wird ja auch von Hand auf- oder abgeschlossen. Und dann hab ich den richtigen Status erst, wenn ich ihn von Hand über get abfrage.

CoolTux

Der korrekte Status der Schlösser wird an Hand von den Events über den Callback ermittelt. Das abfragen von Hand dient nur zur Ermittlung in Ausnahme Fällen.
Liefert Dein Nuki den kein Event bei manuellen auf oder zuschließen? Callback nehme ich an hast Du eingerichtet.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

danillo

Also in der Bridge ist eine Callback-URL angelegt.
Ich hab da nie so richtig drauf geachtet. ich kann mich aber erinnern, dass es schon mal funktionierte. Aber gestern wollte ich wissen, ob unser Sohn schon von der Schule nachhause gekommen war, und da ist mir aufgefallen, dass der Status nicht aktuell war.
Ich werde es heute Abend nochmal ausprobieren.
Soll ich dann verbose mal auf 5 setzen?

CoolTux

Du kannst ja mal ein List vom Schloss Device machen und ein get Callback oder so ähnlich so das Dir die auf der Bridge eingerichteten Callbacks aufgelistet werden.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

danillo

unter Call-Back ist unter 0 die 'URL des FHEM'/fhem/NUKIDevice-'Nummer des Schlosses'

CoolTux

Dann passt es. Und wenn Du über die App das Schloß betätigst dann sollte ein paar Sekunden später der aktuelle Status auch in FHEM zu sehen sein. Ist das korrekt? Funktioniert das?
Wenn ja sollte auch, sofern unterstützt vom Schloß, auch der Status nach manueller Betätigung ersichtlich sein.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

danillo

Hab's gerade mal von der Ferne über die Bridge ausprobiert. Schalten geht. geht auch über FHEM. Nur der Status wird nicht aktualisiert. Erst wenn ich per set statusrequest den Status aktualisiere.

Mal eine andere Frage. Wenn ich Bluetooth am FHEM hätte, dann könnte ich doch auch ohne Bridge das Schloss mit der Bluethooth-API steuern, oder? Natürlich erst, sobald ich das als Modul umgesetzt hätte :-)

CoolTux

Dann scheint Dein Callback nicht korrekt eingerichtet zu sein. Wenn Du über die App das Schloß schaltest muss nach min. 10s der Status in FHEM korrekt angezeigt werden. Wenn das nicht gegeben ist musst Du noch mal das eingerichtete Callback löschen und neu anlegen.


Ja wenn Du ein entsprechendes Modul geschrieben hast dann kann man auch über FHEM und ohne Bridge das Schloß direkt schalten. Also über Bluetooth.
Ich habe das logische Modul extra offen gestaltet, so das man ein physisches Bluetooth Modul für das Schloß schreiben kann und sich keine Gedanken zum logischen Teil machen muß.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

danillo

#882
hmm,
ich habe jetzt die Callback-Liste gelöscht und einen neuen Eintrag vom Schloss aus erzeugt. Aber leider immnoch kein aktueller Status. Weder beim händischen Sperren, noch beim Sperren über FHEM  :'(

Jetzt hab ich das Schloss entfernt und per autocreate neu suchen lassen. Schloss ist wieder da, aber im Lod der Bridge immer noch
2017.11.09 18:36:06 5: NUKIBridge (NBridge1) - Response ERROR:
2017.11.09 18:36:06 5: NUKIBridge (NBridge1) - Response CODE: 200


Ein kleiner Unterschied ist jedoch feststellbar. Vorher hab ich den Status aktualisiert und er wurde mir erst richtig angezeigt, wenn ich das Schloss neu geladen habe. Jetzt wechselt der Status nach dem Request automatisch. Also schon ein kleiner Schritt weiter.

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

danillo

#884
CFGFN

DEF
99247689 IODev=NBridge1
IODev

NBridge1
NAME

NUKIDevice99247689
NR

1349
NUKIID

99247689
STATE

locked
TYPE

NUKIDevice
VERSION

0.6.1
WEBHOOK_COUNTER

0
WEBHOOK_PORT

8083
WEBHOOK_REGISTER

sent
WEBHOOK_URI

/fhem/NUKIDevice
WEBHOOK_URL

http://192.168.178.32:8083/fhem/NUKIDevice-99247689
Readings
battery

ok

2017-11-09 18:36:22
batteryCritical

false

2017-11-09 18:36:22
lockState

locked

2017-11-09 18:36:22
name

Nuki_05EA6649

2017-11-09 18:39:02
paired

true

2017-11-09 18:39:02
rssi

-73

2017-11-09 18:39:02
state

locked

2017-11-09 18:36:22
success

true

2017-11-09 18:36:22
NUKIDevice99247689
Attributes
IODev

NBridge1

deleteattr
alias

P2

deleteattr
room

NUKI

deleteattr
webhookFWinstance

WEB

deleteattr
webhookHttpHostname

192.168.178.32:8083

deleteattr
Probably associated with
NBridge1
connected
NUKIBridge