-
Compteur de contenus
26 095 -
Inscription
-
Dernière visite
-
Jours gagnés
1 303
Tout ce qui a été posté par Lazer
-
Il te l'a donné il me semble, c'est /api/callAction?deviceID=zz&name=pressButton&arg1=zz Tu as juste à mettre l'ID du device, et l'ID du bouton.
- 1 289 réponses
-
- topic unique
-
(et 1 en plus)
Étiqueté avec :
-
Voici ma scène complète qui surveille le changement d'IP à l'aide du JSON fourni par ce site : Tu pourras facilement extraire l'info qu'il te faut (le champ "jsonTable.zip") --[[ %% autostart %% properties %% globals --]] -------------------------------------------------- -- Scene : Check Public IP Address -- Author : Lazer -- Version : 1.0 -- Date : June 2017 -------------------------------------------------- -- User variables local URL = "http://ip-api.com/json" local intervalle = 60 local userID = {0} -- Email local smartphoneID = {0} -- Push local sms = { ["VD_ID"] = 0, -- Virtual Device ID ["VD_Button"] = "1", -- Virtual Device Button ["VG_Name"] = "SMS" -- Global Variable Name } local debug = false -- System variables local IP = nil -- -- Message function -- function Message(color, message) if color and color ~= "" then fibaro:debug('<span style="color:'..color..';">'..(message or '<nil>')..'</span>') else fibaro:debug(message or '<nil>') end end -- -- Notification function -- function Notification(message, param) local message = message or "<vide>" Message("yellow", "Notification : "..message) if param then for _, notif in ipairs(param) do if debug then Message("grey", notif) end -- Envoi Push if notif == "push" and smartphoneID then for _, id in ipairs(smartphoneID) do if debug then Message("grey", "Send Push smartphone ID : "..id) end fibaro:call(id, "sendPush", message) end -- Envoi Email elseif notif == "email" and userID then for _, id in ipairs(userID) do if debug then Message("grey", "Send Email user ID : "..id) end fibaro:call(id, "sendEmail", "HC2 Public IP Check", message) end -- Envoi SMS elseif notif == "sms" and sms then if debug then Message("grey", "Send SMS : VD_ID="..(sms["VD_ID"] or 0).." VD_Button="..(sms["VD_Button"] or "0").." VG_Name="..(sms["VG_Name"] or "")) end fibaro:setGlobal(sms["VG_Name"], message) if sms["VD_ID"] and tonumber(sms["VD_ID"])>0 and sms["VD_Button"] and tonumber(sms["VD_Button"])>0 then fibaro:call(sms["VD_ID"], "pressButton", sms["VD_Button"]) end end end else Message("orange", "Warning : no notification options given") end end -- -- Check function -- function Check(interval) Message(nil, "Check") local httpClient = net.HTTPClient() if debug then Message("grey", URL) end -- Check IP httpClient:request(URL, { success = function(response) --if debug then --Message("gray", json.encode(response)) --end if response.status == 200 then if response.data and response.data ~= "" and response.data:sub(1, 1) == "{" and response.data:sub(-1) == "}" then local jsonTable = json.decode(response.data) if jsonTable.status and jsonTable.status == "success" then if not IP then IP = jsonTable.query Message("blue", "IP Address : " .. (jsonTable.query or "???")) Message("blue", "ISP : " .. (jsonTable.isp or "???")) else if IP ~= jsonTable.query then local newIP = (jsonTable.query or "???") Message("orange", os.date('%d/%m/%Y') .. " : New IP : " .. newIP) Message("orange", "New ISP : " .. (jsonTable.isp or "???")) Notification("Old IP : " .. IP .. " - New IP : " .. newIP .. " - ISP : " .. (jsonTable.isp or "???"), {"push", "email", "sms"}) IP = newIP elseif debug then Message("blue", "Same IP : " .. (jsonTable.query or "???")) end end else Message("red", "Error : status = " .. (jsonTable.status or "???") .. " - message = " .. (jsonTable.message or "???") .. " - query = " .. (jsonTable.query or "???")) end else Message("red", "Error : empty or invalid response data") end else Message("red", "Error : status=" .. tostring(response.status)) end end, error = function(err) Message("red", 'httpClient:request() : Error : ' .. err) end, options = { method = 'GET', timeout = 10000 } }) -- Wait if interval and interval > 0 then setTimeout(function() Check(interval) end, interval*1000) end end -- function -- -- Main loop -- local trigger = fibaro:getSourceTrigger() if trigger["type"] == "autostart" then Message(nil, os.date('%d/%m/%Y').." : Scene instance autostart") -- Call Check function setTimeout(function() Check(intervalle) end, 0) elseif trigger["type"] == "other" then Message(nil, os.date('%d/%m/%Y').." : Scene instance manual launch") -- Call Check function Check(nil) else Message(nil, os.date('%d/%m/%Y').." : Unknown trigger : "..trigger["type"]) end
-
C'est ce que je fais aussi, c'est un peu lourd, mais ça fonctionne....
-
Oui si tu veux du 100%, c'est toujours mieux de prendre la dernière version ! D'ailleurs, extrait du changelog : Ce qu est marrant, puisque le support avait déjà été ajouté en HF :
- 488 réponses
-
- tuto multimã©dia
- onduleur
-
(et 3 en plus)
Étiqueté avec :
-
OK donc avec curl, dans ce cas le plus simple c'est de laisser curl s'occuper des urlencode et base64 comme ceci : curl --request GET -u "adresse.email@domaine.com:password" "http://192.168.1.1/api/..."
-
non justement, il ne faut pas mettre "admin" dans l'URL. Il faut mettre l'email à la place, et faire un urlencode avant. Il faut que tu donnes plus de détail, tu effectues cet appel comment, depuis quoi ? En quel langage ?
-
oui je comprends, c'est pas marrant ça...
-
RIP
-
Hum, je viens de regarder, et je n'ai pas l'impression que ça soit possible, ou alors je n'ai pas trouvé non plus. (je n'utilise pas cette fonction réveil) C'est bête pour toi ça. Sinon faut passer par la box domotique
-
99% à ce point là ??? Là tout de suite, je suis sur PC portable avec un vieux Core i5-3337U, donc plutôt lent, et pourtant le CPU n'est qu'à 40%. Sous Firefox / Windows 10
-
Oui mais si le CPU monte, ça ralentie la machine, jusqu'à geler l'affichage.
-
N'empêche, c'est là qu'on voit la différence : - La neige, ça fait geler les "Pommes". - Tandis qu'il suffit de fermer la "Fenêtre" pour résoudre le problème.
-
Oui moi aussi (bon pas aussi drastique, mais ça crée une petite surcharge CPU) @Yohan y'a moyen d'enlever les flocons maintenant que les fêtes sont terminées ?
-
Faut quand même pas trop en demander à GEA le jour du seigneur
- 12 394 réponses
-
- 2
-
-
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Pour le profil utilisateur, je n'en n'ai aucune idée. Par contre pour les messages privés, il n'a jamais été possible de mettre de pièce jointe dans les messages. Si @Yohan passe par là.
-
Il existe déjà un sujet ici, on l'utilise ou on en fait un nouveau ?
-
Non, maintenant il faut impérativement utiliser l'adresse email pour se connecter, que ça soit sur l'interface Web ou via l'API.
-
J'ai constaté ça aussi avec mon FGBS sur la sonnette. A la différence majeure que mon scénario sonnette n'est pas géré par GEA, mais par une scène externe, qui ne fait que ça (donc optimisée pour la performance). Donc GEA n'est pas en cause, c'est la box qui loupe certains événements et ne déclenche pas le trigger de la scène comme elle le devrait. Sans certitude, je soupçonne que ce comportement se produit quand : - la box est déjà occupée à autre chose - pendant ce temps là, l'entrée du FGBS passe tellement vite de 0 à 1 puis reprend son était 1 à 0, que la box loupe le premier front montant, et ne déclenche le trigger de la scène que sur le front descendant du FGBS (alors qu'en temps normal, elle devrait déclencher 2 fois la scène)
- 12 394 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Certes oui.... mais le PlayFi tarde à sa développer, et ça reste soumis à licence DTS, donc pas certain que ça soit la solution ultime qui mette tout le monde d'accord. Le multiroom, c'est comme la domotique, c'est pas demain la veille qu'il y aura un standard universel interopérable. Une fois de plus, on est des défricheurs de technologies.
-
Cela dit, je parle là d'optimisation "atomiques", il existe ainsi plein de petits trucs et astuces à savoir.... MAIS on gagne là des pouillèmes de micro-secondes, souvent le temps perdu par un code l'est par une mauvaise logique, et il est parfois plus efficace de restructurer son code différemment que de se prendre la tête sur les optimisations atomiques.
-
Oui tout à fait, la ligne for elle-même est interprétée à chaque passage. Bien sur qu'il y a énormément de code écrit ainsi, tout comme il y a énormément de code avec la fonction pair(). Le propre d'un langage de programmation, c'est aussi de nous faciliter la vie avec des raccourcis, mais ces raccourcis sont rarement performants au sens du temps d'exécution machine. Si on pousse plus loin encore le raisonnement, un appel de fonction, c'est très long, il faut placer les paramètres sur la pile, décaler le pointeur d'exécution du programme, etc. D'un point de vue performance, un code linéaire est donc plus performant qu'un code bien structuré avec de multiples fonctions. Sauf qu'à un moment donné, on est quand même obligé d'utiliser les fonctions si on veut que le développeur, un simple humain, puisse s'y retrouver dans la structure du code. De plus, les fonctions permettent de factoriser le code, donc de minimiser l'usage mémoire. Il a longtemps été reproché à Microsoft d'être trop gourmand en RAM.... donc les fonctions, faut les utiliser !
-
Comme ceci, non testé : getBtn=function(i,n) local c,r = 0, api.get("/devices/"..tostring(i))["properties"]["rows"] local nbr = #r for a=1, nbr do local nbra = #r[a].elements for b=1, nbra do c=c+1 if n == r[a].elements[b].name then return c end end end return nil end J'en ai profité pour déclarer toutes les variables en local, cela évite d'interférer avec les éventuelles variables du reste du script LUA de l'utilisateur qui intègrera ce code.
-
Je peux faire le chieur ? Tu comptes le nombre d'éléments de tes tableaux à chaque passage dans la boucle, tant qu'à optimiser il veut mieux stocker dans une variable locale avant d'entrer dans la boucle.