Arduino Cloudverbindung blockiert Code

nano RP2040 connect
Nicht falsch verstehen: Der Cloud-Code funktioniert, aber wenn die Verbindung zum Wlan mal unterbrochen wird, oder bei Start nicht vorhanden ist wird der Code blockiert und/oder es erfolgt ein kompletter Neustart.

Kann ich das beeinflussen? Wenn ja - wie? In der thingProperties.h kann ich keine Möglichkeit dafür entdecken.

Meine Codeausführung ist primär. Die Unterbrechung der Cloudverbindung sollte meinen Code nicht gleich stoppen.

thingProperties.h:

// Code generated by Arduino IoT Cloud, DO NOT EDIT.

#include <ArduinoIoTCloud.h>
#include <Arduino_ConnectionHandler.h>
#include <Secret.h>

const char SSID[]     = SECRET_SSID;    // Network SSID (name)
const char PASS[]     = SECRET_PASS;    // Network password (use for WPA, or use as key for WEP)

void onCloudSprengerAutoChange();
void onCloudSprengerNordChange();
void onCloudSprengerOstChange();
void onCloudSprengerSuedChange();
void onCloudSprengerWestChange();

bool cloudSprengerAuto;
bool cloudSprengerNord;
bool cloudSprengerOst;
bool cloudSprengerSued;
bool cloudSprengerWest;

void initProperties(){

  ArduinoCloud.addProperty(cloudSprengerAuto, READWRITE, ON_CHANGE, onCloudSprengerAutoChange);
  ArduinoCloud.addProperty(cloudSprengerNord, READWRITE, ON_CHANGE, onCloudSprengerNordChange);
  ArduinoCloud.addProperty(cloudSprengerOst, READWRITE, ON_CHANGE, onCloudSprengerOstChange);
  ArduinoCloud.addProperty(cloudSprengerSued, READWRITE, ON_CHANGE, onCloudSprengerSuedChange);
  ArduinoCloud.addProperty(cloudSprengerWest, READWRITE, ON_CHANGE, onCloudSprengerWestChange);

}

WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS);

Was soll der Code (den Sie nicht gepostet haben) tun, wenn die Verbindung fehlt?

Anzeigen das Verbindung nicht möglich ist oder unterbrochen wurde und nach Wartezeit neu versuchen.

Haben Sie es mit diesem Code versucht?

void loop() {
  ArduinoCloud.update();
  if (ArduinoCloud.connected() == 0) {
    // ➜  nicht verbunden, nichts tun oder was auch immer
  } else {
    // ➜  in Verbindung gebracht. Code, der nur ausgeführt werden sollte, während eine Verbindung besteht.
  }
}

Achten Sie auch auf den Watchdog

Mein Lösungsansatz: Die Cloud wird erst später initialisiert.
Ich habe das jetzt prinzipiell so gelöst. Erste Test´s funktionieren erst mal gut.

..
#include "thingProperties.h"              // Arduino Cloud
..

void loop() 
{
  //ArduinoCloud.update();
  if (millis() >= lastmillis4 + 60000){            // Cloud erst nach 1 min 
    StateUPCloud = true;                        // UPCloud freischalten
  }
  UPCloud();                                    // UP
}


void UPCloud()
{
  if (StateUPCloud == true)               // erst nach Ablauf Zeitverzögerung nach Neu-Einschalten
  {
    if (SetupUPCloud == false)            // Setup nur 1x
    {
      initProperties();
      // Connect to Arduino IoT Cloud
      ArduinoCloud.begin(ArduinoIoTPreferredConnection);
      setDebugMessageLevel(2);
      ArduinoCloud.printDebugInfo();
      SetupUPCloud = true;
    }
    ArduinoCloud.update();
    tft.drawString("Mit Cloud nach 1min verbunden!", 40, 220, 2);
    if (WiFi.status() == WL_CONNECTED) {
      tft.drawString("Mit Cloud verbunden                        ", 40, 200, 2);
    }
    else
    {
      tft.drawString("Cloudverbindung erst nach 1min...", 40, 200, 2);
    }
  }
}

Es hat sich aber ein neues Problem mit der Cloud gezeigt:

Wird die Verbindung zur Cloud irgendwann unterbrochen wird ein Reset ausgeführt. Neu einwählen darf er sich gerne, aber bitte kein Reset und Neustart - da wird mein Code ja wieder unterbrochen...
Hat jemand einen Tip wie ich das verhindern kann?

Dan such doch im deinem Geheimen Code wo das passiert :wink:
Mag sein das in irgend einer Lib ist das so vorgesehen.
Na ja ist ja so wen eine Wolke sich "ausregnet" ist die nicht mehr da, deshalb :rofl: :innocent: heißt ja das ganze "Cloud":rofl: :innocent:

1 Like

Nur mal so...

1 Like

:+1: Ja, werde ich mal probieren:

ArduinoCloud.begin(ArduinoIoTPreferredConnection, false).

Funktioniert! Danke!:+1::hugs:

Es kommt jetzt aber noch zu anderen Problemen:

Wenn die Verbindung zur Cloud und/oder zum Internet unterbrochen wird soll das erkannt werden und die Verbindung neu aufgebaut.

Wie kann ich das abfragen? Oder einfach sporadisch alle 10min oder so Verbindung neu erstellen (ist mir eigentlich zu russisch🤫) ?

Mit "if (WiFi.status() == WL_CONNECTED) {" kann ich das nicht feststellen, da ja hier nur Verbindung zum Repeater geprüft wird. :thinking:

Nen GET machen und auf den (nicht) vorhanden Inhalt prüfen?

Meinst du: Eine Variable in der Cloud abfragen?

So richtig schlau werde ich bei der Variablen-Anleitung nicht.
Oder habe ich falsch gesucht?

Ich habe mal die Microsoft KI gefragt:

"
wie kann ich im sketch abfragen ob eine verbindung zur cloud besteht?

Suchen nach: „arduino sketch cloud connection

Suchen nach: „arduino sketch cloud connection

Antworten für Sie werden generiert…

Antworten für Sie werden generiert…

Um im Sketch abzufragen, ob eine Verbindung zur Cloud besteht, können Sie die connected()-Methode verwenden. Diese Methode gibt true zurück, wenn eine Verbindung zur Cloud besteht, und false, wenn keine Verbindung besteht 1.

Hier ist ein Beispielcode, der die connected()-Methode verwendet:

#include <ArduinoIoTCloud.h>
#include <Arduino_ConnectionHandler.h>

void setup() {
  // Initialisieren Sie die Verbindung zur Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
}

void loop() {
  // Überprüfen Sie, ob eine Verbindung zur Cloud besteht
  if (ArduinoCloud.connected()) {
    // Wenn eine Verbindung besteht, führen Sie den Code aus
    // ...
  } else {
    // Wenn keine Verbindung besteht, führen Sie den Code aus
    // ...
  }
}

Kopieren

Ich hoffe, das hilft Ihnen weiter! Lassen Sie mich wissen, wenn Sie weitere Fragen haben.
"

Aber so richtig klappt das auch noch nicht... :shushing_face:

Wann wird denn

true?

Wenn ich eine Cloud-Verbindung habe?!

Aber warscheinlich ist es nicht so, sonst würdest du nicht so fragen?!

Die Cloudverbindung läuft bei mir auch nicht stabil. Manchmal geht gar nix mehr, und manchmal funktioniert der gleiche Code perfekt. Ich weiss noch nicht so recht was ich davon halten soll.

Die Verbindungsabfrage mit if (ArduinoCloud.connected()) zeigt öfters auch falsch an.

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