Aller au contenu

Messages recommandés

Posté(e)

Bonjour le forum :) 

 

J'essaye de faire fonctionner les notifications Pushover.

 

Pour cela, je me suis très largement inspiré d'un exemple du forum officiel que j'essaye convertir en QA puisqu'il n'est apparement pas possible d'utiliser net.HTTPClient dans une scène (cela reste encore un mystère pour moi ^^). 

 

J'ai donc créé une QA de type Binary Switch avec le code suivant :

function QuickApp:turnOn()
    self:debug("binary switch turned on")
    self:updateProperty("value", true)
  
    self.http:request("https://api.pushover.net/1/messages.json", {
        options = {
            data = json.encode(requestBody),
            method = "POST",
            headers = {
                ["Content-Type"] = "application/json",
                ["Accept"] = "application/json",
                ["Authorization"] = "Basic XXX"
            }
        },
        success = function(response) 
            self:debug(response.status)
            self:debug(response.data)
        end,
        error = function(message)
            self:debug("error:", message)
        end
    })
end

function QuickApp:turnOff()
    self:debug("binary switch turned off")
    self:updateProperty("value", false)    
end

function QuickApp:onInit()
    self:debug("onInit")
    self.http = net.HTTPClient({timeout=3000})
    local tkn = "XXX"
    local usr = "XXX"
    --local msg = fibaro.getGlobalVariable("pushoverBody")
    local msg = "Juste pour le test" 
    local dvc = "iPhone_Julien,iPad_Julien"
    local prio = "0"
    local snd = "0"
    local ttl = "Titre Message"
    local requestBody = 'token=' .. tkn .. '&user=' .. usr .. '&title=' .. ttl .. '&message=' .. msg .. '&priority=' .. tostring(prio) .. '&sound=' .. tostring(snd) .. '&device=' .. dvc
end

Le debug me retourne : 

[QUICKAPP297]: {"token":"invalid","errors":["application token is invalid"],"status":0,"request":"8fbfbaaa-3908-45b3-aca4-13026a354509"}

D'après ce que je comprend

  • Mon code semble correct et ce message est retourné par Pushover qui ne comprend pas ma requête ?
  • J'ai aussi un code de retour 400, donc à priori "Bad Request", qui semble confirmer mon hypothèse.  

 

L'API Pushover que j'utilise (et qui fonctionne très bien dans mon Domoticz)

 

Si quelqu'un à une idée :) ?

 

Portez-vous bien.

Posté(e)

Je n'ai jamais/pas encore développé sur HC3, mais d'un point de vue purement LUA quand je vois que tu déclares la variable requestBody en local dans la fonction onInit(), cette variable ne peut pas être utilisée dans turnOn()

 

Un petit rappel :

 

De façon générale quand tu développes et que tu as des messages d'erreurs, pensent à ajouter un maximum de traces (fibaro:debug() ou son équivalent sur HC3) pour afficher le contenu des variables que tu manipules sur ton écran. Tu verras que ça explique 99% des erreurs, car tu ne manipules en fait pas la bonne donnée que tu pensais avoir.

 

  • Like 1
Posté(e)

Merci pour tes conseils Lazer. J'avais bien cette notion de variables locales vs. globales en tête, mais c'était un peu flou pour moi :wacko:

 

J'ai donc remonté la déclaration de mes variables dans le turnOn() mais j'ai exactement les mêmes retours. 

 

Le fibaro:debug() semble maintenant être devenu fibaro.debug() d'après la documentation, mais je ne sais pas comment l'utiliser... 

 

J'apprend beaucoup par des exemples, mais la difficulté avec la HC3 c'est qu'elle est quand même trop récente et que je trouve encore majoritairement du code pour HC2. Mais ce n'est pas grave, c'est en forgeant qu'on devient forgeron :lol:

Posté(e)

Oula avec plaisir oui... Mais comment je fais ça :lol: ?

 

