Ich habe letzte Woche meinen ersten Arduino (ESP32) bekommen und spiele jetzt ein bißchen damit rum. Ich schaue mir Tutorials an und versuche, die nachzustellen.
Eines der Tutorials hat den Bezug von Datum und Uhrzeit über pool.nto.org beschrieben. Soweit so gut, ich bekomme jedoch das Jahr 2055 geliefert. Was könnte das Problem sein? Kennt das jemand?
Hier das Programm
import network, usocket, ustruct, utime
TIMESTAMP = 2208988800
# Create new socket
client = usocket.socket(usocket.AF_INET, usocket.SOCK_DGRAM)
client.bind(("", 8080))
client.settimeout(3.0)
# Get addr info via DNS
addr = usocket.getaddrinfo("pool.ntp.org", 123)[0][4]
# Send query
client.sendto('\x1b' + 47 * '\0', addr)
data, address = client.recvfrom(1024)
# Print time
t = ustruct.unpack(">IIIIIIIIIIII", data)[10] - TIMESTAMP
print ("Year:%d Month:%d Day:%d Time: %d:%d:%d" % (utime.localtime(t)[0:6]))
# Close socket
client.close()
Vielen Dank für die superschnellen und hilfreichen Antworten!
Jetzt habe ich das verstanden.
Die 2208988800 sind die Sekunden zwischen 1.1.1900 und 31.12.1969. Mit Hilfe von Excel habe ich mir dann die Sekunden bis zum 31.12.1999 ausgerechnet: 3155673600
Nein, nicht falsch, sondern unvollständig.
Es berücksichtigt nicht, dass der von einem NTP-Server geholte Wert nicht mit der Interpretation in der utime Library übereinstimmt - was den Anfang der Zeit angeht.