Aller au contenu
jpr105

APIs BULKSMS et PRESENCE NETATMO

Recommended Posts

Bonjour,

 

Je me réponds à moi-même pour vous faire un retour d’expérience … si cela peut servir à quelqu’un ;-)

Ceci concerne l’envoi de SMS à des personnes de confiance dans le cadre d’une procédure d’alarme (donc conso SMS réputée faible)

 

Plusieurs approches pour cela :

  • le téléphone dédié sous Android avec service tournant sur le téléphone relié à un Raspberry, lui-même pilotable par la HC2 (trop geek pour moi)
  • l’utilisation du service « Notifications par SMS » de chez Free qui est bien mais qui sous-entend que vos personnes de confiance soient toutes chez Free
  • passage par un opérateur d’envoi de SMS payant

Pour ma part j’ai fait un mixte de SMS envoyés via Free et de SMS envoyés par BulkSMS (https://www.bulksms.com/)

 

BulkSMS, avantages/inconvénients :

  • Avantages
    • mode API disponible et bien documenté
    • possibilité d’envoyer des e-mail qui se transforment en SMS chez eux et donc possibilité d’utiliser le panneau de notifications de Fibaro (ça j’ai pas testé)
    • support technique réactif par courriel et même joignable au téléphone … in English of course
    • espace utilisateur clair
    • possibilité d’envoi de SMS à des « groupes » avec substitution de variables « Nom », « Prénom »
    • possibilité de personnaliser le « Sender ID » du message (Ex : BoxFibaroTartenpion)
    • possibilité de laisser les destinataires répondre aux SMS avec :
      • consultation des réponses dans l’espace client
      • possibilité de faire suivre les réponse par courriel
      • possibilité d’envoyer une réponse automatique (payante bien sûr)
    • achat de pack de crédits non limités dans le temps
    • possibilité de se faire allouer des crédits pour la période de test
  • Inconvénients
    • politique tarifaire un peu glauque : on achète un pack de crédits et non un pack de SMS, ainsi un SMS pour la France peut couter de 1,75 à 2 crédits
    • il y a possibilité d’obtenir une réduction du SMS de 15% en terminant le texte par le tag « : via BulkSMS.com » … mais cela ne fonctionne pas en mode API, c’est juste dans l’espace client, dommage
    • nombre de crédits alloués pour la période de tests vraiment insuffisant (20) … mais après négociations ils me les ont recrédité ;-)

Donc du point de vue Fibaro

 

J’utilise 3 variables « BulkSMS », « BulkSMS_ID », « BulkSMS_RC »

 

« BulkSMS_ID » contient tout ce qui est nécessaire à l’exécution de l’API (URL, Token d’identification).

Cette variable est remplie une bonne fois pour toute dans une scène au démarrage de la HC2 ou via déclenchement manuel

local IDBulk = {}

-- Sauvegarde des ID BulkSMS dans la variable globale BulkSMS_ID
-- Le Token ID est 8Fxxxxxxxxxxxxxxxxxxxxxxx-7
-- Le Token secret est QQxxxxxxxxxxxxxxxxxxxxN
-- La chaîne "TokenID:TokenSecret" sera passée en Base64 on line via le site https://www.base64encode.org/
-- Résultat : OExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxp4Tg==

IDBulk[1] = "https://api.bulksms.com/v1/messages"
IDBulk[2] = "OExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxp4Tg=="

fibaro:setGlobal('BulkSMS_ID',json.encode(IDBulk))

« BulkSMS » est la partie « opérationnelle » de l’API. Le changement d’état de cette variable déclenche la scène « Send SMS via BulkSMS ».

Je l’ai programmée pour gérer 2 types d’envoi : vers un individu ou vers un groupe car la syntaxe n’est pas la même selon le cas.

--[[
%% properties
%% events
%% globals
BulkSMS
--]]

-- Activation du Debug

local log = true

-- Récupération de lidentification BulkSMS

local IDBulk = json.decode((fibaro:getGlobal('BulkSMS_ID')))
local URLBulk = IDBulk[1]
local TokenBulk = IDBulk[2]

-- Récupération de laction à entreprendre

local BulkSMS = json.decode((fibaro:getGlobal('BulkSMS')))
local ModeBulk = BulkSMS[1]
local DestiBulk = BulkSMS[2]
local MessageBulk = BulkSMS[3]

-- Codes retours BulkSMS

local ReturnCodeTexte = {
  [201]=" - Created",
  [400]=" - Bad Request",
  [403]=" - Forbidden",
  [999]=" - Error"
}
local ReturnCodeValue = ""

-- Affichage des premières variables

