Nuki Callback nutzen

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

thomas.flaechsig.allianz
Beiträge: 11
Registriert: 06.08.2017, 15:17
Hat sich bedankt: 7 Mal

Re: Nuki Callback nutzen

Beitrag von thomas.flaechsig.allianz » 16.01.2021, 15:58

Jailbraik hat geschrieben:
03.11.2020, 22:03
,, aber der gleiche TOKEN wird mir doch dann die selben sachen senden, wie der erste . Nur in eien andere SV.

Weiss nicht wie das unterschieden weden kann.
Habe das selbe Problem - Der Token bezieht sich ja auf die Bridge, die Schlösser werden durch die Geräte ID unterschieden. Wäre dankbar für `ne Lösung :idea:

Benutzeravatar
Jailbraik
Beiträge: 429
Registriert: 26.07.2013, 06:53
Hat sich bedankt: 11 Mal
Danksagung erhalten: 2 Mal

Re: Nuki Callback nutzen

Beitrag von Jailbraik » 16.01.2021, 16:12

Zur Info, habe auch noch keien Lösung gefunden.
@
Raspberry 4 / Home Assistant / 80 Aktoren /

ueffchen
Beiträge: 176
Registriert: 29.03.2011, 10:35
Hat sich bedankt: 4 Mal
Danksagung erhalten: 13 Mal

Re: Nuki Callback nutzen

Beitrag von ueffchen » 16.01.2021, 17:29

Man könnte das gewünschte Nuki direkt abfragen, würde ich aber nicht machen, da dann die Batterie mehr belastet wird.Dazu müsste man /lockState abfragen. Welches Nuki man abfragt muss man dann über Callback Antwort abfragen, zB in einem N1 (statt "tttop" :!: ) eintragen, im anderen N2. Basierend darauf wie zuerst geschrieben halt das richtige Nuki abfragen

Wenn man bei der jetztigen Methode bleibt:
In der letzten API Doc https://developer.nuki.io/uploads/short ... bRG9Fm.pdf steht unter LIST, dass eine Antwort mit NukiID gegeben wird.
Dann macht das Ganze etwas komplizierter, weil man das Script zum Auslesen der States ändern muss, sonst wird halt immer nur der erste State ausgelesen.

thomas.flaechsig.allianz
Beiträge: 11
Registriert: 06.08.2017, 15:17
Hat sich bedankt: 7 Mal

Re: Nuki Callback nutzen

Beitrag von thomas.flaechsig.allianz » 16.01.2021, 18:50

Jailbraik hat geschrieben:
16.01.2021, 16:12
Zur Info, habe auch noch keien Lösung gefunden.
Werden wir wohl nicht um zusätzliche Bridges rumkommen :roll:

ueffchen
Beiträge: 176
Registriert: 29.03.2011, 10:35
Hat sich bedankt: 4 Mal
Danksagung erhalten: 13 Mal

Re: Nuki Callback nutzen

Beitrag von ueffchen » 17.01.2021, 19:09

Ich glaube nicht, dass ihr mehrere Bridges braucht. Das ist nur etwas Programmierarbeit

ueffchen
Beiträge: 176
Registriert: 29.03.2011, 10:35
Hat sich bedankt: 4 Mal
Danksagung erhalten: 13 Mal

Re: Nuki Callback nutzen

Beitrag von ueffchen » 17.01.2021, 20:17

Mit der unten leicht geänderten Find Funktion wird explizit nach dem Lockstate, z.B. "state": 1, gesucht. Einzelne "state" werden nicht erfasst. Der Ausdruck \" sucht nach " in der /List Antwort vom Nuki, damit sucht das Find nach "state":
anfang muss auf 9 inkrementiert werden

Code: Alles auswählen

string stdout;
string stderr;

integer anfang;
integer ende;
integer i;

string url="http://192.168.178.44:8080/list?token=uhpUKs";

system.Exec("wget -q -O - " # url, &stdout, &stderr);
WriteLine(stdout);

anfang=stdout.Find("\"state\":");

anfang=anfang+9;
i=stdout.Substr(anfang,1);

WriteLine(i);

dom.GetObject("NukiLockstate").State(i);
Man muss mal probieren, wie man ab einem ersten gefundenen "state: " weitersuchen kann, bis man das nächste findet. Das wäre dann das zweite Nuki. Vielleicht hat ja einer ne Idee, ich habe heute keine Zeit mehr, Tatort fängt an :)

ibot
Beiträge: 46
Registriert: 17.01.2020, 09:04
System: CCU
Hat sich bedankt: 13 Mal
Danksagung erhalten: 3 Mal

Re: Nuki Callback nutzen

Beitrag von ibot » 10.02.2021, 00:20

Hallo zusammen,

ich habe die Idee von @Kalanthes mal aufgegriffen und mit den Grundsätzen von @ueffchen umgesetzt.

Leider war der Code an mancher Stelle nicht richtig was zur Fehlfunktion führte. Außerdem waren die Namen nicht in deutsch.
Hab's für meine Bedürfnisse angepasst und teile ihn hier gerne mit euch:

Code: Alles auswählen

string stdout;
string stderr;

integer anfang_state;
integer ende_state;
integer state;

integer anfang_battery_crit;
integer ende_battery_crit;
integer battery_crit;

integer anfang_battery;
integer ende_battery;
integer battery;

integer anfang_doorsensor;
integer ende_doorsensor;
integer doorsensor;

string url="http://BRIDGE_IP:8080/list?token=TOKEN";

system.Exec("wget -q -O - " # url, &stdout, &stderr);
WriteLine(stdout);

! Türstatus abrufen
anfang_state=stdout.Find("state");
anfang_state=anfang_state+8;
ende_state=anfang_state+1;
state=stdout.Substr(anfang_state,1);
WriteLine(state);
dom.GetObject("Nuki_State").State(state);

! BatterieKritisch abrufen
anfang_battery_crit=stdout.Find("batteryCritical");
anfang_battery_crit=anfang_battery_crit+18;
ende_battery_crit=anfang_battery_crit+1;
battery_crit=stdout.Substr(anfang_battery_crit,5);
WriteLine(battery_crit);
dom.GetObject("Nuki_Batterie_Kritisch").State(battery_crit);

! Batteriestatus abrufen
anfang_battery=stdout.Find("batteryChargeState");
anfang_battery=anfang_battery+21;
ende_battery=anfang_battery+1;
battery=stdout.Substr(anfang_battery,2);
WriteLine(battery);
dom.GetObject("Nuki_Batterie").State(battery);

! Doorsensor abrufen
anfang_doorsensor=stdout.Find("doorsensorState");
anfang_doorsensor=anfang_doorsensor+18;
ende_doorsensor=anfang_doorsensor+1;
doorsensor=stdout.Substr(anfang_doorsensor,1);
WriteLine(doorsensor);
dom.GetObject("Nuki_Doorsensor").State(doorsensor);

! dekodieren der Lock States
if ( state== 0 ) {dom.GetObject("Nuki_StateName").State("Nicht kalibriert") }
if ( state== 1 ) {dom.GetObject("Nuki_StateName").State("zugesperrt") }
if ( state== 2 ) {dom.GetObject("Nuki_StateName").State("aufsperren") }
if ( state== 3 ) {dom.GetObject("Nuki_StateName").State("aufgesperrt") }
if ( state== 4 ) {dom.GetObject("Nuki_StateName").State("zusperren") }
if ( state== 5 ) {dom.GetObject("Nuki_StateName").State("entriegelt") }
if ( state== 6 ) {dom.GetObject("Nuki_StateName").State("aufgesperrt (lock n go)") }
if ( state== 7 ) {dom.GetObject("Nuki_StateName").State("Entriegelung") }
if ( state== 254 ) {dom.GetObject("Nuki_StateName").State("Motor blockiert") } 
if ( state== 255 ) {dom.GetObject("Nuki_StateName").State("undefiniert") } 

! dekodieren der Doorsensor States
if ( doorsensor== 1 ) {dom.GetObject("Nuki_DoorsensorName").State("Deaktiviert") }
if ( doorsensor== 2 ) {dom.GetObject("Nuki_DoorsensorName").State("Haustuer geschlossen") }
if ( doorsensor== 3 ) {dom.GetObject("Nuki_DoorsensorName").State("Haustuer offen") }
if ( doorsensor== 4 ) {dom.GetObject("Nuki_DoorsensorName").State("unbekannter Status") }
if ( doorsensor== 5 ) {dom.GetObject("Nuki_DoorsensorName").State("Kalibrierung") }
Viel Spaß - bei mir funktionierts nun ... Danke an alle aktiv teilnehmenden! 8)


Das einzige was mich nun etwas nervt sind die 10 Sekunden delay .... ich finde die Redmatic Lösung ja ganz charmant, allerdings hab ich das bislang nicht im Einsatz.

Hintergrund ist: Ich würde gerne ein Licht anschalten, wenn die Haustür geöffnet wird.

ueffchen
Beiträge: 176
Registriert: 29.03.2011, 10:35
Hat sich bedankt: 4 Mal
Danksagung erhalten: 13 Mal

Re: Nuki Callback nutzen

Beitrag von ueffchen » 12.02.2021, 11:30

Die Latenz ist bei Redmatic definitiv nicht niedriger.
Ich habe eben mal handgestoppt, sind ungefähr 14 Sekunden.
Die redmatic URL liegt allerdings an zweiter Stelle im Nuki, vielleicht fängt man sich darüber Verzögerung ein.

Beim Nuki denke ich kommt der Hauptteil der Verzögerung vom Nuki selber.

Generell ist Redmatic aber nicht echtzeitfähig. Das sehe ich auch bei Licht: wenn ich zB ein Licht einschalte, weil ein anderes angegangen ist, dann sin das 3-4 Sekunden Verzögerung.
Dafür ist Redmatic sehr einfach zu "programmieren".

Zu deinem Fall: Licht an bei Tür auf: da wir Auto-Unlock benutzen, würde die Verzögerung gar nicht so sehr stören, da das Nuki i.d.R öffnet bevor man an der Tür ist.

ibot
Beiträge: 46
Registriert: 17.01.2020, 09:04
System: CCU
Hat sich bedankt: 13 Mal
Danksagung erhalten: 3 Mal

Re: Nuki Callback nutzen

Beitrag von ibot » 12.02.2021, 22:36

ok, dann belass ich das so über die Homematic.

Ich hab eher den anderen Fall, dass ich das Außenlicht (nachts) anmachen möchte, wenn die Tür aufgeht und man rausgeht.
in der Diele ist ein Präsenzmelder

ueffchen
Beiträge: 176
Registriert: 29.03.2011, 10:35
Hat sich bedankt: 4 Mal
Danksagung erhalten: 13 Mal

Re: Nuki Callback nutzen

Beitrag von ueffchen » 16.03.2021, 12:48

Hi
da wirst Du nicht umhin kommen einen Bewegungsmelder für aussen zu installieren, alles andere geht nicht in Echtzeit. Entweder integriert in die Lampe oder die batteriebetriebenen Melder von HM, da find ich den Vorteil dass sie programmierbar sind und sich beliebig platzieren lassen
VG

Antworten

Zurück zu „HomeMatic allgemein“