Zipato Mini Keypad - verwendeten Key/User beim ent-/schärfen berücksichtigen

Hallo an euch,

ich sitze jetzt schon einige Wochen über diesem Thema ohne eine brauchbare Lösung für mich und mein Problem zu finden. Vielleicht kann mir jemand von euch dabei helfen.
Das HC2 und da Keypad von Zipato habe ich erfolgreich verbunden, ebenfalls sind mehrere Key(RFID) als auch ein PinCode angemeldet. Entsprechende Meldungen “locked”, “unlocked” by user X werden angezeigt. Habe auch bereits ein Script was mir eine globale Variable schreibt für den jeweiligen Fall. (Kann ich hier posten wenn notwendig)
Nun möchte ich aber, dass wenn der Pin eingegeben wird eine andere Variable gesetzt wird. Allerdings finde ich eine Lösung zu unterscheiden wer(welcher Key/welcher Pin) gerade den Status geändert hat.

Kann mir bitte jemand dazu helfen?

Danke!

Gruß
Peter

Hallo Peter,

schreib mal in deine Script folgende Zeilen mit rein. Damit siehst du dann welche Nutzer sich angemeldet haben !

Grüße Guido

function getUserdata()

-- Trigger auslesen
trigger = fibaro:getSourceTrigger()
operatingUser = trigger.event.data["name"]
operatingMedium = trigger.event.data["slotId"]
operatingStatus = trigger.event.data["status"]
operatingKeyPad = trigger.event.data["id"]

debug('green',"Keypad Aktion von: "..operatingUser)  
debug('green',"Keypad Aktion mit: "..operatingMedium)
debug('green',"Aktion: "..operatingStatus)

end

Du musst nur im Zipato Keypad noch die User den Key zuweisen !

Siehe Bild

Codezuweisung.jpg

Schau dir mal das Script an was ich im anderen Post hineingestellt habe ! Vielleicht passt es auch für dich !

Grüße Guido

Hallo Guido,

vom lesen her sieht dein Code ja echt brauchbar für mich aus aber ich als Neuling stoße doch immer wieder mal an die Grenze des Verständnisses. Ich kopier die mal alle Codezeilen mit hier rein. Ich bekomme immer wieder einen Error anstelle des Debugs…(siehe Screenshot)
Die ID12 hat den User “Garten” der sollte dann mit ausgewertet werden, bzw. ist dieser angelegt. Hätte ich das für alle User machen müssen?
Gruß Peter

--[[
%% properties
187 secured
187 value
%% events
187 AccessControlEvent
%% globals
PresentState
PresentStateOS
--]]
function getUserdata()
 
-- Trigger auslesen
trigger = fibaro:getSourceTrigger()
operatingUser = trigger.event.data["name"]
operatingMedium = trigger.event.data["slotId"]
operatingStatus = trigger.event.data["status"]
operatingKeyPad = trigger.event.data["id"]
 
debug('green',"Keypad Aktion von: "..operatingUser)  
debug('green',"Keypad Aktion mit: "..operatingMedium)
debug('green',"Aktion: "..operatingStatus)
 
end

if (tonumber(fibaro:getValue(187, "secured")) == 255 )
  then
  if 
    getUserdata()
    (fibaro:getGlobalValue("PresentStateOS") == "home")
    --(tonumber(fibaro:getValue(187, "UserID")) == "12" )
    then
    --fibaro:debug ("Error")
    fibaro:debug ("User 12 - Garten")
  else
  fibaro:setGlobal("PresentState", "away")
  fibaro:debug ("PresentState auf away gesetzt.")
  end
  elseif (tonumber(fibaro:getValue(187, "secured")) == 0 )
then
	fibaro:setGlobal("PresentState", "home")
  	fibaro:debug ("PresentState auf home gesetzt.")
else
  fibaro:debug ("nicht definiert")
    
end

error.png

