Zipato mini Keypad - RFID-Tag anlernen HC2 Firmware 4.150

Hallo an Alle,

nachdem ich nun alles probiert habe was das Forum Siio so schreibt um einen RFID-Tag Reader mit dem Zipato Tag Reader anzulernen und dabei nie ein Erfolg hatte, hab ich endlich eine Lösung gefunden mit der neuen Firmware 4.150. Geht super Einfach !
Hier nun die Lösung : (alles selbsterklärend)

--[[
%% properties
%% events
%% globals
--]]
local Did = 311    -- ID des Tag Reader
local slot = "1"   -- RFID - Tag Nummer
local tagid = "143,92,53,54,121,80,1,4,0,0"  -- oben im Debug wir Unregistered Code angezeigt wenn RFID-Tag am Reader gelesen wird, diesen hier einfügen
local taguser = "Guido"  -- eigentlich unwichtig
fibaro:call(Did, "setUserCodeDec", slot, tagid, taguser);
print "done"

Das einziges was ich noch nicht rausgefunden habe, wie man den Code ändert ! Da wäre ich für Hilfe dankbar.

Grüße

Guido

Hier noch ein Nachtrag !

Hab nun noch ein wenig probiert und ein Scene erstellt wo man den Code einstellen kann. Dabei wie boomx in einer Anleitung erklärt die Zahlen 1,2,3,4 umwandeln in

  1. 49
  2. 50
  3. 51
  4. 52

Hier noch die Scene - ähnlich wo oben !

--[[
%% properties
%% events
%% globals
--]]
local Did = 311    -- ID des Tag Reader
local slot = "2"   -- USer 2 
local tagid = "49,49,49,49"  -- dabei steh die Zahl 1 für 49, 2 für 50, 3 für 51 und 4 für 52
local taguser = "Guido"  -- eigentlich unwichtig
fibaro:call(Did, "setUserCode", slot, tagid, taguser);
print "done"

Ich hoffe ich konnte einigen helfen.
Grüße

Das einziges was ich noch nicht rausgefunden habe, wie man den Code ändert ! Da wäre ich für Hilfe dankbar.
Mit einem Editor, oder was meinst du damit?

Hast du mal versucht den Code einfach zu überschreiben ? Ansonsten kann ich heute Abend nochmal testen !!
Nimm dazu einfach meine Scene von oben und ändere den Code !

Grüße

Also wie es aussieht müssen wir noch ein wenig warten bis die neue Firmware rauskommt. Dann kannst du im Modul über Synchronization die Codes wieder löschen.

Ein andere Idee hab ich zur Zeit auch nicht

Grüße Guido

Hallo Guido,
anscheinend hast Du das zipato Mini Keypad erfolgreich in Dein HC2 einbinden können.
Ich bin Anfänger was Z-Wave und Fibaro HC2 angeht und absoluter Neuling was LUA-Programmierung angeht, was bedeutet, dass ich das Keypad nicht ans laufen bekomme.
Mithilfe der siio.de-Anleitungen komme ich gar nicht klar. Ich hab jetzt aber eine Anleitung gefunden, die zumindest augenscheinlich für Doofe gemacht ist… :wink:
https://smarterhome.sk/en/blog/zipato-rfid-and-fibaro-hc2_67.html
Aber auch mit dieser Anleitung schaffe ich es nicht das Keypad zu integrieren bzw. ans laufen zu bekommen.

Das Keypad scheint korrekt inkludiert zu sein. Auch das Auslesen der „Zipato RFID Key Tag“ funktioniert und ich bekomme den RFID-Code angezeigt.
Vielleicht habe ich auch bei den beschriebenen Schritten Fehler gemacht. Ich weiß es nicht…
Wenn ich die Anleitung richtig verstehe, muss ich letztendlich 4 Scripts erstellen, oder?

Hier meine angepassten Scripts. Den RFID-Code habe ich allerdings durch Xe ersetzt. Außerdem würde ich gerne die Zugangsberechtigung erstmal auf eine Anzahl von 3 anstelle von 5 begrenzen.

zipato RFID Scene 1 von 4:
–[[
%% properties
%% events
%% globals
–]]
local ID = 121 – ID RFID Citacky
fibaro:call(121, “xxx,xxx,xxx,xx,xx,xx,x,x,x,x”, 1);
fibaro:call(121, “xxx,xxx,xxx,xx,xx,xx,x,x,x,x”, 2);
fibaro:call(121, “getUserCode”, 3);

