Aller au contenu
Steven

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

Recommended Posts

On va essayé un truc simple que tu vas tester (je suis au travail).

 

à  la ligne 101 :

return a.sectionname..a.roomname < b.sectionname..b.roomname

Essaie juste de la remplacer par 

return a.sectionname..a.roomname..a.name < b.sectionname..b.roomname..b.name

Tiens moi au courant, si ça marche pas, je creuserais ce soir.

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

merci, j'essayerai dès que ma box est ànouveau up.

Depuis que j'ai voulu exclure et réinclure un device mort, ma box est "morte". Des multiples redémarrages n'y font rien :angry: :angry: :angry: :angry:

Partager ce message


Lien à poster
Partager sur d’autres sites

@Steven,

MERCI, j'adore les lutions "keep it simple"

Partager ce message


Lien à poster
Partager sur d’autres sites

du coupe je me suis shopé un beau 503 en sauvant mon GEA, mais rien àvoir

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello j'ai une erreur en V4.104:

 

line 101: or '...' expected near 'if' 

 

Quelqu'un peut me aider?

 

Salutations

speedoxx007

Partager ce message


Lien à poster
Partager sur d’autres sites

Ligne 101, ça ne veut rien dire, la ligne dépend de ta config.
Poste au moins la ligne de code, et aussi ta config, le problème vient probablement de là...

Sent from my Note4


Partager ce message


Lien à poster
Partager sur d’autres sites

Hello

 

Voici la ligne 101:             if (not useSections) then     qui me crée l'erreur: line 101: or '...' expected near 'if' 

 

Voici le code que j'ai récuperé:

 

--[[
%% properties
%% globals
--]]

local hidden = false --- true pour exporter les devices cachés
local dead = false -- true pour exporter les devices morts
local useSections = true

local excludeType = {"com.fibaro.zwaveDevice", "weather", "HC_user", "iOS_device", "com.fibaro.voipUser"}
local excludeID = {}


