Steven Posté(e) le 10 juin 2016 Signaler Posté(e) le 10 juin 2016 --------------------------------- PUSHBULLET API --------------------------------- Bonjour, Si comme moi, vous appréciez le service de notification "Pushbullet" et que vous souhaitez l'utiliser depuis votre HC2, voici un script qui vous permettre 2 ou 3 petites choses : Consulter la liste de vos appareils connectés au service Pushbullet Envoyer un message sur tous vos appareils connectés Envoyer un message sur un appareil précis. Avantage de ce script : Pas besoin de service intermédiaire comme pushingbox Plus besoin d'utiliser les notifications aléatoires et capricieuses de Fibaro Pré-requis : Un compte chez Pushbullet L'application Pushbullet installée sur vos appareils (https://www.pushbullet.com/apps) Obtenir un "Token" ... Connectez-vous sur le site Pushbullet -> My Account (en cliquant sur votre avatar) -> Create Access Token Voici le script local pushbullet = { token = "o.Ax6xXFI5Qa8YZX1BFoWzozmVL5plEwGd", titreDesMessage = "Fibaro", debug = false, -- ============================================== -- Affichage dans la console -- Paramètres : -- message : le message a afficher -- force : affiche le message même si debug est à false -- ============================================== log = function(self, message, force) force = force or false if (self.debug or force) then print(__convertToString(message)) end end, -- ============================================== -- Affichage les devices reconnus et actifs -- Paramètres : -- data : tableau des devices -- ============================================== displayDevices = function(self, data) self:log("----------========== D e v i c e s =========----------", true) for k,v in ipairs(data.devices) do if (v.model) then self:log(v.model .. " --- " .. v.iden, true) end end end, -- ============================================== -- Interrogation des devices -- Paramètres : -- func : une fonction a rappeler après traitement ou nil -- ============================================== getDevices = function(self, func) local http = net.HTTPClient() http:request("https://api.pushbullet.com/v2/devices", { options = { method = 'GET', headers = { ["Access-Token"] = self.token, ["Content-Type"] = "application/json" }, data = "" }, success = function(response) if (func) then func(json.decode(response.data)) else self:displayDevices(json.decode(response.data)) end end, error = function(response) self:log(" ERROR !!! " .. url, true) end, }) end, -- ============================================== -- Envoi un message -- Paramètres : -- message : le message à envoyer -- id : l'identifiant du device OU nil -- ============================================== sendPush = function(self, message, id) local http = net.HTTPClient() http:request("https://api.pushbullet.com/v2/pushes", { options = { method = 'POST', headers = { ["Access-Token"] = self.token, ["Content-Type"] = "application/json" }, data = json.encode({ ["body"]=message, ["title"]= self.titreDesMessage, ["type"]="note" }), device_iden = id, }, success = function(response) local data = json.decode(response.data) self:log("----------========== P u s h e s =========----------") self:log("Identifiant du message : " .. data.iden) end, error = function(response) self:log(" ERROR !!! " .. url, true) end, }) end, -- ============================================== -- Envoi d'un message push -- Paramètres : -- message : le message à envoyer -- device : le nom du device concerné ou nil -- ============================================== send = function(self, message, device) if (device) then self:getDevices(function(data) local found for k,v in ipairs(data.devices) do if (v.model == device or v.iden == device) then found = true self:sendPush(message, v.iden) end end if (not found) then self:log(device .. " non trouvé", true) end end) else self:sendPush(message, nil) end end } Quand je lance directement la scène, elle va m'afficher la liste des appareils connectés. Par contre quand je met à jour la variable globale "Pushbullet", elle va m'envoyé un push contenant le message de la variable globale directement sur mon téléphone "HTC One_M8 dual sim". Voici donc une manière simple de recevoir des pushs fonctionnel depuis sa HC2. Pushbullet permet aussi l'envoi de lien http, d'image, ... ce script est donc modifiable à votre convenance. 9
Nico Posté(e) le 10 juin 2016 Signaler Posté(e) le 10 juin 2016 Excellent ! Vais voir ça quand j'ai un peu de temps.
jojo Posté(e) le 10 juin 2016 Signaler Posté(e) le 10 juin 2016 ça a l'air super, il faudrait que je m'y mette. Est-ce que cela serait compatible avec GEA ?
Steven Posté(e) le 10 juin 2016 Auteur Signaler Posté(e) le 10 juin 2016 GEA.add(....., {{"Global", "Pushbullet", "Jojo n'y a même pas pensé"}}) Sinon, il faut remplacer le code de GEA qui envoi des notifications via Fibaro par "fibaro:setGlobal("Pushbullet", GEA.getMessage(entry, nil))"
Steven Posté(e) le 10 juin 2016 Auteur Signaler Posté(e) le 10 juin 2016 Ou directement importer le script "pushbullet" dans GEA puis l'appeler directement. for i = 1, #GEA.portables do pushbullet:send(GEA.getMessage(entry, nil), fibaro:getName(tonumber(GEA.portables[i]))) GEA.log("sendActions", entry, "!ACTION! : sendPush " .. GEA.getMessage(entry, nil), true) end
pepite Posté(e) le 10 juin 2016 Signaler Posté(e) le 10 juin 2016 Excellentissime le "master", à tester oui oui oui !! Top, j'ai jamais essaye pushbullet, ca ressemble à quoi les push "pushbullet" ;-) screenshot svp ;-) Ca evite la dependance fibaro. Bon j'avoue que depuis la redirection de port, je n'ai plus de souci avec les push fibaro, bien qu'on ne puisse plus les lire apres l'ouverture de l'appli hihih petit HS : vous preferez les notifs de type " push appli" aux SMS ? @Steven, avec le code importe dans GEA, ceci serait il possible ? GEA.add...({{"Global", "pushbullet", " jojo vraiment tu aurais pu y pensé ;-)"}, {"Portable", mobile["jojo"]}})
Steven Posté(e) le 10 juin 2016 Auteur Signaler Posté(e) le 10 juin 2016 Il faudrait modifier 2 lignes de GEA, rien de bien méchant pour ton HS. Pour tout ce qui est notification standard, je préfère les push. Par contre pour les trucs vraiment important (une porte qui s'ouvre quand elle devrait pas) je préfère les SMS. L'avantage de pushbullet c'est stable conservation d'un historique possibilité d'envoyé des push à quelqu'un d'autre (utilisant pushbullet) push de message, lien, image, fichier Mirroring .. mes push apparaissent aussi son mon PC quand je travaille Avec la version PRO et Android, je peux même répondre à mes SMS depuis mon PC, piloter ma musique, copier/coller entre PC et téléphone Bref, plein de trucs assez agréable
pepite Posté(e) le 10 juin 2016 Signaler Posté(e) le 10 juin 2016 Ca a l'air vraiment sympa pushbullet. Ca mérite de s'y pencher, mais ca fait encore 1 chose de plus à maintenir ;-) et pour moi...hihihi
Invité chris6783 Posté(e) le 10 juin 2016 Signaler Posté(e) le 10 juin 2016 Très cool ça Steven. Merci pour le partage
jojo Posté(e) le 10 juin 2016 Signaler Posté(e) le 10 juin 2016 GEA.add(....., {{"Global", "Pushbullet", "Jojo n'y a même pas pensé"}}) GEA.add...({{"Global", "pushbullet", " jojo vraiment tu aurais pu y pensé ;-)"}, {"Portable", mobile["jojo"]}} Sorry les gars, honte à moi. Je vais sortir une excuse à la c.. : J'avais juste lu les 3 premières lignes du topic, car comme créé par Steven ça devait avoir de la valeur ajoutée. C'est vrai qu'en y regardant de plus prêt comment ça fonctionne, ma question était stupide (surtout quand on sait que c'est Steven qui a développé le basard).. Mais promis j'ai mis le lien dans mes to do ... 1
jorderic Posté(e) le 14 juin 2016 Signaler Posté(e) le 14 juin 2016 Salut @steven et merci pour ce tuto. Je souhaite essayer cette solution de notification. Le 1ere script doit bien être placé dans une scène? Et ensuite une autre scène pour le déclenchement?
Steven Posté(e) le 14 juin 2016 Auteur Signaler Posté(e) le 14 juin 2016 Si te reprends mon exemple, il te suffit de ne créer qu'une seul scène ou tu colles tout dedans Ainsi : --[[ %% globals Pushbullet --]] local pushbullet = { token = "o.Af6SXfI4Qa8WZX1AFoWzozmVL5plEwGd", titreDesMessage = "Fibaro", debug = false, -- ============================================== -- Affichage dans la console -- Paramètres : -- message : le message a afficher -- force : affiche le message même si debug est à false -- ============================================== log = function(self, message, force) force = force or false if (self.debug or force) then print(__convertToString(message)) end end, -- ============================================== -- Affichage les devices reconnus et actifs -- Paramètres : -- data : tableau des devices -- ============================================== displayDevices = function(self, data) self:log("----------========== D e v i c e s =========----------", true) for k,v in ipairs(data.devices) do if (v.model) then self:log(v.model .. " --- " .. v.iden, true) end end end, -- ============================================== -- Interrogation des devices -- Paramètres : -- func : une fonction a rappeler après traitement ou nil -- ============================================== getDevices = function(self, func) local http = net.HTTPClient() http:request("https://api.pushbullet.com/v2/devices", { options = { method = 'GET', headers = { ["Access-Token"] = self.token, ["Content-Type"] = "application/json" }, data = "" }, success = function(response) if (func) then func(json.decode(response.data)) else self:displayDevices(json.decode(response.data)) end end, error = function(response) self:log(" ERROR !!! " .. url, true) end, }) end, -- ============================================== -- Envoi un message -- Paramètres : -- message : le message à envoyer -- id : l'identifiant du device OU nil -- ============================================== sendPush = function(self, message, id) local http = net.HTTPClient() http:request("https://api.pushbullet.com/v2/pushes", { options = { method = 'POST', headers = { ["Access-Token"] = self.token, ["Content-Type"] = "application/json" }, data = json.encode({ ["body"]=message, ["title"]= self.titreDesMessage, ["type"]="note" }), device_iden = id, }, success = function(response) local data = json.decode(response.data) self:log("----------========== P u s h e s =========----------") self:log("Identifiant du message : " .. data.iden) end, error = function(response) self:log(" ERROR !!! " .. url, true) end, }) end, -- ============================================== -- Envoi d'un message push -- Paramètres : -- message : le message à envoyer -- device : le nom du device concerné ou nil -- ============================================== send = function(self, message, device) if (device) then self.getDevices(function() local found for k,v in ipairs(data.devices) do if (v.model == device or v.iden == name) then found = true self:sendPush(message, v.iden) end end if (not found) then self:log(device .. " non trouvé", true) end end) else self:sendPush(message, nil) end end } -- ============================================== -- Démarrage du script -- ============================================== local trigger = fibaro:getSourceTrigger() if (trigger.type == "other") then pushbullet:getDevices() elseif (trigger.type == "global") then local value = fibaro:getGlobalValue("Pushbullet") if (value ~= "") then pushbullet:send(value, nil) fibaro:setGlobal("Pushbullet", "") end end . . Tu auras un scène qui va envoyé un push via pushbullet chaque voit que tu mettras à jour ta variable globale "Pushbulltet" ... ATTENTION, il faut la créer Si par contre, tu lances la scène manuellement, elle va t'afficher la liste de tes appareils inscrits dans pushbullet.
jorderic Posté(e) le 14 juin 2016 Signaler Posté(e) le 14 juin 2016 Bon 1er essai avec Iphone et Apple Watch: Notification immédiate, l'appli watch s'active mais n'affiche pas la notification, juste le titre "Fibaro". A creuser. Serait il possible, avec ce nouveau service, d'envoi les snapshots caméra au lieu de les avoir par mail ?
pepite Posté(e) le 14 juin 2016 Signaler Posté(e) le 14 juin 2016 je pense que oui, c'est àcreuser, mais @steven m'avait précisé que l'envoi d'images, de liens, de fichier était possible avec pushbullet ;-)
Steven Posté(e) le 14 juin 2016 Auteur Signaler Posté(e) le 14 juin 2016 Je vais regarder comment faire pour les caméras ATTENTION : Erreur de scripts. A la ligne 105 : send = function(self, message, device) if (id) then doit être remplacé par send = function(self, message, device) if (device) then meaculpa 1
Steven Posté(e) le 14 juin 2016 Auteur Signaler Posté(e) le 14 juin 2016 Pour les caméras, avec mes connaissances, c'est pas vraiment possible car il faudrait : Transférer l'image de la caméra sur pushbullet Envoyé un push avec le lien de l'image transférée Le soucis est que je ne sais pas comment transférer un fichier depuis la HC2 vers l'extérieur
jorderic Posté(e) le 15 juin 2016 Signaler Posté(e) le 15 juin 2016 Problème Apple Watch réglé, la notification par modification de variable s'affiche maintenant dans le titre. C'est vrai que pour avoir une véritable plus value avec les notifications natives l'envoi des images serait le top!
Steven Posté(e) le 15 juin 2016 Auteur Signaler Posté(e) le 15 juin 2016 Pour moi, l'une des plus grande plus value est de recevoir mes notifications sur mon PC de travail et aussi sur n'importe quel téléphone sans avoir besoin d'installer les 42Mb de l'application Fibaro :-)
Gazous Posté(e) le 16 juin 2016 Signaler Posté(e) le 16 juin 2016 Merci Steven pour ce partage, je vais tester ça quand j'aurais un peu de temps !
samhuin Posté(e) le 19 juin 2016 Signaler Posté(e) le 19 juin 2016 Vraiment super pratique, et vachement plus réactif que le push de l'appli fibaro :-) Et les notifications sur le PC du boulot que du bonheur :-) Merci 3
971jmd Posté(e) le 19 juin 2016 Signaler Posté(e) le 19 juin 2016 Merci Steven pour ce partage pour GEA je l'utilise comme ça GEA.add({"Value", id["DETEC_CHPARENT"] , 1}, -1, "", {{"Global", "Pushbullet", "Lampe Chamber OFF"}}) pour les camera j'ai peut être une solution, mai je ne sais pas si exploitable avec l'adresse ip de l'image fixe de la camera Streaming/channels/1/picture?snapShotImageType=JPEG chaque foi que l'adresse est rafraîchie elle nous donne une nouvelle image
SebDel Posté(e) le 4 juillet 2016 Signaler Posté(e) le 4 juillet 2016 Bonjour Steven, J'utilise GEA depuis le début et j'ai effectivement modifié les sendmessage pour les diriger vers pushingbox qui les pousse vers pushbullet. Avec ce nouveau script on peut donc attaquer directement l'api pushbullet, ce qui est est certainement plus efficace. Par contre je ne veut pas migrer en v4 et je suis toujours en 3.60 Est ce que tu as une version de ton script avec la classe Net.FHttp. la classe net.HTTPClient ne semble pas exister en 3.60. Merci pour tes conseils. Séb
Steven Posté(e) le 4 juillet 2016 Auteur Signaler Posté(e) le 4 juillet 2016 De mémoire le Net.Fhttp ne reconnait pas les httpS .. c'est donc mort.
SebDel Posté(e) le 5 juillet 2016 Signaler Posté(e) le 5 juillet 2016 Bonjour, Bon dans ce cas je vais passer par un petit serveur local qui va faire le travail et la box fera juste une requête toute simple sur ce serveur. On évitera comme ça le pushingbox qui pose à nouveau des problèmes d'accents. Séb
Messages recommandés