Aller au contenu
Alexis S.

Récupérer Le Max Id

Recommended Posts

Je commence à  utiliser plusieurs scènes qui nécessitent de balayer l'ensemble des périphériques existants (notamment My Batteries de steven et Dnodes de sebcbien, merci à  eux).

Dans ces scripts on utilise un numéro d'ID volontairement élevé pour balayer l'ensemble des périphériques.

Ma première démarche a été de me dire que j'allais créer une variable qui me permettrait de prendre un peu de marge tout en me permettant de faire boucler inutilement la box. La variable me permettant de mettre à  jour automatiquement tous mes scripts si un jour il fallait faire monter le numéro d'ID max.

 

Mais je me dis qu'il existe peut-être une fonction lua me permettant de récupérer le plus grand id. C'est le sujet de ce topic, quelqu'un connaîtrait-il une fonction de ce type ou une solution qui reviendrait à  ce résultat?

 

Merci.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Plutôt que de parcourir la liste des id à  la recherche de ceux qui existent vraiment, maintenant je passe par l'API afin de lister directement les modules existants.

 

Ce code devrait faire l'affaire, tu peux t'en servir et compléter avec les actions dont tu as besoin :

-- Get HC2 Device list
local HC2 = Net.FHttp("127.0.0.1", 11111)
payload = "/api/devices"
response, status, errorCode = HC2:GET(payload)
if tonumber(status) == 200 then
	jsonTable = json.decode(response)
	for i = 1, #jsonTable do
		fibaro:debug("Trouvé module ID="..jsonTable[i].id)
	end
	fibaro:debug("Il y a "..i.." modules")
else
	fibaro:debug('<span style="color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..response..'</span>')
end

AInsi, plus de problème de MaxID et de temps passé à  parcourir des modules inexistants inutilement.

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

oui normalement cela fonctionne en v3 et v4.

Partager ce message


Lien à poster
Partager sur d’autres sites

Uniquement dans les modules virtuels sur une 3.590

Partager ce message


Lien à poster
Partager sur d’autres sites

1-

Il y a un petit bug en ligne 11: la variable "i" n'est pas connu en dehors de la boucle.

Il faudrait remplacer "i" par "#jsonTable" dans cette ligne.

 

2-

Je pensais que l'accès à  "localhost:11111" était réservé à  la V4.

D'après ce que je comprends, cela évite d'utiliser son profile et mot de passe dans le script.

Je vais tester avec mes VD qui accèdent à  la HC2 en utilisant son adresse IP et le mot de passe de "admin".

 

3-

@Lazer

 

Merci pour cette astuce.

Je vais l'utiliser dans un bouton d'un VD fourre-tout qui mettra à  jour une variable globale avec le dernier ID existant.

J’appellerai ce bouton un fois par jour pour mettre à  jour la variable.

Je lirai cette variable dans les scènes/VD qui ont besoin de parcourir l'ensemble des modules.

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour le code.

Mais je n'ai pas encore réussi à  le faire tourner. je suis en 3.59. Si je comprends bien, je ne peux pas le mettre dans une scène (pour l'instant j'ai un message d'erreur: [ERROR]

 attempt to index global 'Net' (a nil value)

 

Je peux utiliser ce code dans un module virtuel c'est bien ça?
Merci encore pour ce partage.

Partager ce message


Lien à poster
Partager sur d’autres sites

@shyrka973, non ce n'est pas réservé àla V4, en revanche fais attention àbien utiliser 127.0.0.1 et pas localhost (même si cela devrait en théorie marcher ce n'est pas le cas)

@alexis, oui uniquement dans un module virtuel.

Envoyé de mon iPhone àl'aide de Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

@KriKroff

 

Merci.

C'est dans ma todo list de ce weekend: enlever mon mot de passe d'admin des scènes et VD.

Partager ce message


Lien à poster
Partager sur d’autres sites

@Shyrka973

 

1- Ah oui... ce code est un extrait d'un de mes modules, légère adapté pour ce sujet de discussion, donc j'y suis allé un peu vite sur le "i". Ou alors, il faut déclarer la variable juste avant avec un local i = 0

 

2- Oui éviter de laisser trainer le mot de passe c'est plus propre. Cette astuce est passée sur le forum officiel. Cela fonctionne chez moi en 3.590 et v4 beta. Je met à  jour mes modules virtuels petit à  petit. Au passage, cela simplifie grandement le partage de module virtuel sur le forum, car cela fait 2 variables en moins à  mettre à  jour par l'utilisateur lors de l'import du module.

 

3- bonne astuce :)

Partager ce message


Lien à poster
Partager sur d’autres sites

×