Ethernet-Shield Ws5100 geht - wird aber in der Fritz.Box nicht angezeigt...

Hallo Netzwerk-Experten!

Mein Ethernet-Shield funktioniert einwandfrei....

über Ping ist es auch erreichbar.....

Nur in der Fritz Box taucht es nicht auf.... ist das Normal?

Mein Sketch sieht so aus:

.....

byte mac[] = { 0x54, 0x55, 0x58, 0x10, 0x00, 0x24 };

..... if (Ethernet.begin(mac) == 0) { Serial.println("Failed to configure Ethernet using DHCP");}

Udp.begin(localPort); Udp.beginPacket(address, localPort); Serial.println("UDP Verbinde"); ....

Danke für Eure Hilfe!

VG Tom

Ja, bei unvollständigem Sketch ist das durchaus normal!

Was bringt dieser kurze Fetzen vom Sketch? Ich sehe nicht, wie die IP Adresse ermittelt wird. DHCP/staticIP? Mac-Adresse einzigartig im Netzwerk?

Hallo !

wollte nur die relevanten Zeilen senden… Sorry!

Hier der komplette Sketch

#include <SPI.h>         
#include <Ethernet.h>
#include <EthernetUdp.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
unsigned int localPort = 5000;      
IPAddress address(192, 168, 178, 24); 
char EingangsPuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
IPAddress gateway(192,168,178, 1); 
IPAddress subnet(255, 255, 255, 0); 

unsigned long  watt_ns ;
unsigned long  watt_pv ;
unsigned long  watt_wp ;
unsigned long count_ns ;
unsigned long count_pv ;
unsigned long count_wp ;
unsigned long dt_wp;
unsigned long talt_wp;
unsigned long dt_ns;
unsigned long talt_ns;
unsigned long dt_pv;
unsigned long talt_pv;

int VL ;
int RL;
int WW ;
int AT;
int WZ;


double Temp;
int count_reset =0;

/*
int pin0 = 0; // analog pin
int pin1 = 1; // analog pin
int pin2 = 2; // analog pin
*/

EthernetUDP Udp;

int led = 13;
void setup()
{
  Serial.begin(9600);
  //pinMode(led, OUTPUT);
 
  Serial.println("Fange an.... Hager_LAN_ACER_09-01-2015");
  attachInterrupt(5, zustandAendern_wp, FALLING); 
  attachInterrupt(1, zustandAendern_pv, FALLING);
  attachInterrupt(0, zustandAendern_ns, FALLING);
   
   
   
   Serial.println("Trying to get an IP address using DHCP"); 
      if (Ethernet.begin(mac) == 0) { 
          Serial.println("Failed to configure Ethernet using DHCP"); 
          // initialize the ethernet device not using DHCP: 
          Ethernet.begin(mac, ip, gateway, subnet); 
          } 
   
        digitalWrite(led, HIGH);
        Serial.print("Arduino hat IP bekommen:"); Serial.println(Ethernet.localIP());
        Udp.begin(localPort);
        Udp.beginPacket(address, 5000);
        String buffer = "Hager#" + String(0)+"#Neustart#" + Ethernet.localIP(); 
        int str_len = buffer.length() + 1; 
        char char_array[str_len];
        buffer.toCharArray(char_array, str_len);
        Udp.write(char_array);
        Serial.println("Sende:" + buffer );
        Udp.endPacket();  
        
}

void loop()
{
    

  
  
  HoleTemp();
    Serial.println("UDP Verbinde");
     digitalWrite(led, LOW);
    Udp.begin(localPort);
    Udp.beginPacket(address, 5000);
    String buffer = "Hager#" + String(1)+"#NS"+watt_ns+"#PV"+watt_pv+"#WP"+watt_wp+"#cNS"+count_ns/10+"#cPV"+count_pv/10+"#cWP"+count_wp/10+"#VL"+VL+"#RL"+RL+"#WW"+WW+"#AT"+AT+"#WZ"+WZ+"#RT"+talt_ns/1000/60/60+"#EOF/"; 
    int str_len = buffer.length() + 1; 
    char char_array[str_len];
    buffer.toCharArray(char_array, str_len);
    Udp.write(char_array);
    Serial.println("Sende:" + buffer );
    Udp.endPacket();  
    int packetSize = Udp.parsePacket();
    
      if(packetSize)
      {   /*  
          Serial.print("EingangsPuffer: ");
          Serial.print(packetSize);
          Serial.print(" von ");
           digitalWrite(led, HIGH);
          IPAddress remote = Udp.remoteIP();
          
          for (int i =0; i < 4; i++)
          {
            Serial.print(remote[i], DEC);
            if (i < 3)
            {
              Serial.print(".");
            }
          }
          Serial.print(", port ");
          Serial.println(Udp.remotePort());
      
          // read the packet into packetBufffer
          */       
          Udp.read(EingangsPuffer,UDP_TX_PACKET_MAX_SIZE);
         //Serial.println(EingangsPuffer);
          //Serial.println(UDP_TX_PACKET_MAX_SIZE);
        
        
          if (EingangsPuffer[0] == 'R' && EingangsPuffer[1] == 'e' && EingangsPuffer[2] == 's'&& EingangsPuffer[3] == 'e'&& EingangsPuffer[4] == 't' ) 
          {
          
          Serial.print("Reset gefunden - mache Software Reset");
          delay(1000);
          
           software_Reset(); 
          }
      }
    
   //if (talt_ns > 86400000)  software_Reset(); // Reset nach 24h
   //if (talt_ns > 60000)  software_Reset();
    //  Serial.println(talt_ns);

   
 
   delay (10000);  
   
    digitalWrite(led, LOW);
} 

