NTP Uhr im WebIf Anzeigen wie?

Hallo,
ich habe hier eine Sketch für eine NTP Uhr, wie kann ich diese jetzt im WebIf anzeigen lassen? Und ist die Uhr auch für die Sommer/Winterzeit umstellung geeignet?

//Ethernet Shield
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // MAC Adresse des Arduino Boards

EthernetServer server(80); // Port Einstellung (Standard für HTML : 80)

//NTP Server
#include <EthernetUdp.h>

unsigned int localPort = 8888;       // lokaler Port zum Abhören von UDP-Paketen
byte timeServer[]  = { 129, 6, 15, 28  }; // Time Server time-a-g.nist.gov
const int NTP_PACKET_SIZE = 48; // NTP Der Zeitstempel befindet sich in den ersten 48 Bytes der Nachricht
byte packetBuffer [NTP_PACKET_SIZE]; // Puffer zum Speichern eingehender und ausgehender Pakete
EthernetUDP Udp; // Eine UDP Instanz, mit der wir Pakete senden und empfangen können

void setup()
{
  Ethernet.begin(mac) == 0; // Ethernet initialisieren

  server.begin(); // Auf Clients warten
  Serial.print("Arduino's IP Address: ");
  Serial.println(Ethernet.localIP());

  Serial.print("DNS Server's IP Address: ");
  Serial.println(Ethernet.dnsServerIP());

  Serial.print("Gateway's IP Address: ");
  Serial.println(Ethernet.gatewayIP());

  Serial.print("Network's Subnet Mask: ");
  Serial.println(Ethernet.subnetMask());

  Serial.begin(9600); // Serielle Schnittstelle initialisieren

  //NTP Server
  Udp.begin(localPort); // Zeitserver Starten
}

void loop()
{
  // NTP Server
  sendNTPpacket(timeServer); // send an NTP packet to a time server

  // wait to see if a reply is available
  delay(1000);

  if ( Udp.parsePacket() ) {
    // We've received a packet, read the data from it
    Udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer

    //the timestamp starts at byte 40 of the received packet and is four bytes,
    // or two words, long. First, esxtract the two words:

    unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
    unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
    // combine the four bytes (two words) into a long integer
    // this is NTP time (seconds since Jan 1 1900):
    unsigned long secsSince1900 = highWord << 16 | lowWord;
    Serial.print("Seconds since Jan 1 1900 = " );
    Serial.println(secsSince1900);

    // now convert NTP time into everyday time:
    Serial.print("Unix time = ");
    // Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
    const unsigned long seventyYears = 2208988800UL;
    // subtract seventy years:
    unsigned long epoch = secsSince1900 - seventyYears;
    // print Unix time:
    Serial.println(epoch);


    // print the hour, minute and second:
    Serial.print("The UTC time is "); // UTC is the time at Greenwich Meridian (GMT)
    Serial.print((epoch % 86400L) / 3600); // print the hour (86400 equals secs per day)
    Serial.print(':');
    if ( ((epoch % 3600) / 60) < 10 )
    {
      // In the first 10 minutes of each hour, we'll want a leading '0'
      Serial.print('0');
    }
    Serial.print((epoch % 3600) / 60); // print the minute (3600 equals secs per minute)
    Serial.print(':');
    if ( (epoch % 60) < 10 )
    {
      // In the first 10 seconds of each minute, we'll want a leading '0'
      Serial.print('0');
    }
    Serial.println(epoch % 60); // print the second
  }
  // wait ten seconds before asking for the time again
  delay(2000);


  EthernetClient client = server.available(); //Prüfen, ob Client Seite aufruft
  if (client)
  { // Seitenaufruf durch User
    // Ausgabe in HTML
    server.print("HTTP/1.1 200 OK\r\nServer: arduino\r\nContent-Type: text/html\r\n\r\n");
    server.print("<HTML><HEAD><TITLE>");
    server.print("Uhrtest");
    server.print("</TITLE>");
    server.print("<meta charset = 'utf-8'>");
    server.print("</HEAD><BODY>");
    server.print("<h2 align=center><font size=7><b>Internetzeit</b></font></h2>");
    server.print("<center><font size=5><b>Datum & Uhrzeit</font>");
    server.print(123); // Ausgabe des Datum und Uhrzeit
    delay(500); // Kurzer Delay, um Daten zu senden
    client.stop(); // Verbindung mit dem Client trennen
  }
}

