Hallo
ich habe ein Ardino Yun und habe ein Programm erstellt mit dem ich über eine TCP Verbindung daten zu einer PLC sende. Dies funktioniert auch soweit.
Wenn aber über nacht meine Fritzbox das Wlan ausschaltet und am morgen wieder einschalter wir keine TCP verbindung mehr aufgebaut. Ich muss erst wieder das Yun neu Starten.
Ich habe gehofft das nach dem update auf LuCI das Problem behoben ist. Leider nicht.
Hat jemand eine Ahnung was was das liegen könnte ?
Ist das echt sinnvoll, Wlan über nacht auszuschalten? 
Bitte ein paar Infos zur Konfiguration. Wie bezieht der Yun seine Netzwerkadresse (statisch/dynamisch)?
Hallo
Adresse ist Dynamisch aber im Router erhält das Yun immer die selbe IP. Es liegt an der Linino seite da mein Programm am morgen nicht mehr läuft wenn ich eine LED blinken lasse.
Hatte das Thema schon mal vor einem Jahr gepostet. Bin aber damals zu keiner Lösung gekommen das das Yun neu auf den Markt war. Ich hatte eigentlich gehofft das der Hersteller eine lösung durch ein update hat. Bis heute könnte ich das Problem nicht lösen.
Hier noch mals das Programm.
Wenn ich ein Verbindungsaufbau nur alle 10 min Starte funktioniert das Yun für ca 3-4 Tage. Es kommt mir vor wenn eine bestimmte Anzahl an Verbindungsaufbau versuchen gestartet wurde irgend was im Yun überläuft.
#include <SPI.h>
#include <Wire.h>
#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>
#include <Console.h>
#include <DHT22.h>
#include "IRremote.h"
YunClient client;
// SPS Port und IP
#define PORT 2500
IPAddress PLC(192,168,178,30); // PLC Address
// YunServer server(PORT);
// Temperatursensor PIN
#define DHT22_PIN 4
DHT22 myDHT22(DHT22_PIN);
// Zeitlicher Funktionsaufruf
long previousMillis = 0;
long interval = 2500;
unsigned long currentMillis;
int Zaehler;
// IR Empfenger
int receiver = 3;
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
void setup() {
irrecv.enableIRIn(); // Start the receiver
Bridge.begin(); // Sarte Bridge
digitalWrite(13, HIGH);
Console.begin(); // Starte Console
delay(1000);
}
//******************************************************************Hautprogramm********************************************************
void loop()
{
// listen for incoming clients
YunClient client;
// LED aus wenn Client nicht verbunden
digitalWrite(13, HIGH);
delay(50);
digitalWrite(13, LOW);
delay(300);
//Verbindungsaufbaue wenn Client verfügbar
if (client.connect(PLC,PORT)){
Console.println("connected");
Zaehler = 0;
while (client.connected()) {
//LED an wenn Connected
digitalWrite(13, HIGH);
// Zeit für Zeitliche aufruf
unsigned long currentMillis = millis();
// Temperaturwerte alle 2,5sec senden
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
TempFeuchte (client);
}
if (irrecv.decode(&results)) {// have we received an IR signal?
translateIR(client);
irrecv.resume(); // receive the next value
}
}
delay(1000);
Console.println("Client Stop");
// close the connection:
client.stop();
client.flush();
}
Zaehler = Zaehler +1;
Console.print("keine Verbindung ");
Console.println(Zaehler);
client.stop();
client.flush();
delay(3000);
if (Zaehler > 3) {
delay(300000);
}
}
//***********************************************
//** Funktion Temperatur Feuchtw **
//***********************************************
// Temperatur und Feuchte abfragen und senden
void TempFeuchte (YunClient client) {
DHT22_ERROR_t errorCode;
errorCode = myDHT22.readData();
int value;
String cString;
switch(errorCode)
{
case DHT_ERROR_NONE:
value = myDHT22.getTemperatureC()*100;
// Value nur senden wenn nicht 0
if (value != 0) {
cString ="GV/01"+String(value,DEC);
client.write((uint8_t*)&cString[0], cString.length());
Console.println(cString);
}
value = myDHT22.getHumidity()*100;
// Value nur senden wenn nicht 0
if (value > 0) {
cString ="GV/02"+String(value,DEC);
client.write((uint8_t*)&cString[0], cString.length());
Console.println(cString);
}
break;
}
}
//***********************************************
//** Funktion IR Empfänger **
//***********************************************
void translateIR(YunClient client) {
String cString;
int i;
switch(results.value)
{
case 0xAC516266:
Console.println("Rollo AUF");
i=1;
break;
case 0xE5139CA7:
Console.println("Rollo AUF");
i=1;
break;
case 0xAD5163FB:
Console.println("Rollo ZU");
i=2;
break;
case 0xE4139B12:
Console.println("Rollo ZU");
i=2;
break;
default:
i=0;
//Console.println(" other button ");
}
if(i>0) {
Console.println(i);
cString ="IR/"+String(i,DEC)+"/1";
client.write((uint8_t*)&cString[0], cString.length());
Console.println(cString);
delay(1000);
cString ="IR/"+String(i,DEC)+"/0";
client.write((uint8_t*)&cString[0], cString.length());
Console.println(cString);
i=0;
}
}
Habe hier auch noch einen Yun, aber derzeit nicht im Betrieb. Ist denn sicher, dass das Problem wirklich beim Linono und nicht der Fritzbox liegt, bzw. es mit der Kombination zusammen hängt?
Wird dein Yun unter
Heimnetz > Geräte und Benutzer > Geräte und Benutzer
aufgeführt. Wenn ja, was ist dort zu sehen, wenn WLAN wieder aktiv ist.
Ansonsten, was steht zur Verbindung vom Yun unter
Ereignisse > WLAN
Desweiteren, wie sieht dein Problem mit dem Led blinken aus? Kann es sein, dass dieser abfragt, ob Verbindung steht und darauf blinkt?
Ich kann gerne gleich mal meinen Yun rausholen und schauen, was in den Einstellungen zu machen ist.
Wenn es sich beim Yun um ein Gerät, welches in deinem Haushalt stationär ist, und nicht bei anderen zum Einsatz kommt, emphielt es sich, Netzwerkadresse statisch zu vergeben.
Du kannst mal versuchen die völlig überflüssige String Klasse rauszuwerfen. Es kann sein, dass die mit der Zeit der dynamische Speicher Probleme bereitet.
Um an das interne Array zu kommen, hat übrigens auch die Arduino String Klasse inzwischen die c_str() Methode implementiert.
Hallo
ich habe mal das Programm auf das nötigste abgespeckt.
Wenn es jemand versuceh möchte . Ich schaffe ca 256 Verbindungsversuche, Es läuft im serial Mode ein Zähler mit.
Das Arduino Yun ist danach immer noch über das Netzwerk erreichbar.
#include <SPI.h>
#include <Wire.h>
#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>
#include <Console.h>
YunClient client;
// SPS Port und IP
#define PORT 2500
IPAddress PLC(192,168,178,30); // PLC Address
// YunServer server(PORT);
int Zaehler;
void setup() {
Bridge.begin(); // Sarte Bridge
digitalWrite(13, HIGH);
Console.begin(); // Starte Console
delay(1000);
}
//******************************************************************Hautprogramm********************************************************
void loop()
{
// listen for incoming clients
YunClient client;
// LED aus wenn Client nicht verbunden
digitalWrite(13, HIGH);
delay(50);
digitalWrite(13, LOW);
delay(100);
//Verbindungsaufbaue wenn Client verfügbar
if (client.connect(PLC,PORT)){
Console.println("connected");
Zaehler = 0;
while (client.connected()) {
//LED an wenn Connected
digitalWrite(13, HIGH);
}
}
delay(50);
Console.println("Client Stop");
// close the connection:
client.stop();
client.flush();
Zaehler=Zaehler+1;
Console.print("keine Verbindung ");
Console.println(Zaehler);
client.stop();
client.flush();
delay(50);
}
TCP_SPS16_Test_ohne_IR.ino (1.42 KB)
@ sschultewolter
Hast du es bei dir mal versucht ?
Hallo
weiß keiner eine lösung ?
Nein, bin zeitlich noch dran gehindert das zu testen. Hast du es mal mit fester IP versucht und geschaut, was in der Log deiner Fbox steht (siehe meinem Beitrag oben)
Hallo sschultewolter
habe es mal mit fest IP versuche, genau das selbe Problem. 256 Verbindungsversuche. In der Los an der Fritzbox ist das Yun angemeldet. Ich erreiche auch das Yun über den Browser. Allerdings läuft das Arduino Programm nicht mehr.
Wie kann ich auf der Web oberfläche nachschauen was da los ist. Wlecher Prozess führ das Arduino Programm aus ?
Also der YUN behält die Verbindung schon so wie der soll, sehe ich das richtig?
Dann wird es wohl eher kein YUN Problem ansich sein.
Ich bau mal eben den Sketch dafür aus, der sollte ja sobald ich das Kabel zieh versuchen sich erneut zu verbinden. Dann habe ich den Fehler recht schnell reproduziert.
Ja genau das Yun hat verbindung aber das Arduino Programm lauft nicht mehr nach 256 Verbindungsversuchen. Du kannst es mit meinem Programm versuchen.
Hallo
hat jemand das selbe Problem festgestellt ? Weiß jemand eine lösung ?
Hallo
weiß jemand an wehn ich micht noch wenden kann wegen dem Problem ? Bei einem Uno habe ich das Problem nicht ?
"Arduino Yún - The revolutionary product" hat ein eigenes Forum Board :
http://forum.arduino.cc/index.php?board=93.0