Aller au contenu

Messages recommandés

Posté(e)

Hello,

 

 

Je présentes la situation:

Couple HCl + ipx800 + 3 X880

Pour 9 VR, 5 Eclairage & autre commande pour Sarah.

 

J'utilise le push des relais de l'ipx pour mettre à  jour via une scène l'état de l'éclairage ou du VR (Variable  + icon)

Jusque la aucun probléme,

Par contre c'est dans l'autre sens que je rencontre qq soucis.

Je commande l'ipx avec la HCL (scène & co) en m2m. Mais la commande ne passe pas à  100% des cas. Donc niveau WAF c'est vraiment pas ça.

Je n'arrive pas à  trouvais la raison. J'aurais préféré que ca ne marche pas du tout, au moins ca serait plus facile de Débug mais là .. Je dirais que dans 70% des cas ça passe puis de temps en temps.. Que dalle.

Posté(e)

Pourquoi tu veux du TCP ? Le HTTP te suffit pas ?

Si en fait je n'avais pas la bonne version de la doc et je n'avais pas vu que les relais étaient polissables en http aussi... Donc mon souci est réglé :)

Posté(e)

@MasterBT, peux-tu décrire ce qui ne fonctionne pas exactement ? Parce que làc'est un peu vague pour pouvoir t'aider.

C'est quel type de commande qui ne passe pas entre ta HCL et ton IPX ?

Posté(e)

Ah yes,

Des commandes de bases comme du setXX1 ou du setXX0 via un VD, dans 7 cas par exemple la commande va bien être exécutée (et donc ouvrir un fermer le relais) mais dans 30% des cas ( à  la louche) il ne va rien se passer.

je coche bien "en attente de la réponse", reset de la HCL et de l'ipx. Pour les relais avec un Delay off, je fais un Setxx1p. (j'ai test avec est sans, et j'ai environ le même % d'échec)

 

Ainsi si par exemple je fais une scéne de coupure de l'ensemble des lumière et fermeture des volets, l'ensemble des relais ne recoivent pas les ordres.

Autre exemple, j'ai un Motion Sensor qui doit allumer la lumière de la cuisine quand qq1 passe devant. en 80% de cas ok, puis des fois rien, la commande est bien envoyée mais pas de réponse de l'ipx.

D'ailleurs, je crois bien que j'ai certains Delay off qui ne marche pas non plus à  100%.

 

Ps: j'ai vu ton sujet plus haut, je suis avec authentification et mes commandes Set passent (mise à  par mon problème actuel)

 

Ps2: j'ai test, le push de l'ouverture et fermeture des relais fonctionne à  100% des cas, je l'utilise afin d'avoir un retour d'état sur la HCL.

 

Edit: Quand j'envois la commande en m2m et que le relais ne s'active pas, j'entends quand même qq chose au niveau de l'ipx; mais quand je regarde au niveau du status.xml, rien n'a changé. Je penses que je vais aller faire un tour directement sur le fofo de GCE, car je pense que l'HCL envoie bien la commande dans 100% des cas mais que l'ipx fait de la merdre.

Posté(e)

Ok, mais tu coup tu utilises uniquement l'API TCP je suppose car il me semble que la HCL ne te permet pas de mettre du LUA dans ton VD ?

Moi je suis passé en HTTP pour 2 raisons : l'authentification et surtout parce que j'avais un petit peu le même problème que toi.

Je me suis retrouvé dans des cas où les commandes TCP ne passaient plus.

Pour la mise à  jour des status, je fais du polling de l'API JSON car cela me permet d'être sà»r d'avoir une information fraîche. 

Posté(e)

Hello Master BT,

 

Tu pourrais me dire quel bout de code tu mets pour mettre à  jour l'état ...?

D'avance merci pour ton retour

Posté(e)

D'ailleurs, je ne sais pas comment je m'y prend, mais je n'arrive pas non plus à  envoyer des push ....

 

Posté(e)

@rem's, ton image est vraiment petite, mais je crois que Enable n'est pas coché.

 

