Bonjour
je cherche à transmettre les données de ma station meteo ( original comme projet
) à travers sigfox. C'est nouveau pour moi et j'ai pas tout compris.J'ai utilisé des sketch déjà fait et tenté de les mettre à ma sauce.
dans mon sketch j'ai déjà celà :
#define UINT16_t_MAX 65536 // ca sert à quoi ca ? 2^16
#define INT16_t_MAX UINT16_t_MAX/2
typedef struct __attribute__ ((packed)) sigfox_message {
int16_t moduleTemperature;
int16_t capteurVitesse;
uint16_t capteurOrientation;
uint8_t lastMessageStatus;
} SigfoxMessage;
// Stub for message which will be sent
SigfoxMessage msg;
int vitMoy = 50; // je lui donne la valeur 50 km/h valeur comprise entre 0 et 110
int orienMoy = 355; // l'angle est de 355 degré avec le nord valeur comprise entre 0 et 360
void setup { // j'ai viré ce qui n'est pas intéressant
}
void loop {
msg.capteurVitesse = convertoFloatToUInt16(vitMoy, 110);
msg.capteurOrientation = convertoFloatToUInt16(orienMoy, 360);
SigFox.begin();
// Wait at least 30ms after first configuration (100ms before)
delay(100);
// We can only read the module temperature before SigFox.end()
t = SigFox.internalTemperature();
msg.moduleTemperature = convertoFloatToInt16(t, 60, -60);
// Clears all pending interrupts
SigFox.status();
delay(1);
SigFox.beginPacket();
SigFox.write((uint8_t*)&msg, 12);
msg.lastMessageStatus = SigFox.endPacket();
SigFox.end();
}
int16_t convertoFloatToInt16(float value, long max, long min) {
float conversionFactor = (float) (INT16_t_MAX) / (float)(max - min);
return (int16_t)(value * conversionFactor);
}
uint16_t convertoFloatToUInt16(float value, long max) {
float conversionFactor = (float) (UINT16_t_MAX) / (float)(max);
return (uint16_t)(value * conversionFactor);
}
les données sont envoyées, et du coté de sigfox, je reçois bien les messages. J'ai mis en place le callback pour rediriger vers mon serveur perso
dans Custom payload config j'ai mis :
moduleTemp::int:16:little-endian capteurVitesse::int:16:little-endian capteurOrientation::uint:16:little-endian lastMsg::uint:8
et dans l'url à contacter :
http://xx.xx.xxx.xxx/dossiermeteo/w.php?o={ customData#capteurVitesse}&v={customData#capteurOrientation}&t={customData#moduleTemp}
du coté de mon serveur, le script php refuse ce qui arrive( mais pas de fichier de log), mais je peux contrôler les valeurs car il m'envoie aussi un email. mais voilà, je ne comprend pas ce qu'il m'envoie...
mon sigfox xxxxxx a envoyé à 1516464145, cette data : dd0d0000a42f0000a7ffffff
Sa location est à lat 51.0 et longitude : 2.0
le niveau de reception est : -126.00 et snr :24.88
vitesse : 0
orientation 12196
temperature module 3549
lastmsg : 0
mon sigfox xxxxxx a envoyé à 1516464553, cette data : cc0c0000499f0d00de000000
Sa location est à lat 51.0 et longitude : 2.0
le niveau de reception est : -131.00 et snr :20.49
vitesse : 0
orientation 40777
temperature module 3276
lastmsg : 13
Ais je besoin de faire la transformation des "int" vitMoy et orienMoy avec convertoFloatToUInt16 puisque à la base j'ai déjà des "int" ?
Comment transforme-ton la date en ici hex je suppose vers quelque chose de lisible ?
c'est quoi les little/big endian ?
Olivier ( un peu perdu...)