Aller au contenu
Raz

Lire Et Changer Les Parametres D'un Module Avec Lua Ou Api

Recommended Posts

Est-il possible de lire ou de changer les parametres d'un module avec une scene LUA.?

Example: je souhaite changer le parametre 4 (Auto off for relay 1. 0 = Auto off disabled) d'un relais FGS221 suivant different conditions (si condition == true then parameter4 = 0 (pas d'auto off), si condition == false them parameter4 = 300 (auto off apres 5 minutes)

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut

 

Dans une scène je ne sais pas si c'est possible, sinon, tu peux créer un module virtuel avec le code ci-dessous et plusieurs boutons selon les paramètres voulus.

Ensuite appeler ces boutons dans ta scène.

 

.

local deviceID = xxx; -- id du module à  paramétrer
local json = '{"id":'..deviceID..',"properties":{"parameters":[{"id": 0,"size": 1,"value": 2}]}}';
 
local HC2 = Net.FHttp("127.0.0.1", 11111);
local response, status, errorCode = HC2:PUT("/api/devices/"..deviceID, json)
 
if tonumber(status) == 200 then
  fibaro:debug("Security locked");
else
  fibaro:debug("err ID: "..deviceID.. " status: "..status);
end

Partager ce message


Lien à poster
Partager sur d’autres sites

@raz,

Je viens de finaliser un VD qui permet de modifier les paramètres d'un device

Cela devrait pouvoir t'aider

Lien dans ma signature

Partager ce message


Lien à poster
Partager sur d’autres sites

merci @moicphil et @jojo, et désolé de ce retour tardif, mais je n'avais pas acces a ma HC2 avant.
 
Mes competences ne sont pas tres grandes, et j'ai besoin de quelques infos suplementaires.
 
Je ne cherche pas à  modifier une proprieté, mais un parametre. En modifiant le json, je comprends que c'est possible, mais je n'y arrive pas.
Pour etre plus clair: Je cherche à  modifier dans une scene (donc automatiquement, suivant un trigger et des conditions, pas en manuel dans un virtual device) le parametre 4 et 5 d'un relais,
 

Screenshot2


 
Je vois le contenu du parametre dans le json est regardant par l'API par "<IP>/api/devices?id="

Screenshot1


 
- mais comment puis-je mettre le contenu du parametre4 dans une variable?
- apres avoir modifié la valeur de cette variable, comment je peux l'écrire dans le device?
en symbolique, un truc du genre
 
local json = GetJson(deviceID);
local Param4 = json.properties.parameters.id(4).value;
Param4 = Param4 + 10;
json.properties.parameters.id(4).value = Param4;
WriteJson(deviceID, json)

Partager ce message


Lien à poster
Partager sur d’autres sites

fait exactement ce que Lazer a expliqué.

Pour les paramètres 4 & 5, l'unité est en 1/10 s => 300s = 3000

si tu es en v3.x

local DeviceID = 57 -- id du module àparamétrer
local DeviceParID = 5 -- # du paramètre
local DeviceParSize = 2
local DeviceParVal = 3000 -- valeur du paramètre

local json = '{"id":'..DeviceID..',"properties":{"parameters":[{"id": ' ..DeviceParID.. ',"size": ' ..DeviceParSize.. ',"value": ' ..DeviceParVal.. '}]}}'
fibaro:debug(json)
local HC2 = Net.FHttp("127.0.0.1", 11111);
local response, status, errorCode = HC2:PUT("/api/devices?id="..DeviceID, json)
 

si tu es en v4.x

local DeviceID = 57 -- id du module àparamétrer
local DeviceParID = 5 -- # du paramètre
local DeviceParSize = 2
local DeviceParVal = 3000 -- valeur du paramètre

local json = '{"id":'..DeviceID..',"properties":{"parameters":[{"id": ' ..DeviceParID.. ',"size": ' ..DeviceParSize.. ',"value": ' ..DeviceParVal.. '}]}}'
fibaro:debug(json)
local HC2 = Net.FHttp("127.0.0.1", 11111);
local response, status, errorCode = HC2:PUT("/api/devices/"..DeviceID, json)
 