Ich habe jetzt zunächst versucht an die Information des Wertes zu kommen doch irgendwie stimmt mit dem Code für das “trigger” etwas nicht. Oder zumindest verstehe ich es nicht … leider… Ich habe jetzt auch gleich die JSON mit beigefügt. Irgendwie komme ich auf keinen guten Weg, nach wie vor ist die Meldung wie im Screenshot.

Ich bitte um Hilfe.

Gerät: https://wiki.fhem.de/wiki/Z-Wave-ZIP_WT-RFID_Keypad

--[[
%% properties
187 value
%% globals
PresentState
PresentStateOS
--]]

--[[function getUserdata()
 
-- Trigger auslesen
local trigger = fibaro:getSourceTrigger()
operatingUser = trigger.event.data["name"]
operatingMedium = trigger.event.data["slotId"]
operatingStatus = trigger.event.data["status"]
operatingKeyPad = trigger.event.data["id"]
 
debug('green',"Keypad Aktion von: "..operatingUser)  
debug('green',"Keypad Aktion mit: "..operatingMedium)
debug('green',"Aktion: "..operatingStatus)
 
end]]--
  
local trigger = fibaro:getSourceTrigger()
local event = ""
if (tonumber(fibaro:getValue(187, "secured")) == 255 ) 
  --and (tonumber(fibaro:getValue(187, "id")) == "12" )
  then
    --getUserdata()
    fibaro:debug ("LOG: "..fibaro:getValue(187, "log"));
    --fibaro:debug ("Parameters: "..fibaro:getValue(187, "parameters"));
  	fibaro:debug ("LOGtemp: "..fibaro:getValue(187, "logTemp"));
    --fibaro:debug ("NodeID: "..fibaro:getValue(187, "nodeId"));
    --fibaro:debug ("LOGtemp: "..fibaro:getValue(187, "userCodes"));
    fibaro:debug ("UserID: "..trigger.event.data["id"]);
  
  fibaro:debug ("away")
    --(tonumber(fibaro:getValue(187, "UserID")) == "12" )
   
else
  fibaro:debug ("nicht definiert")
    
end

