Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

J'aurai besoin d'aide en LUA pour le code suivant :

--[[
%% autostart
%% properties
26 value
27 value
93 value
94 value
%% globals
--]]

local startSource = fibaro:getSourceTrigger();
local timestamp = os.date("%Y%m%d%H%M%S")
local detecteur_id
local detecteur_location

  	if ( tonumber(fibaro:getValue(26, "value")) > 0 ) then 
  		detecteur_id = '26'
    	detecteur_location = "Mouvement_RDC"
    elseif ( tonumber(fibaro:getValue(27, "value")) > 0 ) then
  		detecteur_id = '27'
  		detecteur_location = "Mouvement_Etage"
    elseif ( tonumber(fibaro:getValue(93, "value")) > 0 ) then
  		detecteur_id = '93'
    	detecteur_location = "Ouverture_RDC"
    elseif ( tonumber(fibaro:getValue(94, "value")) > 0 ) then
  		detecteur_id = '94'
  		detecteur_location = "Ouverture_Etage"
    end
fibaro:debug("Le detecteur" ..detecteur_location.. " (" ..detecteur_id.. ") a déclenché")

if (
 ( tonumber(fibaro:getValue(26, "value")) > 0  or  tonumber(fibaro:getValue(27, "value")) > 0 or  tonumber(fibaro:getValue(93, "value")) > 0 or  tonumber(fibaro:getValue(94, "value")) > 0 )
)
then
    fibaro:debug(timestamp)
	fibaro:debug(detecteur_id)
	fibaro:debug(detecteur_location)

	HC2=Net.FHttp("192.168.0.200")
	HC2:GET("/domotique/mapage.php?timestamp="..timestamp.."&detecteur_id="..detecteur_id.."&detecteur_location="..detecteur_location.."") 


end


Je pense qu'il y a des erreurs de syntaxe ds le code ?

 

Peut- on utiliser les deux dernières lignes directement ds une scène (Net.FHttp & HC2:GET) ?

Est-ce que les codes peuvent etre utilisés aussi bien ds un module virtuel que dans une scène ?

 

Merci.

 

Posté(e)

Sous la v4 c'est possible mais j'ai pas encore essayé :(

 

Krikroff ... si tu es là  ... on a besoin de toi :)

 

Pour ton code, je te propose de l'optimiser ainsi en attendant que Kriki arrive :)

--[[
%% properties
26 value
27 value
93 value
94 value
%% globals
--]]

local startSource = fibaro:getSourceTrigger();
local timestamp = os.date("%Y%m%d%H%M%S")
local detecteur_id = tonumber(startSource["deviceID"]) --- recupère l'id du déclencheur de la scène
local locations = {[26]="Mouvement_RDC", [27]="Mouvement_Etage", [93]="Ouverture_RDC", [94]="Ouverture_Etage"}

if (tonumber(fibaro:getValue(detecteur_id, "value")) > 0) then
  	fibaro:debug(detecteur_id)
	fibaro:debug(locations[detecteur_id])
  	fibaro:debug(timestamp)
        -- http requete
end
Posté(e)

Alors j'ai testé... (d'ailleurs je croyais avoir répondu mais je m'aperçois que non)

Voici l'erreur qu'il me renvoie avec net.HTTPClient()

 

[DEBUG] 08:40:08: 26
[DEBUG] 08:40:08: Mouvement_RDC
[DEBUG] 08:40:08: 20150306084008
[ERROR] 08:40:08: Runtime error: No matching overload found, candidates:
[ERROR] 08:40:08: void __init(luabind::argument const&,lua_State*,custom [lua::net::HTTPOptionsGroup])
[ERROR] 08:40:08: void __init(luabind::argument const&,lua_State*)

Posté(e)

Tu as bien mis ce genre de code :

  local http = net.HTTPClient()
  http:request('http://www.perdu.com', {
      options = {
        method = 'GET'
      },
      success = function(response) fibaro:debug("OK") end,
      error = function(err) fibaro:debug("Error: " ..err) end
  })
Posté(e)

ah non pas du tout, vs m'avez juste dit de remplacer, alors j'ai remplacé

HC2=Net.FHttp("192.168.0.200")
HC2:GET("/domotique/mapage.php?timestamp="..timestamp.."&detecteur_id="..detecteur_id.."&detecteur_location="..detecteur_location.."") 

par

HC2=Net.HTTPClient("192.168.0.200")
HC2:GET("/domotique/mapage.php?timestamp="..timestamp.."&detecteur_id="..detecteur_id.."&detecteur_location="..detecteur_location.."") 

:D

Posté(e)

Déjà  avant la V4,  le FHttp ne pouvait pas être utilisé dans les scènes mais dans les modules virtuels

Pour les scènes, c'est bien Net.HTTPClient qui doit être utilisé et depuis la V4 on peut faire du HTTPS

J'ai tout récemment essayé (en utilisant le même type de code que celui donné par @Steven... on pirate la même personne ;) ) et çà  marche... enfin avec une difficulté sur laquelle je reviendrai plus tard 

Posté(e)

Voilà  désormais mon code :

