Timezone convertion started
This commit is contained in:
		
							
								
								
									
										121
									
								
								test.lua
									
									
									
									
									
								
							
							
						
						
									
										121
									
								
								test.lua
									
									
									
									
									
								
							| @@ -1,25 +1,134 @@ | |||||||
| dofile("wlancfg.lua") | dofile("wlancfg.lua") | ||||||
| print("Initialize Wordclock") | 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() | function startTimeupdate() | ||||||
|   -- Found: http://thearduinoguy.org/using-an-esp8266-as-a-time-source-part-2/ |   -- Found: http://thearduinoguy.org/using-an-esp8266-as-a-time-source-part-2/ | ||||||
|   -- retrieve the current time from Google |   -- retrieve the current time from Google | ||||||
|   conn=net.createConnection(net.TCP, 0)  |   conn=net.createConnection(net.TCP, 0)  | ||||||
|   |   -- Send the HTTP request | ||||||
|   conn:on("connection",function(conn, payload) |   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".. |             "Host: google.com\r\n".. | ||||||
|             "Accept: */*\r\n".. |             "Accept: */*\r\n".. | ||||||
|             "User-Agent: Mozilla/4.0 (compatible; esp8266 Lua;)".. |             "User-Agent: Mozilla/4.0 (compatible; esp8266 Lua;)".. | ||||||
|             "\r\n\r\n")  |             "\r\n\r\n")  | ||||||
|   end) |   end) | ||||||
|              |   -- Extract the time from the answer | ||||||
|   conn:on("receive", function(conn, payload) |   conn:on("receive", function(conn, payload) | ||||||
|     print('Time: '..string.sub(payload,string.find(payload,"Date: ") |     local timestr = string.sub(payload,string.find(payload,"Date: ") | ||||||
|            +6,string.find(payload,"Date: ")+35)) |            +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() |     conn:close() | ||||||
|   end) |   end) | ||||||
|   t = tmr.now()     |  | ||||||
|   conn:connect(80,'google.com') |   conn:connect(80,'google.com') | ||||||
| end | end | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user