Bonjour, j'ai eu la même problématique que vous.
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.