// send an NTP request to the time server at the given address
unsigned long sendNTPpacket(char* address)
{
  // set all bytes in the buffer to 0
  memset(packetBuffer, 0, NTP_PACKET_SIZE);
  // Initialize values needed to form NTP request
  // (see URL above for details on the packets)
  packetBuffer[0] = 0b11100011; // LI, Version, Mode
  packetBuffer[1] = 0; // Stratum, or type of clock
  packetBuffer[2] = 6; // Polling Interval
  packetBuffer[3] = 0xEC; // Peer Clock Precision
  // 8 bytes of zero for Root Delay & Root Dispersion
  packetBuffer[12] = 49;
  packetBuffer[13] = 0x4E;
  packetBuffer[14] = 49;
  packetBuffer[15] = 52;

  // all NTP fields have been given values, now
  // you can send a packet requesting a timestamp:
  Udp.beginPacket(address, 123); //NTP requests are to port 123
  Udp.write(packetBuffer, NTP_PACKET_SIZE);
  Udp.endPacket();
}

aha

???
Habe mir den Text mit Beispielen usw. erstellt. Nur wie kann ich Anfragen, damit ich das Aktuelle Datum und die Uhrzeit erhalte?

Habe es jetzt mal per USB getestet…
Das Datum ist falsch und die Uhrzeit stimmt um 1 Std. nicht…

newpv:
Hallo,
ich habe hier eine Sketch für eine NTP Uhr, wie kann ich diese jetzt im WebIf anzeigen lassen? Und ist die Uhr auch für die Sommer/Winterzeit umstellung geeignet?

Du bist doch nicht erst seid gestern hier. Wenigstens, dass man Sketche direkt in Codetags in den Beitrag setzt, solltest Du mittlerweile gelernt haben.

Gruß Tommy

Ja, da kann aber eine Fehlermeldung vom Board :wink:

Gerade erneut getestet jetzt ging der Post vom sketch...

Hier die USB Augabe:

20:10:31.760 -> Seconds since Jan 1 1900 = 3821368230
20:10:31.808 -> Unix time = 1612379430
20:10:31.855 -> The UTC time is 19:10:30

Lies mal richtig, was da steht: The UTC time is 19:10:30

Gruß Tommy

Habe jetzt google weiter gequält ;D

Und diesen Sketch gefunden und etwas bearbeitet…
Aber ich bekomme keine Netzwerk Kommunikation und auch keine USB Serielle Ausgabe um es zu testen:

//Ethernet Shield
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // MAC Adresse des Arduino Boards

EthernetServer server(80); // Port Einstellung (Standard für HTML : 80)

//NTP Uhr
#include <EthernetUdp.h>
#include <TimeLib.h>

byte timeServer[]  = { 192, 135, 215, 1 }; // Time Server fritz.box
const int NTP_PACKET_SIZE = 48;          // NTP time stamp is in the first 48 bytes of the message
byte packetBuffer[ NTP_PACKET_SIZE];     //buffer to hold incoming and outgoing packets
EthernetUDP udp;
unsigned int localPort = 8888;
unsigned long startMillis;
boolean udpwait = true;
byte trying = 0;

void setup()
{
  Ethernet.begin(mac); // Ethernet initialisieren
  server.begin(); // Auf Clients warten
  Serial.print("Arduino's IP Address: "); // DHCP Adressen abfragen
  Serial.println(Ethernet.localIP());

  Serial.print("DNS Server's IP Address: "); // IP Adresse abfragen
  Serial.println(Ethernet.dnsServerIP());

  Serial.print("Gateway's IP Address: "); // Gateway Adresse abfragen
  Serial.println(Ethernet.gatewayIP());

  Serial.print("Network's Subnet Mask: "); // Subnet Mask Adresse abfragen
  Serial.println(Ethernet.subnetMask());

  Serial.begin(9600); // Serielle Schnittstelle initialisieren

  setSyncProvider(getNtpTime);
  setSyncInterval(3600);
}