//SUB Analog Temp holen
void HoleTemp(){
  VL=0;   
  RL=0;   
  WW=0;
  WZ=0;
  AT=0;


double Temp;
Temp = log(((10240000/analogRead(0)) - 10000));
Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));
Temp = Temp - 273.15;            // Convert Kelvin to Celcius
//Serial.println(Temp);
VL = int (Temp-0.5);
//Serial.println(VL);

Temp = log(((10240000/analogRead(1)) - 10000));
Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));
Temp = Temp - 273.15;            // Convert Kelvin to Celcius
//Serial.println(Temp);
RL = int (Temp-0.5);
//Serial.println(RL);


Temp = log(((10240000/analogRead(2)) - 10000));
// Serial.println(analogRead(2));
Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));
Temp = Temp - 273.15;            // Convert Kelvin to Celcius
//Serial.println(Temp);
WW = int (Temp-0.5);
//Serial.println(WW);

Temp = log(((10240000/analogRead(3)) - 10000));
Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));
Temp = Temp - 273.15;            // Convert Kelvin to Celcius
//Serial.println(Temp);
WZ = int (Temp-0.5);
WZ = 0;
//Serial.println(RL);


Temp = log(((10240000/analogRead(4)) - 10000));
Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));
Temp = Temp - 273.15;            // Convert Kelvin to Celcius
//Serial.println(Temp);
AT = int (Temp-0.5);
//Serial.println(AT);




 
  return;
} 
//SUB Analog Temp holen
  


void zustandAendern_ns()
{

  dt_ns= (millis()-talt_ns);
  talt_ns=millis();
  count_ns++;
  watt_ns = (360000/dt_ns);
  if (watt_ns < 10 or watt_ns > 9999)(watt_ns=0);
  return ;   

}

void zustandAendern_pv()
{

  dt_pv= (millis()-talt_pv);
  if (dt_pv <7500)
  {
    count_pv++;
    watt_pv = (360000/dt_pv);
    if (watt_pv < 44 or watt_pv > 9999)(watt_pv=1);
  }
  else watt_pv = 0;
  talt_pv=millis();
  return;
}


void zustandAendern_wp()
{
     dt_wp= (millis()-talt_wp);
  talt_wp=millis();
  count_wp++;
  watt_wp = (360000/dt_wp);
  if (watt_wp < 10 or watt_wp > 9999)(watt_wp=0);
  
  
  
  return;
}



void software_Reset()
{
  asm volatile ("  jmp 0");
}

Die MAC ist einzigartig…

Danke!

VG Tom

Mal ein Tip:

toCharArray() ist vollkommen unnötig, wenn man nicht schreibend auf das Array zugreifen will. Die String Klasse unterstützt inzwischen c_str() was dummerweise nicht dokumentiert ist.

Damit solltest du einfach das machen können:

Udp.write(buffer.c_str());

Liefert einen read-only Zeiger auf das interne Array des String Objekts. Man muss also nicht noch mehr RAM verschwenden.

licht2002: Nur in der Fritz Box taucht es nicht auf.... ist das Normal?

Ich kenne keine Fritzboxen, aber bei Heimroutern ist es so normal: - Clients mit fester IP-Adresse erscheinen nicht im Router - Clients, die per DHCP eine IP-Adresse bezogen haben, erscheinen in einem "DHCP Client Log" (oder ähnlich)

Allerdings erscheinen die Arduino Clients in jedem Fall stets "namenlos" in der Liste, nur mit der IP-Nummer, die sie bekommen haben. Denn den Namensdienst, der den Namen des Clients bereitstellt, müßtest Du selbst auf dem Arduino implementieren. Und die Ethernet-Library bringt dazu keinerlei Unterstützung mit.