Problème pour mettre à jour 2 canaux thingspeak

Bonjour,
J'ai un programme de relevé de température avec des sondes Ds18B20
J'envoie les données toutes les heures sur un canal thingspeak sans problème.

Je voulais utiliser un deuxième canal, pas moyen, cela bloque sur "writefields".
J'utilise la bibliothèque thingspeak.h. Est-ce le close dans la première fonction "writefields" qui pose problème ?
Pour des raisons de consommation, je ne voudrais pas refaire une connexion réseau.

Si quelqu'un a la solution, je suis preneur

Je vais tester de faire le POST sans utiliser la bibliothèque, et aussi MQTT pour tester et mesurer la durée d'émission

Bonjour

**EDIT après lecture plus attentive de la demande :

A ma connaissance il faut une connection par canal (un canal comportant jusqu'à 8 fields)
Deux mises à jour de canaux doivent, avec la version grauite de ThingSpeak, être séparés de 15s mini

N.B En général sur ce forum le demandeur poste le code qui lui pose problème ..... ça évite de jouer aux devinettes

A lire :

J'utilise bien l'écriture multiple des champs pour Thingspeak.
J'avais fait le test avec un délai entre les 2 envois, et en dernier, le test sur un canal appartenant à 2 comptes Thingspeak pour éliminer le délai de mise à jour.

Donc, vous parlez de refaire une connexion, c'zst une connexion réseau ? J'avais aussi testé le ThingSpeak.begin avant chaque écriture, même problème, blocage à la deuxième écriture.

boolean connexion_modem()
{
#ifdef DEBUG
  Serial.println("");
  Serial.println("Connexion modem");
#endif

  if ((nbAccess.begin(PINNUMBER, APN) == NB_READY) &&
      (gprs.attachGPRS() == GPRS_READY)) {
#ifdef DEBUG
    Serial.println("Modem connecte");
#endif
    delay(500);
  } else {
#ifdef DEBUG
    Serial.println("Modem non connecte");
#endif
    delay(1000);
  }
}

void envoi()
{
  int x;

  Duree_cnx = millis() - Debut_cnx;
  Debut_envoi1 = millis();

  ThingSpeak.setField(1, Light_reset);
  ThingSpeak.setField(2, Nbtent);
  ThingSpeak.setField(3, Duree_cnx);
  ThingSpeak.setField(4, Duree_envoi1);
  ThingSpeak.setField(5, Vcc);
  ThingSpeak.setField(6, mem_hard_reset);

  // write to the ThingSpeak channel
  x = ThingSpeak.writeFields(myChannelNumber1, myWriteAPIKey1);

  if (x == 200) {
#ifdef DEBUG
    Serial.println("Envoi 1 Channel update successful.");
#endif
  }
  else {
#ifdef DEBUG
    Serial.println("Envoi 1 Problem updating channel. HTTP error code " + String(x));
#endif
  }
#ifdef DEBUG
  Serial.println();
#endif

  Duree_envoi1 = millis() - Debut_envoi1;
  Debut_envoi2 = millis();
  Serial.println("111111111111111111");

  ThingSpeak.setField(1, Light_reset);
  ThingSpeak.setField(2, Nbtent);
  ThingSpeak.setField(3, Duree_cnx);
  ThingSpeak.setField(4, Duree_envoi2);
  ThingSpeak.setField(5, Vcc);
  ThingSpeak.setField(6, mem_hard_reset);

  Serial.println("222222222222222222");
  // write to the ThingSpeak channel
  x = ThingSpeak.writeFields(myChannelNumber2, myWriteAPIKey2);

  Serial.println("33333333333333333");

  if (x == 200) {
#ifdef DEBUG
    Serial.println("Envoi 2 Channel update successful.");
#endif
  }
  else {
#ifdef DEBUG
    Serial.println("Envoi 2 Problem updating channel. HTTP error code " + String(x));
#endif
  }
#ifdef DEBUG
  Serial.println();
#endif
  Duree_envoi2 = millis() - Debut_envoi2;
}

J'ai essayé de voir en mode debug (nbacess(1)), mais je ne suis pas trop familier avec les instructions AT

AT+USOCR=6 
+USOCR: 0

OK
AT+USOCO=0,"api.thingspeak.com",80 
OK
AT+USOWR=0,23,"504F5354202F75706461746520485454502F312E310D0A" 
+USOWR: 0,23

OK
AT+USOWR=0,26,"486F73743A206170692E7468696E67737065616B2E636F6D0D0A" 
+USOWR: 0,26

OK
AT+USOWR=0,12,"557365722D4167656E743A20" 
+USOWR: 0,12

OK
AT+USOWR=0,34,"74736C69622D61726475696E6F2F322E302E30202861726475696E6F2073616D6429" 
+USOWR: 0,34

OK
AT+USOWR=0,2,"0D0A" 
+USOWR: 0,2

OK
AT+USOWR=0,20,"582D5448494E47535045414B4150494B45593A20" 
+USOWR: 0,20

OK
AT+USOWR=0,16,"433258415039314D5A4C534833555256" 
+USOWR: 0,16

OK
AT+USOWR=0,2,"0D0A" 
+USOWR: 0,2

OK
AT+USOWR=0,49,"436F6E74656E742D547970653A206170706C69636174696F6E2F782D7777772D666F726D2D75726C656E636F6465640D0A" 
+USOWR: 0,49

OK
AT+USOWR=0,16,"436F6E74656E742D4C656E6774683A20" 
+USOWR: 0,16

OK
AT+USOWR=0,2,"3736" 
+USOWR: 0,2

OK
AT+USOWR=0,4,"0D0A0D0A" 
+USOWR: 0,4

OK
AT+USOWR=0,5,"6669656C64" 
+USOWR: 0,5

OK
AT+USOWR=0,1,"31" 
+USOWR: 0,1

OK
AT+USOWR=0,1,"3D" 
+USOWR: 0,1

OK
AT+USOWR=0,1,"30" 
+USOWR: 0,1

OK
AT+USOWR=0,1,"26" 
+USOWR: 0,1

OK
AT+USOWR=0,5,"6669656C64" 
+USOWR: 0,5

OK
AT+USOWR=0,1,"32" 
+USOWR: 0,1

OK
AT+USOWR=0,1,"3D" 
+USOWR: 0,1

OK
AT+USOWR=0,1,"30" 
+USOWR: 0,1

OK
AT+USOWR=0,1,"26" 
+USOWR: 0,1

OK
AT+USOWR=0,5,"6669656C64" 
+USOWR: 0,5

OK
AT+USOWR=0,1,"33" 
+USOWR: 0,1

OK
AT+USOWR=0,1,"3D" 
+USOWR: 0,1

OK
AT+USOWR=0,4,"38323236" 
+USOWR: 0,4

OK
AT+USOWR=0,1,"26" 
+USOWR: 0,1

OK
AT+USOWR=0,5,"6669656C64" 
+USOWR: 0,5

OK
AT+USOWR=0,1,"34" 
+USOWR: 0,1

OK
AT+USOWR=0,1,"3D" 
+USOWR: 0,1

OK
AT+USOWR=0,1,"30" 
+USOWR: 0,1

OK
AT+USOWR=0,1,"26" 
+USOWR: 0,1

OK
AT+USOWR=0,5,"6669656C64" 
+USOWR: 0,5

OK
AT+USOWR=0,1,"35" 
+USOWR: 0,1

OK
AT+USOWR=0,1,"3D" 
+USOWR: 0,1

OK
AT+USOWR=0,7,"302E3033333630" 
+USOWR: 0,7

OK
AT+USOWR=0,1,"26" 
+USOWR: 0,1

OK
AT+USOWR=0,5,"6669656C64" 
+USOWR: 0,5

OK
AT+USOWR=0,1,"36" 
+USOWR: 0,1

OK
AT+USOWR=0,1,"3D" 
+USOWR: 0,1

OK
AT+USOWR=0,1,"30" 
+USOWR: 0,1

OK
AT+USOWR=0,14,"26686561646572733D66616C7365" 
+USOWR: 0,14

OK
AT+USORD=0,512 
+USORD: 0,""

OK
AT+USORD=0,512 
+USORD: 0,""

OK
AT+USORD=0,512 
+USORD: 0,""

OK
AT+USORD=0,512 
+USORD: 0,""

OK
AT+USORD=0,512 
+USORD: 0,""

OK

+UUSORD: 0,307
AT+USORD=0,512 

+USORD: 0,307,"485454502F312E3120323030204F4B0D0A446174653A2053756E2C2031382053657020323032322032303A35373A323120474D540D0A436F6E74656E742D547970653A20746578742F68746D6C3B20636861727365743D7574662D380D0A436F6E74656E742D4C656E6774683A20340D0A436F6E6E656374696F6E3A2065663B876D760765741650572D3063622D6373206735534333783A33

connection , au sens de connection au serveur ThingSpeak

la combine des deux comptes ne passe pas si ThingSpeak prend en compte l'adresse ip de l'émetteur pour la cadence d'envoi

commandes AT ? mode modem ? quel est le matériel utilisé ?

Avez vous un impératif nécessitant deux canaux pour l'application ? (> 8 fieds ?)

Je développe pour une association en amateur afin de surveiller la température du couvain dans des ruches.
Je pensais partir sur le matériel mkrfox1200 déjà testé il y a 2 ans, mais plus fabriqué actuellement.
Pas de réseau Lorawan sur les sites en questions, donc je débute sur les mkrnb1500.
Le but, par économie, est de remonter pour un regroupement de 4 ruches à chaque fois 5 températures.
Donc 4 canaux thingspeak par controleur. L'association va prendre des abonnements Home de Thingspeak, ceci permettra de ne pas être bloqué par les mises à jours.

Ok, pour l'adresse IP, je ne connaissais pas ce contrôle. j'avais mis un délai de 20s entre 2 envois, mais le problème persistait. Je vais augmenter ce délai pour voir

Pas trop familier des commandes AT, je connaisais du temps des modems 1200 bauds où ine il n'y avait qu'une vingtaine de commande :wink:

OK , je vois le besoin et les contraintes

il faudrait que je fasse le point chez moi (statistiques sur le portail ThingSpeak)
dans 'my Account' je vois que je tourne autour des 500 messages par jour à THingSpeak sans plus de plus de détail

j'utilise 4 canaux ThingSpeak principalement alimentés en données via une Freebox unique (= une ip fixe)
-certains par un Raspberry Pi et des scripts .sh ordonancés par une configuration crontab
-d'autres par des ESP866 ou ESP32 connectés à la Freebox, non sychronisés avec le Rasperry PI, donc pouvant de manière aléatoire se téléscoper avec les messages ussus du Pi.

Un des 4 canaux recoit en plus des données du serveur TheThingsNetworks via une passerelle Lorawan

je n'ai pas constaté 'd'embouteillage' sur mon accès ThingSpeak gratuit avec mes mises à jours multiples

le problème de mise a jour rencontré a peut être une autre cause
je fait de gérér la laison réseau via un modem limite peut être les retours d'infos de debug

Merci al1fch pour votre retour d'expérience

Je viens de faire le test avec un esp8266 en mettant à jour 3 canaux, 2 sur le même compte et 1 ur un autre compte. Cela fonctionne en simultané.
Par contre, pour des nouvelles mises à jour, il faut au moins attendre plus d'une minute contrairement au 15s annoncé pour l'option free, sinon des loupés, mais pas de blocage.

Je vais faire des tests en écrivant la méthode POST sans passer par la bibliothèque Thinspeak.h

Pour clore le sujet, j'utilise mqtt sans problèmes à ce niveau

Pour thingspeak.h, c'est la procédure finishWrite qui pose problème, mais je n'ai continué à chercher.
J'ai aussi essayé d'envoyer en http post, j'avais aussi des blocages, je pense des problèmes de délai

Maintenant, je me bats sur les problèmes de contrôleur figé, où il faut couper l'alimentation pour redémarrer. Je suis entrain de réfléchir de couper l'alimentation automatiquement toutes les 24 heures

Je me suis aussi battu, pour accéder au réseau lors de la première utilisation.

J'avais confiance aux produits Arduino et je regrette de ne pas avoir consulter les forums avant sur ce produit

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.