@Gazous, oui Je balance que en Tcp, je trouve ca plus simple et plus propre que en http (d'ailleurs faut que je regarde car de mémoire en Preset tu dépasse pas le relay 8)

Oui je ne peut pas mettre de code LUA

 

Pour mettre à  jour l'état, il y a le lien de ma signature, mais en gros à  la fermeture du relais je lance une scéne en push qui met à  jour le VD + une Variable et inversement à  l'ouverture du relais. Ca marche nikel dans 100% des cas, et ca permet de pas faire tourner de scène en continu.

Posté(e)

Mais si ton IPX800 est configuré avec une authentification login/mdp, comment fait tu pour faire des appels TCP authentifiés ???

Tu les renseignes où tes credentials ?

 

Si ça intéresse quelqu'un, voici une fonction qui permet de procéder à  un switch de l'IPX en HTTP authentifié directement depuis une SCENE

function switchRelay(relayId, newState)
	local http = net.HTTPClient()
	http:request("http://"..IPXIP.."/preset.htm?set"..relayId.."="..newState, {
		options = {
			method = 'GET',
        	headers = {['Authorization'] = 'BASIC XXXXXXXXXXXXXXXXX'},
		},
		success = function(response) fibaro:debug("OK") end,
		error = function(err) fibaro:debug("Error: " ..err) end
	})
end

XXXXXXXXXXXXXXXXX = "<login>:<mdp>" de l'IPX à  encoder en base64 (https://www.base64encode.org)

Posté(e)

Ben en fait ensablé est coché ... Vous passer le couple admin:password@adresse IP dans la case serveur et le port 80 ...??

Merci de votre aide

Posté(e)

@Gazous, oui je suis resté volontairement sur la 3.05.42

@Rem's:

1ére case serveur: Ip HC2

2éme le port

3éme: Login:pass:

4éme: Enable coché.

 

Et dans push 1 ou 2 la requête url à  envoyée en fermeture du relais ou ouverture.

Posté(e)

Tiens au passage, pour mon problème de m2m qui ne passe pas à100% des cas, ce n'est que sur les X880 et non sur les relais de l'ipx, donc 100% de réussite sur les 8 premier relais et, ca merde sur les autres.

J'ai ouvert un post sur le forum de GCE.

  • 1 mois après...
Posté(e)

Bonjour,

 

J'essaye de mettre en place une IPX800 et une HC2 pour la gestion de mes lumières.

Tout fonctionne bien independament mais il y a un truc ou je bloque concernant le changement d'icone selon le retour d'etat.

 

J'ai mixé plusieurs bouts de code et il doit avoir un truc que j'ai mal fais :

 

 

local status = ""

local ip_module = fibaro:get(fibaro:getSelfId(),"IPAddress")

HC2 = Net.FHttp(ip_module)
response = HC2:GET("/api/xdevices.json?cmd=20")
fibaro:debug(response)
response = json.decode(response)

status = status ..response.OUT1

status = string.gsub(status, "1", " â–  ON" )
status = string.gsub(status, "0", " â–¡ OFF")

fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value", status)

local icon = "1"
local etat = fibaro:getGlobalValue("status")
if (etat == "1") then
   icon "115"
elseif (etat == "0") then
   icon = "116"
end
fibaro:call(id_module, "setProperty", "currentIcon", icon)

 

Pouvez-vous m'aider SVP ?

 

merci d'avance

Posté(e)

Remonte comment ? Il faut interroger l'IPX par son API depuis la HC2 puis convertir la donnée récupérée, cela fonctionne sans souci. Moi je le fais sur une sonde de température.

Posté(e)

Hello,

 

En effet, cela fonctionne bien.

J'ai un virtuel device qui est actionné par GEA

Ca donne cela...

J'ai encore un soucis que je n'ai pas eu le temps de résoudre, c'est sur l'humidité, sur lequel, j'ai un soucis avec la virgule.

J'avais repris à  l'époque un bout de code sur ce forum ou un autre que j'ai ensuite adapté.... avec les pieds...  :-) désolé, je ne me rappel plus qui est à  l'origine de ces quelques lignes.

--[[
%% autostart
%% properties
%% globals
--]]

fibaro:debug("process start");
selfId = fibaro:getSelfId();

local domaine = "192.168.0.28",80;
if (AN1==nil) then AN1 = ""; end
if (AN2==nil) then AN2 = ""; end
if (AN3==nil) then AN3 = ""; end
--ne charger en mémoire uniquement que à  la premiere execution
if(refreshUI==nil) then
function refreshUI(temp, lum, hum)
  fibaro:call(selfId,"setProperty","ui.temperature.value",temp);
  fibaro:call(selfId,"setProperty","ui.luminosite.value",lum);
  fibaro:call(selfId,"setProperty","ui.humidite.value",hum);
  fibaro:call(selfId,"setProperty","ui.Time.value", os.date("%d %b à  %H:%M:%S"))
end;
end

function round(num, dec)
  local mult = 10^(dec or 0)
  return math.floor(num * mult + 0.5) / mult
--  return math.floor(num * mult + 0.5) / mult
end;

function round1(num, dec)
  local mult = 10^(dec or 1)
  return math.floor(num * mult + 0.5) / mult
--  return math.floor(num * mult + 0.5) / mult
end;

function round2(num, dec)
  local mult = 10^(dec or 3)
  return math.floor(num * mult + 0.5) / mult
--  return math.floor(num * mult + 0.5) / mult
end;

--ne charger en mémoire uniquement que à  la premiere execution
if(getExt==nil) then
function getExt(retry)
  retry = retry or 0
  -- Setting up the connection data
  local FHTE = Net.FHttp(domaine, 80);
  -- Netatmo extérieur
  local response = FHTE:GET("/api/xdevices.json?cmd=30");
  -- decoding json string to table
  if (response~= nil) then
    local result = nil;
    result = json.decode(response);
    if (result ~= nil) then
      -- prevent: attempt to index field 'body' (a nil value)
      if (result ~= nil) then

        AN1 = round1((result.AN1 * 0.00323 - 1.63) / 0.0326) or "n.c";
        AN2 = round(result.AN2 * 0.09775) or "n.c";
        --AN3 = round((result.AN3 * 0.00323 / 3.3) - 0.1515) / 0.00636 / (1.0546 - (0.00216 * (660 * 0.00323 - 1.63) / 0.0326)) or "n.c";
		AN3 = round2(((result.AN3) * 0.00323 / 3.3)-0.1515) / 0.00636 / (1.0546 - (0.00216 * ((result.AN3)* 0.00323 - 1.63) / 0.0326)) or "n.c";
          fibaro:debug(AN1)
          fibaro:debug(AN2)
          fibaro:debug(AN3)
          -- variable globale pour info sms
        local msg = AN1;
        fibaro:setGlobal("AN1", msg);
        local msg = AN2;
        fibaro:setGlobal("AN2", msg);
        local msg = AN3;
        fibaro:setGlobal("AN3", msg);
        return true;
      else
        fibaro:debug("IPX800 : erreur le " .. os.date());

        if (result.error ~= nil) then
          fibaro:debug("error code: "..result.error.code..", message: "..result.error.message);
        end
      end
    else
      fibaro:debug("IPX800 : erreur decodage json le " .. os.date());
    end
  else
    fibaro:debug("IPX800 :la reponse est null !");
  end
  if ((retry or 5)< 5) then
    fibaro:debug("Retry #"..retry.."process, please wait...");
    fibaro:sleep(5000);
    return getExt(tonumber(retry+1));
  else
      return false;
  end
end;
 
end

local function main()
  -- demande au service web les informations...
  local resExt = false;
  local status, err = pcall(function () resExt = getExt(); end);
  fibaro:debug("Récupération des données extérieurs : " .. tostring(resExt));
  if (status == false) then
    fibaro:debug("err: "..tostring(err or 'n.c'));
  end
  -- affichage infos dans module virtuel         
  refreshUI(
    AN1.." °C",
    AN2.." %",
    AN3.." %" 
  );
  -- tempo de 30 secondes
  fibaro:sleep(6*1000);
end
 
-- lance le script à  chaque loop
main();

post-40-0-74086300-1432752285_thumb.png

×
×
  • Créer...