Publié le 25 février 2017 - par

Utiliser l’API de SigFox pour afficher ses données

Dans un article récent, je vous ai présenté la carte breakout SigFox de SNOC. La récupération des données transmises se faisait en callback. Ici je vais vous expliquer comment récupérer vos données avec l’API SigFox.

Cliquez pour obtenir de l’information sur les niveaux.

 

Attention VPS temporaire
Le serveur VPS (Virtual Private Server) framboise314 hébergé par web4all est utilisé pour différentes expérimentations. Il est possible que d’ici quelque temps les pages citées dans cet article ne soient plus accessibles.

Afficher les données envoyées par un Raspberry Pi avec l’API SigFox

Rappel du fonctionnement en callback

Cliquez pour agrandir.

Lorsqu’on utilise le callback, le Raspberry Pi envoie un message à la carte SigFox. La carte transmet les 12 octets maxi) par radio au réseau SigFox. A réception du message le serveur SigFox transfère instantanément chaque paquet de données vers un serveur désigné par l’utilisateur. Il fait un appel à une page web et en lui passant ces informations en GET ou en POST…

C’est ce qu’on appelle un « callback » car le serveur SigFox appelle “en retour” le serveur VPS qu’on lui a désigné ici. Si vous êtes intéressé(e) par cette technique, reportez vous à l’article précédent.

Principe de fonctionnement avec l’API SigFox

Cliquez pour agrandir.

