Aller au contenu

Messages recommandés

Posté(e)

bonjour,

 

j'utilise le code suivant pour capter le status des modules d'une installation KNX.

 

Dans le debug je reçois rien d'anormal:

 

[DEBUG] 11:14:35: Result: on

[DEBUG] 11:14:35: Status: 200

[DEBUG] 11:14:35: Error Code: 0

 

 

Par contre, quand je veux reprendre la valeur de la locale "result", qui est "on" ou "off", pour lancer des appels Fibaro rien ne se passe.

Comment est-ce que je peux résoudre ce problème?

 

 

Merci d'avance!

local IP = "192.168.0.5"
local Port = "8080"
local lightID = 81
local KNX = Net.FHttp(IP,Port)
local result, status, errorCode = KNX:GET("/controller/rest/status/107673154")

fibaro:debug("Result: " .. result);
fibaro:debug("Status: " .. status);
fibaro:debug("Error Code: " .. errorCode);


if fibaro:getValue(lightID, "value") == "0" and result == "on"
  then
  fibaro:call(lightID, "setValue", "100")
  fibaro:debug("Light ON")
elseif fibaro:getValue(lightID, "value") == "100" and result == "off"
  then
  fibaro:call(lightID, "setValue", "0")
  fibaro:debug("Light OFF")
end
Posté(e)

ou le problème est au niveau de l'interprétation du result.

Alors je ferais pour être sûr

result = tostring(result)

ou le problème se situe au niveau du retour de ton

fibaro:getValue(lightID, "value")

ne rajouterais-tu pas un debug supplémentaire

fibaro:debug("LightID : " ..fibaro:getValue(lightID, "value"))
Posté(e)

merci jojo

c'est ce que je pense aussi: problème au niveau de l'interprétation.

comme vous proposez, j'ai déjà  essayé des debugs supplémentaires et la les résultats sont comme attendu.

 

probablement la documentation de l'api peut nous aider. j'utilise bien l'url comme dans l'exemple mentionné dans la documentation. ce qui m'étonne, je ne reçois pas une réponse json comme montrer dans l'exemple.

This service will return sensor status from controller's state cache immediately.

Request URL:
/rest/status/{sensor_id},{sensor_id},...
Request Method: GET
Parameters: sensor_id list
Example Request URL

  http://localhost:8080/controller/rest/status/1
  http://localhost:8080/controller/rest/status/1,2
Example Response

content-type:application/json:
{
   "status":    [
            {
         "@id": "1",
         "#text": "on"
      },
            {
         "@id": "2",
         "#text": "off"
      }
   ]
}
Posté(e)

mais je voulais isoler la source du problème : result ou fibaro:getValue(lightID, "value") ?

 

donc est-ce que ceci donne quelque-chose de cohérent :

if result == "on"
  then
  fibaro:call(lightID, "setValue", "100")
  fibaro:debug("Light ON")
elseif result == "off"
  then
  fibaro:call(lightID, "setValue", "0")
  fibaro:debug("Light OFF")
else
  fibaro:debug("result = "..result)
end
Posté(e)

résultat: 

[DEBUG] 14:10:03: Result: off
[DEBUG] 14:10:03: Status: 200
[DEBUG] 14:10:03: Error Code: 0
[DEBUG] 14:10:03: LightID : 100
[DEBUG] 14:10:03: result = off
Posté(e)

fonctionne pas avec

local IP = "192.168.0.5"
local Port = "8080"
local lightID = 95
local KNX = Net.FHttp(IP,Port)
local statusID = "107673162"
local result, status, errorCode = KNX:GET("/controller/rest/status/"..statusID)
result = tostring(result)
fibaro:debug("Result: " .. result);
fibaro:debug("Status: " .. status);
fibaro:debug("Error Code: " .. errorCode);

local ActualSwitchValueFibaro = fibaro:getValue(lightID, "value")
local ActualSwitchValueKNX = result
fibaro:debug("Actual Value Fibaro Virtual Switch: " ..ActualSwitchValueFibaro)
fibaro:debug("Actual Value KNX: " ..ActualSwitchValueKNX)



function SwitchOn ()
    fibaro:call(lightID, "setValue", "100")
    fibaro:debug("Light is ON")
end

function SwitchOff ()
    fibaro:call(lightID, "setValue", "0")
    fibaro:debug("Light is OFF")
end


if ActualSwitchValueKNX == "on" and ActualSwitchValueFibaro == "100"
  then fibaro:debug("Actual and Virtual are equal, no action")
elseif ActualSwitchValueKNX == "off" and ActualSwitchValueFibaro == "0"
  then fibaro:debug("Actual and Virtual are equal, no action")
elseif  ActualSwitchValueKNX == "on" and ActualSwitchValueFibaro == "0"
  then SwitchOn ()
elseif ActualSwitchValueKNX == "off" and ActualSwitchValueFibaro == "100"
  then SwitchOff ()
end

[DEBUG] 15:22:07: Result: on
[DEBUG] 15:22:07: Status: 200
[DEBUG] 15:22:07: Error Code: 0
[DEBUG] 15:22:07: Actual Value Fibaro Virtual Switch: 100
[DEBUG] 15:22:07: Actual Value KNX: on

fonctionne comme il faut avec

local IP = "192.168.0.5"
local Port = "8080"
local lightID = 95
local KNX = Net.FHttp(IP,Port)
local statusID = "107673162"
local result, status, errorCode = KNX:GET("/controller/rest/status/"..statusID)
result = tostring(result)
fibaro:debug("Result: " .. result);
fibaro:debug("Status: " .. status);
fibaro:debug("Error Code: " .. errorCode);

local ActualSwitchValueFibaro = fibaro:getValue(lightID, "value")
local ActualSwitchValueKNX = result
fibaro:debug("Actual Value Fibaro Virtual Switch: " ..ActualSwitchValueFibaro)
fibaro:debug("Actual Value KNX: " ..ActualSwitchValueKNX)



function SwitchOn ()
    fibaro:call(lightID, "setValue", "100")
    fibaro:debug("Light is ON")
end

function SwitchOff ()
    fibaro:call(lightID, "setValue", "0")
    fibaro:debug("Light is OFF")
end

if ActualSwitchValueFibaro == "0"
  then SwitchOn ()
elseif ActualSwitchValueFibaro == "100"
  then SwitchOff ()
end

[DEBUG] 15:25:14: Result: off
[DEBUG] 15:25:14: Status: 200
[DEBUG] 15:25:14: Error Code: 0
[DEBUG] 15:25:14: Actual Value Fibaro Virtual Switch: 0
[DEBUG] 15:25:14: Actual Value KNX: off
[DEBUG] 15:25:14: Light is ON

comme vous le dites, il s'agit donc d'un problème au niveau de l'interprétation.

×
×
  • Créer...