--[[
%% properties
26 value
27 value
93 value
94 value
%% globals
--]]
 
local startSource = fibaro:getSourceTrigger();
local timestamp = os.date("%Y%m%d%H%M%S")
local detecteur_id = tonumber(startSource["deviceID"]) --- recupère l'id du déclencheur de la scène
local locations = {[26]="Mouvement_RDC", [27]="Mouvement_Etage", [93]="Ouverture_RDC", [94]="Ouverture_Etage"}
 
if (tonumber(fibaro:getValue(detecteur_id, "value")) > 0) then
fibaro:debug(detecteur_id)
fibaro:debug(locations[detecteur_id])
fibaro:debug(timestamp)

  -- http requete
   local http = net.HTTPClient()
http:request('http://192.168.0.2/domotique/mapage.php?timestamp='..timestamp..'&detecteur_id='..detecteur_id..'&detecteur_location='..locations..'', {
options = {
method = 'GET'
},
success = function(response) fibaro:debug("OK") end,
error = function(err) fibaro:debug("Error: " ..err) end
})
  
end

Par contre j'ai cette erreur :

 

[DEBUG] 12:22:40: 26
[DEBUG] 12:22:40: Mouvement_RDC
[DEBUG] 12:22:40: 20150309122240
[ERROR] 12:22:40: line 26: attempt to concatenate local 'locations' (a table value)

 

 

Pouvez vous m'aider ?

Merci ;-)

Posté(e)

Me revoilà  encore...

Donc cela fonctionnait bien, jusqu'a ce que j'essaie d'ajouter des choses dans mon scripts.

 

Voilà  l'erreur que j'ai :

 

[ERROR] 15:41:20: line 44: table index is nil

Et le code qui pose problème :

44  local locations = {[PresenceCourrier]="BAL_Ext"}

Est-il possible de faire un tableau avec un index non numérique ? Pouvez vous m'aider ?

Merci

Posté(e)

Absolument, en fait, les [] permettait de préciser du numérique, donc si tu les enlèves cela te donne ce que tu recherches :

local locations = {PresenceCourrier="BAL_Ext"}

fibaro:debug(locations["PresenceCourrier"])
Posté(e)

ok donc ça c'est ok, mais encore une erreur .... :(

 

[ERROR] 16:49:43: line 45: attempt to concatenate field 'varName' (a nil value)

elseif (trigger['type'] == 'global') then
    fibaro:debug("---------- TYPE GLOBAL ----------")
  	local varName = startSource['varName']
    local locations = {PresenceCourrier="BAL_Ext"}
>>>>    fibaro:debug('Variable globale = ' .. trigger['varName']);
  
  	if ((tonumber(fibaro:getValue(varName, "value")) == 0) or (tonumber(fibaro:getValue(varName, "value")) ==1 )) then
	fibaro:debug(timestamp)
	fibaro:debug(locations[varName])
    fibaro:debug('new value = ' .. status);

	  -- http requete
end

En fait je me suis aidé de ceci :

http://domotique-home.fr/fonction-fibarogetsourcetrigger/

 

Mais j'ai l'impression que le problème vient du fibaro:getSourceTrigger()

car qd je fais un fibaro:debug(trigger['varName']), j'ai toujours NIL

Posté(e) (modifié)

je ne comprends pas pourquoi ça ne fonctionne pas... Si je prends le debut de ma  scene :

--[[
%% properties
26 value
27 value
93 value
94 value
111 value
%% globals
PresenceCourrier
--]]
local trigger = fibaro:getSourceTrigger();
fibaro:debug("----------------- START RULE -----------------")
fibaro:debug(trigger['type'])
fibaro:debug(trigger['varName'])

J'obtiens ceci en debug au changement d'etat de ma variable PresenceCourrier :

 

[DEBUG] 17:19:43: ----------------- START RULE -----------------
[DEBUG] 17:19:43: global
[DEBUG] 17:19:43: nil
[DEBUG] 17:19:43: ---------- TYPE GLOBAL ----------
[ERROR] 17:19:43: line 44: attempt to concatenate field 'varName' (a nil value)

 

 

Il me reconnait bien le type de trigger en global au declenchement, mais pas le varName qui est à  nil.

Est-ce que cette fonction marche toujours ?? :(

 

 

[EDIT]

Quand j'essaye avec le code LUA trouvé ici, cela ne fonctionne pas non plus. Même erreur qu'au dessus...

if OrigineDeclenchement['type'] == 'property' then -- si l'origine du déclenchement de la scène est la modification d'une propriété d'un module surveillée dans l'entête alors
fibaro:debug('L origine est la modification dune propriété du module '..OrigineDeclenchement['deviceID'])
elseif OrigineDeclenchement['type'] == 'global' then -- sinon si l'origine du déclenchement de la scène est la modification d'une variable globale surveillée dans l'entête alors
fibaro:debug('L origine est la modification de la variable globale '..OrigineDeclenchement['varName'])
elseif OrigineDeclenchement['type'] == 'other' then -- sinon si l'origine du déclenchement de la scène est autre alors
fibaro:debug('La scène a été lancée manuellement')
end
Modifié par mikael2235
×
×
  • Créer...