mikael2235 Posté(e) le 27 février 2015 Signaler Posté(e) le 27 février 2015 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.
Steven Posté(e) le 27 février 2015 Signaler Posté(e) le 27 février 2015 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
Lazer Posté(e) le 27 février 2015 Signaler Posté(e) le 27 février 2015 En v4 dans une scène, je crois qu'il faut utiliser net.HTTPClient() àla place de Net.FHttp()
mikael2235 Posté(e) le 28 février 2015 Auteur Signaler Posté(e) le 28 février 2015 Salut, Merci pour vos réponses. je teste ce week end et vous tiens au courant ...
mikael2235 Posté(e) le 6 mars 2015 Auteur Signaler Posté(e) le 6 mars 2015 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*)
Steven Posté(e) le 6 mars 2015 Signaler Posté(e) le 6 mars 2015 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 })
mikael2235 Posté(e) le 6 mars 2015 Auteur Signaler Posté(e) le 6 mars 2015 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.."")
Lazer Posté(e) le 6 mars 2015 Signaler Posté(e) le 6 mars 2015 En matière de LUA, mieux vaut faire confiance àSteven
Steven Posté(e) le 6 mars 2015 Signaler Posté(e) le 6 mars 2015 Mon code est tiré de celui de Krikroff .. mais chuttttttt
mikael2235 Posté(e) le 6 mars 2015 Auteur Signaler Posté(e) le 6 mars 2015 j'ai modifié mais je suis pas chez moi, alors j'atends pour tester... en tout cas merci pour votre aide. je vous tiens au courant
i-magin Posté(e) le 6 mars 2015 Signaler Posté(e) le 6 mars 2015 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
mikael2235 Posté(e) le 9 mars 2015 Auteur Signaler Posté(e) le 9 mars 2015 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 ;-)
mikael2235 Posté(e) le 9 mars 2015 Auteur Signaler Posté(e) le 9 mars 2015 En postant, je crois que j'ai trouvé... Oubli de ...[detecteur_id]
mikael2235 Posté(e) le 9 mars 2015 Auteur Signaler Posté(e) le 9 mars 2015 Yes ça fonctionne !!! Merci Lazer, Steven, i-magin pour votre aide.
Steven Posté(e) le 9 mars 2015 Signaler Posté(e) le 9 mars 2015 Et Krikroff puisque moi j'ai pompé sur lui Au plaisir 1
mikael2235 Posté(e) le 9 mars 2015 Auteur Signaler Posté(e) le 9 mars 2015 ok ;-). Merci aux "indirects" alors !!! 2
mikael2235 Posté(e) le 12 mars 2015 Auteur Signaler Posté(e) le 12 mars 2015 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
Steven Posté(e) le 12 mars 2015 Signaler Posté(e) le 12 mars 2015 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"])
mikael2235 Posté(e) le 12 mars 2015 Auteur Signaler Posté(e) le 12 mars 2015 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
mikael2235 Posté(e) le 13 mars 2015 Auteur Signaler Posté(e) le 13 mars 2015 (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é le 13 mars 2015 par mikael2235
mikael2235 Posté(e) le 13 mars 2015 Auteur Signaler Posté(e) le 13 mars 2015 IT WORKS.... Solution trouvée ici : http://www.domotique-fibaro.fr/index.php/topic/2216-pb-lors-de-lutilisation-de-la-fonction-fibarogetsourcetrigger/ il faut utiliser trigger['name'] au lieu de trigger['varName']
Steven Posté(e) le 13 mars 2015 Signaler Posté(e) le 13 mars 2015 varName me semble faux ... essaye avec name
Steven Posté(e) le 13 mars 2015 Signaler Posté(e) le 13 mars 2015 Réponse inutile de ma part ... désolé. La prochaine fois, je vais au bout des pages avant de répondre
Messages recommandés