Hier noch die JONS-Ausgabe:
{“id”:187,“name”:“SE-RFID-EG-1”,“roomID”:0,“type”:“com.fibaro.doorLock”,“baseType”:“com.fibaro.securityMonitoring”,“enabled”:true,“visible”:true,“isPlugin”:false,“parentId”:186,“remoteGatewayId”:0,“interfaces”:[“battery”,“pinCode”,“zwave”,“zwaveAlarm”,“zwaveWakeup”],“properties”:{“parameters”:[{“id”:2,“lastReportedValue”:15,“lastSetValue”:15,“size”:1,“value”:15},{“id”:3,“lastReportedValue”:0,“lastSetValue”:0,“size”:1,“value”:0},{“id”:4,“lastReportedValue”:2,“lastSetValue”:2,“size”:1,“value”:2},{“id”:5,“lastReportedValue”:1,“lastSetValue”:1,“size”:1,“value”:1},{“id”:6,“lastReportedValue”:0,“lastSetValue”:0,“size”:1,“value”:0}],“pollingTimeSec”:0,“wakeUpTime”:7200,“zwaveCompany”:"",“zwaveInfo”:“3,3,67”,“zwaveVersion”:“0.28”,“alarmLevel”:“0”,“alarmType”:“0”,“batteryLevel”:“100”,“batteryLowNotification”:“true”,“configured”:true,“dead”:“false”,“deadReason”:"",“defInterval”:“0”,“deviceControlType”:“0”,“deviceIcon”:“79”,“emailNotificationID”:“0”,“emailNotificationType”:“0”,“endPointId”:“0”,“log”:"",“logTemp”:"",“manufacturer”:"",“markAsDead”:“true”,“maxInterval”:“0”,“maxUsers”:“255”,“minInterval”:“0”,“model”:"",“nodeId”:“57”,“parametersTemplate”:“791”,“productInfo”:“0,151,97,49,69,1,0,28”,“pushNotificationID”:“0”,“pushNotificationType”:“0”,“remoteGatewayId”:“0”,“saveLogs”:“true”,“secured”:“255”,“serialNumber”:“h’ffffffff”,“smsNotificationID”:“0”,“smsNotificationType”:“0”,“stepInterval”:“0”,“useTemplate”:“true”,“userCodes”:"[{“id”:1,“name”:"",“status”:“Occupied”,“update”:“Ok”},{“id”:2,“name”:"",“status”:“Occupied”,“update”:“Ok”},{“id”:3,“name”:"",“status”:“Occupied”,“update”:“Ok”},{“id”:4,“name”:"",“status”:“Occupied”,“update”:“Ok”},{“id”:5,“name”:"",“status”:“Occupied”,“update”:“Ok”},{“id”:6,“name”:"",“status”:“Occupied”,“update”:“Ok”},{“id”:7,“name”:"",“status”:“Occupied”,“update”:“Ok”},{“id”:8,“name”:"",“status”:“Occupied”,“update”:“Ok”},{“id”:9,“name”:"",“status”:“Occupied”,“update”:“Ok”},{“id”:10,“name”:"",“status”:“Occupied”,“update”:“Ok”},{“id”:11,“name”:"",“status”:“Occupied”,“update”:“Ok”},{“id”:12,“name”:“Garten”,“status”:“Occupied”,“update”:“Ok”},{“id”:13,“name”:"",“status”:“Available”,“update”:“Ok”},{“id”:14,“name”:"",“status”:“Available”,“update”:“Ok”},{“id”:15,“name”:"",“status”:“Available”,“update”:“Ok”},{“id”:16,“name”:"",“status”:“Available”,“update”:“Ok”},{“id”:17,“name”:"",“status”:“Available”,“update”:“Ok”},

error2.png

Hallo Zusammen,

ich habe die gleiche Anforderung, dass ich gerne die ID und Name des RFID Tokens auslesen möchte.
Ich habe es mit dem Code von Iquana versucht, aber das funktioniert nicht. Ich habe die Vermutung, dass die Eigenschaften SlotId, Name etc. nicht über den SourceTrigger mitkommen. Bei der Ausgabe des SourceTrigger Arrays sehe ich es zumindest nicht.

Anbei mein Code mit dem ich das getestet habe. Ich bekomme ebenfalls die Meldung, dass trigger.event.data nichts enthält.

--[[
%% properties
264 value
%% events
%% globals
--]]

local trigger = fibaro:getSourceTrigger()
 
--Funktion zum auslesen der UserToken vom Keypad  
function getUserdata()

-- Trigger auslesen
trigger = fibaro:getSourceTrigger()
operatingUser = trigger.event.data["name"]
operatingMedium = trigger.event.data["slotId"]
operatingStatus = trigger.event.data["status"]
operatingKeyPad = trigger.event.data["id"]

--debug('green',"Keypad Aktion von: "..operatingUser)  
fibaro:debug("Keypad Aktion mit: "..operatingMedium)
fibaro:debug("Aktion: "..operatingStatus)

end

-- Code
if (trigger["type"] == "other") then
	fibaro:debug('Direkt Aufruf des Scripts nicht erwünscht!');
	else
	fibaro:debug('Kein Direktaufruf es darf aufgerufen werden!')
    -- starte Funktion
    getUserdata()
    -- Trigger Array ausgeben um zu schauen was drin steht
  	for k, v in pairs( trigger ) do
   	print(k, v)
	end    
end

Abend in die Runde,

ich glaube ihr habt eure Codes noch nicht in das Keypad synchronisiert ! Man muss noch die angelernt Codes im HC2 in das Keypad synchronisieren ! Das heisst man geht in Module auf RFID-Tagreader und dort in Erweitert auf Synchronisation starten. Bei mir dauerte es ein wenig und es ist auch mal abgebrochen! Aber irgendwann geht es! Dann sollte die Auslesung der Trigger funktioniert !

Grüße Guido

Hallo Guido,

m.E. habe die die Sync richtig durchgeführt. Es werden ja auch die Keys erkannt und auch die die value-Änderung funktioniert sowohl mit RFID als auch mit PinCode.

Siehe hier… (Status: Occupied)
{\“id\“:2,\“name\“:\“\“,\“status\“:\“Occupied\“,\“update\“:\“Ok\“},{\“id\“:3,\“name\“:\“\“,\“status\“:\“Occupied\“,\“update\“:\“Ok\“},{\“id\“:4,\“name\“:\“\“,\“status\“:\“Occupied\“,\“update\“:\“Ok\“},{\“id\“:5,\“name\“:\“\“,\“status\“:\“Occupied\“,\“update\“:\“Ok\“},{\“id\“:6,\“name\“:\“\“,\“status\“:\“Occupied\“,\“update\“:\“Ok\“},{\“id\“:7,\“name\“:\“\“,\“status\“:\“Occupied\“,\“update\“:\“Ok\“},{\“id\“:8,\“name\“:\“\“,\“status\“:\“Occupied\“,\“update\“:\“Ok\“},{\“id\“:9,\“name\“:\“\“,\“status\“:\“Occupied\“,\“update\“:\“Ok\“},{\“id\“:10,\“name\“:\“\“,\“status\“:\“Occupied\“,\“update\“:\“Ok\“},{\“id\“:11,\“name\“:\“\“,\“status\“:\“Occupied\“,\“update\“:\“Ok\“},{\“id\“:12,\“name\“:\“Garten\“,\“status\“:\“Occupied\“,\“update\“:\“Ok\“},{\“id\“:13,\“name\“:\“\“,\“status\“:\“Available\“,\“update\“:\“Ok\“},{\“id\“:14,\“name\“:\“\“,\“status\“:\“Available\“,\“update\“:\“Ok\“},{\“id\“:15,\“name\“:\“\“,\“status\“:\“Available\“,\“update\“:\“Ok\“},

ist das event.data eine Class vom Z-Wave Modul? wie hängt das zusammen?

Wenn ich die Variable Trigger auslese, dann erhalte ich immer einen anderen Code der ähnlich wie dieser aussieht:
“table: 0x9aa7950”
Dieser ändert sich mit jeder Änderung des value.

Gruß
Peter

Ich muss mal bei mir probieren. Hab vielleicht eine Idee wie man das umsetzen kann ! Werde mal diese Woche ein paar Dinge testen! Glaube das mit dem auslesen der Trigger vielleicht man eine andere Variablen bei Code Eingabe ändern kann !

Grüße

Hallo an euch,

ich habe gestern Abend einen Ansatz(Lösung) gefunden. Ich gehe über den Log der ja den User und die ID enthält. Dies funktioniert soweit auch schon, allerdings muss ich nochmal schauen ob da noch ein Delay rein muss, da der Log zu zeitig gelesen wird. Kurz um, die Lösung ist da, die Details kommen jetzt.

Da ich diese Woche dienstlich unterwegs bin komme ich erst kommendes We dazu hier weiter zu machen. Dann poste ich auch den Code.

Gruß
Peter

Abend Peter,

ja wenn du kannst poste mal dein Code. Würde mich interessieren wie du ihn umgesetzt hast. Ich war auch gerade dran einen zu schreiben. Aber egal ! Bin zur Zeit auch etwas im Stress und nicht immer am PC!

Grüße Guido

Guten Abend,

ich habe hier ein Code Snippet gefunden was das Log ausliest und dann die User und locked bzw. unlocked ausgibt. Funktioniert leider bei mir noch nicht. Ich glaube die Regular Expression passt nicht. Das muss ich am WE mal testen.

https://forum.fibaro.com/topic/22280-zipato-rfid/?do=findComment&comment=104696

Grüße,
Oliver

Hallo,

@ Guido
Dank meiner Frau könnte ich vorhin per Remote noch daran arbeiten und es funktioniert gut. Denke am We poste ich dann den Code hier.

@Oliver
Auf einer ähnlichen Basis wie dein Link habe ich auch angesetzt. Momentan hänge ich an einem Array fest welches mir die ID vergleicht.
Gruß
Peter

Hallo Guido,

sorry, das ich erst jetzt antworte, leider ging es nicht eher, da mein HC2 ein Totalausfall war. Nun habe ich seit einem Monat ein Neues und musste von 0 anfangen. Angeblich wäre es wohl so, dass man das Backup zurückspielen kann, jedoch wollte mir dies niemand verraten noch helfen obwohl das System unter Gewährleistung getauscht wurde…

Aber zurück zum Thema. Ich habe damals den Ansatz gewählt über den http Request den User aus dem Log zu extrahieren. Dies hat auch sehr gut geklappt. Leider habe ich den Code dazu nicht mehr, da ich damals noch nicht alles in Klartext gesichert habe…

Woran ich jedoch zum Schluss gescheitert bin, war dass das Keypad sich intern sperrt und es wirklich nur die 2 Stati locked/unlocked kennt. Und wenn ein User bereits einmal gesperrt hat kann der Zweite dies nicht noch einmal tun.
Da sich bei uns auch die Anforderungen noch weiter geändert haben ist meine finale Lösung das Zipato in Kombination mit einem VD zu betreiben. Das funktioniert gut und wurde auch gleich angenommen.

Gruß
Peter

Hallo Peter,

Woran ich jedoch zum Schluss gescheitert bin, war dass das Keypad sich intern sperrt und es wirklich nur die 2 Stati locked/unlocked kennt. Und wenn ein User bereits einmal gesperrt hat kann der Zweite dies nicht noch einmal tun.

Das stimmt nicht. Du kannst den bereits gesetzten Status des KeyPad noch einmal setzen.

Im oben aufgeführten Code wird der Benutzer nicht ausgegeben, weil die Szene mit irgendeinem anderen Gerät getriggert wurde und somit in der TriggerSource die Werte natürlich auch nicht drin stehen.

Grüße
Rene

Hallo Rene,

es kann durchaus sein, das ein anderer User dies hinbekommen hat und bei dem dies auch funktioniert. Wenn ich es richtig verstanden habe gibt es eine “alte” und eine “neue” Version des Keypad. Und für mich gesprochen, ich konnte den Wert nicht über LUA ändern. Da ja mein HC2 dann total defekt war und sich bei mir die Anforderungen geändert haben wurde das Thema von mir nicht weiter verfolgt.

Gruß
Peter

Hallo Peter,

dass Du den Zustand des KeyPad per Lua nicht ändern konntest wundert mich nicht, denn das KeyPad kennt den Zustand der Keys nicht.
Im KeyPad sind die Benutzerdaten durch die Syncronisierung bekannt. Wenn Du nun Home oder Away drückst und den RfId Tag davor hälst, wird dieser (also Home oder Away) gemeinsam mit den gespeicherten Benutzerdaten an das HC2 übertragen und kann dort - vorausgesetzt die Szene wird mittels AccessControlEvent getriggert - ausgelesen werden.

Zu der hier abgebildeten Szene gehört noch eine Beschreibung aus der in meinen Augen gut hervor geht, warum das so ist. Aber offenbar ist es hier üblich sich Szenen anderer zu nehmen, als die eigenen auszugeben und sich dann bei Fragen zurück zu ziehen.

In Deinem Beitag hier hast Du schlicht zu viele und auch noch die falschen Trigger verwendet.

	
--[[
%% properties
187 secured
187 value
%% events
187 AccessControlEvent
%% globals
PresentState
PresentStateOS
--]]

Wenn Du hier alles außer das AccesControlEvent raus nimmst und die Szene per RfId Tag triggerst, wirst Du auch keine Fehlermeldung mehr bekommen.

Grüße

Guten Morgen Peter,

bin gerade im Weihnachtsstress und hab dadurch nur wenig Zeit. Aber Rene hat dir ja schon geholfen !

Ich hatte auch schon einiges ausprobiert und nachgelesen. Leider kann man den Status, soviel ich weiss, nicht explizit aus dem Keypad raus lesen. Man kann nur den Status beliebig mit den Key´s oder dem Code ändern. Das geht auch, wenn das Keypad den Status (Lock/Unlock) schon hat. Habe ich auch so bei mir schon probiert !

Was man mal testen müsste, ob sich bei den unterschiedlichen Key´s oder Code´s auch einzelne Einstellungen durchführen lassen ! Das Keypad merkt ja wer sich angemeldet hat! Wollte ich auch schon mal machen aber hatte noch nicht die Zeit!

Grüße Guido

Moin zusammen @Rene2 du scheinst ja ne Menge Erfahrung mit dem KeyPad zu haben…Ich nutze ein HC2 mit KeyPad (nenne ich jetzt mal KeyPad1) und nutze auch ein HCL mit KeyPad (nenne ich mal KeyPad2)…Das HCL ist im HC2 als Zweitcontroller eingetragen und das KeyPad2 vom HCL sowohl am HCL, sowie im HC2 zu sehen. Wenn ich über das HCL Trigger kommt es auch am HC2 an, aber es funktioniert leider nur als “secured” und nicht als “AccessControlEvent”. Dagegen das KeyPad1, welches direkt am HC2 includiert ist kann “AccessControlEvent” triggern. Leider ist die Reichweite nicht ausreichend, dass ich nur mit dem HC2 auskomme. Ich habe versucht über das alte “RFidSync Lua Script” zu syncronisieren (also Pad1+2), welches im HC2 auch funktioniert, aber wird leider nicht im HCL übernommen…gibts eine Lösung?

Aufbau:
HC2 -> Wohnung
KeyPad 1 -> Haustüre (schaltet, Alarmanlage aus, Haustüre auf, Wohnungstüre auf)
KeyPad 2 -> in der Garage (soll nur die Alarmanlage schalten…) <— funktioniert aber nicht wirklich, weil es nicht doppelt getriggert werden kann
Provisorisch schalte ich von der Garage aus über einen KeyFob, der das HC2 Triggert, aber auch schlechten Empfang hat

Wir hatten ja ursprünglich die Anforderung diskutiert den Usernamen und Lock State vom Keypad abzufragen.
Ich hatte dieses WE mal wieder ein bischen Zeit das zu lösen. Folgendes Script funktioniert und liest Username, LockState etc. vom Keypad aus, wenn ein RFID Token verwendet wird. Ich hatte in meinem ersten Script den falschen Trigger mit AccessControlEvent als Trigger funktioniert es. Ursprüngliches Script kommt von hier. https://forum.fibaro.com/topic/31168-zipato-keypad-how-to-armdisarm-regardless-of-the-keypad-status/

--[[
%% properties
%% events
264 AccessControlEvent
%% globals
--]]

-- Keypad:264

--allow only one instance--
if (fibaro:countScenes() > 1)
 then
  log("Scene already running");
  fibaro:abort()
end

local debug = true --set to false to stop debug messages
local function log(str) if debug then fibaro:debug(str); end; end 
local lockState = " "

log("Triggered")

-- get event data
trigger = fibaro:getSourceTrigger()
operatingUser = trigger.event.data["name"]
operatingMedium = trigger.event.data["slotId"]
operatingStatus = trigger.event.data["status"]
operatingKeyPad = trigger.event.data["id"]
    
log("Keypad action medium: "..operatingMedium)
log("Keypad ID: "..operatingKeyPad)
log("Name: "..operatingUser)
log("Action: "..operatingStatus)

if operatingStatus == "Unlock" then
  lockState = "deaktiviert" 
  log("deactivate")
  else
  	lockState = "aktiviert"
  	log("activate")
end

-- Debug zum prüfen
log("Die Arlarmanlage wurde von " ..operatingUser.. " ".. lockState .. " .");