Erreur d'envoi vers Xively

Bonjour à tous :slight_smile:
J’ai un petit problème d’envoi irrégulier de données vers Xively, je vous explique :
J’ai une pompe type vide cave qui se met en marche régulièrement et j’ai besoin d’avoir un monitoring sur cette mise en marche.
Coté électrique pas de soucis ça fonctionne parfaitement ! Heureusement je suis électrotechnicien :stuck_out_tongue:
Par contre côté programmation j’ai beaucoup plus de mal… J’ai récupéré des bouts de codes par ci-par la et j’ai assemblé le tout, en rajoutant des petits trucs à ma sauce. Tout marche bien mais j’ai quelques problèmes…
Le soucis c’est que j’ai d’ai problème d’upload vers Xively, 5 à 6 fois par jour l’arduino se met en erreur et se fige. La seule solution pour le débloquer c’est de faire un reset…
A noter que l’arduino est relié à internet vie un shield ethernet, un module wifi “point d’accès” Sofim et une livebox.
Je vous poste mon code… Il est vraiment sale je sais ! Patapé :slight_smile:

#include <SPI.h>
#include <Ethernet.h>
#include <HttpClient.h>
#include <Xively.h>
#include <LiquidCrystal.h>
#include <avr/wdt.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Declaration adresse mac


IPAddress ip(192,168,1,51); //déclaration IP locale


char xivelyKey[] = "******************************************"; // cle Xively


const int pompe = 2; //Broche etat pompe
const int ecl = 3; //Broche retroeclairage ecran
int pompe1; //Variable état pompe
const int ARRET=0; //Pompe a l arret
const int MARCHE=1; //Pompe en marche
const int RS=8; //Broche ecran
const int E=9; //Broche ecran
const int D4=4; //Broche ecran
const int D5=5; //Broche ecran
const int D6=6; //Broche ecran
const int D7=7; //Broche ecran

char sensorId[] = "Marche_pompe"; //Intitule releve Xively
XivelyDatastream datastreams[] = {
 XivelyDatastream(sensorId, strlen(sensorId), DATASTREAM_FLOAT),
};

XivelyFeed feed(118832835, datastreams, 1 /* number of datastreams */); //Init Xively

EthernetClient client;
XivelyClient xivelyclient(client);
LiquidCrystal lcd(RS, E, D4, D5, D6, D7); //Declaration broche lcd

void setup() {
  pinMode(pompe, INPUT); //Broche pompe entree
  pinMode(ecl, OUTPUT); //Broche retroeclairage sortie
  digitalWrite(pompe, HIGH) ; //Pullup haut

 lcd.begin(20,4); //Init lcd
 Serial.begin(9600);
 
 Serial.println("Starting single datastream upload to Xively...");
 lcd.print("Debut de connexion a Xively");
 Serial.println();


 Ethernet.begin(mac, ip); //Init ethernet

}

void loop() {

  
 int sensorValue = !digitalRead(pompe); //Valeur inverse de la lecture
 datastreams[0].setFloat(sensorValue);
 lcd.clear(); //Effacement lcd
 Serial.print("Read sensor value ");
 Serial.println(datastreams[0].getFloat());
 lcd.write("Lecture de la valeur");
 lcd.print(sensorValue);
 Serial.println("Uploading it to Xively");
 lcd.print(" Upload vers Xively");
 
 int ret = xivelyclient.put(feed, xivelyKey); //Upload vers Xively [i][b]Reste bloqué ici[/b][/i]
 delay(500);
 lcd.clear(); //Effacement lcd
 Serial.print("xivelyclient.put returned ");
 Serial.println(ret); //Valeur retour Xively
 lcd.print("Xively a retourne   ");
 lcd.print(ret); //Affichage de la valeur
 delay(1000);
 lcd.clear(); //Effacement lcd
 


 
 Serial.println();
 if (sensorValue==1&&ret==200) { //Si pompe en marche et communication ok marche rétroeclairage
    digitalWrite (ecl, HIGH);
    lcd.print("Pompe en marche");
    lcd.print("     Communication bonne");
    delay(2000);
 }
  if (sensorValue==0&&ret==200) { //Si pompe à l'arret et communication bonne arret retroeclairage
    digitalWrite (ecl, LOW);
    lcd.print("Pompe a l arret");
    lcd.print("     Communication bonne");
    delay(2000);
 }
  if (sensorValue==1&&ret!=200) { //Si pompe en marche et erreur de communication marche retroeclairage
    digitalWrite (ecl, HIGH);
    lcd.print("Pompe en marche");
    lcd.print("     Erreur de communicat");
    lcd.setCursor(0,4);
    lcd.write("ion");
    delay(2000);
 }
  if (sensorValue==0&&ret!=200) { //SI pompe a l arret et erreur de communication marche retroeclairage
    digitalWrite (ecl, HIGH);
    lcd.print("Pompe a l arret");
    lcd.write("     Erreur de communicat");
    lcd.setCursor(0,4);
    lcd.write("ion");
    delay(2000);
   
 }

}

Salut ...

J'utilise aussi xively pour stocker des données et quelques fois la transmission ne se fait pas ... Mais chez moi le programme ne plante pas, mais il reste bloqué quelques secondes avant de reprendre son cours...
Par contre j'envoie sur xively toutes les 60s ...et si j'ai une erreur (ret != 200) ... J'attends 10 min avant d'essayer de renvoyer des données pour ne pas que mon programme fasse des pauses trop longues

Par ailleurs, au tout début j'ai noté dans mon programme que ethernet.begin(mac,ip) ne marchais pas avec xively ... Du coup j'utilise depuis ethernet.begin(mac) et ça fonctionne ...

Salut, et merci pour la réponse :slight_smile:
J'ai remplacé ethernet.begin(mac,ip) par ethernet.begin(mac) et ça semble marcher, je n'ai pas eu un problème en 3 jours !