Timezone convertion started
This commit is contained in:
		
							
								
								
									
										119
									
								
								test.lua
									
									
									
									
									
								
							
							
						
						
									
										119
									
								
								test.lua
									
									
									
									
									
								
							| @@ -1,11 +1,77 @@ | ||||
| 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"..  | ||||
|             "Host: google.com\r\n".. | ||||
| @@ -13,13 +79,56 @@ function startTimeupdate() | ||||
|             "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()     | ||||
|   conn:connect(80,'google.com') | ||||
| end | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user