Aller au contenu

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


Messages recommandés

Posté(e)

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)

Posté(e)

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

@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

  • 2 semaines après...
Posté(e)

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

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

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

Posté(e)

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

 

;)

Posté(e)

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:

Posté(e)

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

Posté(e)

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

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

Posté(e)

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

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

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

  • 5 ans après...
Posté(e)
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

 

Posté(e)

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

 

 

 

 

Posté(e)

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

 

×
×
  • Créer...