/*-------- utility code from jurs ----------*/
boolean summertime_EU(int year, byte month, byte day, byte hour, byte tzHours)
// European Daylight Savings Time calculation by "jurs" for German Arduino Forum
// input parameters: "normal time" for year, month, day, hour and tzHours (0=UTC, 1=MEZ)
// return value: returns true during Daylight Saving Time, false otherwise
{
  if (month < 3 || month > 10) return false; // keine Sommerzeit in Jan, Feb, Nov, Dez
  if (month > 3 && month < 10) return true; // Sommerzeit in Apr, Mai, Jun, Jul, Aug, Sep
  if (month == 3 && (hour + 24 * day) >= (1 + tzHours + 24 * (31 - (5 * year / 4 + 4) % 7)) || month == 10 && (hour + 24 * day) < (1 + tzHours + 24 * (31 - (5 * year / 4 + 1) % 7)))
    return true;
  else
    return false;
}


unsigned long getNtpTime()
{
  if (udpwait) {
    sendNTPpacket(timeServer); // send an NTP packet to a time server
    udpwait = false;
    trying = 0;
    // Serial.println("udp start");
    startMillis = millis();
  }


  if ( millis() - startMillis > 1000) // wait one second for the response without any delays
  {
    startMillis = millis();
    // Serial.println("udp wait");
    trying++;
    if (trying > 5) udpwait = true; // no response up to 6 second - try again
    int datain = udp.parsePacket();
    if ( datain )
    {
      //  Serial.println("Data incomming");

      udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer

      //the timestamp starts at byte 40 of the received packet and is four bytes,
      // or two words, long. First, esxtract the two words:
      unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
      unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
      // combine the four bytes (two words) into a long integer
      // this is NTP time (seconds since Jan 1 1900):
      unsigned long secsSince1900 = highWord << 16 | lowWord;
      // now convert NTP time into Arduino Time format:
      // Time starts on Jan 1 1970. In seconds, that's 2208988800:
      const unsigned long seventyYears = 2208988800UL;
      // subtract seventy years:
      unsigned long epoch = secsSince1900 - seventyYears + 3600; // +3600 too MEZ;

      tmElements_t pretime;
      breakTime(epoch, pretime);
      int real_year = pretime.Year + 1970;

      if (summertime_EU(real_year, pretime.Month, pretime.Day, pretime.Hour, 1)) epoch += 3600;

      udpwait = true;
      return epoch;
    }
  }
  return 0;   // return 0 if unable to get the time
}

// send an NTP request to the time server at the given address
unsigned long sendNTPpacket(byte * address)
{
  // set all bytes in the buffer to 0
  memset(packetBuffer, 0, NTP_PACKET_SIZE);
  // Initialize values needed to form NTP request
  // (see URL above for details on the packets)
  packetBuffer[0] = 0b11100011;   // LI, Version, Mode
  packetBuffer[1] = 0;     // Stratum, or type of clock
  packetBuffer[2] = 6;     // Polling Interval
  packetBuffer[3] = 0xEC;  // Peer Clock Precision
  // 8 bytes of zero for Root Delay & Root Dispersion
  packetBuffer[12]  = 49;
  packetBuffer[13]  = 0x4E;
  packetBuffer[14]  = 49;
  packetBuffer[15]  = 52;

  // all NTP fields have been given values, now
  // you can send a packet requesting a timestamp:

  udp.beginPacket(address, 123);
  udp.write( packetBuffer, NTP_PACKET_SIZE);
  udp.endPacket();
  udp.flush();
}

