NEWS
3 Fragen zu Nuki 3.0 Pro mit MQTT.
-
@mcbirne sagte in 3 Fragen zu Nuki 3.0 Pro mit MQTT.:
@manfredhi
Stimmt,jetzt wird dort 3 angezeigt. zur gleichen Zeit wie bei dem LockActionEvent das komische Zeichen kommt. Die 3 wird also immer beim Öffnen oder Aufschließen angezeigt, oder?
1 = Tür zugesperrt
2 = Tür wird aufgesperrt
3 = Tür aufgesperrt (in zusammenhang mit DoorSensor State 2)
3 = Tür steht offen (in Zusammenhang mit DoorSensor State 3)
4 = Tür wird zugesperrt
7 = Tür wird geöffnetsiehe auch die Doku zu mqtt-api 1.4:
https://developer.nuki.io/uploads/short-url/fcR2ntjSFMz3oHUMrIjYSU3g0O4.pdf -
@ManfredHi, @mcbirne sagte in 3 Fragen zu Nuki 3.0 Pro mit MQTT.:
Es wäre toll, wenn bei lockActionEvent auch interpretierbare Zeichen stehen würden.
Ist zwar schon eine Weile vergangen seit diesem Post, aber vielleicht stößt ja jemand in Zukunft auch noch auf das "Problem".
Diese Zeichen sollen wohl grafisch etwas darstellen (lock / unlock / unlatch). Man kann sie verwerten, wenn man den Hex-Wert verwendet. So wird das erste Byte (Zeichen) zu einem lesbaren Lock Action Code (01 -> unlock, 02 -> lock, 03 -> unlatch). Die Lock Action Codes für das smartlock und den opener kann man der API-Beschreibung von Nuki entnehmen.
Kann man z.B. mit Blockly und einem kleinen Java-Script so verwerten:
-
@dr-bakterius sagte in 3 Fragen zu Nuki 3.0 Pro mit MQTT.:
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="qorb=$~{B0ylm@J_t,nL">text</variable> <variable id="86jV1Y#Q]F79bKNQL0^M">zahl</variable> </variables> <block type="on" id="?uBC#0,vX:[t?vUtEhFF" x="-937" y="588"> <field name="OID">mqtt.0.nuki.374FE4EC.lockActionEvent</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="variables_set" id="6c@orWoh56s+c]bxra6R"> <field name="VAR" id="86jV1Y#Q]F79bKNQL0^M">zahl</field> <value name="VALUE"> <block type="convert_tonumber" id="Rjx_VhWHs@a~`JQi8,6x"> <value name="VALUE"> <block type="text_getSubstring" id="tCXR}Rwh%*Lu;(j8uQvE"> <mutation at1="true" at2="true"></mutation> <field name="WHERE1">FROM_START</field> <field name="WHERE2">FROM_START</field> <value name="STRING"> <block type="convert_tostring" id="iAZLl|YH@5v_XG22$Kk="> <value name="VALUE"> <block type="procedures_callcustomreturn" id="_7=a94IVZNZNOV1wI=D*"> <mutation name="2hex"> <arg name="text"></arg> </mutation> <value name="ARG0"> <block type="on_source" id="3qjzY2?)V_Q!#Y|nz21["> <field name="ATTR">state.val</field> </block> </value> </block> </value> </block> </value> <value name="AT1"> <block type="math_number" id="]BGV:5HSPn7!?G?[}tcm"> <field name="NUM">1</field> </block> </value> <value name="AT2"> <block type="math_number" id="#G;fFsZW1SUx4v|48EJD"> <field name="NUM">2</field> </block> </value> </block> </value> </block> </value> <next> <block type="controls_if" id="k#)0Su!=~|W`XwS7W78X"> <mutation elseif="2"></mutation> <value name="IF0"> <block type="logic_compare" id="s1=88^1M$G%%r;z$#@I6"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="iT8ShDJuXe2KHmHoQMV1"> <field name="VAR" id="86jV1Y#Q]F79bKNQL0^M">zahl</field> </block> </value> <value name="B"> <block type="math_number" id="DNEp3w*I7AH@xL3O)%D:"> <field name="NUM">1</field> </block> </value> </block> </value> <statement name="DO0"> <block type="debug" id="B_HTKs@Zw;22VwGE$dyx"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="GL~3UV0.[m^hleap?fhL"> <field name="TEXT">smartlock unlock</field> </shadow> </value> </block> </statement> <value name="IF1"> <block type="logic_compare" id="=7zja^/%x;HB$`b@N8V_"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="k+{2..p,Q]@|t+=c{8~{"> <field name="VAR" id="86jV1Y#Q]F79bKNQL0^M">zahl</field> </block> </value> <value name="B"> <block type="math_number" id="POzG+/liHr:K^.Z:*87%"> <field name="NUM">2</field> </block> </value> </block> </value> <statement name="DO1"> <block type="debug" id="i}DG!^/J;.#,n=`/*^jr"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="K[}#t$]paVwqt(0pby,7"> <field name="TEXT">smartlock lock</field> </shadow> </value> </block> </statement> <value name="IF2"> <block type="logic_compare" id="HA%fJgoA,?zS/OV;nEAH"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="U%gMqV`+V;LKMsaR6wnV"> <field name="VAR" id="86jV1Y#Q]F79bKNQL0^M">zahl</field> </block> </value> <value name="B"> <block type="math_number" id="^xZf{Qnev9H!D3Pw*^Jt"> <field name="NUM">3</field> </block> </value> </block> </value> <statement name="DO2"> <block type="debug" id="f*W:a`pma;%$DGP8bH37"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="IN?CSfSgEJ3$#sJQqN-%"> <field name="TEXT">smartlock unlatch</field> </shadow> </value> </block> </statement> </block> </next> </block> </statement> </block> <block type="procedures_defcustomreturn" id="$S)[j*JxCEt~nQv7TKkL" x="-312" y="788"> <mutation statements="false"> <arg name="text" varid="qorb=$~{B0ylm@J_t,nL"></arg> </mutation> <field name="NAME">2hex</field> <field name="SCRIPT">ZW5jb2RlZCA9IEJ1ZmZlci5mcm9tKHRleHQpLnRvU3RyaW5nKCdoZXgnKTsNCnJldHVybiBlbmNvZGVkOw==</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> </xml>
Danke!
Laut API sollten da viel mehr Informationen als kommaseparierte Liste kommen.
Stimmt da jetzt die API Beschreibung nicht oder wie kann man das sichtbar machen?
Mich interessiert vor allem wodurch die Aktion ausgeführt wurde. -
@rushmed Werte doch einfach auch die anderen 4 Bytes aus. Und schau was da ankommt.
-
@dr-bakterius Ah, ok danke.
Ich bekomm schonmal das zweite Byte fast hin.
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="J2Y{`FV]/q4e/hXk/Gg}">text</variable> <variable id="2.$BAa5Ln2p~uf@U,I$R">Alles hex</variable> <variable id="86jV1Y#Q]F79bKNQL0^M">LockAction</variable> <variable id="tb|U2N7:pjz6%bK|V=}J">Trigger</variable> <variable id="}c1M!2HmR!`}X3bQT(JD">Auth-ID</variable> </variables> <block type="on" id="-1K?vZOkc8l1_Vl(egj~" x="-313" y="588"> <field name="OID">mqtt.0.nuki.3E25B3FC.lockActionEvent</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="debug" id="kS:(oSWYI:e_Jn)Kb/Ak"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="#j-R|ROZF1M?[X{,7#;m"> <field name="TEXT">test</field> </shadow> <block type="on_source" id="UWZ]8W=2g8HC.2G[:L8O"> <field name="ATTR">state.val</field> </block> </value> <next> <block type="variables_set" id="#cQ%Qldc.z$fKU?Fi+}e"> <field name="VAR" id="2.$BAa5Ln2p~uf@U,I$R">Alles hex</field> <value name="VALUE"> <block type="text_getSubstring" id="-PpRKy=yLhV1.~K/cm04"> <mutation at1="false" at2="false"></mutation> <field name="WHERE1">FIRST</field> <field name="WHERE2">LAST</field> <value name="STRING"> <block type="convert_tostring" id="W57cgC*S~]HY?-y,q/$1"> <value name="VALUE"> <block type="procedures_callcustomreturn" id="NB(slM4rkd2YF1[`gw;7"> <mutation name="2hex"> <arg name="text"></arg> </mutation> <value name="ARG0"> <block type="on_source" id="9bDOSoylx@g-y,C7IFWA"> <field name="ATTR">state.val</field> </block> </value> </block> </value> </block> </value> </block> </value> <next> <block type="debug" id="6)ta]u.L|vPN?E;s-Xj2"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="An,MNLYDX2//M$![?UoZ"> <field name="TEXT">HomeKit</field> </shadow> <block type="variables_get" id="wIVeA0M)TNbl2wS,GH8l"> <field name="VAR" id="2.$BAa5Ln2p~uf@U,I$R">Alles hex</field> </block> </value> <next> <block type="variables_set" id="Smp+69B]GsA/eF^L]6.["> <field name="VAR" id="86jV1Y#Q]F79bKNQL0^M">LockAction</field> <value name="VALUE"> <block type="convert_tonumber" id="C|N2X);3!m1CkAaL]gW7"> <value name="VALUE"> <block type="text_getSubstring" id="l~-;{HEj66KPy+tcM*B?"> <mutation at1="true" at2="true"></mutation> <field name="WHERE1">FROM_START</field> <field name="WHERE2">FROM_START</field> <value name="STRING"> <block type="convert_tostring" id="zi}%W=uAY|tYv_V)=Af="> <value name="VALUE"> <block type="procedures_callcustomreturn" id="*PJt?:Lj1.^+d=-K|3oD"> <mutation name="2hex"> <arg name="text"></arg> </mutation> <value name="ARG0"> <block type="on_source" id="j[wM~^!Kf.ZiI=TzHINb"> <field name="ATTR">state.val</field> </block> </value> </block> </value> </block> </value> <value name="AT1"> <block type="math_number" id="cc^W4c?.Ee9d5zGN-TY)"> <field name="NUM">1</field> </block> </value> <value name="AT2"> <block type="math_number" id="@9HjzFZbTG+X-8Aab)fo"> <field name="NUM">2</field> </block> </value> </block> </value> </block> </value> <next> <block type="variables_set" id="!KWmTX%umuEYEdK.|~*;"> <field name="VAR" id="tb|U2N7:pjz6%bK|V=}J">Trigger</field> <value name="VALUE"> <block type="convert_tonumber" id="rFCh?(uwgEoP2q[8K:Wq"> <value name="VALUE"> <block type="text_getSubstring" id="Dp_ygo1MXERrkY:hk%]_"> <mutation at1="true" at2="true"></mutation> <field name="WHERE1">FROM_START</field> <field name="WHERE2">FROM_START</field> <value name="STRING"> <block type="convert_tostring" id="gsCmBrW96Yzl_EE61TAl"> <value name="VALUE"> <block type="procedures_callcustomreturn" id="=+j/E0%R]w?13DjRSG%T"> <mutation name="2hex"> <arg name="text"></arg> </mutation> <value name="ARG0"> <block type="on_source" id="`jR~tv/nDS?P({387U?p"> <field name="ATTR">state.val</field> </block> </value> </block> </value> </block> </value> <value name="AT1"> <block type="math_number" id="A/gnxb3AitN^X{z8T4dJ"> <field name="NUM">3</field> </block> </value> <value name="AT2"> <block type="math_number" id="|)cE;`e6:%mzVl;Dg3s3"> <field name="NUM">4</field> </block> </value> </block> </value> </block> </value> <next> <block type="variables_set" id="XI.[}~^TQjm}x!*y[~/X"> <field name="VAR" id="}c1M!2HmR!`}X3bQT(JD">Auth-ID</field> <value name="VALUE"> <block type="text_getSubstring" id="]vsT=clHgyS0DE,~VCz8"> <mutation at1="true" at2="false"></mutation> <field name="WHERE1">FROM_START</field> <field name="WHERE2">LAST</field> <value name="STRING"> <block type="convert_tostring" id="m?Zo-+?IK`;]Jvap`NBg"> <value name="VALUE"> <block type="procedures_callcustomreturn" id="m;$U*`+}H/dZ:FeJdI.|"> <mutation name="2hex"> <arg name="text"></arg> </mutation> <value name="ARG0"> <block type="on_source" id="]0?Q|Il.^_n{Ua2ys7_3"> <field name="ATTR">state.val</field> </block> </value> </block> </value> </block> </value> <value name="AT1"> <block type="math_number" id="dK^AO-Q7w=lF,v#uePpi"> <field name="NUM">5</field> </block> </value> </block> </value> <next> <block type="controls_if" id="[cu+59?ODiLA2lb{6Abi"> <mutation elseif="2"></mutation> <value name="IF0"> <block type="logic_compare" id="`TG=,[J/Izpx}4q_*Qmm"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="|KI=smC8|t1G62R8uk~U"> <field name="VAR" id="86jV1Y#Q]F79bKNQL0^M">LockAction</field> </block> </value> <value name="B"> <block type="math_number" id="Yx01[14$Sfxc-Rg@[7J9"> <field name="NUM">1</field> </block> </value> </block> </value> <statement name="DO0"> <block type="debug" id="pHJ-ZU4LLXy=B7Pg*Grl"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="F[qG)*4U$Q(2N+g%q}${"> <field name="TEXT">smartlock unlock</field> </shadow> </value> </block> </statement> <value name="IF1"> <block type="logic_compare" id="t7n^V9fbh00gBL)GeFZ8"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="G(9+69{ED=u@Lpzjz!D]"> <field name="VAR" id="86jV1Y#Q]F79bKNQL0^M">LockAction</field> </block> </value> <value name="B"> <block type="math_number" id="IH-RkkuO;X7_?%h}!Zw*"> <field name="NUM">2</field> </block> </value> </block> </value> <statement name="DO1"> <block type="debug" id="H!7Be%$t2te$6k[_EWbU"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="S[-1Pm!G0VO=l-c{F3bv"> <field name="TEXT">smartlock lock</field> </shadow> </value> </block> </statement> <value name="IF2"> <block type="logic_compare" id="1a9inX0av.IjvV);-0o#"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="~lYK$*-{5h4Ko:;0J!dr"> <field name="VAR" id="86jV1Y#Q]F79bKNQL0^M">LockAction</field> </block> </value> <value name="B"> <block type="math_number" id="CdZDizjb+k~@_|3)6`n2"> <field name="NUM">3</field> </block> </value> </block> </value> <statement name="DO2"> <block type="debug" id=";4]9wn7uLAZi**Rt0.e8"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="Beu!s7t9ws[R4-7M{t:9"> <field name="TEXT">smartlock unlatch</field> </shadow> </value> </block> </statement> <next> <block type="controls_if" id="+0MSAI^;g+v5N7.91]U4"> <mutation elseif="5"></mutation> <value name="IF0"> <block type="logic_compare" id="m^2s-kU6}.8di1XjyByP"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="UW}{DMSBfYZ7t6`#Y=l-"> <field name="VAR" id="tb|U2N7:pjz6%bK|V=}J">Trigger</field> </block> </value> <value name="B"> <block type="math_number" id="~6sicGLRf#^{p1F;|)bC"> <field name="NUM">0</field> </block> </value> </block> </value> <statement name="DO0"> <block type="debug" id="nVl]4iz]q9%16}250c(6"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id=";)-p?w$.|DD4^XhMRB6X"> <field name="TEXT">System or Bluetooth</field> </shadow> </value> </block> </statement> <value name="IF1"> <block type="logic_compare" id="`;{7_hJXiN5T(`y?J~Z3"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="e{}KGk@{47LC%WH!KHB:"> <field name="VAR" id="tb|U2N7:pjz6%bK|V=}J">Trigger</field> </block> </value> <value name="B"> <block type="math_number" id="mFWE.!iPT)tUL1L4JUet"> <field name="NUM">2</field> </block> </value> </block> </value> <statement name="DO1"> <block type="debug" id=",P}9[nr(};{Rs+KpK:vo"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="Qaz^QONPUf{_2RHgk^=7"> <field name="TEXT">Button</field> </shadow> </value> </block> </statement> <value name="IF2"> <block type="logic_compare" id="fs0n.tGSn)7vH]#qJ!rs"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="Fl8{_YGWE@(r$G_0B6O!"> <field name="VAR" id="tb|U2N7:pjz6%bK|V=}J">Trigger</field> </block> </value> <value name="B"> <block type="math_number" id="jum;[*Q6I;X6knN7eood"> <field name="NUM">3</field> </block> </value> </block> </value> <statement name="DO2"> <block type="debug" id="oVI{ky3B|9}[6NEeA?)}"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="zLwt%dqaMTmiM[EIW]Su"> <field name="TEXT">Automatik</field> </shadow> </value> </block> </statement> <value name="IF3"> <block type="logic_compare" id="*ANMfFU}IZaupU][!;Ox"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="mntFPFL%C!l^bLirxQh9"> <field name="VAR" id="tb|U2N7:pjz6%bK|V=}J">Trigger</field> </block> </value> <value name="B"> <block type="math_number" id="4[dk`|=a;M.0ii+shlPH"> <field name="NUM">6</field> </block> </value> </block> </value> <statement name="DO3"> <block type="debug" id="Ejr3j/b_X0Pq,~NC%oFN"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="CLdZH/-pR$ESY+mC7g,/"> <field name="TEXT">Auto Lock</field> </shadow> </value> </block> </statement> <value name="IF4"> <block type="logic_compare" id="g3Qs?l)t#acbqeg!dJ_}"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="ecy~t^-NH:]%Qc/r]^oY"> <field name="VAR" id="tb|U2N7:pjz6%bK|V=}J">Trigger</field> </block> </value> <value name="B"> <block type="math_number" id="ai)7x1{|d{Q0Wf6ayhpC"> <field name="NUM">171</field> </block> </value> </block> </value> <statement name="DO4"> <block type="debug" id="4;)6?KYlz/ism~VPtK_r"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="uWfCy6[hCS`*McGe`jBC"> <field name="TEXT">HomeKit</field> </shadow> </value> </block> </statement> <value name="IF5"> <block type="logic_compare" id=",A^Z=?]?Ui|BK3SmBMKK"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="M$bGUaM45`i!uTLe[0jP"> <field name="VAR" id="tb|U2N7:pjz6%bK|V=}J">Trigger</field> </block> </value> <value name="B"> <block type="math_number" id="Jy#t$o8x5P(k3~-%,~Y7"> <field name="NUM">172</field> </block> </value> </block> </value> <statement name="DO5"> <block type="debug" id="xKaX~vO:wc34~,|CJw4L"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="0Tc@66h0?M*+{K})n%h/"> <field name="TEXT">MQTT</field> </shadow> </value> </block> </statement> <next> <block type="debug" id="z4qlYJnW2J:KDj.ICFmV"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="An,MNLYDX2//M$![?UoZ"> <field name="TEXT">HomeKit</field> </shadow> <block type="variables_get" id="3FdM#:Y*SirGpq5-@tT`"> <field name="VAR" id="}c1M!2HmR!`}X3bQT(JD">Auth-ID</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> <block type="procedures_defcustomreturn" id="$S)[j*JxCEt~nQv7TKkL" x="-12" y="687"> <mutation statements="false"> <arg name="text" varid="J2Y{`FV]/q4e/hXk/Gg}"></arg> </mutation> <field name="NAME">2hex</field> <field name="SCRIPT">ZW5jb2RlZCA9IEJ1ZmZlci5mcm9tKHRleHQpLnRvU3RyaW5nKCdoZXgnKTsNCnJldHVybiBlbmNvZGVkOw==</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="math_number" id="iDO!}O}n?EqrRDv5rgGu" x="504" y="976"> <field name="NUM">12</field> </block> </xml>
Button und Bluetooth werden erkannt, MQTT nicht. Evtl weil der Wert bei MQTT drei Zeichen lang ist.
Wenn ich alles auswerte bekomme ich einen zwölf stelligen Hexadezimalwert von dem ich nicht weiß wie ich ihn sinnvoll zerlegen kann.
Edit: Ok der Dezimalwert kann auch länger werden. Da muss man wohl vor dem Zerlegen die Länge prüfen und dann definfieren welche Bytes gemeinsam ausgewertet werden.
-
@Dr-Bakterius Hast du hier noch nen heißen Tipp zum Decodieren?
-
@rushmed sagte in 3 Fragen zu Nuki 3.0 Pro mit MQTT.:
@Dr-Bakterius Hast du hier noch nen heißen Tipp zum Decodieren?
Nein, damit habe ich mich noch nicht beschäftigt.
-
@dr-bakterius Danke trotzdem für dein Blockly. Mit dessen Hilfe hab' ich mir jetzt die die Hex Werte aller relevanten Geräte, Bedingungen und Nutzer (das war ne Affenarbeit) ausgelesen und mit nem Blockly übersetzt.
Das funzt bisher gut. -
@rushmed Kannst du gerne hier teilen. Vielleicht spart sich jemand in Zukunft die "Affenarbeit" dadurch.
-
Hi zusammen. Ich habe zwar seit gestern ein Nuki 4 pro aber das gab es hier in diesem threat auch schon .
Ich bin zu blöd mein Nuki via MQTT mit dem iobroker zu verbinden.
Ich habe theoretisch seit anbeginn den Sonoff Adapter mit MAT auf Port 1883 laufen. Dort kann ich den Nuki einbinden bekomme allerdings nur den Status Alive.
Jetzt habe ich zum Test zusätzlich den MQTT Adapter installiert auf Port 1884 . Dorthin verbindet sich der Nuki aber nicht weil ich wahrscheinlich keinen sepraten Port mit angeben kann. Ich gebe zwar als Host xxx.xxx.xxx.x:1884 aber das lehnt Nuki ab. Welche möglichkeiten habe ich noch bzw was mache ich falsch ?