Aller au contenu
Steven

Générateur D'id Pour Gea (Ou Autre Script)

Recommended Posts

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.
 
270486IDGen.png
 
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)

large.58f09120c7a50_ScnegnrateurId.png.cf353885907d39570d22ef2c6366abc9.png

  • Upvote 7

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité chris6783

merci, ne manque plus que la notion de librairie de fonctions.... mais la c a fibaro de bouger

Partager ce message


Lien à poster
Partager sur d’autres sites

Cool, super Steven c'est du propre :)

c'est super utile avec la migration V4 et les recréations des ID. 

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci. Non seulement c'est très pratique, mais en plus on apprend plein de choses en LUA !

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut Steven,

 

J'ai des problemes:

[ERROR] 21:55:05: line 12: attempt to index global 'api' (a nil value)

???

 

Merci.

Partager ce message


Lien à poster
Partager sur d’autres sites

J'imagine que le script dois bien servir à  quelque chose :huh: mais comme j'y comprends rien de rien et puis c'est toujours tiré par les cheveux :lol:.

 

Du grand Steven quoi !

 

:13:

Partager ce message


Lien à poster
Partager sur d’autres sites

@Krikrof

ATTENTION 2 : Si vous ne comprenez pas , c'est sà»rement parce que vous n'en avez pas l'utilité   :P 

Partager ce message


Lien à poster
Partager sur d’autres sites

@Diuck, j'avais bien pris note de cette mise en garde avant d’écrire ;)... Justement :lol:

Partager ce message


Lien à poster
Partager sur d’autres sites

J'allais justement poser la question s'il ne serait pas possible de généer les ID automatiquement.

Merci d'avoir devancé ma question.

 

P.S. idée : ne pourrait-on pas avoir la même chose pour les autres types d'ID ? (Scènes, linked devices, heating pannel, VD, icones (mais nom ?), ...) C'est plus facile à  exploiter que le toolkit de Krikroff :94: . Je pense alors à  un gros VD avec différents boutons, un par type d'ID

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut Steven,

 

J'ai des problemes:

[ERROR] 21:55:05: line 12: attempt to index global 'api' (a nil value)

???

 

Merci.

Quel est la version de ton firmware stp ? 

 

J'imagine que le script dois bien servir à  quelque chose :huh: mais comme j'y comprends rien de rien et puis c'est toujours tiré par les cheveux :lol:.

 

Du grand Steven quoi !

 

:13:

Ben quoi ... pk tu compend pa, tu me dé soit :)

 

 

J'allais justement poser la question s'il ne serait pas possible de généer les ID automatiquement.

Merci d'avoir devancé ma question.

 

P.S. idée : ne pourrait-on pas avoir la même chose pour les autres types d'ID ? (Scènes, linked devices, heating pannel, VD, icones (mais nom ?), ...) C'est plus facile à  exploiter que le toolkit de Krikroff :94: . Je pense alors à  un gros VD avec différents boutons, un par type d'ID

Tout est possible avec du temps, de la patience, de la bonne volonté mais je ne le ferais pas ... juste parce que tu as dis que cela serait plus pratique que le Toolkit de Krikroff ... nah nah nah nah nah nah nah :)

Partager ce message


Lien à poster
Partager sur d’autres sites

@Steven,

 

EXCELLENTISSIME, merci, il suffit qu'on en parle dans un message precedemment et hop, merciiii beauoup

 

@jojo,

Le toolkit de Krikroff, tu trouves tout ce dont tu as besoin ;-)

 

Heu question pour etre sur d'avoir bien compris.

 

Après avoir passé le générateur d'id, dans GEA, l'usage sera de mettre :

fibaro:getValue(id["DETECTEUR_GARAGE"], "value")

avant chaque appelle GEA de type  ?

GEA.add(id["DETECTEUR_GARAGE"]

Ai-je bien compris ?

en fait je crois que je me reponds tout seul, pas bien révéillé le garcon hihihi :

 

pour récuperer la valeur de l'ID en LUA dans une scene ou VD

fibaro:getValue(id["DETECTEUR_GARAGE"], "value")

et dans GEA : comme d'hab, pas de changement en fait hihi

GEA.add(id["DETECTEUR_GARAGE"]

J'ai bon ou je plane ce matin ?

Modifié par pepite

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour moi, le toolkit de Krikroff est génial, mais a une autre utilité.

 

Ici je reste dans le même environnement, et un ctrl+C/Ctrl/v et l'affaire est dans le sac.

Pour ce qui est de la bonne volonté, je n'en doutais pas de ta part  :60:

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok, ok, je ferais une adaptation. 

 

Vu qu'on parle du Toolkit et que Krikroff lit sà»rement ce topic (ne serais-ce que pour me taquiner). Je tiens à  dire que lorsque ma HC2 a planté ... c'est les backups effectués via le toolkit qui mon sauvé plus de 3 mois de travail. Alors ne minimisons surtout pas ce merveilleux outil. C'est vrai qu'il est développé par un personnage peu fréquentable et qu'on veux surtout pas voir le code  ... mais bon, il est super utile.

 

:98:

Partager ce message


Lien à poster
Partager sur d’autres sites

+1

très bien !

Peut on coller dans une variable globale et réutiliser dans TOUS les scripts ?

Merci

Les variables globales sont limitées en nombre de caractères ce qui posera un problème :(

Partager ce message


Lien à poster
Partager sur d’autres sites

Tiens, c'est vrai qu il faudrait que je fasse les sauvegardes par le toolkit ;-)

 

ah non, pas de minimisation ;-).

Partager ce message


Lien à poster
Partager sur d’autres sites

@Diuck, j'avais bien pris note de cette mise en garde avant d’écrire ;)... Justement :lol:

 C'est pour  :2: Krikroff !! je me doute que tu as vu les notes de Steven  :94:

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut Steven,

 

J'ai des problemes:

[ERROR] 21:55:05: line 12: attempt to index global 'api' (a nil value)

???

 

Merci.

Steven, 

J'ai exactement la même erreur que Maestrea. Nous sommes tous les 2 en v3.600.

Et en plus je débute dans LUA, donc difficile pour moi de débugger.

Merci de ton aide.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

par contre il me sort cela:

 

[DEBUG] 10:14:49: 

 

-- IDs générés le : 30/01/15 à  10:14:49

local id = {
--inconnu
ANNE = 31, SEB = 30, 

--Salon
FREBOX = 95,   FREBOX_SERVEUR = 29, 199_2 = 202, 199_3 = 203, ORDINATEUR_SALON = 57, 199_1 = 201, 


}

Anne et Seb, c'est quoi? Je n'ai pas de module de ce nom. Frebox_Serveur non plus et le numéro du module semble étonnant. Comment dois je le lire?

 

Merci beaucoup

Partager ce message


Lien à poster
Partager sur d’autres sites

Alors, ce n'est pas compatible 3.60 donc on oublie si vous avez pas 4.x

 

@sebbrunie1

Anne et Seb doivent probablement être des utilisateurs.

199_2, 199_3, 199_1 sont sà»rement des modules cachés, mal supprimé ou secondaires.

Si toi tu sais pas ce que tu as dans ta box, je vois pas ce que je peux faire pour toi.

  • Upvote 3

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci....

 

Ben je sais mais, je suis couillon ce sont des modules virtuels :) hihi. Désolé 

Partager ce message


Lien à poster
Partager sur d’autres sites

×