void loop()
{
  EthernetClient client = server.available(); //Prüfen, ob Client Seite aufruft
  if (client)
  { // Seitenaufruf durch User
    // Ausgabe in HTML
    server.print("HTTP/1.1 200 OK\r\nServer: arduino\r\nContent-Type: text/html\r\n\r\n");
    server.print("<HTML><HEAD><TITLE>");
    server.print("Uhrtest");
    server.print("</TITLE>");
    server.print("<meta charset = 'utf-8'>");
    server.print("</HEAD><BODY>");
    server.print("<h2 align=center><font size=7><b>Internetzeit</b></font></h2>");
    server.print("<center><font size=5><b>Datum & Uhrzeit</font>");
    server.print(day()); server.print(month()); server.print(year()); server.print(hour()); server.print(minute()); // Ausgabe des Datum und Uhrzeit
    delay(500); // Kurzer Delay, um Daten zu senden
    client.stop(); // Verbindung mit dem Client trennen
  }


  // USB Ausgabe
  static unsigned long lastprint;
  if (millis() - lastprint > 3000) // Testausgabe alle 3s
  {
    Serial.print("Datum & Uhrzeit: "); // Text "Temperatur" schreiben
    Serial.print(day()); server.print(month()); server.print(year()); server.print(hour()); server.print(minute()); // Ausgabe des Datum und Uhrzeit
  }
}
Serial.print(day()); server.print(month()); server.print(year()); server.print(hour()); server.print(minute());

Damit würde auch bestenfalls der Tag auf der seriellen Schnittstelle (USB) landen.

Richtig, ist ja auch zum testen erstmal so gewollt...
Aber wieso startet das Ethernet Shield nicht?
Und warum geht die USB Schnittstelle nicht?

Serial.begin() kommt recht spät im setup() vor. Ein paar Ausgaben werden deshalb fehlen.
Mit dem Ethernet kann ich nicht helfen. Wenn ich Netz brauche nehme ich einen ESP.

byte timeServer[]  = { 192, 135, 215, 1 }; // Time Server fritz.box

Bist Du sicher, dass Deine Box diese IP hat?

Einfach Code kopieren, ohne auch nur ein Fitzelchen davon zu verstehen, geht in der Regel schief. Diese Erfahrung hast Du doch nun schon oft genug gemacht. Immer noch keine Lernbereitschaft vorhanden?

Gruß Tommy

Tommy56:
Bist Du sicher, dass Deine Box diese IP hat?

Bin mir sicher :wink:

Außerdem habe ich es schon über diese Seite mehrere Seiten getestet:
https://tf.nist.gov/tf-cgi/servers.cgi

Schon mal über den Unterschied interne IP und öffentliche IP nachgedacht?
Oder mal was grundsätzlich über IP-Netzwerke gelernt?

Gruß Tommy

Nicht zum THEMA

Falls Du damit ausdrücken willst, dass Du die 192.135.215.1 als lokale Adresse Deines Routers benutzt und auch noch stolz auf diesen Verstoß gegen alle Netzregeln bist, sollte man von Dir und Deinen Problemen die Finger lassen.

Gruß Tommy

So, da es hier nicht um den Netzwerkaufbau geht habe ich jetzt den Code geändert. Und es geht natürlich immer noch nicht. Hat jemand eine Lösung?

//Ethernet Shield
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // MAC Adresse des Arduino Boards

EthernetServer server(80); // Port Einstellung (Standard für HTML : 80)

//NTP Uhr
#include <EthernetUdp.h>
#include <TimeLib.h>

byte timeServer[]  = { 129, 6, 15, 28  }; // Time Server time-a-g.nist.gov
const int NTP_PACKET_SIZE = 48;          // NTP time stamp is in the first 48 bytes of the message
byte packetBuffer[ NTP_PACKET_SIZE];     //buffer to hold incoming and outgoing packets
EthernetUDP udp;
unsigned int localPort = 8888;
unsigned long startMillis;
boolean udpwait = true;
byte trying = 0;

