Aller au contenu

Messages recommandés

Posté(e)

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.

 

Posté(e)

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
Posté(e)

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.

Posté(e)

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.
Posté(e)

@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

Posté(e)

@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 :)

×
×
  • Créer...