Transmission des paquets aléatoires...

Forum de support et d'échange sur la carte Akeru (carte compatible Arduino développée par Snootlab et intégrant la technologie Sigfox) et du shield Akene pour Arduino (shield pour Arduino développée par Snootlab et intégrant la technologie Sigfox)

Transmission des paquets aléatoires...

Message non lude pierrepoulpe » Mer 3 Juin 2015 20:39

Bonjour,

Je rencontre des problèmes.... mes paquets n'arrivent pas toujours.
Ce serait purement aléatoire, je mettrai ça sur le dos de la courverture réseau encore limite.

Mais c'est plus étrange que ça : sans changer de localisation, et sans toucher à l'akeru, je peux recevoir une série de plusieurs dizaines de paquets sans perte, puis tous les perdre pendant plusieurs heures, et puis ça revient d'un coup...

Ca me fait penser à un problème côté réseau, comme si des antennes "tombaient" puis étaient remises en lignes.
Bon, c'est la phase de démarrage, ce sera peut être plus stable d'ici quelque mois...

J'ai laissé dormir l'akeru un mois et demi, je relance les tests, et.... je ne reçois rien... ah un paquet passe, après 5 essais. puis encore 3 de perdus, etc...
Et le niveau de signal. Il y a un mois et demi, ca tournait autour de 20, et là ca tombe à 7.