(j'ai honte, ça doit sûrement être un truc bête...)

 

Voilà ce qui apparaît dans le debug lorsque j'allume le switch : 

[02.05.2020] [13:57:38] [DEBUG] [QUICKAPP297]: onAction: {"actionName":"turnOn","args":[297,"turnOn"],"deviceId":297}
[02.05.2020] [13:57:38] [DEBUG] [QUICKAPP297]: binary switch turned on
[02.05.2020] [13:57:39] [DEBUG] [QUICKAPP297]: 400
[02.05.2020] [13:57:39] [DEBUG] [QUICKAPP297]: {"token":"invalid","errors":["application token is invalid"],"status":0,"request":"110acf34-4567-4f84-94cf-4a08a04f4a3b"}

Et voilà mon LUA actuel : 

function QuickApp:turnOn()
    self:debug("binary switch turned on")
    self:updateProperty("value", true)

    -- Déclaration des variables
    tkn = "XXX"
    usr = "XXX"
    ttl = "Objet du messgae"
    --local msg = fibaro.getGlobalVariable("pushoverBody")
    msg = "Message" 
    dvc = "iPhone_Julien,iPad_Julien"
    prio = "0"
    snd = "0"
    requestBody = 'token=' .. tkn .. '&user=' .. usr .. '&title=' .. ttl .. '&message=' .. msg .. '&priority=' .. tostring(prio) .. '&sound=' .. tostring(snd) .. '&device=' .. dvc
    -- Pushover request
    self.http:request("https://api.pushover.net/1/messages.json", {
        options = {
            data = json.encode(requestBody),
            method = "POST",
            headers = {
                ["Content-Type"] = "application/json",
                ["Accept"] = "application/json",
                ["Authorization"] = "Basic XXX"
            }
        },
        success = function(response) 
            self:debug(response.status)
            self:debug(response.data)
        end,
        error = function(message)
            self:debug("error:", message)
        end
    })
end

function QuickApp:turnOff()
    self:debug("binary switch turned off")
    self:updateProperty("value", false)    
end

function QuickApp:onInit()
    self:debug("onInit")
    self.http = net.HTTPClient({timeout=3000})
end

 

Posté(e)

Et avec un 

Content-Type: application/x-www-form-urlencoded

Avec le requestbody aggregé au message.json ?

 

requestBody = 'token=' .. tkn .. '&user=' .. usr .. '&title=' .. ttl .. '&message=' .. msg .. '&priority=' .. tostring(prio) .. '&sound=' .. tostring(snd) .. '&device=' .. dvc

 

car ton requestBody c'est de l'url et pas un Payload encodable en json.

 

Tu peux faire les deux, il faut juste choisir ;)

 

Je pense que l' API est correctement documenter sur le site, tu as été vérifier ?

Posté(e)

Alors... J'ai changé le Content-Type mais j'arrive au même résultat, avec la même sortie (application token is invalid)

 

Pour le debug, je ne suis pas vraiment certain où je dois le mettre :huh: J'ai mis ça comme ça (mais pas plus d'info en sortie) : 

self.http:request("https://api.pushover.net/1/messages.json", {
        options = {
            data = json.encode(requestBody),
            method = "POST",
            headers = {
                ["Content-Type"] = "application/json",
                ["Accept"] = "application/json",
                ["Authorization"] = "Basic XXX"
            }
        },        
        success = function(response) 
            self:debug(response.status)
            self:debug(response.data)
            fibaro.debug(json.encode(requestBody))
        end,
        error = function(message)
            self:debug("error:", message)
            fibaro.debug(json.encode(requestBody))
        end
    })
 
Posté(e)

juste après la création de la chaine

 

requestBody = 'token=' .. tkn .. '&user=' .. usr .. '&title=' .. ttl .. '&message=' .. msg .. '&priority=' .. tostring(prio) .. '&sound=' .. tostring(snd) .. '&device=' .. dvc
self:debug(json.encode(requestBody))

 

Posté(e)
il y a 20 minutes, Krikroff a dit :

car ton requestBody c'est de l'url et pas un Payload encodable en json.

 

