diff --git a/test.lua b/test.lua index 9388882..d6c8f8e 100644 --- a/test.lua +++ b/test.lua @@ -1,25 +1,134 @@ dofile("wlancfg.lua") print("Initialize Wordclock") +-- As we are located in central europe, we have GMT+1 +local TIMEZONE_OFFSET_WINTER = 1 + +--Summer winter time convertion +--See: https://arduinodiy.wordpress.com/2015/10/13/the-arduino-and-daylight-saving-time/ +-- +--As October has 31 days, we know that the last Sunday will always fall from the 25th to the 31st +--So our check at the end of daylight saving will be as follows: +--if (dow == 7 && mo == 10 && d >= 25 && d <=31 && h == 3 && DST==1) +--{ +--setclockto 2 am; +--DST=0; +--} +-- +--To start summertime/daylightsaving time on the last Sunday in March is mutatis mutandis the same: +--if (dow == 7 && mo == 3 && d >= 25 && d <=31 && h ==2 && DST==0) +--{ +--setclockto 3 am; +--DST=1; +--} +function getLocalTime(year, month, day, hour, minutes, seconds,dow) + -- Always adapte the timezoneoffset: + hour = hour + (TIMEZONE_OFFSET_WINTER) + + -- we are in 100% in the summer time + if (month > 3 and month < 10) then + hour = hour + 1 + -- October is not 100% Summer time + --FIXME elseif (month == 10 and + end + + return year, month, day, hour, minutes, seconds +end + +-- Convert a given month in english abr. to number from 1 to 12. +-- On unknown arguments, zero is returned. +function convertMonth(str) + if (str=="Jan") then + return 1 + elseif (str == "Feb") then + return 2 + elseif (str == "Mar") then + return 3 + elseif (str == "Apr") then + return 4 + elseif (str == "May") then + return 5 + elseif (str == "Jun") then + return 6 + elseif (str == "Jul") then + return 7 + elseif (str == "Aug") then + return 8 + elseif (str == "Sep") then + return 9 + elseif (str == "Oct") then + return 10 + elseif (str == "Nov") then + return 11 + elseif (str == "Dec") then + return 12 + else + return 0 + end +end + function startTimeupdate() -- Found: http://thearduinoguy.org/using-an-esp8266-as-a-time-source-part-2/ -- retrieve the current time from Google conn=net.createConnection(net.TCP, 0) - + -- Send the HTTP request conn:on("connection",function(conn, payload) - conn:send("HEAD / HTTP/1.1\r\n".. + conn:send("HEAD / HTTP/1.1\r\n".. "Host: google.com\r\n".. "Accept: */*\r\n".. "User-Agent: Mozilla/4.0 (compatible; esp8266 Lua;)".. "\r\n\r\n") end) - + -- Extract the time from the answer conn:on("receive", function(conn, payload) - print('Time: '..string.sub(payload,string.find(payload,"Date: ") - +6,string.find(payload,"Date: ")+35)) + local timestr = string.sub(payload,string.find(payload,"Date: ") + +6,string.find(payload,"Date: ")+35) + -- time looks like: Tue, 12 Apr 2016 16:26:31 GMT + print('Time: '.. timestr) + local firstComma=string.find(timestr, ",") + dow=string.sub(timestr, 0, firstComma-1) + nextParts=string.sub(timestr, firstComma+1) + i=0 + hourminsectxt=nil + -- Split the text at each space + for str in string.gmatch(nextParts, "([^ ]+)") do + if (i==0) then + day=str + elseif (i==1) then + month=convertMonth(str) + elseif (i==2) then + year=str + elseif (i==3) then + hourminsectxt=str + end + i=i+1 + end + -- Extract the time + if (hourminsectxt ~= nil) then + i=0 + -- split the text at each : + for str in string.gmatch(hourminsectxt, "([^:]+)") do + if (i==0) then + hour=str + elseif (i==1) then + minutes=str + elseif (i==2) then + seconds=str + end + i=i+1 + end + end + print("---------------") + year, month, day, hour, minutes, seconds = getLocalTime(year, month, day, hour, minutes, seconds,dow) + print(year) + print(month) + print(day) + print(hour) + print(minutes) + print(seconds) + print("---------------") conn:close() - end) - t = tmr.now() + end) conn:connect(80,'google.com') end