Für die vereinzelten Nuki Besitzer habe ich mal eine Ausbauversion für ein Virtual Device erstellt.
Warum Ausbauversion? Das ganze ist wirklich äußerst rudimentär! Öffnen, schließen, lock’n’go - fertig.
Keine json responses implementiert, d.h. auch (noch) keine Möglichkeit auf Aktionen des Schlosses zu reagieren.
Aber man kann zumindest vom HC2 aus das Schloss jetzt ansprechen, wofür auch immer…
Was muss selbst gemacht werden?
Ausgangslage ist eine freigeschaltete Api auf der Bridge
im VD die IP vom Schloss eintragen
Port ist 8080
1234567 durch die eigene nukiID ersetzen
123456 durch den eigenen Api Token ersetzen
Vielleicht kann sich ja auch jemand anderes nochmal einen Kopf machen wie ich die responses vernünftig auswerten kann.
Ein möglicher Response sieht z.B. so aus:
Frage: http://192.168.1.1:8080/lockState?nukiId=1234567&token=123456
Antwort: {“state”: 3, “stateName”: “unlocked”, “batteryCritical”: false, “success”: true}
funktioniert schon mal, leider kann ich nicht Programmieren so das ich mit dem String auswerten passen muss.
Ich verfolge aber gerne die Diskussionen hier weiter, da ich schon ein par Ideen hätte wie man das Nuki sinnvoll mit einbinden kann ohne IFTTT zu verwenden, wie z.B. lock’n’go und/oder manuelles zuschliessen schaltet den Alarm scharf, aber normales Lock nicht.
ich bekomme morgen mein Nuki und möchte mich dann mal an der VD versuchen.
Leider scheint sich der Anhang im ersten Post nicht downloaden zu lassen.
Ist es nur ein Problem bei mir oder ein generelles Problem. Vll kann es ja mal jemand anderes versuchen die VD downzuloaden.
ich habe hier mal einen rudimentären Versuch gestartet verschiedene Stati aus dem Nuki auszulesen und diese dann über das Symbol der VD anzuzeigen.
Ist mal so ein erster Versuch der gerne weiter ausgebaut werden darf.
Erklärung:
Angehängte Icons herunterladen, entpacken und ins HC2 importieren
den Code unten in die Mainloop der VD kopieren.
Zeile 1: IP Eurer Nuki Bridge eintragen
Zeile 4: nukiId und token anpassen
Zeile 23: 999 mit der ID Eures Virtual Device ersetzen
Zeilen 10-20 Eventuell die 1001-1010 mit den entsprechenden ID’s eurer importierten Icons ersetzen.
nukiIP = '1.1.1.1'
local nukiport = 8080
http = Net.FHttp(nukiIP, nukiport);
response = http:GET("/lockstate?nukiId=123456789&token=aBcDef")
fibaro:debug(response)
result = json.decode(response);
fibaro:debug("name: "..result.state)
function getIcon(LockState)
if(LockState == 0) then return 1010 -- uncalibrated
elseif(LockState == 1) then return 1009 -- locked
elseif(LockState == 2) then return 1008 -- unlocking
elseif(LockState == 3) then return 1007 -- unlocked
elseif(LockState == 4) then return 1006 -- locking
elseif(LockState == 5) then return 1005 -- unlatched
elseif(LockState == 6) then return 1004 -- unlocked (lock 'n' go)
elseif(LockState == 7) then return 1003 -- unlatching
elseif(LockState == 254) then return 1002 -- motor blocked
elseif(LockState == 255) then return 1001 -- undefined
else return 1001 end -- error
end
fibaro:call(999, "setProperty", "currentIcon", getIcon(result.state))
fibaro:sleep(30000)
Hinweis:
Der Code startet alle 30 Sekunden eine Abfrage des Schloß Status. Inwiefern sich das auf die Batterielebensdauer auswirkt kann ich noch nicht sagen.
Danke für die Mühe Peter, langsam gehts ja voran mit NUKI
Bilder IDs etc. hab ich aber wie ich zur ID vom Virtual Device von NUKI komme weiss ich nicht mehr, kann jemand helfen?
Servus,
ich würde gerne mein NUKI beim aufschliessen den Alarmstatus an der Haustüre auf “unscharf” und beim abschliessen auf “scharf” stellen lassen.
Da ich LUA nicht kann habe ich versucht dies mit einer Blockszenen zu realisiern versucht, geht aber nicht da ich bei “wenn” NUKI in den VD`s nicht auswählen kann.
Erst bei “dann” wird mir in der VD Auswahl NUKI zur Auswahl angeboten.
Könnte man meinen obigen Wunsch mit LUA umsetzen?
Die Buttons sind ja auch kein Status sondern eine Aktion. Deshalb kannst du die dort nicht auswählen. Setz in den Buttons noch einen Status einer GV. Die kannst du dann in Blockszenen auswählen.
Die obige Lösung gefällt mir noch nicht. Das direkte Setzen des Alarms ist eine “schmutzige” Lösung. Eleganter ist es eine globale Variable zu setzen, die dann über Szenen (insbesondere Blockszenen) abgefragt werden kann.
Dazu eine Globale Variable “nukiState” anlegen mit den Werten “locked” und “unlocked”. Dann dieses Script verwenden:
nukiIP = '1.1.1.1'
local nukiport = 8080
http = Net.FHttp(nukiIP, nukiport);
response = http:GET("/lockstate?nukiId=123456789&token=aBcDef")
fibaro:debug(response)
result = json.decode(response);
fibaro:debug("name: "..result.state)
function getIconAlarm(LockState)
if(LockState == 0) then return 1010, "unlocked" -- uncalibrated
elseif(LockState == 1) then return 1009,"locked" -- locked
elseif(LockState == 2) then return 1008,"unlocked" -- unlocking
elseif(LockState == 3) then return 1007,"unlocked" -- unlocked
elseif(LockState == 4) then return 1006,"locked" -- locking
elseif(LockState == 5) then return 1005,"unlocked" -- unlatched
elseif(LockState == 6) then return 1004,"unlocked" -- unlocked (lock 'n' go)
elseif(LockState == 7) then return 1003,"unlocked" -- unlatching
elseif(LockState == 254) then return 1002,"unlocked" -- motor blocked
elseif(LockState == 255) then return 1001,"unlocked" -- undefined
else return 1001,"unlocked" end -- error
end
local Icon, NukiState = getIconAlarm(result.state)
fibaro:call(999, "setProperty", "currentIcon", Icon) -- Setze Icon
fibaro:setGlobal("nukiState", NukiState) -- Setze Nuki Status
fibaro:sleep(30000)