zipato RFID Scene 2 von 4:
–[[
%% properties
%% events
%% globals
–]]
local ID = 121 – ID RFID Citacky
local usersStatus = fibaro:getValue(121, “xxx,xxx,xxx,xx,xx,xx,x,x,x,x”);
local usersStatus = fibaro:getValue(121, “xxx,xxx,xxx,xx,xx,xx,x,x,x,x”);

zipato RFID Scene 3 von 4:
–[[
%% properties
%% events
%% globals
–]]
local ID = 121 – ID RFID Citacky
fibaro:call(121, “setUserCode”, “3”, “Occupied”, “2313”, “”);

zipato RFID Scene 4 von 4:
–[[
%% properties
2313
%% events
%% globals
–]]

local trigger = fibaro:getSourceTrigger()
local rfid_value_status = ‘’

Debug = function ( color, message )
fibaro:debug(string.format(’<%s style=“color:%s;”>%s’, “span”, color, message, “span”))
end
if (trigger[‘type’] == ‘property’) then
fibaro:debug(‘RFID Die Szene wird ausgelöst.’)
local rfid_ID = tonumber(trigger[‘deviceID’])
local rfid_value = tonumber(fibaro:getValue(rfid_ID, ‘value’))
if (rfid_value == 1) then
rfid_value_status = ‘Away’
Debug(‘red’, ‘Status ’ …rfid_value_status… ’ nastaveny.’)
fibaro:startScene(12)
elseif (rfid_value == 0) then
rfid_value_status = ‘Home’
Debug(‘green’, ‘Status ’ …rfid_value_status… ’ nastaveny.’)
fibaro:startScene(11)
end

Könntest Du mal einen Blick drauf werfen? Ich bin für jede Hilfe dankbar.

VG Dirk

Ach ja, hätte ich fast vergessen:
Firmware Version 4.160

So wie es aussieht bin ich auch zu blöd die Scripts korrekt darzustellen…
Wie wird das gemacht?

Vielen Dank im Voraus!

VG Dirk

Hallo Dirk,

