Aller au contenu

Messages recommandés

Posté(e)

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

Posté(e)

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

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 !

Posté(e)

J'ai oublié une question : existe-il un moyen d'utiliser une variable de la boucle principale dans le code d'un bouton ?

Posté(e)

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

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.

Posté(e)

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

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

Posté(e)

C'est impossible au niveau du module certains mettent la variable dans l étiquette a toi de voir

Envoyé de mon SM-G900F en utilisant Tapatalk

Posté(e)

Le port 11111 c'est pour utiliser le serveur local en local et donc pas besoin de user et password

Envoyé de mon SM-G900F en utilisant Tapatalk

Posté(e)

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

Posté(e)

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

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

Posté(e)

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

@pitp2

J'ai essayer de lui donner une version simple et un version Usine a gaz

Effectivement vu le code que tu as donné je mis perds dans sa question

Posté(e)

@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 ...

Posté(e)

@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

Posté(e)

Bah mince 15 ans que j'habite en Belgique maintenant .. faut que j'y reste encore combien de temps pour être tordu comme vous ?  :D

×
×
  • Créer...