Aller au contenu
Krikroff

Script: custom "callAction"

Recommended Posts

Je vous propose le script suivant qui émule la méthode "fibaro.call" moyennent quelques ajustements:

 

Version 1.0.0

 

  1. La prise en charge de callbacks (success, error)
  2. Le support du retard d'action (actuellement proposée par l' API mais non visible depuis la méthode intégrée call)

 

Code lisible:

-- Name: callAction
-- Description: Trigger an action of the specified device
-- Arg1: id [number] Device id
-- Arg2: actionName [string] Action name
-- Arg3: params [array] { delay [number], args [array] (option), success [function] (option), error [function] (option) }
-- Return: nothing
function callAction(id, actionName, params)
    local url = "http://127.0.0.1:11111/api/devices/" .. id .. "/action/" .. actionName
    local headers = {
        ["content-type"] = "application/json;charset=UTF-8",
        ["X-Fibaro-Version"] = "2",
        ["Cache-Control"] = "no-cache, no-store"
    }        
    params = params or {delay=0, args={}}
    local args = params.args
    if (#args==0) then
        args = {{}}    
    end
    assert(tonumber(params.delay), "callAction(id, actionName, delay, ...), delay argument must be an integer")
    local delay = tonumber(params.delay or 0)
    if (delay < 0) then
        delay = 0
    end
    local arguments = { args = args, delay = delay }
    local http = net.HTTPClient({ timeout = 20000 })
    http:request(url, {
        options = {
            headers = headers,
            method = "POST",
            data =  json.encode(arguments)
        },        
        success = function(status)
            if (params.success ~= nil and type(params.success) == "function") then
                params.success(status.status, status.data)
            end
        end,
        error = function(error)
            if (params.error ~= nil and type(params.error) == "function") then
                params.error(error)
            end
        end
    })
end

 

Version minifiée:

Taux de compression du code: 48.53%

function callAction(a,b,c)local d="http://127.0.0.1:11111/api/devices/"..a.."/action/"..b;local e={["content-type"]="application/json;charset=UTF-8",["X-Fibaro-Version"]="2",["Cache-Control"]="no-cache, no-store"}c=c or{delay=0,args={}}local f=c.args;if#f==0 then f={{}}end;assert(tonumber(c.delay),"callAction(id, actionName, delay, ...), delay argument must be an integer")local g=tonumber(c.delay or 0)if g<0 then g=0 end;local h={args=f,delay=g}local i=net.HTTPClient({timeout=20000})i:request(d,{options={headers=e,method="POST",data=json.encode(h)},success=function(j)if c.success~=nil and type(c.success)=="function"then c.success(j.status,j.data)end end,error=function(k)if c.error~=nil and type(c.error)=="function"then c.error(k)end end})end

 

Un exemple d'utilisation pour illustrer:

local params = {
    delay = 0,
    args = {"arg1", "arg2"},
    success = function(status, data)
        print("success")
        print(status)
    end,
    error = function(error)
        print("error")
    end
}
-- Arg1: id [number] Device id
-- Arg2: actionName [string] Action name
-- Arg3: params [array] { delay [number], args [array] (option), success [function] (option), error [function] (option) }
callAction(946, "turnOff", params)

 

A venir dans une prochaine version:

  • Sécurisation de l’exécution (via pcall)
  • Une action poussée sur plusieurs périphériques
  • Plusieurs actions poussées sur un périphérique

 

Amusez-vous bien :)

 

  • Like 3

Partager ce message


Lien à poster
Partager sur d’autres sites

Putain c'est nickel tes présentations de code comme ça @Krikroff ! Ça donne envie d'acheter, tu fais iech :P

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Je prends mon mal en patience ! Te fais pas iech @BenjyNet de toute manière elle n'est pas en stock :P

  • Haha 1

Partager ce message


Lien à poster
Partager sur d’autres sites

ooooh mais c’est du tout très bien ça...

 

vais m’en inspirer...:2:

 

merci !

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

×