Aller au contenu

Recommended Posts

---------------------------------

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 :

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.

  • Upvote 9

Partager ce message


Lien à poster
Partager sur d’autres sites

Excellent ! Vais voir ça quand j'ai un peu de temps.

Partager ce message


Lien à poster
Partager sur d’autres sites

ça a l'air super, il faudrait que je m'y mette.

Est-ce que cela serait compatible avec GEA ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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))"

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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"]}})

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ...

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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?

Partager ce message


Lien à poster
Partager sur d’autres sites

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  :P

 

Si par contre, tu lances la scène manuellement, elle va t'afficher la liste de tes appareils inscrits dans pushbullet.

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

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
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour les caméras, avec mes connaissances, c'est pas vraiment possible car il faudrait :

  1. Transférer l'image de la caméra sur pushbullet
  2. 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  :(

Partager ce message


Lien à poster
Partager sur d’autres sites

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!

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :-)

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci Steven pour ce partage, je vais tester ça quand j'aurais un peu de temps !

Partager ce message


Lien à poster
Partager sur d’autres sites

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

  • Upvote 3

Partager ce message


Lien à poster
Partager sur d’autres sites

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 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

De mémoire le Net.Fhttp ne reconnait pas les httpS .. c'est donc mort.  :23:

 

:94:

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

×