Aller au contenu
Bouliboule

Benext Tag Reader

Recommended Posts

Hello j ai trouvé ce code sur un site suisse allemand pour faire fonctionner apparemment le benext tag reader mais je n y arrive toujours pas.

Une star peut elle se pencher dessus ?

Perso j ai créé une variable presence comme demandé et mis mes id du lecteur au bon endroit. Par contre il parle de référence de lecture de badge que je n arrive pas àtrouver ....

--[[

%% properties

ID_TAG_READER userCodes

%% globals

--]]

-- HINWEIS:

-- Die Home- und Away-Taste des Zipato Tag Readers wird (momentan) nicht

-- erkannt. Es spielt deshalb keine Rolle, welche man drückt. Eine globale

-- Variable "Presence" übernimmt diese Funktion, indem sich diese merkt, ob

-- man zuhause (Home) oder abwesend (Away) ist. Je nach Status wird beim

-- ranhalten des RFID-Tags eine separat definierbare Aktion ausgefürt.

-- ANLEITUNG:

-- Die Platzhalter ID_TAG_READER oben und unten sind mit der ID vom Zipato

-- Tag Reader zu ersetzen. Die Codes der RFID-Tags müssen angepasst werden

-- (diese werden im Ausgabe-Fenster beim lesen angezeigt). Weiter muss

-- eine globale Variable "Presence" angelegt werden,mit den Werten "Home"

-- und "Away".

-- Funktion um zwei Codes zu vergleichen

-- gibt True zurück, wenn alle Werte in beiden ByteArray's gleich sind

function compareCodes(array1, array2)

if (#array1 ~= 10 or #array2 ~= 10) then

fibaro:debug("Grösse der Array's ungültig")

return false

end

for i = 1, #array1 do

if (array1 ~= array2) then

return false

end

end

return true

end

local tagReader = ID_TAG_READER -- <--ANPASSEN

-- 10-stellige Byte-Array's (Bytes, weil RFID-Tags auch Zeichen ausserhalb des lesbaren Bereichs liefern)

local rfid1 = {141, 45, 66, 183, 21, 0, 1, 4, 0, 0} -- <--ANPASSEN: Byte-Array eines RFID-Tags

local rfid2 = {148, 33, 12, 84, 49, 0, 1, 4, 0, 0} -- <--ANPASSEN: Byte-Array eines RFID-Tags

local rfid3 = {133, 12, 51, 102, 204, 0, 1, 4, 0, 0} -- <--ANPASSEN: Byte-Array eines RFID-Tags

local input1 = {49, 50, 51, 52, 0, 0, 0, 0, 0, 0} -- <--ANPASSEN: Byte-Array für Zahlencode (1234 als Unicode)

local readerCode = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} -- leeres Byte-Array, in dem die nachher der gelesene Code steht (RFID-Tag oder Zahlencode)

local startSource = fibaro:getSourceTrigger()

if (startSource["deviceID"] == tagReader) then

-- Property "userCode" vom Zipato Tag Reader auslesen

local userCodes = fibaro:get(tagReader, "userCodes")

-- Property in JSON-Objekt umwandeln

jsontbl = json.decode(userCodes)

-- nach dem Code mit der ID 0 suchen

for i = 1, #jsontbl do

if (jsontbl.id == 0) then

-- die 10 Zeichen lesen und in das leere Byte-Array abfüllen

for b = 1, string.len(jsontbl.code) do

readerCode = string.byte(jsontbl.code,B)

end

fibaro:debug("Code gelesen: {" .. readerCode[1] .. ", " .. readerCode[2] .. ", " .. readerCode[3] .. ", " .. readerCode[4] .. ", " .. readerCode[5] .. ", " .. readerCode[6] .. ", " .. readerCode[7] .. ", " .. readerCode[8] .. ", " .. readerCode[9] .. ", " .. readerCode[10] .. "}")

-- gelesener Code vergleichen

if (compareCodes(rfid1, readerCode) or compareCodes(rfid2, readerCode) or compareCodes(rfid3, readerCode) or compareCodes(input1, readerCode)) then