Partager ce message


Lien à poster
Partager sur d’autres sites

question pour Lazer : comment puis-je lire la valeur actuelle d'un paramètre d'un device ? (juste l'inverse de ceci)

Partager ce message


Lien à poster
Partager sur d’autres sites

Jojo, pourquoi moi ? Tu ne voulais pas plutôt parler de Moicphil ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Sorry Lazer, tu as raison : MOICPHIL svp

Partager ce message


Lien à poster
Partager sur d’autres sites

En interrogeant le device, tu as toute sa config :

 

Exemple sur un FGS :

 

192.168.0.xxx/api/devices/xx

// 20150308110215
// http://192.168.0.100/api/devices/83

{
  "id": 83,
  "name": "Sdb Haut",
  "roomID": 14,
  "type": "com.fibaro.binarySwitch",
  "baseType": "com.fibaro.actor",
  "enabled": true,
  "visible": true,
  "isPlugin": false,
  "parentId": 373,
  "remoteGatewayId": 0,
  "interfaces": [
    "zwave"
  ],
  "properties": {
    "parameters": [
      {
        "id": 1,
        "lastSetValue": 255,
        "size": 1,
        "value": 255
      },
      {
        "id": 3,
        "lastSetValue": 0,
        "size": 1,
        "value": 0
      },
      {
        "id": 4,
        "lastSetValue": 0,
        "size": 2,
        "value": 0
      },
      {
        "id": 6,
        "lastSetValue": 0,
        "size": 1,
        "value": 0
      },
      {
        "id": 13,
        "lastSetValue": 0,
        "size": 1,
        "value": 0
      },
      {
        "id": 14,
        "lastSetValue": 0,
        "size": 1,
        "value": 0
      },
      {
        "id": 15,
        "lastSetValue": 0,
        "size": 1,
        "value": 0
      },
      {
        "id": 16,
        "lastSetValue": 1,
        "size": 1,
        "value": 1
      },
      {
        "id": 30,
        "lastSetValue": 3,
        "size": 1,
        "value": 3
      },
      {
        "id": 31,
        "lastSetValue": 2,
        "size": 1,
        "value": 2
      },
      {
        "id": 32,
        "lastSetValue": 3,
        "size": 1,
        "value": 3
      },
      {
        "id": 33,
        "lastSetValue": 1,
        "size": 1,
        "value": 1
      },
      {
        "id": 39,
        "lastSetValue": 600,
        "size": 2,
        "value": 600
      }
    ],
    "associationSet": [
      {
        "devices": [
          1
        ],
        "groupID": 1
      },
      {
        "devices": [
          1
        ],
        "groupID": 2
      },
      {
        "devices": [
          1
        ],
        "groupID": 3
      }
    ],
    "associationView": [
      {
        "devices": [
          1
        ],
        "groupID": 1
      },
      {
        "devices": [
          1
        ],
        "groupID": 2
      },
      {
        "devices": [
          1
        ],
        "groupID": 3
      }
    ],
    "zwaveCompany": "Fibar Group",
    "zwaveInfo": "3,3,42",
    "zwaveVersion": "",
    "pollingTimeSec": 0,
    "configured": "true",
    "dead": "false",
    "deviceControlType": "20",
    "deviceIcon": "1026",
    "emailNotificationID": "0",
    "emailNotificationType": "0",
    "endPointId": "0",
    "liliOffCommand": "",
    "liliOnCommand": "",
    "log": "",
    "logTemp": "",
    "manufacturer": "",
    "markAsDead": "true",
    "model": "",
    "nodeId": "40",
    "parametersTemplate": "80",
    "productInfo": "",
    "pushNotificationID": "0",
    "pushNotificationType": "0",
    "remoteGatewayId": "0",
    "saveLogs": "true",
    "smsNotificationID": "0",
    "smsNotificationType": "0",
    "useTemplate": "true",
    "userDescription": "",
    "value": "false"
  },
  "actions": {
    "reconfigure": 0,
    "turnOff": 0,
    "turnOn": 0
  },
  "created": 1425589356,
  "modified": 1425589356,
  "sortOrder": 52
}

.

Reste maintenant à  faire le code, pour récupérer ce qu'il y a dans "parameters".

 

;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci Moicphil, mais c'est justement au niveau du code pour récupérer ce qu'il y a dans "parameters" que j'ai un problème.

Pour info, je suis Jojo et pas Steven ou Krikroff  :13:

Partager ce message


Lien à poster
Partager sur d’autres sites

Bah, moi pareil, j'ai peu de compétences en la matière...je vais regarder quand même...

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci, chef

Partager ce message


Lien à poster
Partager sur d’autres sites

Je pense que le seul moyen est de parcourir la table "parameters" en testant les éléments un par un, jusqu'àtomber sur celui qui contient l'ID désiré.

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour vos recherches. Cela m'a permis d'avancer.

Pour un device particulier, j'ai ceci :

[DEBUG] 22:10:00: {{id=1,lastSetValue=0,value=0,size=2},{id=2,lastSetValue=1,value=1,size=1},{id=3,lastSetValue=0,value=0,size=1},{id=5,lastSetValue=255,value=255,size=1},{id=7,lastSetValue=255,value=255,size=1},{id=9,lastSetValue=0,value=0,size=1},{id=12,lastSetValue=8,value=8,size=1},{id=13,lastSetValue=0,value=0,size=1},{id=14,lastSetValue=0,value=0,size=1}}

en modifiant juste la dernière ligne du code référencé :

fibaro:debug(table.tostring(monTableau.properties.parameters))

il "n'y a plus qu'a" faire un find dans cette chaîne de caratère, comme proposé par Lazer

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

bon, ben voilà , j'ai fait le brouillon du code pour retrouver la valeur d'un paramètre pour un device  :)  :) (et qui fonctionne)