void setup()
{
  Ethernet.begin(mac); // Ethernet initialisieren
  server.begin(); // Auf Clients warten
  Serial.print("Arduino's IP Address: "); // DHCP Adressen abfragen
  Serial.println(Ethernet.localIP());

  Serial.print("DNS Server's IP Address: "); // IP Adresse abfragen
  Serial.println(Ethernet.dnsServerIP());

  Serial.print("Gateway's IP Address: "); // Gateway Adresse abfragen
  Serial.println(Ethernet.gatewayIP());

  Serial.print("Network's Subnet Mask: "); // Subnet Mask Adresse abfragen
  Serial.println(Ethernet.subnetMask());

  Serial.begin(9600); // Serielle Schnittstelle initialisieren

  setSyncProvider(getNtpTime);
  setSyncInterval(3600);
}

/*-------- utility code from jurs ----------*/
boolean summertime_EU(int year, byte month, byte day, byte hour, byte tzHours)
// European Daylight Savings Time calculation by "jurs" for German Arduino Forum
// input parameters: "normal time" for year, month, day, hour and tzHours (0=UTC, 1=MEZ)
// return value: returns true during Daylight Saving Time, false otherwise
{
  if (month < 3 || month > 10) return false; // keine Sommerzeit in Jan, Feb, Nov, Dez
  if (month > 3 && month < 10) return true; // Sommerzeit in Apr, Mai, Jun, Jul, Aug, Sep
  if (month == 3 && (hour + 24 * day) >= (1 + tzHours + 24 * (31 - (5 * year / 4 + 4) % 7)) || month == 10 && (hour + 24 * day) < (1 + tzHours + 24 * (31 - (5 * year / 4 + 1) % 7)))
    return true;
  else
    return false;
}


unsigned long getNtpTime()
{
  if (udpwait) {
    sendNTPpacket(timeServer); // send an NTP packet to a time server
    udpwait = false;
    trying = 0;
    // Serial.println("udp start");
    startMillis = millis();
  }


  if ( millis() - startMillis > 1000) // wait one second for the response without any delays
  {
    startMillis = millis();
    // Serial.println("udp wait");
    trying++;
    if (trying > 5) udpwait = true; // no response up to 6 second - try again
    int datain = udp.parsePacket();
    if ( datain )
    {
      //  Serial.println("Data incomming");

      udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer

      //the timestamp starts at byte 40 of the received packet and is four bytes,
      // or two words, long. First, esxtract the two words:
      unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
      unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
      // combine the four bytes (two words) into a long integer
      // this is NTP time (seconds since Jan 1 1900):
      unsigned long secsSince1900 = highWord << 16 | lowWord;
      // now convert NTP time into Arduino Time format:
      // Time starts on Jan 1 1970. In seconds, that's 2208988800:
      const unsigned long seventyYears = 2208988800UL;
      // subtract seventy years:
      unsigned long epoch = secsSince1900 - seventyYears + 3600; // +3600 too MEZ;

      tmElements_t pretime;
      breakTime(epoch, pretime);
      int real_year = pretime.Year + 1970;

      if (summertime_EU(real_year, pretime.Month, pretime.Day, pretime.Hour, 1)) epoch += 3600;

      udpwait = true;
      return epoch;
    }
  }
  return 0;   // return 0 if unable to get the time
}

// send an NTP request to the time server at the given address
unsigned long sendNTPpacket(byte * address)
{
  // set all bytes in the buffer to 0
  memset(packetBuffer, 0, NTP_PACKET_SIZE);
  // Initialize values needed to form NTP request
  // (see URL above for details on the packets)
  packetBuffer[0] = 0b11100011;   // LI, Version, Mode
  packetBuffer[1] = 0;     // Stratum, or type of clock
  packetBuffer[2] = 6;     // Polling Interval
  packetBuffer[3] = 0xEC;  // Peer Clock Precision
  // 8 bytes of zero for Root Delay & Root Dispersion
  packetBuffer[12]  = 49;
  packetBuffer[13]  = 0x4E;
  packetBuffer[14]  = 49;
  packetBuffer[15]  = 52;

  // all NTP fields have been given values, now
  // you can send a packet requesting a timestamp:

  udp.beginPacket(address, 123);
  udp.write( packetBuffer, NTP_PACKET_SIZE);
  udp.endPacket();
  udp.flush();
}