if log then
  fibaro:debug("URL Bulk = " .. URLBulk)
  fibaro:debug("Token Bulk = " .. TokenBulk)
  fibaro:debug("Mode d’envoi = " .. ModeBulk)
  fibaro:debug("Destinataire = " .. DestiBulk)
  fibaro:debug("Message = " .. MessageBulk)
end

-- Construction du Body

local Body = ""
if ModeBulk == "S" then
  Body = '{"to": "' .. DestiBulk .. '", "body": "' .. MessageBulk .. '"}'
  else
  if ModeBulk == "G" then
    Body = '{"to": { "type": "GROUP", "name": "' .. DestiBulk .. '" }, "body": "' .. MessageBulk .. '"}'
    else
     print('Mode d’envoi inconnu : ' .. ModeBulk)
     fibaro:abort()
  end
end

-- Construction de lauthentification

local Autorisation = "Basic " .. TokenBulk

if log then
  fibaro:debug("Authentification = " .. Autorisation)
  fibaro:debug("Body = " .. Body)
end

-- Et maintenant la requête

local http = net.HTTPClient({timeout = 1000});

http:request(URLBulk, {
  options = { method = 'POST',
                headers = {
                            ["Authorization"] = Autorisation,
                            ["Content-Type"] = "application/json"
                          },
                data = Body
               },
    success = function(data)
       fibaro:setGlobal('BulkSMS_RC', data.status)
       end,
    error = function(err)
       fibaro:setGlobal('BulkSMS_RC', 999)
       end
})

-- Récupération du code retour depuis la variable globale

ReturnCodeValue = tonumber(fibaro:getGlobalValue('BulkSMS_RC'))

if log then fibaro:debug("Code retour = " .. ReturnCodeValue .. ReturnCodeTexte[tonumber(ReturnCodeValue)]) end
  
if log then fibaro:debug("C'est fini") end

« BulkSMS_RC » contient le code retour de l’envoi du SMS.

Pour l’instant je n’ai rien fait mais pourquoi pas une scène déclenchée par cette variable et dédiée à la gestion d’erreur ?

 

Et pour finir, la partie la plus simple …

 

Cas d’un envoi à une seule personne

-- Initialisation des variables
local Jour = os.date("%d-%m-%Y")
local Heure = os.date("%X")
local Horo = " le " .. Jour .. " à " .. Heure
local Texte = ""
local BulkSMS = {}

-- Envoi sur portable JPR
Texte = "Test Push iBidules - SMS envoyé via BulkSMS sur portable JPR" .. Horo

-- On initialise la variable BulkSMS
BulkSMS[1] = "S"
BulkSMS[2] = "+336xxxxxx87"
BulkSMS[3] = Texte

fibaro:setGlobal('BulkSMS',json.encode(BulkSMS))

Cas d’un envoi à un groupe

-- On envoie au groupe BulkSMS
Texte = "Bonjour {fn######}, alarme déclenchée" .. Horo .. "\nNe prenez aucun risque, appelez le 17 !\nMme BIDULE a les clefs - Merci"

-- On initialise la variable BulkSMS
BulkSMS[1] = "G"
BulkSMS[2] = "Liste alarme 01"
BulkSMS[3] = Texte

fibaro:setGlobal('BulkSMS',json.encode(BulkSMS))

Et voilà c’est fini.

Si cela peut servir, tant mieux et merci au post Plugin Free Mobile SMS initié par @Krikroff qui m’a bien inspiré

 

Have a good day - Jean-Paul

  • Like 2

Partager ce message


Lien à poster
Partager sur d’autres sites

@jpr105 merci pour le code qui permet de récupérer les infos de la "Presence".

J'ai cependant un problème. Si l'image du device est correct, quand j'ouvre celui ci, j'ai une toute petite image.

Ai-je oublié quelque chose ?

 

cam1.jpg

cam2.jpg

Partager ce message


Lien à poster
Partager sur d’autres sites

salut a tous

 

comment on obtient le TOKEN ???

 

j'ai l'api netatmo, code id et code secret , j'ai l'adresse IP mais ou obtient on le code TOKEN?

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut je reviens vers toi après plusieurs années, 

 

J'avais bien réussi à effectuer l'installation de ma première caméra Netatmo Présence grâce au code que tu avais partagé à l'époque (encore merci ^^) et je viens d'en acheter une 2ème.

 

J'ai repris le code, avec les ID client, client secret, etc.. mais maintenant ça me met "certificat failed",  j'ai effectué un "Reset Keys" sur dev.netatmo.com et ça me mets encore "certificat failed".

 

Est-ce que tu arriverais à me dire ce qui cloche stpp ?

 

En espérant que tu sois encore actif sur le forum je te remercie d'avance ;)

 

image.thumb.png.d1c350419d0dc525548048c22fc8db6f.png

Partager ce message


Lien à poster
Partager sur d’autres sites

×