# envoi de données poids sigfox

**URL:** <https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661>\
**Category:** Français\
**Created:** [May 29, 2017, 4:17pm UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661 "2017-05-29T16:17:29Z")\
**Posts on this page:** 19\
**Page:** 1

<div class="post-metadata">

**Author:** ![fabricecarrique](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/fabricecarrique/32/932119_2.png) [@fabricecarrique](https://forum.arduino.cc/u/fabricecarrique)\
**Post date:** [May 29, 2017, 4:17pm UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661/1 "2017-05-29T16:17:29Z")

</div>

Bonjour  
Je débute avec arduino,  
je souhaite envoyer des données de poids de ma balance vers sigfox mais j'ai du mal a trouver un bon exemple sur internet.

voici mon code pour le pesage :

```cpp
#include "HX711.h"

HX711 scale;

void setup() {
  Serial.begin(38400);
  //Serial.println("HX711 Demo");

 // Serial.println("Initializing the scale");
  // parameter "gain" is ommited; the default value 128 is used by the library
  // HX711.DOUT	- pin #A1
  // HX711.PD_SCK	- pin #A0
  scale.begin(A1, A0);
  scale.set_scale(23150.f);                      // this value is obtained by calibrating the scale with known weights; see the README for details
  scale.tare();         // reset the scale to 0
}

void loop() {
  Serial.print("Poids :\t");
  Serial.print(scale.get_units(), 5);
 
  scale.power_down();         // put the ADC in sleep mode
  delay(5000);
  scale.power_up();
}

```

---

<div class="post-metadata">

**Author:** ![J-M-L](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/j-m-l/32/766245_2.png) [@J-M-L](https://forum.arduino.cc/u/J-M-L)\
**Post date:** [May 29, 2017, 4:28pm UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661/2 "2017-05-29T16:28:18Z")

</div>

j'ai fait un petit tuto de [Découverte du MKRFOX 1200](http://forum.arduino.cc/index.php?topic=478766.0) qui utilise la librairie sigfox pour un exemple d'envoi d'une température

---

<div class="post-metadata">

**Author:** ![fabricecarrique](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/fabricecarrique/32/932119_2.png) [@fabricecarrique](https://forum.arduino.cc/u/fabricecarrique)\
**Post date:** [May 29, 2017, 5:26pm UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661/3 "2017-05-29T17:26:22Z")

</div>

oui, je l'ai vu mais la partie envoie je ne comprends pas le fonctionnement

SigFox.write((uint8\_t\*)&msg, sizeof(SigfoxMessage));

---

<div class="post-metadata">

**Author:** ![J-M-L](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/j-m-l/32/766245_2.png) [@J-M-L](https://forum.arduino.cc/u/J-M-L)\
**Post date:** [May 29, 2017, 5:34pm UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661/4 "2017-05-29T17:34:41Z")

</div>

Cette commande `write()` de la librairie prend deux paramètres : un pointeur vers la zone mémoire de début des données et le nombre d'octets à envoyer

j'ai stocké en mémoire dans la structure msg ma température (transformée pour le fun en entier en centièmes de degrés). donc `&msg` est l'adresse (le pointeur) vers ma structure de données. comme la fonction attend un pointeur vers un octet, je convertis le type avec un cast explicite `(uint8_t*)` en entier 8 bit non signés (un octet).

Ensuite il faut dire combien d'octets on va envoyer, et donc j'utilise la fonction `sizeof()` qui vous dit combien d'octets sont utilisés par un type ou une variable. `SigfoxMessage` c'est le nom du type de ma structure, donc `sizeof(SigfoxMessage)` va me dire combien d'octet je dois envoyer.

--\>d'où le

```cpp
SigFox.write((uint8_t*)&msg, sizeof(SigfoxMessage));

```

J'aurais pu me passer de la structure et juste mettre la T° dans une variable et passer l'adresse de cette variable et utiliser `sizeof() ` de la même manière pour calculer le nombre d'octets à envoyer mais cette approche par structure est plus évolutive, si je voulais envoyer plus de choses, je les ajouterai dans ma structure et le code d'envoi ne changera pas.

OK ?

---

<div class="post-metadata">

**Author:** ![fabricecarrique](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/fabricecarrique/32/932119_2.png) [@fabricecarrique](https://forum.arduino.cc/u/fabricecarrique)\
**Post date:** [May 30, 2017, 3:40pm UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661/5 "2017-05-30T15:40:20Z")

</div>

Bonjour,  
j'ai adapté votre code pour avoir des valeurs temperature et humidité de mon capteur DTH22 pour pouvoir recevoir par email les données avec les , et cela fonctionne.

```cpp
typedef struct __attribute__ ((packed)) sigfox_message { // see http://www.catb.org/esr/structure-packing/#_structure_alignment_and_padding
  //int16_t moduleTemperature;
  float dhtTemperature;
  float dhtHumidity;
  float poids;
} SigfoxMessage;

```

```cpp
float t = dht.readTemperature();
 float h = dht.readHumidity();
 float poids = (scale.get_units(), 3);

  msg.dhtTemperature = (float) (t);
  msg.dhtHumidity = (float) (h);
  msg.poids = (float) (poids);

```

par contre pour la mesure du poids je bute sur la déclaration de cette variable  
je ne sais pas ce qu'il faut mettre  
j'ai ceci : float poids = (scale.get\_units(), 3);  
et :  
Serial.print(poids); me donne 3  
alors que  
Serial.print(scale.get\_units(), 3); me donne le bon resultat de ma pesée

je voudrais transmettre le poids vers SIGFOX  
Merci de votre aide :

---

<div class="post-metadata">

**Author:** ![J-M-L](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/j-m-l/32/766245_2.png) [@J-M-L](https://forum.arduino.cc/u/J-M-L)\
**Post date:** [May 30, 2017, 4:13pm UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661/6 "2017-05-30T16:13:40Z")

</div>

en C++, la virgule peut séparer deux expressions et retourne comme valeur l'évaluation de la seconde expression. par exemple

```cpp
int x = 10, 20; // met 20 dans x, 10 est ignoré

```

Donc ce code ` float poids = (scale.get_units(), 3);`  
eut dire appeler la méthode get\_units() sur l'objet scale, mettre le résultat à la poubellle et retourner la valeur 3 qui sera stockée dans la variable de type flottant poids...

bref, ça fait pareil que

```cpp
float poids = 3;

```

Alors que `Serial.print(scale.get_units(), 3);`  
veut dire appeler la méthode get\_units() sur l'objet scale, passer ce résultat à la fonction print, et dire combien de chiffre on veut après la virgule avec le second paramètre de print, ici 3.

bref faites `float poids = scale.get_units();` et vous aurez votre valeur dans la variable poids

---

<div class="post-metadata">

**Author:** ![fabricecarrique](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/fabricecarrique/32/932119_2.png) [@fabricecarrique](https://forum.arduino.cc/u/fabricecarrique)\
**Post date:** [May 31, 2017, 4:23am UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661/7 "2017-05-31T04:23:58Z")

</div>

Super, ça marche 🙂

---

<div class="post-metadata">

**Author:** ![fabricecarrique](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/fabricecarrique/32/932119_2.png) [@fabricecarrique](https://forum.arduino.cc/u/fabricecarrique)\
**Post date:** [May 31, 2017, 3:58pm UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661/8 "2017-05-31T15:58:31Z")

</div>

Pouvez vous m'indiquer comment l'on peut afficher une données poids en Kg sous ce format : x.xxx Kg ?  
j'ai bien la valeur retournée par la balance sous forme de nombre avec 10 chiffres après la virgule.

Faut-il que je convertisse cette données avant de l'envoyer ou modifier mon callback pour afficher le bon format :  
ma configuration est :  
poids::float:32:little-endian dans le payload config  
et  
Poids {customData#poids} Kg  
dans le corps du mail

Merci encore de votre aide

---

<div class="post-metadata">

**Author:** ![J-M-L](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/j-m-l/32/766245_2.png) [@J-M-L](https://forum.arduino.cc/u/J-M-L)\
**Post date:** [June 1, 2017, 8:45am UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661/9 "2017-06-01T08:45:27Z")

</div>

Que recevez vous dans le mail ? trop de chiffres après la virgule? si c'est cela votre problème, tronquez la valeur lue avant l'émission

```cpp
float v1 = 1.23456789
unsigned long v2 = v1 * 1000; // va ne conserver que la partie entière en prenant 3 décimales v2 sera 1234
v1 = v2 / 1000.0 // va remettre dans v1 1.234, vous avez ainsi enlevé les autres décimales
// reste plus qu'à envoyer v1

```

---

<div class="post-metadata">

**Author:** ![fabricecarrique](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/fabricecarrique/32/932119_2.png) [@fabricecarrique](https://forum.arduino.cc/u/fabricecarrique)\
**Post date:** [September 28, 2017, 1:08pm UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661/10 "2017-09-28T13:08:52Z")

</div>

Peut t'on envoyer 2 messages différents avec sigfox dans le même programme :

on a :

```cpp
typedef struct __attribute__ ((packed)) sigfox_message { 
  int16_t temp2;
  int16_t dhtTemperature;
  uint16_t dhtHumidity;
  float poids;
  
  } SigfoxMessage;

// stub for message which will be sent

SigfoxMessage msg;

```

ce qui sert de structure du message à envoyer  
mais si je veux transmettre une seule données dans un autre message par exemple un message d'alarme.  
Est ce que je peux déclarer une seconde structure ? et comment ? Merci

mais si dans mon programme je veux changer de structure pour envoyer un autre message (d'alarme par exemple) comment déclarer une nouvelle structure de message ?

---

<div class="post-metadata">

**Author:** ![al1fch](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/al1fch/32/979602_2.png) [@al1fch](https://forum.arduino.cc/u/al1fch)\
**Post date:** [September 28, 2017, 1:41pm UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661/11 "2017-09-28T13:41:43Z")

</div>

Bonjour

> Est ce que je peux déclarer une seconde structure ? et comment ? Merci  
> mais si dans mon programme je veux changer de structure pour envoyer un autre message (d'alarme par exemple) comment déclarer une nouvelle structure de message ?

Il me semble que , pour tenir compte des contraintes (actuelles ?) de Sigfox, il faut inclure l'alarme dans LA structure (unique)

Si tu envoies à Sigfox un message construit sur la base d'une autre structure que celle qu'il connait ("grammaire de décodage") il me semble qu'il ne saura pas quoi en faire.

LA structure DU message qu'on déclare dans le backend de Sigfox pour un device donné me parait unique. (_simple impression issue d'une pratique limite et récente de Sigfox......sans MKRFOX1200._)

En gros : il faut loger l'info 'alarme' dans l'espace de 12 octets (1 bit, ça doit être possible de le caser ....quitte à 'serrer' un peu les autres infos) L'application , le service , qui assurera la présentation des infos relayées par Sigfox (ThingSpeak peut être) se chargera de réagir à un changement de valeur de la variable 'alarme'.

Il y a peut être une combine pour que Sigfox réagisse à des messages qui sont tantôt des données tantôt un événement d'alarme et qu'il traite différemment ces deux types de messages.

---

<div class="post-metadata">

**Author:** ![fabricecarrique](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/fabricecarrique/32/932119_2.png) [@fabricecarrique](https://forum.arduino.cc/u/fabricecarrique)\
**Post date:** [September 28, 2017, 2:10pm UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661/12 "2017-09-28T14:10:29Z")

</div>

La grammaire de décodage est propre au type de message reçu, dans le Back-End de Sigfox, chaque type de message URL, Mail, à son propre champs de decodage de grammaire.  
Ensuite je peux créer un second message pour décoder ce message, mais je ne vois pas comment, une fois j’envoie des données sur un serveur via une url et si une alarme je l'envoi par mail si la structure est unique.  
on peut créer plein de callback avec sigfox avec autant de decodage de message, mais effectivement je ne voit pas ou l'on peut faire le distingo d'un message A ou B

---

<div class="post-metadata">

**Author:** ![al1fch](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/al1fch/32/979602_2.png) [@al1fch](https://forum.arduino.cc/u/al1fch)\
**Post date:** [September 28, 2017, 2:29pm UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661/13 "2017-09-28T14:29:11Z")

</div>

"Type de message" : j'en vois trois DATA, SERVICE, ERROR.

Seul le premier type prend en charge des données 'utilisateur' (custom), cohérentes avec la structure définie à l'émission , données utilisateur qu'il est possible de passer à une url, un mail....

Les seules variables utilisateur disponibles sont celles qui ,par ailleurs ,ont été définies dans l'écran '_payload display_'.

Je ne vois pas de choix multiple possible et de règle permettant à Sigfox de traiter de manière différenciée les messages (du type DATA) reçus contenant des données émises.

........Quelque chose m'échappe peut être, tout cela est pour moi 'tout nouveau'....

D'ou l'idée de passer toute les variables(alarme incluse) à quelque chose comme ThingSpeak qui saura , lui, traiter les divers éléments et envoyer par exemple une alerte. Il me semble que le traitement des données n'est pas (aujourd'hui) du ressort de Sigfox.

---

<div class="post-metadata">

**Author:** ![al1fch](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/al1fch/32/979602_2.png) [@al1fch](https://forum.arduino.cc/u/al1fch)\
**Post date:** [September 28, 2017, 4:12pm UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661/14 "2017-09-28T16:12:15Z")

</div>

Tu peux :

-ajouter une variable '_alarm_' à la structure émise par le MKRFOX1200,  
-déclarer cette variable dans le backend Sigfox : Menu _Edition.... Payload display, custom grammar, custom configuration,_  
-créer un callback spécifique type _Data, Uplink, url_ qui extrait la seule variable _alarm_ et l'envoie vers un site tiers (ThingSpeak, IFTTT......etc)ou un serveur perso qui réagira en cas de passage de la variable '_alarm_' de 0 à 1 (mail, sms, notification...).

Dans ce 'montage' la variable '_alarm_' serait actualisée toutes les 15' (si c'est l'intervalle choisi) , Sigfox la retransmet au service chargé de détecter l'évènement (passage de la variable de 0 à 1) et déclencher l'action d'avertissement.

---

<div class="post-metadata">

**Author:** ![fabricecarrique](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/fabricecarrique/32/932119_2.png) [@fabricecarrique](https://forum.arduino.cc/u/fabricecarrique)\
**Post date:** [September 29, 2017, 1:16pm UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661/15 "2017-09-29T13:16:39Z")

</div>

IFTTT à l'air sympa, mais je n'ai pas trouver la façon de faire pour lire les données, l'action channel MAKER n'existe plus ? il est impossible de le selectionner, a moins qu'il est changé de nom ?  
Si quelque a déja expérimenter IFTTT ?

---

<div class="post-metadata">

**Author:** ![al1fch](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/al1fch/32/979602_2.png) [@al1fch](https://forum.arduino.cc/u/al1fch)\
**Post date:** [September 29, 2017, 2:13pm UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661/16 "2017-09-29T14:13:17Z")

</div>

la dernière fois que j'ai utilisé IFTTT c'était avec Maker  
.......probablement remplacé par Webhooks...

---

<div class="post-metadata">

**Author:** ![fabricecarrique](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/fabricecarrique/32/932119_2.png) [@fabricecarrique](https://forum.arduino.cc/u/fabricecarrique)\
**Post date:** [September 29, 2017, 3:00pm UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661/17 "2017-09-29T15:00:38Z")

</div>

Alors voila, c'est effectivement Webhooks qui le remplace, mais je ne vais pas m'en servir.  
Je fait une nouvel Applet avec Email :

Pour résoudre mon problème initial d'alarme si poids = 0 voila ce que j'ai fait

1 - Je reçoi déja à l'aide de sigfox un message par mail de mes données avec un CALLBACK DATA UPLINK EMAIL

2 - Je cré un second CALLBACK email contenant la seule donnée qui m'interesse ici : le poids avec une entete spécifique (#IFTTT).

3- Je crée une regle dans mon logiciel de messagerie qui dit que si le mail contient #IFTTT et que dans le corps du message poids = 0 alors le message est transféré à [trigger@applet.ifttt.com](mailto:trigger@applet.ifttt.com)

4 -il suffit ensuite dans IFTTT de créer une règle email avec condition : entete = #IFTTT et qui provient de mon email alors il envoi un SMS...  
If send [trigger@applet.ifttt.com](mailto:trigger@applet.ifttt.com) an email tagged #IFTTT from [xxx@orange.fr](mailto:xxx@orange.fr), then send me an SMS at 00336XXXXXXXX (update phon

Merci IFTTT et merci al1fch pour l'info.  
Il me reste plus qu'à modifier mon code pour l'envoi de ce message spécifique si le poids =0

---

<div class="post-metadata">

**Author:** ![al1fch](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/al1fch/32/979602_2.png) [@al1fch](https://forum.arduino.cc/u/al1fch)\
**Post date:** [September 29, 2017, 3:25pm UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661/18 "2017-09-29T15:25:56Z")

</div>

Super !! bonne idée , le filtrage et la règle par le logiciel de messagerie !!

de mon côté je n'avais probablement pas suivi d'assez près le fil de discussion et je pensais que l'alarme n'était plus liée au poids mais à un contact dédié.

je viens de faire un petit test avec une variable binaire 'alarme' ajoutée à la 'grammaire' + un callback spécifique qui 'titille' IFTTT envoyant la valeur 0 ou 1 de l'alarme...... + une règle (applet) IFTTT est programmée pour envoyer un mail si la variable vaut 1, pas de règle programmée quand la variable vaut 0

Finalement , malgré ses limites, IFTTT permet de 'prolonger' facilement l'action du backend Sigfox en attendant que les fonctionnalités de ce dernier se développent !!

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [May 6, 2021, 3:00pm UTC](https://forum.arduino.cc/t/envoi-de-donnees-poids-sigfox/461661/19 "2021-05-06T15:00:56Z")

</div>

Closed on May 6, 2021, 3:00pm UTC