void loop()
{
  EthernetClient client = server.available(); //Prüfen, ob Client Seite aufruft
  if (client)
  { // Seitenaufruf durch User
    // Ausgabe in HTML
    server.print("HTTP/1.1 200 OK\r\nServer: arduino\r\nContent-Type: text/html\r\n\r\n");
    server.print("<HTML><HEAD><TITLE>");
    server.print("Uhrtest");
    server.print("</TITLE>");
    server.print("<meta charset = 'utf-8'>");
    server.print("</HEAD><BODY>");
    server.print("<h2 align=center><font size=7><b>Internetzeit</b></font></h2>");
    server.print("<center><font size=5><b>Datum & Uhrzeit</font>");
    server.print(day()); server.print(month()); server.print(year()); server.print(hour()); server.print(minute()); // Ausgabe des Datum und Uhrzeit
    delay(500); // Kurzer Delay, um Daten zu senden
    client.stop(); // Verbindung mit dem Client trennen
  }


  // USB Ausgabe
  static unsigned long lastprint;
  if (millis() - lastprint > 3000) // Testausgabe alle 3s
  {
    Serial.print("Datum & Uhrzeit: "); // Text "Temperatur" schreiben
    Serial.print(day()); server.print(month()); server.print(year()); server.print(hour()); server.print(minute()); // Ausgabe des Datum und Uhrzeit
  }
}

@Tommy
Zur Info es handelt sich nur um ein Testnetzwerk, wo ich etwas mit rumspiel :smiley: …ich weis die Regeln für Lokale Netzerke…10.0.0.0 -10.255.255.255, 172.62.0.0 -172.31.255.255 und 192.168.0.0 - 192.168.255.255

Ich habe es mal weiter probiert die NTP Uhr ans laufen zu bekommen, leider noch ohne Erfolg, bin langsam am verzweifeln.
Hier der Code:

//Ethernet Shield
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0x00, 0x10, 0xFA, 0x6E, 0x38, 0x4A }; // MAC Adresse des Arduino Boards

EthernetServer server(80); // Port Einstellung (Standard für HTML : 80)

//NTP Uhr
#include <EthernetUdp.h>
#include <TimeLib.h>

byte timeServer[]  = { 129, 6, 15, 28  }; // Time Server time-a-g.nist.gov
const int NTP_PACKET_SIZE = 48;          // NTP time stamp is in the first 48 bytes of the message
byte packetBuffer[ NTP_PACKET_SIZE];     //buffer to hold incoming and outgoing packets
EthernetUDP udp;
unsigned int localPort = 8888;
unsigned long startMillis;
boolean udpwait = true;
byte trying = 0;

void setup()
{
  Serial.begin(9600); // Serielle Schnittstelle initialisieren

  Ethernet.begin(mac); // Ethernet initialisieren
  server.begin(); // Auf Clients warten
  Serial.print("Arduino's IP Address: "); // DHCP Adressen abfragen
  Serial.println(Ethernet.localIP());

  Serial.print("DNS Server's IP Address: "); // IP Adresse abfragen
  Serial.println(Ethernet.dnsServerIP());

  Serial.print("Gateway's IP Address: "); // Gateway Adresse abfragen
  Serial.println(Ethernet.gatewayIP());

  Serial.print("Network's Subnet Mask: "); // Subnet Mask Adresse abfragen
  Serial.println(Ethernet.subnetMask());

  setSyncProvider(getNtpTime);
  setSyncInterval(3600);
}