war gestern nicht im Forum daher jetzt erst meine Antwort. Also vergiss erstmal alle Script von Siio. Die haben bei mir alle nicht funktioniert. Nimm als erstes das Keypad und drücke Home oder Away und halte eine RFID Tag an das Keypad. Jetzt siehst du oben im Debug deines HC2 eine Unregistered Key. Den musst du nun in das Script von mir bei local tagid = "x,x,x,x,x,x,x,x,x,x" eintragen. Bei local Did = … ID des Keypad und bei local slot = "…" die Nummer des User (insgesamt 254 User bzw. RFID Tag kannst du anlernen. Am besten du fängst erstmal mit eine RFID Tag an.

Nun startest du die Scene und danach drückst du am Keypad Home und hälst den Chip dran. Starte ruhig danach nochmal die Scene. Als Ausgabe bekommst du dann nur “done”. Für jeden weiteren Chip machst du es genau so. Immer nach einander. Wenn es geklappt hat siehst du im Debug-Fenster den User und unlock oder lock !

Hier nun nochmal das kleine Script :

--[[
%% properties
%% events
%% globals
--]]
local Did = ..    -- ID des Tag Reader
local slot = ".."   -- RFID - Tag Nummer
local tagid = "x,x,x,x,x,x,x,x,x,x"-- oben im Debug wir Unregistered Code angezeigt wenn RFID-Tag am Reader gelesen wird, diesen hier einfügen
local taguser = "Guido"  -- eigentlich unwichtig
fibaro:call(Did, "setUserCodeDec", slot, tagid, taguser);
print "done"

Wenn du hier ein Code veröffentlichen willst muss du am Anfang des Scripts auf den Button “code” gehen und das Script einfügen und dann am Ende des Scripts nochmal auf Code. Dann wird dieser ordentlich dargestellt. Leider gibt es hier im Forum keine Hilfe dazu !

Für die Eingabe des Codes habe ich auch noch eine Lösung gefunden. Gerne kann ich dir das auch noch geben ! Das Script wo dann scharf geschaltet wird kann ich auch noch zur Verfügung stellen. Das kann man sehr schön erweitern. Hab auch ein wenig gebraucht um alle bei Siio zur Verfügung gestellten Skripts das richtige zu finden. Viele davon gehen leider nicht mehr.

Grüße Guido

Hallo Guido,

vielen Dank für Deine Hilfe und Deine Infos!
Ich bin für jede Hilfe riesig dankbar. Vielleicht hätte ich auch erstmal mit einer einfacheren Anwendung inkl. Script anfangen sollen…

Ich würde gerne auf Dein Angebot eingehen, dass Du mir die anderen Scripts auch zur Verfügung stellen würdest.

Dieses Wochenende bin ich allerdings leider nicht zu Hause, so dass ich das/die Script/s erst Anfang nächster Woche ausprobieren könnte. Ich werde berichten…

Vielen Dank schon mal im Voraus!

Wünsche ein schönes Wochenende
Gruß Dirk

Hier noch das Script für den Code.

--[[
%% properties
%% events
%% globals
--]]
local Did = ...    -- ID des Tag Reader
local slot = ".."   -- USer 2 
local tagid = "x,x,x,x"  -- dabei steh die Zahl 1 für 49, 2 für 50, 3 für 51 und 4 für 52
local taguser = "Guido"  -- eigentlich unwichtig
fibaro:call(Did, "setUserCode", slot, tagid, taguser);
print "done"

Einstellungen wie beim ersten Script. Wenn du das erstmal hinbekommen hast gebe ich dir noch das Script zum aktivieren der Alarmanlage.

Grüße und ich bin gespannt ob es klappt.

Vielen Dank!
Ich werde berichten ob es funktioniert hat.

Gruß Dirk

Hallo Guido,

ich habe gestern beide Scripts ausprobiert und sie funktionieren, allerdings meiner Meinung nach nicht 100%ig.

RFID-Tag Script
Nach mehrmaligem Ausprobieren bekomme ich jetzt folgende Meldungen in der oberen Benachrichtigungszentrale (BZ):
[18:13:08] ID 121: unlocked by user 1
[18:13:11] ID 121: locked by user 1
Das sollte ja so richtig sein, oder? Allerdings wird der Tag-User “Dirk” nicht angezeigt.
Wenn ich den “Home” oder “Away” Button drücke und den RFID-Tag an das Keypad halte, hatte ich außerdem hin und wieder das Problem, dass die rote LED ca. 5 Sekunden leuchtete, kein Piepton ertönte und in der BZ auch keine Statusänderung angezeigt wurde. Allerdings kann ich das nicht reproduzieren.
Wie kann ich denn einen zweiten User zufügen? Muss dieses Script für jeden User erstellt werden, oder kann man das Script erweitern? Wenn ja, wie?

Code Script
Nach dem Betätigen des “Home” oder “Away” Buttons gefolgt von dem im Script hinterlegten Code und anschließende Bestätigung mittels des “Enter” Buttons erhalte ich folgende Meldung in BZ:
[18:31:00] ID 121: Unregistered code [xx,xx,xx,xx,0,0,0,0,0,0]
“xx” sind natürlich nur Platzhalter für den Code.
Ein “locked” bzw. “unlocked by user” in der BZ erhalte ich allerdings nicht.

Wie sieht es eigentlich mit den Script-Einstellungen im Reiter “Allgemein” aus? Müssen dort Anpassungen durchgeführt werden?
Meine aktuellen Einstellungen lauten:

  • max. ausgeführte Instanzen: 2
  • Szene starten: automatisch
  • alle restlichen Kästchen nicht angehakt

Und wie sieht es mit den Einstellungen der verschiedenen Module aus?
übergeordnetes Gerät

  • Modulart: Z-Wave Gerät, ID 120
    untergeordnetes Gerät
  • Modulart: Türschloss, ID 121 „Mini Keypad“
  • Modulart: Ein/Aus Schalter, ID 122 „120.0.1“
    Müssen dort Einstellungen im Reiter “Erweitert” durchgeführt werden?

Info: Bzgl. des Moduls »Türschloss, ID 121 „Mini Keypad“« stehen bei mir u.a. folgende Einträge:

  • Synchronisation ist ordnungsgemäß
  • PIN Konfiguration: 2/255, Bezeichnung jeweils „Unbekannt“

Ich glaube das war’s erstmal.
Ich danke Dir schon mal im Voraus für Deine Hilfe!

Gruß
Dirk

Abend,

also erstmal hast du fast alles richtig gemacht! Du musst zu jedem RFID-Chip das Script umschreiben. Da Du die Anmeldung der einzelnen Chip´s nur einmal machen musst habe ich das Script einfach so gelassen und für jeden Code den Chip einfach umgeschrieben. Starten muss du es jedesmal manuell. Ist also egal was bei Allgemein steht.Bei dem Script geht es grundlegend nur um die Anmeldung der einzelnen Chips am Reader. Danach benötigst du es erstmal nicht. Ich denke von Fibaro eine neue Firmware rausbringt wird der Reader bestimmt noch besser integriert.

Für ein Türschloss muss du nun noch ein weiteres Script starten. Ihr mal das was ich benutze. Hab es aber noch nicht groß umgeschrieben und angepasst. Wichtig, du muss noch Variablen “Home” und “Away” in PresentState anlegen. Sobald ich mehr Zeit habe will ich mich damit aber auch noch intensiver beschäftigen. Aber dein Türschloss kannst du da gut integrieren.

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

-- notwendige IDs
local sensorID = {40} -- IDs der Sensoren
local phoneID = {161} -- IDs der Handys
local doorlockID = {311} -- IDs der doorlocks

-- zusätzliche Optionen
local own_action = false -- eigene Aktionen ausführen; Funktionen müssen befüllt werden
local disarmed_bug = true -- Firmware Bug umgehen

-- eigene Funktionen
function actionsafterArmed()
  fibaro:debug('Führe eigene Funktionen nach dem Schärfen aus')
end

function actionsafterDisarmed()
  fibaro:debug('Führe eigene Funktionen nach dem Entschärfen aus')
end

-- AB HIER NICHTS MEHR ÄNDERN
local trigger = fibaro:getSourceTrigger()
local rfid_value_status = ''

Debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span"))
end

function armedcheckSensorID(array)
  for j=1, #sensorID do
    if sensorID[j] ~= nil then
      if (tonumber(fibaro:getValue(sensorID[j], 'armed')) ~= 0) then
          return false
      end
    end
  end
  return true
end

-- Funktion für die Öffnung der Tür
function openDoor()
    if (doorlockID[0] ~= nil) then
    fibaro:debug('Türschlösser werden geöffnet.')
    for j=0, #doorlockID do
     if doorlockID[j] ~= nil then
       fibaro:call(doorlockID[j],'unsecure')
     end
    end
  end
 end
 
-- Funktion zum Versenden der Push
function sendPush(text)
 if (phoneID[1] ~= nil) then
  for i=1, #phoneID do
     if phoneID[i] ~= nil then
       fibaro:debug('Versende Push an ID ' ..phoneID[i])
       fibaro:call(phoneID[i],'sendPush', text, 'alarm')
     end
  end
 end
end

function setArmedStatus(set_status)
  if set_status then
    fibaro:debug('Sensoren werden scharf geschaltet.')
    for k=1, #sensorID do
     if sensorID[k] ~= nil then
      if (tonumber(fibaro:getValue(sensorID[k], 'value')) == 0) then
       fibaro:call(sensorID[k], 'setArmed', '1')
      else
       local sensorname = fibaro:getName(sensorID[k])
       local sensorroom = fibaro:getRoomNameByDeviceID(sensorID[k])
       fibaro:debug('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher. Sende Push.')
       sendPush('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher.')
      end
     end
     end
  else
    fibaro:debug('Sensoren werden entschärft.')
    for j=1, #sensorID do
     if sensorID[j] ~= nil then
      if (disarmed_bug) then
       setArmed(sensorID[j])
      else
       fibaro:call(sensorID[j], 'setArmed', '0')
      end
     end
    end
  end
end

function setArmed(deviceId)
  local dev = api.get('/devices/' .. deviceId)
  dev.properties.armed = false
  api.put('/devices/' .. deviceId, dev)
end

-- Funktion zum Anlegen einer Globalen Variablen
function globalVar(var,val)
  local http = net.HTTPClient()
  http:request("http://127.0.0.1:11111/api/globalVariables", {
    options = {
    method = 'POST',
    headers = {},
    data = '{"name":"'..var..'","value":"'..val..'"}',
    timeout = 10000
  },
  success = function(response)
            local result = response.data;
            if response.status == 200 or response.status == 201 then
              fibaro:debug('Status: ' ..response.status.. ' - Variable wurde angelegt')
            else
              fibaro:debug('Error: ' ..response.status.. ' - Zugriff verweigert')
            end
            end,
  error = function(err)
          fibaro:debug('[ERROR] ' .. err)
          end
  })
end

if (trigger['type'] == 'property') then
 fibaro:debug('RFID-Szene 3.1 (Official) gestartet.')
 local rfid_ID = tonumber(trigger['deviceID'])
 local rfid_value = tonumber(fibaro:getValue(rfid_ID, 'value'))
  if (rfid_value == 1) then
    rfid_value_status = 'Away'
    Debug('red', 'Status ' ..rfid_value_status.. ' gesetzt.')
    setArmedStatus(true)
    if (fibaro:getGlobal('PresentState') ~= nil) then
     fibaro:debug('Benötigte Variable PresentState erkannt.')
     fibaro:setGlobal('PresentState', 'Away')
    else
     fibaro:debug('Benötigte Variable PresentState NICHT erkannt. Wird erstellt.')
     globalVar('PresentState', 'Away')
    end
    local delay = tonumber(fibaro:getValue(sensorID[1], "armDelay"))
      if (delay ~= 0) then
       fibaro:debug('Arm-Delay erkannt. Arm-Delay: ' ..delay)
       delay = delay + 1
       fibaro:sleep(delay*1000)
      end
    if (not armedcheckSensorID(sensorID)) then
      if (own_action) then
        actionsafterArmed()
      end
      sendPush('ALARMANLAGE aktiv!')
    end
  elseif (rfid_value == 0) then
    rfid_value_status = 'Home'
    Debug('green', 'Status ' ..rfid_value_status.. ' gesetzt.')
    setArmedStatus(false)
    if (fibaro:getGlobal('PresentState') ~= nil) then
     fibaro:debug('Benötigte Variable PresentState erkannt.')
     fibaro:setGlobal('PresentState', 'Home')
    else
     fibaro:debug('Benötigte Variable PresentState NICHT erkannt. Wird erstellt.')
     globalVar('PresentState', 'Home')
    end
    if (armedcheckSensorID(sensorID)) then
     if (own_action) then
       actionsafterDisarmed()
     end
     sendPush('ALARMANLAGE inaktiv!')
     openDoor()
    end
  end
else
    fibaro:debug('Szene manuell gestartet. Widget-Support deaktiviert.')
    fibaro:debug('Hier werden noch weitere Funktionen folgen.')
end

Das Script ist hier von Siio. Und damit kann man schon viel Anfangen und mit PresentState “Home” oder “Away” kannst du ja noch mehr steuern.

Grüße

Guido

Hallo zusammen,

Habe mir vor kurzem auch das Keypad zugelegt, soweit funktioniert auch alles.
Da ich das Keypad nicht alleinig zum scharfstellen und deaktivieren der Alarmanalge einsetzen möchte, sondern dies auch über einen einen NodOn Octan(Fernbedienung), besteht das Problem dass dann das Keypad dies nicht mitbekommt und somit den falschen Zustand anzeigt. Dies wäre prinzipiell nicht so schlimm aber ein „entschärfen“ über das Keypad funktioniert nicht, da der Zustand des Keypads dort schon steht. Habe auch versucht das Keypad per Scene zuverändern, hat leider nicht funktioniert, es scheint so als dies nur per Code oder RFID funktioniert.

Hab ihr hierzu eine Lösung, wie kann man den Zustand des Keypad verändern?

Vielen Dank,
Grüße Volker

@Volker1,
leider gibt es dazu keine Lösung. Auch wenn man den Zustand in die API schreibt hilft dass nicht, da dies nicht an das RFID Pad übertragen wird. Hab schon einiges versucht.
Allerdings weiß ich nicht ob es geht wenn man Parameter 5 auf Mode 3 stellt (ZWAVE Chip always on) und das PAD mit einem 3 Volt Netzteil versorgt, denn das HC2 wird nicht versuchen was zu senden, da es weiß das das PAD die Command_Class Battery und WAKE_UP hat. Aber das ist nur meine Meinung. Vielleicht findet jemand die Lösung.