Fehler abfangen / reset / Watchdog - Arduino UNO + WiFi-Shield

Hallo zusammen,
ich habe da ein kleines Problem mit der Zuverlässigkeit meines kleinen Projektes.

Worum es geht:
Mein Arduino soll sich über das wLan-Shield mit meinem Hausnetz verbinden.
Alle 10 Sekunden soll über 5 DS1820 die Temperatur ausgelesen werden und über wLan per Link an mein emoncms gesendet werden.

Prinzipiell läuft das ganze.
Aber:
Mal funktioniert die Anmeldung am wLan schon im Setup nicht.
Wenn das geklappt hat sendet er so 5 Minuten oder so und bricht dann mit DNS error oder anderen Meldungen ab. Ich will hier versuchen auch nochmal mehr Logs zu Speichern habe gerade aber keine hier.

Jetzt wollte ich fragen ob der Watchdog hier sinn machen würde?
Oder mache ich nur was falsch?
Ich hänge mal meinen Code an, vielleicht schaut jemand drauf und sagt "Ohhh, Du depp. Ist doch klar warum!"

Ansonsten, danke für Tips oder Anregungen!

Gruß
MueThoS

#include <DallasTemperature.h>
#include <RedFly.h>
#include <OneWire.h>

byte ip[]        = { 192,168,  178, 30 }; //ip from shield (client)
byte netmask[]   = { 255,255,255,  0 }; //netmask
byte gateway[]   = { 192,168,  178,1 }; //ip from gateway/router
byte dnsserver[] = { 192,168,  178,1 }; //ip from dns server
byte server[]    = { 192,168,  178,129 }; //ip 


#define HOSTNAME "homehub"  //host
#define apiKey  "XXX"
#define WLANKEY "XXX"
#define SSIDNAME "Homac"


// DS18S20 Temperaturchip i/o
OneWire ourWire(10);  // an pin 10
DallasTemperature sensors(&ourWire);/* Dallas Temperature Library für Nutzung der oneWire Library vorbereiten */


uint8_t ret;
uint8_t http=INVALID_SOCKET; //socket handle
uint16_t http_len=0; //receive len


//debug output functions (9600 Baud, 8N2)
//Leonardo boards use USB for communication, so we dont need to disable the RedFly
void debugout(char *s)
{
#if defined(__AVR_ATmega32U4__)
  Serial.print(s);
#else
  RedFly.disable();
  Serial.print(s);
  RedFly.enable();
#endif
}

void debugoutln(char *s)
{
#if defined(__AVR_ATmega32U4__)
  Serial.println(s);
#else
  RedFly.disable();
  Serial.println(s);
  RedFly.enable();
#endif
}



void setup()
{
      #if defined(__AVR_ATmega32U4__) //Leonardo boards use USB for communication
            Serial.begin(9600); //init serial port and set baudrate
            while(!Serial); //wait for serial port to connect (needed for Leonardo only)
      #endif
      
      redfly_init();
      sensors.begin();/* Inizialisieren der Dallas Temperature library */
      adresseAusgeben(); /* Adresse der Devices ausgeben */


      ret = RedFly.init();
      if(ret)
      {
            debugoutln("INIT ERR im init"); //there are problems with the communication between the Arduino and the RedFly
      }else{
    //scan for wireless networks (must be run before join command)
            RedFly.scan();
            ret = RedFly.join(SSIDNAME, WLANKEY, INFRASTRUCTURE);
            if(ret)
            {
                  debugoutln("JOIN ERR im init");
                  for(;;); //do nothing forevermore
            }else{
                  ret = RedFly.begin(ip, dnsserver, gateway, netmask);
                  if(ret)
                  {
                        debugoutln("BEGIN ERR im init");
                        RedFly.disconnect();
                        for(;;); //do nothing forevermore
                  }
            }
      }
      // Neuer versuch mit ip beziehen schon im init
      if(RedFly.getip(HOSTNAME, server) == 0) //get ip
      {
            http = RedFly.socketConnect(PROTO_TCP, server, 80); //start connection to server on port 80
            if(http == 0xFF)
            {
                  debugoutln("SOCKET ERR im init");
                  RedFly.disconnect();
                  for(;;); //do nothing forevermore
            }
      } 



}





void loop()
{
      debugoutln("loop");
      sendData();
      delay(10000);
}





void sendData ()
{
      http = RedFly.socketConnect(PROTO_TCP, server, 80); //start connection to server on port 80
            if(http == 0xFF)
            {
                  debugoutln("SOCKET ERR im sendData");
                  RedFly.disconnect();
                  for(;;); //do nothing forevermore
            }
      //send HTTP request
      RedFly.socketSendPGM(http, PSTR("GET /emoncms/input/post.json?node=3&csv="));
      int anz = sensors.getDeviceCount();
      sensors.requestTemperatures(); // Temp abfragen
      for (int i=0;i<anz;i++)
      {
            int temp = read_temp(i);
            RedFly.socketSend(http, temp);
            if (i<anz-1){
                  RedFly.socketSend(http, ",");
            }
      } 
      RedFly.socketSendPGM(http, PSTR("&apikey="apiKey" / HTTP/1.1\r\nHost: "HOSTNAME"\r\n\r\n"));
      
      if(http == INVALID_SOCKET) //no socket open
      {
            debugoutln("INVALID SOCKET in send data");
            return;
      }
}
 
 
 
 
 
 
 

 
 
void adresseAusgeben(void) 
{
      byte i;
      byte present = 0;
      byte data[12];
      byte addr[8];

      Serial.print("Suche 1-Wire-Devices...\n\r");// "\n\r" is NewLine 
      while(ourWire.search(addr)) {
            Serial.print("\n\r\n\r1-Wire-Device gefunden mit Adresse:\n\r");
            for( i = 0; i < 8; i++) {
                  Serial.print("0x");
                  if (addr[i] < 16) {
                        Serial.print('0');
                  }
                  Serial.print(addr[i], HEX);
                  if (i < 7) {
                        Serial.print(", ");
                  }
            }
            if ( OneWire::crc8( addr, 7) != addr[7]) {
                  Serial.print("CRC is not valid!\n\r");
                  return;
            }
      }
      Serial.println();
      ourWire.reset_search();
      return;
}
 
 
 
 
 
 
 
int read_temp(int i){
      float value =  sensors.getTempCByIndex(i);
      value = (value+0.05)*10;
      int temp = value;
      return temp;
}