local generateur = {

    devices = {},
    names = {},
    rooms = {},
    sections = {},

    devicesJSon = api.get("/devices"),
    roomsJSon = api.get("/rooms"),
    sectionsJSon = api.get("/sections"),

    -- Retourne la section souhaitée
    getSection = function(self, id)
        if (not useSections) then
            return ""
        end
        if (#self.sections == 0) then
            for k, v in ipairs(self.sectionsJSon) do
                self.sections[v.id] = v.name
            end
        end
        id = tonumber(id)
        if (type(self.sections[id]) == "nil") then
            return "inconnu"
        else
            return self.sections[id]
        end
    end,
    
    -- Retourne la pièce souhaitée
    getRoom = function(self, id)
        if (#self.rooms == 0) then
            for k, v in ipairs(self.roomsJSon) do  
                self.rooms[v.id] = {}
                self.rooms[v.id].name = v.name
                self.rooms[v.id].sectionId = v.sectionID
                self.rooms[v.id].sectionName = self:getSection(v.sectionID)
            end
        end
        id = tonumber(id)
        if (type(self.rooms[id]) == "nil") then
            return "inconnu", "inconnu", 0
        else
            return self.rooms[id].name, self.rooms[id].sectionName, self.rooms[id].sectionId
        end
    end,

    -- Retourne un nom unique
    addName = function(self, name, roomname)
        if (type(self.names[name]) == "nil") then
            self.names[name] = true
            return name
        else
            return self:addName(name.."_"..roomname, roomname)
        end
    end,
    
    -- Supprime les caractères indésirables et rend le nom unique
    rename = function(self, 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 self:addName(name, roomname)
    end,
    
    proceed = function(self)
        for k, v in pairs(self.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
                v.roomname, v.sectionname, v.sectionID = self:getRoom(v.roomID)
                table.insert(self.devices, v)
            end
        end    
        table.sort(self.devices, function(a,
            if (not useSections) then             
                return a.roomID < b.roomID
            else
                return a.sectionname..a.roomname < b.sectionname..b.roomname
            end
        end)
        return self.devices;
    end

 

Je suis en V4.104 et un débutant en LUA :-(

 

Merci pour vos aides.

Partager ce message


Lien à poster
Partager sur d’autres sites

as-tu bien mis ce code dans une scène, pas dans le bouton d'un VD ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui j'ai bien mis dans une scène.

Envoyé de mon SM-G900F en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

@speedoxx007

Le code que tu as posté n'est pas complet, soit tu as oublié de nous copier la fin, soit tu as oublié de la mettre dans ta scène :2:

Partager ce message


Lien à poster
Partager sur d’autres sites

oui, car elle fonctionne impeccable chez moi depuis le début.

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut, 

 

Il y a du y avoir un problème lors de la migration du site et du coup le code de la scène n'est plus bon. Si vous faites un copier coller de la scène du post ça ne fonctionne plus.

 

Voici la ou ça coince je pense : 

table.sort(devices, function(a, return a.roomID<b.roomID end)

Partager ce message


Lien à poster
Partager sur d’autres sites

Déterrage***

 

je coince aussi au même endroit ^^

table.sort(devices, function(a, return a.roomID<b.roomID end)
  
  --DEBUG line 63: or '...' expected near 'return'

Edit : je constate que ca semble etre un tri de table ; du coup si je désactive cette ligne // et que j'en sors le 'end'

le script 'semble' accepter de fonctionner mais je n'ai pas connu son état d'origine @ADN182

 

--[[
%% 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

--passage de cette ligne en commentaire car ne fonctionne pas :(
--table.sort(devices, function(a, return a.roomID<b.roomID end)

end --ici on 'sort' le end de la ligne qui a été annulée

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)

 

Modifié par nigao

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

Je viens de tester, fonctionnement OK chez moi avec ce code :



 

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,b) 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)

 

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Je constate que ton code diffère bien de la page 1 du coup ^^

--code @pepite
table.sort(devices, function(a,b) return a.roomID<b.roomID end)

--code page 1
table.sort(devices, function(a, return a.roomID<b.roomID end)

Je ferais la modif ce soir pour tester sans ma bidouille ^^

J'aurais donc le tri par ordre plutôt qu'en bordel grâce à toi

 

Edit : je confirme bien que cette ligne de code "function (a,b)" permet de faire fonctionner ce VD

 

Modifié par nigao

Partager ce message


Lien à poster
Partager sur d’autres sites

 Bonsoir @Steven,

Si tu veux, tu peux ajouter cette icône dans le premier post (à moins qu'elle ne te plaise pas).

 

large.58f09120c7a50_ScnegnrateurId.png.cf353885907d39570d22ef2c6366abc9.png

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

Il y a une erreur à la ligne 63 du script au début du post: 

 

table.sort(devices, function(a, return a.roomID<b.roomID end)

Il faut corriger comme suit je pense:

 

table.sort(devices, function(a,b) return a.roomID<b.roomID end)

 

Modifié par Felig

Partager ce message


Lien à poster
Partager sur d’autres sites

Lu prend la version de pépite plus 2,3 com plus haut c'est la bonne. Merci Pépite je pense que le changement de forum à du changer des caractères

Envoyé de mon Nexus 5X en utilisant Tapatalk

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Je vais paraitre bête avec ma question, mais comment on fait un copier/coller ?

 

Quand je sélectionne le texte de la zone de debug, il devient en sur-brillance mais dès que je lache le clic de la souris, il se désélectionne.

Pas le temps de faire ni un Ctrl+C ; ni clic droit>copier.

 

J'ai le meme comportement sous Chrome / Firefox / Safari

Modifié par nigao

Partager ce message


Lien à poster
Partager sur d’autres sites

j'ai eu le même problème, il faut être rapide sur le ctrl+C (pas V), et ensuite le coller dans Notepad++ et voir si on a tout.

Il faut chipotter :1:

Partager ce message


Lien à poster
Partager sur d’autres sites

Chipote chipote, surtout que tu as dû avoir la notif de suivi de message avec "ctrl V" alors que j'ai éditer "ctrl+C" 3 heures avant ta réponse ^^

et oui faut chippoter meme les chippoteurs mais j'avoue j'ai tapé trop vite

 

Bon sinon j'ai trouvé une astuce...

 

Sélectionner le texte mais ne jamais lâcher le clic gauche de souris

Puis avec l'autre main de libre, faire un Ctrl C

Modifié par nigao

Partager ce message


Lien à poster
Partager sur d’autres sites

×