Julien92130 Posté(e) le 2 mai 2020 Signaler Posté(e) le 2 mai 2020 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.
Lazer Posté(e) le 2 mai 2020 Signaler Posté(e) le 2 mai 2020 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. 1
jjacques68 Posté(e) le 2 mai 2020 Signaler Posté(e) le 2 mai 2020 oui, un petit "self" devant "requestBody" devrait aider ...
Julien92130 Posté(e) le 2 mai 2020 Auteur Signaler Posté(e) le 2 mai 2020 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 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
jjacques68 Posté(e) le 2 mai 2020 Signaler Posté(e) le 2 mai 2020 tu devrais essayer de créer une nouvelle token, peut être qu'elle aime pas être partagée entre 2 systèmes (hc3, domoticz)
Julien92130 Posté(e) le 2 mai 2020 Auteur Signaler Posté(e) le 2 mai 2020 Oui, je suis certain pour le token. J'en ai effectivement déjà créé un nouveau pour différencier mes notifications Domoticz de celle de la HC3. Je vais aussi poser la question au support de Pushover car à priori je ne suis pas le seul : https://github.com/ioBroker/ioBroker.pushover/issues/23
jjacques68 Posté(e) le 2 mai 2020 Signaler Posté(e) le 2 mai 2020 tu peux nous montrer un debug du "data" de ta requête ?
Julien92130 Posté(e) le 2 mai 2020 Auteur Signaler Posté(e) le 2 mai 2020 Oula avec plaisir oui... Mais comment je fais ça ? (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
jjacques68 Posté(e) le 2 mai 2020 Signaler Posté(e) le 2 mai 2020 oui zut on peut pas alors faire un debug de json.encode(requestBody)
Krikroff Posté(e) le 2 mai 2020 Signaler Posté(e) le 2 mai 2020 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 ?
Julien92130 Posté(e) le 2 mai 2020 Auteur Signaler Posté(e) le 2 mai 2020 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 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 })
jjacques68 Posté(e) le 2 mai 2020 Signaler Posté(e) le 2 mai 2020 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))
Krikroff Posté(e) le 2 mai 2020 Signaler Posté(e) le 2 mai 2020 Je regarde, tu me laisses 5 minutes ?
jjacques68 Posté(e) le 2 mai 2020 Signaler Posté(e) le 2 mai 2020 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, {
Krikroff Posté(e) le 2 mai 2020 Signaler Posté(e) le 2 mai 2020 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 1
Krikroff Posté(e) le 2 mai 2020 Signaler Posté(e) le 2 mai 2020 Je viens de mettre à jour car il me semble de mémoire que sans le champ message cela ne fonctionne pas
Julien92130 Posté(e) le 2 mai 2020 Auteur Signaler Posté(e) le 2 mai 2020 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 Merci aussi jjacques68. Vous êtes au TOP ! 2
Julien92130 Posté(e) le 2 mai 2020 Auteur Signaler Posté(e) le 2 mai 2020 à 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 ))) !
Krikroff Posté(e) le 2 mai 2020 Signaler Posté(e) le 2 mai 2020 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
Krikroff Posté(e) le 2 mai 2020 Signaler Posté(e) le 2 mai 2020 Punaise je craque... Il m'en faut un en prod à la maison de HC3 2
jjacques68 Posté(e) le 2 mai 2020 Signaler Posté(e) le 2 mai 2020 fais toi plaisir ! c'est de la bombe cette box !
Krikroff Posté(e) le 2 mai 2020 Signaler Posté(e) le 2 mai 2020 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 2
mprinfo Posté(e) le 2 mai 2020 Signaler Posté(e) le 2 mai 2020 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 ministrePour @jacques68 je le vois bien ministre du développement durable Envoyé de mon BLA-L29 en utilisant Tapatalk 1
Nico Posté(e) le 2 mai 2020 Signaler Posté(e) le 2 mai 2020 On peut avoir un aperçu du rendu du VD Sonos en appli téléphone et sur l'interface de la HC3 ?
Messages recommandés