tu penses à le mettre directement dans l'URL ?

 

self.http:request("https://api.pushover.net/1/messages.json?"..'token=' .. tkn .. '&user=' .. usr .. '&title=' .. ttl .. '&message=' .. msg .. '&priority=' .. tostring(prio) .. '&sound=' .. tostring(snd) .. '&device=' .. dvc, {

 

Posté(e)
    local settings = {
        -- Application's API token
        token = "xxxxxxxxxxxx",
        -- User key
        user = "xxxxxxxxxxxxx",
        -- Device (optional)
        device = "",
        -- Title (optional)
        title = "",
        -- Priority
        priority = "0",
        -- Pushover sound (default)
        sound = "pushover",
        -- MEssage
        message = ""
    }
    settings.title = "HC3 Push"
    settings.message = "Push depuis mon HC3"
    settings.priority = "1"
    local http = net.HTTPClient({ timeout = 5000 })
    local payload = json.encode(settings)
	http:request("https://api.pushover.net/1/messages.json", {
        options = {
            headers = {
                ["content-type"] = "application/json;charset=UTF-8"
            },
            method = "POST",
            data = payload
        },        
        success = function(status)            
            if (tonumber(status.status) == 200) then
                print("success")
            end
        end,
		error = function(error)
            print(error)
        end
	})

Voila :)

 

  • Upvote 1
Posté(e)

Je viens de mettre à jour car il me semble de mémoire que sans le champ message cela ne fonctionne pas ;)

Posté(e)
il y a 8 minutes, Krikroff a dit :

    local settings = {
        -- Application's API token
        token = "xxxxxxxxxxxx",
        -- User key
        user = "xxxxxxxxxxxxx",
        -- Device (optional)
        device = nil,
        -- Title (optional)
        title = nil,
        -- Priority
        priority = "0",
        -- Pushover sound (default)
        sound = "pushover"
    }
    local http = net.HTTPClient({ timeout = 5000 })
    local payload = json.encode(settings)
	http:request("https://api.pushover.net/1/messages.json", {
        options = {
            headers = {
                ["content-type"] = "application/json;charset=UTF-8"
            },
            method = "POST",
            data = payload
        },        
        success = function(status)            
            if (tonumber(status.status) == 200) then
                print("success")
            end
        end,
		error = function(error)
            print(error)
        end
	})

Voila :)

 

OH MY GOD ! Tu es mon sauveur !!! 

 

Un grand **GRAND** merci à toi, fonctionne impeccable :13:

 

Merci aussi jjacques68. 

 

Vous êtes au TOP !

  • Like 2
Posté(e)
à l’instant, Krikroff a dit :

Je viens de mettre à jour car il me semble de mémoire que sans le champ message cela ne fonctionne pas ;)

J'ai bien reçu le push au premier essai. J'ai juste rajouté mon Title et Device. 

 

Vous êtes géniaux les mecs ))) !

Posté(e)

J'ai remis à jour le code sur le post précédent avec le message et tu peux modifier les valeur du settings... ensuite tu dispatch tout cela comme tu veux dans ton QA pour faire un truc propre :)

 

Posté(e)

Punaise je craque... Il m'en faut un en prod à la maison de HC3:3:

 

:94:

  • Like 2
Posté(e)

Lol quand j’ai vu comment tourne la version réécrite de mon VD Sonos en QA sur HC3 tu m’étonnes je n’ai pas de doutes, c’est le jour et la nuit ! Et ce n’est qu’un début vu ce que nous réserve les QA


Envoyé de mon iPhone en utilisant Tapatalk

  • Like 2
Posté(e)

Pas si top que cela car tu n'as toujours pas de hc3
On va faire une Team fibaro@krikroff président et@nico 1er ministre

Pour @jacques68 je le vois bien ministre du développement durable

Envoyé de mon BLA-L29 en utilisant Tapatalk

  • Like 1
Posté(e)

On peut avoir un aperçu du rendu du VD Sonos en appli téléphone et sur l'interface de la HC3 ?

×
×
  • Créer...