/*-------- utility code from jurs ----------*/
boolean summertime_EU(int year, byte month, byte day, byte hour, byte tzHours)
// European Daylight Savings Time calculation by "jurs" for German Arduino Forum
// input parameters: "normal time" for year, month, day, hour and tzHours (0=UTC, 1=MEZ)
// return value: returns true during Daylight Saving Time, false otherwise
{
  if (month < 3 || month > 10) return false; // keine Sommerzeit in Jan, Feb, Nov, Dez
  if (month > 3 && month < 10) return true; // Sommerzeit in Apr, Mai, Jun, Jul, Aug, Sep
  if (month == 3 && (hour + 24 * day) >= (1 + tzHours + 24 * (31 - (5 * year / 4 + 4) % 7)) || month == 10 && (hour + 24 * day) < (1 + tzHours + 24 * (31 - (5 * year / 4 + 1) % 7)))
    return true;
  else
    return false;
}


unsigned long getNtpTime()
{
  if (udpwait) {
    sendNTPpacket(timeServer); // send an NTP packet to a time server
    udpwait = false;
    trying = 0;
    // Serial.println("udp start");
    startMillis = millis();
  }


  if ( millis() - startMillis > 1000) // wait one second for the response without any delays
  {
    startMillis = millis();
    // Serial.println("udp wait");
    trying++;
    if (trying > 5) udpwait = true; // no response up to 6 second - try again
    int datain = udp.parsePacket();
    if ( datain )
    {
      //  Serial.println("Data incomming");

      udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer

      //the timestamp starts at byte 40 of the received packet and is four bytes,
      // or two words, long. First, esxtract the two words:
      unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
      unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
      // combine the four bytes (two words) into a long integer
      // this is NTP time (seconds since Jan 1 1900):
      unsigned long secsSince1900 = highWord << 16 | lowWord;
      // now convert NTP time into Arduino Time format:
      // Time starts on Jan 1 1970. In seconds, that's 2208988800:
      const unsigned long seventyYears = 2208988800UL;
      // subtract seventy years:
      unsigned long epoch = secsSince1900 - seventyYears + 3600; // +3600 too MEZ;

      tmElements_t pretime;
      breakTime(epoch, pretime);
      int real_year = pretime.Year + 1970;

      if (summertime_EU(real_year, pretime.Month, pretime.Day, pretime.Hour, 1)) epoch += 3600;

      udpwait = true;
      return epoch;
    }
  }
  return 0;   // return 0 if unable to get the time
}

// send an NTP request to the time server at the given address
unsigned long sendNTPpacket(byte * address)
{
  // set all bytes in the buffer to 0
  memset(packetBuffer, 0, NTP_PACKET_SIZE);
  // Initialize values needed to form NTP request
  // (see URL above for details on the packets)
  packetBuffer[0] = 0b11100011;   // LI, Version, Mode
  packetBuffer[1] = 0;     // Stratum, or type of clock
  packetBuffer[2] = 6;     // Polling Interval
  packetBuffer[3] = 0xEC;  // Peer Clock Precision
  // 8 bytes of zero for Root Delay & Root Dispersion
  packetBuffer[12]  = 49;
  packetBuffer[13]  = 0x4E;
  packetBuffer[14]  = 49;
  packetBuffer[15]  = 52;

  // all NTP fields have been given values, now
  // you can send a packet requesting a timestamp:

  udp.beginPacket(address, 123);
  udp.write( packetBuffer, NTP_PACKET_SIZE);
  udp.endPacket();
  udp.flush();
}

void loop()
{
  EthernetClient client = server.available(); //Prüfen, ob Client Seite aufruft
  if (client)
  { // Seitenaufruf durch User
    // Ausgabe in HTML
    server.print("HTTP/1.1 200 OK\r\nServer: arduino\r\nContent-Type: text/html\r\n\r\n");
    server.print("<HTML><HEAD><TITLE>");
    server.print("Uhrtest");
    server.print("</TITLE>");
    server.print("<meta charset = 'utf-8'>");
    server.print("</HEAD><BODY>");
    server.print("<h2 align=center><font size=7><b>Internetzeit</b></font></h2>");
    server.print("<center><font size=5><b>Datum & Uhrzeit</font>");
    server.print(day()); server.print(month()); server.print(year()); server.print(hour()); server.print(minute()); // Ausgabe des Datum und Uhrzeit
    delay(500); // Kurzer Delay, um Daten zu senden
    client.stop(); // Verbindung mit dem Client trennen
  }


  // USB Ausgabe
  static unsigned long lastprint;
  if (millis() - lastprint > 3000) // Testausgabe alle 3s
  {
    Serial.print("Datum & Uhrzeit: "); // Text "Temperatur" schreiben
    Serial.print(day()); server.print(month()); server.print(year()); server.print(hour()); server.print(minute()); // Ausgabe des Datum und Uhrzeit
  }
}

