Aller au contenu

Questions Sur Les Modules Virtuels


neliger

Messages recommandés

Bonjour,

 

Actuellement occupé à  créer quelques modules virtuels, je me pose quelques question de débutant dans cet environnement :

 

1) De base, le module virtuel a deux paramètres : une IP et un port. Est-il possible d'ajouter d'autres paramètres ? De masquer ceux-là  pour les modules où ils ne sont pas pertinents ?

 

2) Pour les icônes, je travaille actuellement avec les Id numériques d'icônes que j'importe. Existe-il un moyen de packager les icônes dans le module virtuel afin de pouvoir distribuer et importer l'ensemble sans forcer l'utilisateur à  manipuler les Id ?

 

3) Pour provoquer l'appui sur un bouton de l'interface depuis la boucle principale, j'utilise ceci : fibaro:call(fibaro:getSelfId(), "pressButton", "11") où "11" est la position du bouton dans l'interface. Est-il possible d'utiliser à  la place l'Id renseigné sur ce bouton (je trouverais ça plus propre) ?

 

Merci d'avance pour vos réponses :)

Lien vers le commentaire
Partager sur d’autres sites

1) ces champs IP/Port sont (je pense) utilisés pour accéder à  des sites autres que ta box. Moi je les utilise pour paramétrer mon VD ou transférer des infos d'un bouton à  l'autre (ou depuis le mainloop) sans devoir passer par une variable globale

2) pas à  ma connaissance, mais si c'est possible, je suis preneur

3) pas à  ma connaissance, je trouve cela également ridicule, car si tu changes l'ordre (rajoute un label, ...) tu dois changer ton "pressButton"  :angry:  :angry:

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

L'IP/Port, je m'en sert pour un module virtuel que je suis en train de créer pour gérer ma box Wimax. Par contre, je suis surpris de voir que ces champs sont là  par défaut et ne semblent pas modifiables.  :huh:

 

En tout cas, je vois que mes questions n'ont pas l'air si idiotes finalement, merci pour tes réponses !

Lien vers le commentaire
Partager sur d’autres sites