if (fibaro:getGlobal("Presence") == "Home") then

-- Leaving Home

fibaro:debug("PASS - Leaving Home")

-- Hier können Module scharf gestellt oder z.B. Lichter ausgeschaltet werden.

-- ...

elseif (fibaro:getGlobal("Presence") == "Away") then

-- Comming Home

fibaro:debug("PASS - Comming Home")

-- Hier können Module unscharf gestellt werden.

-- ...

else

fibaro:debug("PASS - No Action")

end

else

fibaro:debug("REJECT")

end

end

end

end

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

je nage depuis un moment sur ce sujet... (pas encore très àl'aise avec LUA...)

quelqu'un peut-il m'aider pour faire fonctionner mon zipato mini keypad sur mon hc2 4.056, avec ce script (àcoller où ?)

merci d'avance :)

Pour l'instant je n'ai réussi qu'àfaire clignoter une ampoule...

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

je déterre le sujet. Bouliboule, tu peux nous en dire plus sur le fonctionnement du clavier Be Next ? Les boutons sont trappés avec des codes différents si une HC ? Les cartes RFID sont toutes différentes et cela remonte jusqu'à  la HC/HCL ?

La solution m'intéresserait si je pouvais donner une carte a chaque membre de la famille et gérer des scénario par personne donc identifications du code RFID ...

 

je te remercie pour ton retour.

 

Jérôme

 

PS : je suis mauvais en LUA donc il va sans dire que j'ai du mal a comprendre le code que tu fournies.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour, j'ai eu la même problématique que vous. :angry:

 

Je suis donc tombé sur ce code, j'ai essayé de commenter une partie en anglais et j'ai réussi à  le faire fonctionner en corrigeant une variable qui était passé en majuscule dans le script.

 

Il vous faudra créer une variable globale presence avec 2 valeurs : "Home" et "Away" 

 

Vous devez aussi retrouver l'ID du minikeypad dans HC2 et remplacer aux deux endroits "ID_READER_IN_HC2_TO_REPLACE_HERE" par votre identifiant à  la ligne 3 et la ligne 36

 

Pour utiliser ce code, vous devez créer une scene en mode LUA, puis coller ce code avant de modifier les valeurs d'identifiant, d'allumage et d'extinction (dans les blocs qui sont identifiés par des commentaires dans le code).

 

J'ai laissé mes valeurs en exemple. Chez moi ca coupe toutes les lumières de l'appartement, attend 10 secondes (le temps de sortir), puis active les détecteurs (et donc l'alarme si elle est configurée dans le panel Alarm). Attention, pour les détecteurs de mouvements, il faut les régler pour qu'ils essayent de se réarmer après 30 s si ils n'étaient pas fermé au moment de l'armement. De fait, quand on a un détecteur de mouvement dans l'entrée, celui ci se déclare ouvert chez moi pendant 30s, donc au bout des 10s ce n'était pas suffisant.

--[[
%% properties
ID_READER_IN_HC2_TO_REPLACE_HERE userCodes
%% globals
--]]
-- HINWEIS:
-- Die Home- und Away-Taste des Zipato Tag Readers wird (momentan) nicht
-- erkannt. Es spielt deshalb keine Rolle, welche man drà¼ckt. Eine globale
-- Variable "Presence" à¼bernimmt diese Funktion, indem sich diese merkt, ob
-- man zuhause (Home) oder abwesend (Away) ist. Je nach Status wird beim 
-- ranhalten des RFID-Tags eine separat definierbare Aktion ausgefà¼rt.
-- ANLEITUNG:
-- Die Platzhalter ID_TAG_READER oben und unten sind mit der ID vom Zipato 
-- Tag Reader zu ersetzen. Die Codes der RFID-Tags mà¼ssen angepasst werden
-- (diese werden im Ausgabe-Fenster beim lesen angezeigt). Weiter muss
-- eine globale Variable "Presence" angelegt werden,mit den Werten "Home"
-- und "Away".

-- Funktion um zwei Codes zu vergleichen
-- gibt True zurà¼ck, wenn alle Werte in beiden ByteArray's gleich sind
function compareCodes(array1, array2)
	if (#array1 ~= 10 or #array2 ~= 10) then -- ~= is equal to "!=" in other languages so it's "different from" operator
		fibaro:debug("Invalid array size !")
		return false
	end
	for i = 1, #array1 do
		if (array1[i] ~= array2[i]) then
			return false
		end
	end
	return true
end



local tagReader = ID_READER_IN_HC2_TO_REPLACE_HERE  -- <--PERSONALISATION
-- 10-stellige Byte-Array's -- Here you should test your RFID Tag, and then put it here (the code will work with 1 to 3 tags)
-- Push the Home or Away button and put your tag in front of the miniKeypad, the code will give you the read code
local rfid1 = {133, 12, 51, 102, 204, 0, 1, 4, 0, 0} -- <--PERSONALISATION: Byte-Array eines RFID-Tags
local rfid2 = {133, 12, 51, 102, 204, 0, 1, 4, 0, 0} -- <--PERSONALISATION: Byte-Array eines RFID-Tags
local rfid3 = {133, 12, 51, 102, 204, 0, 1, 4, 0, 0} -- <--PERSONALISATION: Byte-Array eines RFID-Tags
local input1 = {49, 50, 51, 56, 0, 0, 0, 0, 0, 0} -- <--PERSONALISATION: Byte-Array fà¼r Zahlencode (1234 als Unicode)
local readerCode = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} -- leeres Byte-Array, in dem die nachher der gelesene Code steht (RFID-Tag oder Zahlencode)
local startSource = fibaro:getSourceTrigger()



if (startSource["deviceID"] == tagReader) then

	-- Property "userCode" vom Zipato Tag Reader auslesen
	local userCodes = fibaro:get(tagReader, "userCodes")
	-- Property in JSON-Objekt umwandeln
	jsontbl = json.decode(userCodes)
  	--fibaro:debug("test" .. userCodes)
    --fibaro:debug(jsontbl)

	-- nach dem Code mit der ID 0 suchen
	for i = 1, #jsontbl do
		if (jsontbl[i].id == 0) then

			-- die 10 Zeichen lesen und in das leere Byte-Array abfà¼llen
			for b = 1, string.len(jsontbl[i].code) do 
				readerCode[b] = string.byte(jsontbl[i].code,
			end
			fibaro:debug("Code Read: {" .. readerCode[1] .. ", " .. readerCode[2] .. ", " .. readerCode[3] .. ", " .. readerCode[4] .. ", " .. readerCode[5] .. ", " .. readerCode[6] .. ", " .. readerCode[7] .. ", " .. readerCode[8] .. ", " .. readerCode[9] .. ", " .. readerCode[10] .. "}")

			-- Comparing the code 
			if (compareCodes(rfid1, readerCode) or compareCodes(rfid2, readerCode) or compareCodes(rfid3, readerCode) or compareCodes(input1, readerCode)) then

				if (fibaro:getGlobal("presence") == "Home") then
					
          			 
					-- Leaving Home
					fibaro:debug("Zipato - Leaving Home")
          			fibaro:setGlobal("presence","Away")
					-- Here is where we can do some action leaving home, like disable all lights and/or activate alarm mode
					-- ...
          			-- shut off the lights
          			for i = 1, 200 do
        				fibaro:call(i, "turnOff");
    				end
    				-- or turn off some lights only
          			fibaro:call(26, "turnOff") 
          			fibaro:call(48, "turnOff") 
					-- Like this to arm a detector after 10s
					fibaro:sleep(10000)
          			fibaro:call(63, "setArmed", "1")
          			fibaro:call(64, "setArmed", "1")
          			-- little bit of alarm sound to tell its done
          			fibaro:call(41, "turnOn") 
          			fibaro:sleep(1000)
					fibaro:call(41, "turnOff") 
          
				elseif (fibaro:getGlobal("presence") == "Away") then

					-- Comming Home
					fibaro:debug("Zipato - Coming Home")
          			fibaro:setGlobal("presence","Home")
					-- Here is where we can do some action entering home, like enable some lights and/or unactivate alarm mode
					-- ...
					-- Like fibaro:call(35, « setArmed », «0»); to disarm a detector
					-- Like fibaro:call(42, « turnOff ») to shut down siren alarm soun
          			fibaro:call(63, "setArmed", "0")
          			fibaro:call(64, "setArmed", "0")
          			-- shut on the lights fir example
          			fibaro:call(26, "turnOn") 
          
          
				else
					fibaro:debug("Zipato - No Action")
				end
			else
				fibaro:debug("REJECT")
			end
		end 
	end
end 

Si vous avez des questions ou si je peux aider, n'hésitez pas à  demander.  ;)

 

Mes excuses si j'ai fait des erreurs dans le code, je suis débutant sur ce langage et la programmation dans HC2.

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour Yohann,

 

Merci pour ton post. Cela signifie que le lecteur fonctionne avec une HC2 sans problème, bonne nouvelle.

Par contre je constate que les 3 variables RFID sont identiques... 

Tu n'utilises peut être pas les cartes RFID mais uniquement les boutons ?

 

Merci pour ton retour. 

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci Yohann, ça fonctionne aussi chez moi, maintenant !

 

Questions subsidiaires :)

- est-il possible de l'utiliser avec le RFID intégré à  l'iphone 6 ?

- HOME & AWAY fonctionnent de la même manière. (appui home + code = Away, puis appui home + code = Home... pareil pour Away). Est-il possible de les différencier ? (Home pour Home, Away pour Away, sinon aucune action)

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon ben, en attendant de savoir si les boutons Home & Away peuvent être gérés individuellement, j'ai amélioré à  ma sauce en ajoutant une variable "input2" et en commentant les if de l'état de "presence"

-> si code2 alors presence = away (j'active l'alarme avec un code spécifique)

-> sinon si code1 ou rfid1 alors presence = home (je désactive avec un autre code ou avec la clé rfid)

-> sinon rien (sachant que j'ai des activations/désactivations planifiées par ailleurs)

 

modifications ci-dessous :

 

-- Comparing the code 
if (compareCodes(input2, readerCode)) then
 
--if (fibaro:getGlobal("presence") == "Home") then
  
-- Leaving Home
fibaro:debug("Zipato - Leaving Home")
          fibaro:setGlobal("presence","Away")
-- Here is where we can do some action leaving home, like disable all lights and/or activate alarm mode
-- ...
          -- shut off the lights
          -- for i = 1, 200 do
        -- fibaro:call(i, "turnOff");
    -- end
    -- or turn off some lights only
          --fibaro:call(26, "turnOff") 
          --fibaro:call(48, "turnOff") 
-- Like this to arm a detector after 10s
--fibaro:sleep(10000)
          --fibaro:call(63, "setArmed", "1")
          --fibaro:call(64, "setArmed", "1")
          -- little bit of alarm sound to tell its done
          --fibaro:call(41, "turnOn") 
          --fibaro:sleep(1000)
--fibaro:call(41, "turnOff") 
 
--elseif (fibaro:getGlobal("presence") == "Away") then
  
      else if (compareCodes(rfid1, readerCode) or compareCodes(rfid2, readerCode) or compareCodes(rfid3, readerCode) or compareCodes(input1, readerCode)) then
     
-- Comming Home
fibaro:debug("Zipato - Coming Home")
          fibaro:setGlobal("presence","Home")
-- Here is where we can do some action entering home, like enable some lights and/or unactivate alarm mode
-- ...
-- Like fibaro:call(35, « setArmed », «0»); to disarm a detector
-- Like fibaro:call(42, « turnOff ») to shut down siren alarm soun
          fibaro:call(98, "setArmed", "0")
          fibaro:call(77, "setArmed", "0")
          -- extinction de la sirène et des lumières qui clignotent
          fibaro:call(224, "turnOff")
          fibaro:call(23, "turnOff")
          fibaro:call(34, "turnOff")
          fibaro:call(36, "turnOff")
         
--else
--fibaro:debug("Zipato - No Action")
--end
        
          
      else
fibaro:debug("REJECT")
end

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour olivier,

 

Merci pour tes améliorations.

De manière générale, le RFID des iphones n'est pas utilisable ... Apple se le réservent pour Apple Pay :(

Il n'y a, à  ma connaissance, pas d'applications qui utilisent le RFID sur l'appStore.

En ayant un peu travaillé le sujet pour mon boulot, cela ne m'étonne qu'a moitié. Les technologies RFID sont ouvertes mais la clé master qui gère le système considéré est propriétaire :) C'est donc faussement ouvert.

Je ne sais pas comment le petit robot vert gère cette partie, des collègues me disent que cela fonctionne très bien mais ne l'utilisent pas. Comme personne ne connais l'homme qui a vue l'homme qui a vu l'ours, je me demande ce que cela permet réellement sur cette plateforme.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour Yohann,

 

Merci pour ton post. Cela signifie que le lecteur fonctionne avec une HC2 sans problème, bonne nouvelle.

Par contre je constate que les 3 variables RFID sont identiques... 

Tu n'utilises peut être pas les cartes RFID mais uniquement les boutons ?

 

Merci pour ton retour. 

 

Bonjour Jérome, 

 

J'ai mis 3 variables RFID identiques pour ne pas mettre mes codes RFID de la maison sur le net. Tu peux les changer, comme indiqué ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour Yohann, Je n'y avais pas pensé :)

Donc il y a moyen de différencier les cartes RFID, bonne nouvelle. j'ai également vu une variable INPUT1, je suppose que c'est l'un des boutons du lecteur. Sais tu s'il est possible de différencier les boutons  et s'il existe une variable par bouton ?

Pour jouer des scénario différents (1 pour fermer les volets, 2 pour allumer les lumières ...)

 

C'est sympa comme boitier si cela est possible car c'est peu documenté et il n'y a pas beaucoup de choix pour ce type de module...

 

merci pour ton retour

Partager ce message


Lien à poster
Partager sur d’autres sites

Il n'y a pas de ce que j'en sais pour le moment de différencier "home" et "away" 

 

Les 3 variables RFID et la variable Input1 ne sont là  que pour stocker des valeurs. Donc tu peux en mettre autant que tu veux à  partir du moment où tu rajoutes la gestion des tests de ces variables dans ton Code.

 

Par exemple Input1 peut être 1 puis 2 puis 3 puis 4 (à  la fin du code il faut appuyer sur 'enter' )

 

Tu pourrais éventuellement créer une variable input2 pour gérer un autre code, c'est ce que propose Olivier, mais cela ne correspondait pas à  mon besoin. 

 

Ensuite tu ferais un code de ce type : 

if (compareCodes(input1, readerCode)) then
-- action 1
else if (compareCodes(input2, readerCode)) then
-- action 2
else if (compareCodes(rfid1, readerCode)) then
-- action 3
end

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour à  tous,

 

Depuis la mise à  jour, le device ne fonctionne plus (les informations de lecture de tag n'étaient plus renvoyés)

 

J'ai voulu le reconfiguré, mais là  encore ce fut un échec, à  l'association, il fait planter l'ensemble du réseau zwave et la box se déconnecte.

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut tout le monde,

 

J'avais reussi a faire fonctionner cette scene il y a un moment sans pour  autant la finaliser chez moi. Aujourd'hui que j'ai le temps et après avoir mis à  jour la HC2 en dernière version. Le tag reader n'est plus reconnu, est ce que quelqu'un d'autre a le problème ? 

 

L'inclusion se fait bien niveau tag reader mais ca coince sur la couche zwave du HC2 qui part en sucette, l'inclusion ne se termine jamais et le boitier marche plus (la solution que j'ai trouvé c'est de faire une sauvegarde, ca relance la couche zwave du boitier sans tout redemarrer mais ca laisse le device dans un demi état). Après ça, le device reste en "non configuré" et quand j'appuie sur home ou away, il clignote 6 fois (en gros, il n'arrive pas à  contacter la HC2 qui est juste à  côté).

 

HC2 Version 4.080

Partager ce message


Lien à poster
Partager sur d’autres sites

×