Diese Fehler kommen beim Komplinieren:

C:\Users\User\Desktop\Arduino\NTP\NTP.ino: In function 'boolean summertime_EU(int, byte, byte, byte, byte)':
C:\Users\User\Desktop\Arduino\NTP\NTP.ino:52:18: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   if (month == 3 && (hour + 24 * day) >= (1 + tzHours + 24 * (31 - (5 * year / 4 + 4) % 7)) || month == 10 && (hour + 24 * day) < (1 + tzHours + 24 * (31 - (5 * year / 4 + 1) % 7)))
       ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Users\User\Desktop\Arduino\NTP\NTP.ino: In function 'long unsigned int sendNTPpacket(byte*)':
C:\Users\User\Desktop\Arduino\NTP\NTP.ino:133:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^


In file included from C:\Program Files (x86)\Arduino\libraries\Ethernet\src\Dns.cpp:8:0:
C:\Program Files (x86)\Arduino\libraries\Ethernet\src\Dns.cpp: In member function 'uint16_t DNSClient::BuildRequest(const char*)':
C:\Program Files (x86)\Arduino\libraries\Ethernet\src\utility/w5100.h:457:25: warning: result of '(256 << 8)' requires 18 bits to represent, but 'int' only has 16 bits [-Wshift-overflow=]
 #define htons(x) ( (((x)<<8)&0xFF00) | (((x)>>8)&0xFF) )
                      ~~~^~~
C:\Program Files (x86)\Arduino\libraries\Ethernet\src\Dns.cpp:164:18: note: in expansion of macro 'htons'
  twoByteBuffer = htons(QUERY_FLAG | OPCODE_STANDARD_QUERY | RECURSION_DESIRED_FLAG);
                  ^~~~~

Das Ethernet Shiel läuft, IP Adresse wird abgerufen! Die USB Ausgabe gibt nur die IP, DNS, Gateway und das Subnetz aus. Das WebIf ist aber nicht erreichbar…

newpv:
Diese Fehler kommen beim Komplinieren:

Du weißt, was warning heißt?
Dann gib den Text mal in einen Übersetzer.

Die ersten beiden solltest Du beseitigen. && und || haben unterschiedliche Rangfolgen, wie Punkt (&&)- vor Strich(||)-Rechnung.
Wenn es einen Rückgabetyp einer Funktion gibt, sollte diese auch etwas zurück geben.

Die htons kannst Du erst mal ignorieren.

Gruß Tommy

Erstmal Danke für deine Antwort! ;D

Bevor ich jetzt hier weiter mache, ist es richtig, das der Sketch Falsch rechnet?
Geht jetzt nur um die Rechnung nicht um NTP oder RTC...

Habe hier einen Endsprechenden Beitrag gefunden:

https://www.mikrocontroller.net/topic/390074

Ich lehn mich mal ganz weit raus...

Was willst Du?
Ich habe versucht irgendwie Deine Codes zu verstehen und kann es nicht.
Möchtest Du mit einem Browser eine Zeit angezeigt bekommen?
Dann las Dir eine Zeit anzeigen.
Möchtest Du die Zeit nicht mit einer RTC stützen sondern NUR von einem Zeitserver holen?
Dann hol die Zeit vom Server oder gebe -1 aus, wenn das nicht geht.

Du kommentierst serielle Ausgaben aus - inhaltlich kann ich nicht einmal nachvollziehen wo Dein Problem liegt!!??!!

Fragen:
Erreichst Du den Zeitserver?
Bekommst Du valide Daten?
Wertest Du die richtig aus?
Wo ist Dein Problem?