Ici le fonctionnement est un peu différent comme nous allons le voir :

  1. Le Raspberry Pi envoie les données à la carte breakout SigFox qui les transmet par radio à l’antenne SigFox la plus proche. Les différents messages sont envoyés selon la programmation de l’utilisateur (maxi 140 messages par jour soit environ un toutes les 10 minutes).  Ils sont stockés sur le serveur SigFox et peuvent être consultés en ligne sur ce serveur :
  2. A un moment quelconque, un utilisateur souhaite afficher dans son navigateur les données envoyées par le Raspberry Pi. Il se connecte sur la page web du serveur VPS framboise314 (http://vps.goblink.fr/testapi.php). Cette page web PHP contient un appel à l’API SigFox.
  3. L’appel au serveur SigFox est envoyé, avec les identifiants (login/password) de l’utilisateur.
  4. Le Serveur Sigfox construit un bloc json (Javascript Object Notation) contenant les messages reçus par le serveur et stockés chez SigFox. Le message est renvoyé vers le VPS framboise314.
  5. La page web testapi.php reçoit le bloc de données au format json. Le programme PHP décode les informations contenues dans le bloc de données, et les affiche sous forme d’un tableau qui est renvoyé vers le navigateur du poste de l’utilisateur.

Maintenant que nous avons vu le principe d’utilisation de l’API SigFox, je vous propose de détailler sa mise en œuvre.

L’API SigFox

Création d’un compte d’API

Pour utiliser l’API (Application Programming Interface) SigFox, il faut disposer d’un compte. La première opération consiste donc à obtenir les identifiants pour cette API.

Cliquer pour agrandir.

Sur votre page SigFox, rendez vous dans l’onglet USER. Votre utilisateur SigFox s’affiche. Cliquez à l’extrémité droite de la ligne sur le groupe (ici François MOCQ EVK).

Vous arrivez sur la page de votre groupe sur laquelle figurent des informations relatives à votre abonnement. Dans le menu apparu dans la colonne gauche de la page, cliquez sur API ACCESS.

Vous arrivez sur la page d’accès à l’API. La première fois cette page est vide. Cliquez en haut à droite sur le bouton New.

Donnez un nom à l’accès API (j’ai choisi… feamboise314 🙂 La timezone doit être correcte Déplacez dans la partie droite des fenêtres Custom roles les rôles que vous souhaitez attribuer. Puis cliquez sur le bouton Ok sous la fenêtre.

Cliquer pour agrandir.

Votre accès à l’API est créé. Vos identifiants sont affichés. Sauvegardez les précieusement.

Remarquez à la fin de la première ligne un lien vers API documentation. Ça ne fait pas de mal d’aller s’y balader un peu 😉

Maintenant que nous avons les clés pour discuter avec le serveur de SigFox, je vous propose de regarder comment on va s’adresser à lui.

Un premier test

Maintenant qu’on a les identifiants on va essayer de se connecter sur le site de SigFox à cette adresse : https://backend.sigfox.com/api/devices/VOTRE_MODULE/messages

Vous remplacerez VOTRE_MODULE par le numéro de votre propre module SigFox.

Lorsque vous arrivez sur la page une fenêtre s’ouvre et vous devez saisir les login/mot de passe à rallonge que vous avez obtenu auparavant.

En retour vous obtenez les relevés des messages de votre module SigFox.

C’est dans ce format json que vous allez recevoir les informations venant du site SigFox. Heureusement, on dispose des outils nécessaires dans PHP pour traiter ces informations 🙂

La page à afficher

Le cahier des charges

Je souhaite afficher les informations contenues dans les messages SigFox sur une page web. Celle-ci contiendra un logo de framboise314 (bin oui 😉 ) puis un tableau listera les différents messages qui étaient stockés sur le serveur SigFox.

Je précise que je ne suis pas un développeur web, et que j’ai développé la page web avec mes connaissances en PHP et CSS. On peut (certainement) faire mieux. Vous avez le point de départ, si vous voulez stocker les infos dans une base de données, tracer de jolies courbes… Libre à vous ! Pour ma part je m’arrête là 😀

La page web PHP

Cliquez pour télécharger le programme.

Le programme utilise CURL pour accéder au serveur SigFox. Ensuite le bloc json récupéré est “détricoté” et une boucle balaye chaque message et l’affiche dans un tableau.

L’éditeur de WordPress est un garnement qui enlève subrepticement des espaces utilisés pour l’indentation ou remplace en douce des signes comme > par >
Après avoir galéré un moment pour essayer de le dompter, j’ai choisi de vous proposer le programme sous forme d’image. Il suffit de cliquer sur l’image pour télécharger le programme.

 

Avertissement :
Un bon conseil de Joël @joelvim sur twitter : Ne mettez pas les login/mot de passe dans le programme. Je rappelle que ces progs sont simplement des démos de faisabilité et pas des exemples 😉
Autre conseil de Joël : Utiliser les callbacks pour récupérer les msg, et l’API en backup quand le serveur n’a pas pu tous les récupérer (en cas d’arrêt par ex.)

François, arrange un peu ta cravate…

Pour que la page reçue soit un peu plus jolie j’ai ajouté une pincée de CSS. Vous verrez le lien qui charge style.css en haut de la page PHP. Mettez ce fichier CSS dans le même dossier sur votre page PHP.

table {
 margin: auto;
 border-width:1px;
 border-style:solid;
 border-color:black;
 border-collapse:collapse
}

td {
 border-width:1px;
 border-style:solid;
 border-color:blue;
 padding: 5px;
 vertical-align:middle;
 width:20%;
}

th {
 color: grey;
 background-color: bisque;
 align: center;
}
tr:nth-child(odd) /*Toutes les lignes impaires : la 1e, la 3e, la 5e, etc.*/
{
 background-color: white;
}

tr:nth-child(even) /*Toutes les lignes paires : la 2e, la 4e, la 6e, etc.*/
{
 background-color: linen;
}

Ce fichier CSS enjolivera un peu le tableau, en le centrant et en ajoutant un peu de couleur.

Envoi d’un message SigFox

Pour les tests j’ai envoyé deux messages à partir de putty sur le Raspberry Pi. On retrouve ces deux messages en haut du tableau (ci dessous).

La page web affichant les messages

Cliquez pour agrandir.

Les lignes qui affichent 6 chiffres contiennent :

  • La température de la carte SigFox (en dixièmes de degré)  sur 3 chiffres
  • La température du SoC du Raspberry Pi (en dixièmes de degré)  sur 3 chiffres

Exemple : 291515 signifie 29.1 °C pour la carte SigFox et 51.5°C pour le Soc

Les lignes qui contiennent 14 chiffres contiennent :

  • La température de la carte SigFox (en dixièmes de degré)  sur 3 chiffres
  • La température du SoC du Raspberry Pi (en dixièmes de degré)  sur 3 chiffres
  • La tension d’alimentation de la carte SigFox lors de l’émission (en centième de volt) sur 4 chiffres
  • La tension d’alimentation de la carte SigFox lors de l’émission précédente (en centième de volt) sur 4 chiffres

Exemple : 27848332303205 signifie 27.8 °C pour la carte SigFox et 48.3°C pour le Soc. Les tensions d’alimentation sont : 3.23v et 3.205v.

Vous pouvez télécharger le programme qui envoie ces informations toutes les 15 minutes depuis le Raspberry Pi. Il est dérivé du programme de SNOC (sur github) et fourni sans garantie 😉

Une meilleure qualité de liaison

Les plus observateurs d’entre vous auront remarqué que la qualité de liaison est moyenne, sauf sur les deux lignes en haut du tableau (les plus récentes).

Les tests de la carte étaient faits sur un bureau, l’antenne posée à plat, loin d’une fenêtre.

Pour les derniers tests j’ai tout simplement dégagé l’antenne du matériel présent sur le bureau (un sacré bazar 😉 )

Le plus simple était de la fixer avec un morceau de ruban adhésif sur la vitre d’une fenêtre. Ceci assure un meilleur rayonnement des ondes radio et fournit une sérieuse amélioration du SNR (signal-to-noise ratio = rapport signal sur bruit).

On voit que le rapport signal sur bruit a augmenté de plus de 20 dB, ce qui représente (à la louche) une amélioration de… 100 fois !

Conclusion

Après l’utilisation du callback dans le premier article, cette suite vous permettra d’accéder à vos données d’une autre façon, en utilisant l’API SigFox.

L’utilisation qui en est faite ici est basique, avec un affichage dans un tableau. A vous de jouer pour faire de jolis graphiques, afficher des jauges etc… N’hésitez pas à mettre un lien dans les commentaires pour faire admirer vos réalisations (et peut-être donner des idées à d’autres ?).

Sources

Using Sigfox callback API to create your own application

Share Button

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. Auteur de plusieurs livres sur le Raspberry Pi publiés aux Editions ENI.

16 réflexions au sujet de « Utiliser l’API de SigFox pour afficher ses données »

  1. nono78

    Merci pour cette série d’article sur les technologies liées à SIGFOX.
    Est-il possible d’avoir une vision sur le code coté Raspberry ?
    Merci

    Répondre
    1. François MOCQ Auteur de l’article

      bonjour
      oui tout à fait
      c’est un callback avec une réponse.
      j’ai comme projet de piloter la luminosité d’une LED via SigFox (faut bien commencer par quelque chose 😉 )
      Mais j’avance petit à petit… je découvre en même temps
      cordialement
      François

      Répondre
  2. Adèle

    Bonjour,
    Très didactique ! Merci !
    Vous utilisez une boucle qui permet de lister l’intégralité des messages de l’IOT.
    Quelle boucle utiliser si je souhaite afficher uniquement les 10 derniers résultats ?
    Merci
    Adèle

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Adèle
      le programme affiche directement les infos reçues.
      Vous pourriez ranger ces infos dans un tampon et n’afficher que les 10 premières lignes
      cordialement
      François

      Répondre
  3. Inart Adèle

    Bonjour François,
    Merci pour cette réponse, je ne suis pas très avancée en programmation php, auriez-vous un petit bout de code à me proposer pour m’aider ?
    Par avance merci François.
    Adèle

    Répondre
  4. François

    Bonjour François,

    Très bon tutoriel. Merci !
    J’arrive à me connecter manuellement à l’API (https://backend.sigfox.com/api/devices/…) avec mes accès perso. Je vois donc le JSON des messages envoyés par mon appareil.
    Par contre, impossible de les récupérer via php. Ma variable “$data” est vide (ce qui pose d’ailleurs un problème dans le parcours de la boucle).
    Pourtant je suis sur que les variables $ulr, $password et $user sont correctes…

    A quoi pensez-vous que cela peut être dû ?

    Merci d’avance et excellente journée,
    François

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour
      difficile à dire à distance
      Le code fonctionnait quand j ai écrit l article
      Il y a peut être eu des modifs
      Essayez d avancer pas par pas en imprimant les infos pour pouvoir déterminer
      Cordialement
      Francois

      Répondre
    2. Momo

      Mettre ce code pour la partie CURL:
      $user = “utilsateur: mot de passe”;
      $url =”https://backend.sigfox.com/api/devices/xxxxxxx/messages”;
      $timeout = 10;
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
      curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
      curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
      if (preg_match(‘^https://i’, $url))
      {
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
      }

      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

      // Définition de la méthode d’authentification du serveur
      curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);

      //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_URL,$url);
      curl_setopt($ch, CURLOPT_USERPWD, $user);
      $result=curl_exec($ch);
      curl_close($ch);
      $data = (json_decode($result, true));

      Répondre
  5. Jérome

    Bonjour à tous,

    En premier lieu je tiens à vous remercier pour le tuto qui m’a jusque là été très utile.
    En suite j’ai une petit demande d’aide, dans le cadre d’un projet je souhaiterai envoyer les datas transmises par un arduino+sigfox vers une db firebase via je suppose un callback. Et c’est là que ça coince car malgré plusieurs essais je n’y arrive pas.
    Auriez-vous déjà tenté cette opération et si oui pourriez-vous me transmettre les configuration des différentes étapes.

    D’avance merci.

    Jérôme

    Répondre
  6. Pascal

    Bonjour,
    Merci pour ce tuto qui est très utile pour le débutant que je suis dans ce domaine.
    Le script PHP ne retourne aucun résultat en ce qui me concerne.
    Je l’ai bien paramétré, l’URL retourne bien les données mais le CURL_init ne retourne que Ressource id#2
    Aucune data n’est décodé.
    Auriez vous une idée de la cause ?
    Merci
    Pascal

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.