Voire ici le listing des paquets reçus : (à partir de l'incrément 1642)
http://pierrebeck.fr/akeru_post/list.php
(il n'y pas de perte entre actoboard et mon site)

J'ai déjà paramétré la puissance d'émission à fond par le code, cf ci dessous.


Comment diagnostiquer?
Sigfox communiquent ils sur les interventions de leur antenne relais?
Communiquent ils sur l'emplacement des ces antennes, et leur couverture théorique?


Code: Tout sélectionner
#include <Akeru.h>
#include <SoftwareSerial.h>
#include <EEPROM.h>
 
long analogRawSum;

typedef struct  {
  float analogValueAvg;
  int increment;
} packetT;

packetT packet;

unsigned long lastSend;



void setup() {

 
  Serial.begin(9600);
  Akeru.begin();
  Akeru.setPower(5);
 
  Serial.println(Akeru.getID());
  Serial.println(Akeru.getRev()); 

  packet.increment = (EEPROM.read(0) << 8) + EEPROM.read(1);
  Serial.println(packet.increment);

  lastSend = 0; //millis();
  delay(5000); 
}

void loop() {
  delay(1000);
  Serial.println(Akeru.isReady());
  Serial.println(millis() - lastSend);
 
  if ((((millis() - lastSend) > 600000) || (lastSend == 0)) && Akeru.isReady()) { // 10 minutes

    packet.increment++;
    EEPROM.write(0,(packet.increment>>8) & 255);
    EEPROM.write(1,(packet.increment) & 255);
   
    Serial.println("sending....");
    Serial.println(packet.increment);   
    Serial.println(Akeru.send(&packet, sizeof(packet)));
   
    lastSend = millis();
  }
 
}
pierrepoulpe
 
Messages: 9
Inscription: Dim 28 Déc 2014 12:08

Re: Transmission des paquets aléatoires...

Message non lude fred » Jeu 4 Juin 2015 11:11

Tout protocole de communication même filaire génère des pertes de paquets.
La solution classique pour se protéger des pertes de paquets consiste à émettre le paquet tant que l'acquittement de réception n'est pas arrivé à l'émetteur.
Le protocole de communication Sigfox permet d'être très basse consommation et très longue distance mais aucun acquittement n'est retourné au modem.

Dans la stratégie d'utilisation, il est préférable d'anticiper cela en envoyant par exemple plusieurs fois les données; en intégrant dans la payload les info de plusieurs mesures successives puis de supprimer les doublons sur le serveur qui traite les données.

Cordialement.
Avatar de l’utilisateur
fred
 
Messages: 220
Inscription: Lun 20 Déc 2010 15:32
Localisation: Toulouse

Re: Transmission des paquets aléatoires...

Message non lude pierrepoulpe » Jeu 4 Juin 2015 11:15

Entièrement d'accord sur les limites de la radio unidirectionnelle.
... Et j'en serai resté là si la perte de paquet était "homogène".

Mais voilà, je trouve étrange que pour un modem qui reste au même endroit, je puisse recevoir des dizaines de messages sans perte, puis des pertes de 70 messages consécutifs.... puis un retour "à la normale".

Sans parler du niveau de signal que l'API remonte : entre 19 et 23 durant le mois d'Avril, et le mois de Juin je reçois un paquet sur 5 avec un niveau de signal entre 6 et 14.

Je cherche juste à comprendre le problème, avant de tirer un trait sur une techno bien trop prometteuse pour l'abandonner si facilement.


Pour la stratégie de comm, c'est ce que j'envisageais de faire. Mais pas avec de telles pertes, et surtout totalement imprévisibles.
pierrepoulpe
 
Messages: 9
Inscription: Dim 28 Déc 2014 12:08

Re: Transmission des paquets aléatoires...

Message non lude nicolsc » Lun 8 Juin 2015 16:05

Salut Pierre,


Hors les classiques problématiques radio, il y a manifestement un truc à éclaircir de notre côté si tu as l'impression que la couverture s'est dégradée récemment.

Question; ton dispositif est il en intérieur ou extérieur ?

De ce que je peux voir, on reçoit effectivement des messages de ton device avec un niveau de sensibilité limite (~ -140dBm).
Et c'est bien une station différente qui recoit ces messages actuellement par rapport à avril. Mais elle les reçoit très rapidement, alors que le temps de réception était long précedemment.
Si tu n'as pas déplacé ton dispositif entre temps, je creuserai de mon côté ce qui explique ça.


Envoie moi un email à nicolas.lesconnec@sigfox.com pour que je puisse échanger avec toi sur les détails qui n'ont pas leur place ici : ton adresse & la couverture dans les parages ;)


A+


Nicolas // SIGFOX dev & maker evangelist
nicolsc
 
Messages: 5
Inscription: Lun 8 Juin 2015 15:57

Re: Transmission des paquets aléatoires...

Message non lude ramoo92 » Mer 2 Déc 2015 12:44

Bonjour Pierre,

Je n'ai pas de réponse à te donner concernant ton problème et j'espère que tu as trouvé.
Je viens vers toi car je n'arrive pas à récupérer les requetes POST envoyés depuis actoboard vers mon site.
J'ai développé un script php qui devrait afficher les informations reçues dans actoboard mais rien est affiché. Je ne comprend pas comment mon site doit se rafraichir et afficher les infos POST recues depuis actoboard.

Merci pour ton aide,
Ramoo
ramoo92
 
Messages: 1
Inscription: Mer 2 Déc 2015 12:38

Re: Transmission des paquets aléatoires...

Message non lude pierrepoulpe » Mer 2 Déc 2015 16:01

Bonjour,

Ne connaissant pas ton niveau de connaissance/débrouillardise en PHP, je prends depuis la base....

Pour faire simple, il va y avoir deux requêtes. actoboard va faire un appel à ton site en POST, en aveugle, et il va falloir stocker cette information, en tout cas en faire quelque chose, typiquement enregistrer dans une base de donnée les infos à garder (typiquement une fois le mot PHP posé, en face.... MySQL? ou du plus simple (quoique) plus léger sqlite)
Et faire une seconde page, qui va basiquement aller lire les données dans cette précédente base de donnée, et les afficher.


Pour debugger, regarde le 'Forward status: 200' dans les 'Latest messages' d'actoboard, tu peux t'aider de http://requestb.in/ (proposé par actoboard), des logs de ton site web, et enfin tu peux écrire depuis ton php dans un fichier log, genre un
Code: Tout sélectionner
<?php
// set file to write
$file = 'paypalPost.php';
//$arr = print_r($_POST);
$somecontent= implode('[',$_POST);
echo $somecontent;
// open file 
$fp = fopen($file, 'w') or die('Could not open file!'); 
// write to file 
fwrite($fp, "$somecontent ")  or die('Could not write to file'); 
// close file 
fclose($fp); 
?>

(pompé je sais plus où...)
pierrepoulpe
 
Messages: 9
Inscription: Dim 28 Déc 2014 12:08

Re: Transmission des paquets aléatoires...

Message non lude pierrepoulpe » Mer 2 Déc 2015 16:03

tiens j'ai même mon code que j'avais utilisé, hors framework qui le rend non partageable:

le post
Code: Tout sélectionner
 $con=mysqli_connect("mysqlserver","account","pw","db");
 // Check connection
 if (mysqli_connect_errno()) {
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
 }




 $data = $_POST['data'];
 $time = DateTime::createFromFormat( 'U', $_POST['time'] )->format("Y-m-d H:i:s");

 $device = $_POST['device'];
 $signal = $_POST['signal'];
 $increment = $_POST['slot_increment'];
 $weight = $_POST['slot_weight'];
 $motorPosition = $_POST['slot_motorPosition'];
 $optDiff = $_POST['slot_optDiff'];

$q = "INSERT INTO akeru_packets (data,time,device,signal,increment,weight,motorPosition,optDiff) VALUES ('$data','$time','$device',$signal,$increment,$weight,$motorPosition,$optDiff)";

 mysqli_query($con,$q);

 mysqli_close($con);
 ?>


l'affichage
Code: Tout sélectionner
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<body>
<?php

   $con=mysqli_connect("mysqlserver","account","pw","db");
   // Check connection
   if (mysqli_connect_errno()) {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
   }

   $result = mysqli_query($con,"SELECT id, dt,data,time,device,signal,increment,weight,motorPosition,optDiff FROM akeru_packets ORDER BY id");

   echo "<table border='1'>
   <tr>
   <th>Id</th>
   <th>Date insert</th>
   <th>Date akeru</th>
   <th>Device</th>
   <th>Signal</th>
   <th>paquet brut</th>
   <th>Increment</th>
   <th>Weight</th>
   <th>motorPosition</th>
   <th>optDiff</th>
   </tr>";

   while($row = mysqli_fetch_array($result))
   {
   echo "<tr>";
   echo "<td>" . $row['id'] . "</td>";
   echo "<td>" . $row['dt'] . "</td>";
   echo "<td>" . $row['time'] . "</td>";
   echo "<td>" . $row['device'] . "</td>";
   echo "<td>" . $row['signal'] . "</td>";
   echo "<td>" . $row['data'] . "</td>";
   echo "<td>" . $row['increment'] . "</td>";
   echo "<td>" . $row['weight'] . "</td>";
   echo "<td>" . $row['motorPosition'] . "</td>";
   echo "<td>" . $row['optDiff'] . "</td>";
   echo "</tr>";
   }
   echo "</table>";

   mysqli_close($con);
?>


</body></html>


PS:c'est absolument pas protégé, pas de protection contre les injections SQL par exemple.... bref du code de test, à faire tourner sur un serveur qui craint rien.
pierrepoulpe
 
Messages: 9
Inscription: Dim 28 Déc 2014 12:08


Retourner vers Akeru et Akene

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

cron