C'est un canon pour tuer une mouche : 80 lignes de code, mais il faudra encore rajouter des tests pour éviter les plantages.

Je ferai un VD (similaire à  Device Properties) pour pouvoir modifier un paramètre d'un device.

Mais maintenant, dodo ...

Merci Moiphil et Lazer pour vos idées et liens; et surtout Ofwood pour la conversion des json en string

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour donner un avant goût :

[DEBUG] 23:23:59: Mes Paramètres = {{id=2,lastSetValue=0,value=0,size=1},{id=3,lastSetValue=10,value=10,size=2},{id=4,lastSetValue=1,value=1,size=1},{id=5,lastSetValue=2,value=2,size=1},{id=101,lastSetValue=224,value=224,size=4},{id=102,lastSetValue=1,value=1,size=4},{id=103,lastSetValue=0,value=0,size=4},{id=111,lastSetValue=10,value=10,size=4},{id=112,lastSetValue=1800,value=1800,size=4},{id=113,lastSetValue=4,value=4,size=4}}
[DEBUG] 23:23:59: ParamSearch = {id=101
[DEBUG] 23:23:59: ParamStart = 152 158
[DEBUG] 23:23:59: ParamSearchNext = {id=102
[DEBUG] 23:23:59: ParamEnd = 195
[DEBUG] 23:23:59: Param = {id=101,lastSetValue=224,value=224,size=4},
[DEBUG] 23:23:59: Value = value=224
[DEBUG] 23:23:59: ParamValueCur = 224

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai essayé le virtual device et il marche bien.

Bravo jojo :bravo:

 

Comme je l'ai dit, je souhaite pouvoir changer ce parametre à  partir d'une scene, donc je pense:

- que dans ma scene j'apelle le virtual device avec
  fibaro:call(VirtualDeviceID, "pressButton", "6");
mais comme le même button fait la lecture et l'ecriture, comment je peux faire? Separer le code du button 6 dans 2 buttons differents?
 
- changer un peu le code dans le virtual device, pour que 
local DeviceID = 189
local ParamID = 4
local ParamValueNew = 35
ne soit pas fixe, mais soit lu à  partir de variable global, comme ca le même virtual device peut etre utiliser pour different device, parameter et value.
Ou est il possible de transmettre ces parametre de maniere plus simple lors du call du virtual device (par exemple quelque chose du style   fibaro:call(VirtualDeviceID, "SetValue", "DeviceID", "189")?

Partager ce message


Lien à poster
Partager sur d’autres sites

en fait j'ai fait ce VD sur base de ta demande initiale, mais le VD fait beaucoup plus que ce que tu veux faire.

Ce que tu veux faire est parfaitement décrit par Moicphil dans sa réponse initiale, c'est d'ailleurs son code que j'ai pompé.

Partager ce message


Lien à poster
Partager sur d’autres sites

@jojo tu vas finir développeur chez Fibaro comme beaucoup d'autres ici. Chapeau bas les gars,.

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 07/03/2015 à 18:36, jojo a dit :

fait exactement ce que Lazer a expliqué.

Pour les paramètres 4 & 5, l'unité est en 1/10 s => 300s = 3000

si tu es en v3.x


local DeviceID = 57 -- id du module àparamétrer
local DeviceParID = 5 -- # du paramètre
local DeviceParSize = 2
local DeviceParVal = 3000 -- valeur du paramètre

local json = '{"id":'..DeviceID..',"properties":{"parameters":[{"id": ' ..DeviceParID.. ',"size": ' ..DeviceParSize.. ',"value": ' ..DeviceParVal.. '}]}}'
fibaro:debug(json)
local HC2 = Net.FHttp("127.0.0.1", 11111);
local response, status, errorCode = HC2:PUT("/api/devices?id="..DeviceID, json)
 

si tu es en v4.x


local DeviceID = 57 -- id du module àparamétrer
local DeviceParID = 5 -- # du paramètre
local DeviceParSize = 2
local DeviceParVal = 3000 -- valeur du paramètre

local json = '{"id":'..DeviceID..',"properties":{"parameters":[{"id": ' ..DeviceParID.. ',"size": ' ..DeviceParSize.. ',"value": ' ..DeviceParVal.. '}]}}'
fibaro:debug(json)
local HC2 = Net.FHttp("127.0.0.1", 11111);
local response, status, errorCode = HC2:PUT("/api/devices/"..DeviceID, json)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 

Salut

 

J'essaye de modifier un paramètre sur depuis la HC3 sans  succès 

 

Paramètre 11 du module walli dimmer

"id": 11,
        "lastReportedValue": 0,
        "lastSetValue": 0,
        "size": 1,
        "value": 0

 

en 

 

"id": 11,
        "lastReportedValue": 7,
        "lastSetValue": 7,
        "size": 1,
        "value": 7

 

merci de votre aide

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Le client net.fhttp n'existe pas sur hc3

 

Il n'existe en fait que sur hc2 pour les VD

 

Regarde ici comment je modifie le paramètre 29 d'un module volets

https://r.tapatalk.com/shareLink/topic?url=https://www.domotique-fibaro.fr/topic/14263-etalonnage-automatique-des-volets-avec-module-fibaro/&share_tid=14263&share_fid=79825&share_type=t&link_source=app

 

Envoyé de mon BLA-L29 en utilisant Tapatalk

 

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

je suppose que la partie qui nous intéresse est :

 

for i = 1, #calibrage do
      local Nom = calibrage[i][1]
      local id = tonumber(calibrage[i][2])
      if fibaro:getValue(id, "value") ~= 99 then
         local DeviceAPI = api.get ("/devices/"..id)
         DeviceAPI.properties.parameters[9].value = 1 
         api.put("/devices/"..id, DeviceAPI)
      end
end

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Vu que tu connais ton ID

Api.put devrait suffire

Envoyé de mon BLA-L29 en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

×