Compatible uniquement 4.x (pour la 3.60 ... c'est ICI ... merci DMK2424)
L'idée est de générer automatiquement le tableau d'ID utilisé dans GEA ou autres scripts. Ainsi, il sera possibile à chaque mise à jour de votre HC2, de simplement relancer le générateur, copier le résultat dans GEA et vos ID seront donc remis à jour.
Voici le tableau dont je parle :
local id = {
--inconnu
LUA_SNIPPETS = 141,
--Garage
OREGON = 128, SURPRESSEUR = 118, CAMERA = 123, PORTE_GARAGE = 238, DETECTEUR_PORTE = 112, PORTE_GARAGE_GARAGE = 64,
--Jardin
TEMPERATURE = 69, SEISMOMETRE = 71, HUMIDITE = 261, DETECTEUR = 68, NETATMO = 137, PLUVIOMETRE = 262, LUMINOSITE = 70, LAMPE_OUEST = 234, PLUIE = 139, COIN_REPAS = 14, PRESSION_ATMOSPHERIQ = 258, TERRASSE = 160, METEOALERTE = 150, ARROSAGE = 158, NETATMO_EXTERIEUR = 260,
--Local Technique
LIVEBOX = 251, IPX800_RELAIS = 106, PORTE_LOCAL = 56, VMC_DOUBLE_FLUX = 114, LAVE_LINGE = 120, PLAFONNIER = 54, PASSERELLE_NETATMO = 135, PASSERELLE_ZIBASE = 126,
--Entrée
CAMERA_ENTREE = 129, DETECTEUR_ENTREE = 5, LUMINOSITE_ENTREE = 7, SEISMOMETRE_ENTREE = 8, PLAFONNIER_ENTREE = 10, PORTE_ENTREE = 58, TEMPERATURE_ENTREE = 6,
--Cuisine
SIRENE = 200, BRITA__FILTRE_ = 131, CUISINE = 237, CAPTEUR_FUMEE = 46, ALARME_FUMEE = 48, FRIGO = 52, TEMPERATURE_CUISINE = 47, LAVE_VAISSELLE = 50, TABLETTE = 176,
--Chambre parentale
SECHE_SERVIETTE = 60,
--Salon
CHAUFFAGE = 104, HUMIDITE_SALON = 257, CO2 = 256, NETATMO_SALON = 255, SONOMETRE = 259, POELE = 34, OREGON_SALON = 127, TV = 39, HIFI = 42, BLUE_RAY = 41, OPENKAROTZ = 133, ROMBA = 43, LUMIERE_SALON = 107, PRISE_LIBRE = 44, BRISE_SOLEIL = 105, WI = 40, KAROTZ = 134, NETATMO_SALON_SALON = 136,
--Chambres
PLAFONNIER_KENDRA = 23, PLAFONNIER_NORA = 18, TEMPERATURE_CHAMBRES = 147, FENETRE_NORA = 143, FENETRE_KENDRA = 145, OREGON_CHAMBRES = 138, FENETRE_NOLAN = 149, PLAFONNIER_NOLAN = 21,
--Couloir
PORTE_TERRASSE = 153, APLIQUE_ESCALIER = 25, TEMPERATURE_AU_SOL = 155, SPOTS = 230, LEDS_ESCALIER = 27,
--Divers
ANDROID_FILES = 162, IMPERIHOME = 208, TYPE_DE_JOURNEE = 110, EVENEMENTS = 173, NETATMO_DIVERS = 253, CLOCK_SYNC = 252, UPDATE_NOTIFIER_1_0_6 = 206, AGENDA = 178, MY_BATTERIES = 130, VACANCES_SCOLAIRES = 151,
}
Ce générateur ce base sur les noms des modules et des pièces que vous avez déclarer.
Il va donc parcourir tous vos modules, prendre leur nom et le transformer (majuscule, suppression caractères spéciaux, ...). Si le nom existe deux fois, il va le suffixer du nom de la pièces (ex : DETECTEUR_GARAGE).
Donc, si comme moi, vous ne changer pas régulièrement le nom de vos modules, ce générateur va vous permettre de gagner quelques précieuses minutes.
Usage ... simple, copier le code ci-dessous et lancer le script avec le bouton "start". Une fois le script terminé, il va vous affiché le tableau dans la fenêtre de debug, il ne vous suffira plus que de le copier dans vos scripts.
Il est possible de spécifier les ID ou type de module que vous ne voulez pas prendre en compte. Vous pouvez aussi préciser si vous souhaiter prendre en compte les modules caché ou mort.
Voici donc le script dans sa globalité :
--[[
%% properties
%% globals
--]]
local hidden = false --- true pour exporter les devices cachés
local dead = false -- true pour exporter les devices morts
local excludeType = {"com.fibaro.zwaveDevice", "weather", "HC_user", "iOS_device", "com.fibaro.voipUser"}
local excludeID = {}
local devicesJSon = api.get("/devices")
local devices = {}
local names = {}
local rooms = {}
function addName(name, roomname)
if (type(names[name]) == "nil") then
names[name] = true
return name
else
return addName(name.."_"..roomname, roomname)
end
end
function getRooms()
local roomsJSon = api.get("/rooms")
rooms[0] = "inconnu"
for k, v in ipairs(roomsJSon) do
rooms[v.id] = v.name
end
end
function rename(name, roomname)
local name = name:upper():gsub("[éêèà«]", "E"):gsub("EE", "E"):gsub("[à»à¼ù]", "U"):gsub("UU", "U"):gsub("[à âà¤]", "A"):gsub("AA", "A"):gsub("[à¶ô]", "O"):gsub("OO", "O"):gsub("[îà¯]", "I"):gsub("II", "I"):gsub("%W", "_")
local roomname = roomname:upper():gsub("[éêèà«]", "E"):gsub("EE", "E"):gsub("[à»à¼ù]", "U"):gsub("UU", "U"):gsub("[à âà¤]", "A"):gsub("AA", "A"):gsub("[à¶ô]", "O"):gsub("OO", "O"):gsub("[îà¯]", "I"):gsub("II", "I"):gsub("%W", "_")
return addName(name, roomname)
end
getRooms()
for k, v in pairs(devicesJSon) do
local doit = (hidden or v.visible) and (dead or not v.dead)
if (doit) then
for h, w in pairs(excludeType) do
if (v.type == w) then
doit = false
end
end
if (doit) then
for h, w in pairs(excludeID) do
if (v.id == w) then
doit = false
end
end
end
end
if (doit) then
table.insert(devices, v)
end
end
table.sort(devices, function(a, return a.roomID<b.roomID end)
local result = "<BR><BR>-- IDs générés le : " .. os.date("%d/%m/%y à %X")
local room = -1
local lastinfo = "";
result = result .. "<BR><BR>local id = {"
for k, v in ipairs(devices) do
if (room ~= v.roomID) then
room = v.roomID
result = result .. "<BR>--"..rooms[v.roomID].."<BR>"
end
lastinfo = rename(v.name, rooms[v.roomID])
result = result .. lastinfo .. " = " .. v.id .. ", "
end
result = result .. "<BR>}"
result = result .. "<BR>"
result = result .. "<BR>-- usage :"
result = result .. "<BR>-- fibaro:getValue(id[\""..lastinfo .."\"], \"value\")"
result = result .. "<BR>-- GEA.add(id[\""..lastinfo .."\"], 30, \"\")"
print(result)
Il ne vous restera plus qu'à utiliser les ID ainsi
fibaro:getValue(id["DETECTEUR_GARAGE"], "value")
GEA.add(id["DETECTEUR_GARAGE"], -1, "La porte du garage est entrain de s'ouvrir")
ATTENTION : Les déclencheurs doivent et devront toujours être changé par vos soins
ATTENTION 2 : Si vous ne comprenez pas l'usage de ce script, c'est sà»rement parce que vous n'en avez pas l'utilité
Icone by @Did (Merci)