tu peux faire ce genre de transfert via les champs Port ou IP, ou via une variable globale (fibaro:setGlobal('NomVariableGlobale', 'abc') / fibaro:getGlobal('NomVariableGlobale')

 

 

oui, il sont modifiables. le champ IP est de type CHAR et le champ TCP est de type NUM

 

pour mettre à  jour la valeur du Port :

-- action = 1
local HC2 = Net.FHttp("127.0.0.1",11111)
local action = ('{"id":'.. fibaro:getSelfId() ..',"properties":{"port":1}}')
HC2:PUT(fibaro:getGlobal("GETvirtualDevices") .. fibaro:getSelfId() , action)

pour la lire :

local action = fibaro:get(fibaro:getSelfId(),"TCPPort")
action = tonumber(action)
  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Par "modifiable" je voulais dire que l'on puisse ajouter d'autres champs et supprimer IP/Port.

 

Merci pour les instructions concernant les variables globales, je vais voir si ce sont des globales au niveau du système ou au niveau du module, car je n'ai pas besoin de sortir du module dans le cas qui m'occupe actuellement, et j'utilise déjà  IP/Port pour leur but originel.

 

Je veux juste éviter de poser des variables que l'utilisateur devra modifier hors de la boucle principale.

Lien vers le commentaire
Partager sur d’autres sites

il y a seulement deux types de variables (àma connaissance) :

  1. local : au niveau d'un mainloop ou d'un bouton ou d'une scène
  2. global : utilisable partout

pour échanger des infos simples et courtes au sein d'un VD, j'utilise quand je peux les champ Port ou IP, ce qui rend mon VD plus portable, car il ne faut pas créer manuellement de variable globale

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Local n est pas obligatoire

Mais si tu ne le mets pas local elle sera global juste dans le bouton

Pour envoyer des valeurs de variables a un autre bouton j utilise un json vers une variable globale est je récupérer dans l'autre bouton

Envoyé de mon SM-G900F en utilisant Tapatalk

Lien vers le commentaire
Partager sur d’autres sites

Local n est pas obligatoire

Mais si tu ne le mets pas local elle sera global juste dans le bouton

Pour envoyer des valeurs de variables a un autre bouton j utilise un json vers une variable globale est je récupérer dans l'autre bouton

Envoyé de mon SM-G900F en utilisant Tapatalk

2 questions :

  1. Quelle est la différence entre local et global au niveau du bouton ?
  2. je sais sauver un json (une table) dans une variable globale, mais comment la relire et la récupérer sous forme de table/json ? avec fibaro:getGlobal, je récupère un champ texte  :huh:

Merci

Lien vers le commentaire
Partager sur d’autres sites

@jojo

voici un exemple simple, les termes que je vais employer ne sont peut être pas exact. Car il date .... :D

local test1 = "bonjour"
for i=1,1 do
    local test2 = test1
    fibaro:debug("Affiche boucle = "..test2)
end
fibaro:debug("Affiche Apres la boucle = "..test2)

dans ce script il va y avoir une erreur car la variable local a été déclarer dans la boucle donc lorsque tu quittes la boucle elle est détruite

local test1 = "bonjour"
for i=1,1 do
    test2 = test1
    fibaro:debug("Affiche boucle = "..test2)
end
fibaro:debug("Affiche Apres la boucle = "..test2)

la il n'y aura pas d'erreur car la variable test2 et déclarer global donc elle ne sera détruit que lorsque tu quittes le script

 

on aurai aussi pu la déclarer en local au début du script

Il vaut mieux lorsque c'est possible de déclarer les variables en local

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

voici un exemple pour sauver des ID dans une variable global systéme

local Var_Id = {"RDC 3 Volets", 5, 7, 9}
fibaro:setGlobal('VoletsZone',json.encode(Var_Id));
Var_Id=json.decode((fibaro:getGlobal('VoletsZone')));

Voici le code pour récuperer dans un tableau

j'utilise aussi un bout de code que steven a posté mais la c'est un peu usine a gaz

-- traitement de la varialble globale Merci Steven
function split(text, sep)
local sep, fields = sep or ":", {}
local pattern = string.format("([^%s]+)", sep)
text:gsub(pattern, function(c) fields[#fields+1] = c end)
return fields
end
 
local mon_tableau = fibaro:getGlobal('V_Zone1');
local V_Id = split(mon_tableau, ",")
-- fin du traitement de la varialble globale 

ce bout de code récupere un texte est le converti en tableau mais c'est usine a gaz

Lien vers le commentaire
Partager sur d’autres sites

@jojo, ta question est étrange concernant l'utilisation pour les json car c'est la méthode utilisée dans le VD pour le chauffage  :huh:

 

je préfère donc utiliser ce type de code vu que le json est "formaté" on aurait tort de s'en priver

 

local HC2 = Net.FHttp("127.0.0.1",11111)
local GETheating = ""


-- détermination de la version du firmware
payload = "/api/settings/info"
response, status, errorCode = HC2:GET(payload)
if tonumber(status) == 200 
  then
jsonTable = json.decode(response)
if tonumber(jsonTable.softVersion) >= 4 
 
on voit qu'une fois la table chargée on peut accéder aux hamps désirés avec  jsonTable.lenomduchamp et en utilisant une boucle qu iva balayer tous les champs du json
 
voili voilou  :)
 
PS : je n'ai peut etre pas compris la question aussi  :P
Lien vers le commentaire
Partager sur d’autres sites

@mprinfo :

  1. félicitations Gourou
  2. merci pour les explications local/global variables dans un bouton
  3. pour la lecture des tableaux stockés dans des variables globales, il me semblait déjàavoir essayé cela sans succès. Je vais réessayer. Merci.

@pitp2 :

Merci pour ton retour, mais c'était mprinfo qui avait bien compris ma question tordue ...

Lien vers le commentaire
Partager sur d’autres sites

@jojo

j'ai l'impression qu'on ce ressemble un peu :D j'ai le chic pour les questions tordues.

La lorraine n'est pas très loin de la Belgique c'est peu être du a notre situation géographique :D ou parce que j'ai pas mal bossé en Belgique

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...