2016-06-18 19:35:22 +02:00
--TODO:
configFile = " config.lua "
function sendWebPage ( conn , answertype )
2016-06-18 23:19:39 +02:00
collectgarbage ( )
2016-06-18 19:35:22 +02:00
if ( ssid == nil ) then
ssid = " Not set "
end
if ( sntpserverhostname == nil ) then
sntpserverhostname = " ptbtime1.ptb.de "
end
if ( timezoneoffset == nil ) then
timezoneoffset = 1
end
buf = " HTTP/1.1 200 OK \n Server: NodeMCU \n Content-Type: text/html \n \n "
2016-06-19 00:50:18 +02:00
if ( node.heap ( ) < 8000 ) then
2016-06-18 23:19:39 +02:00
buf = buf .. " <h1>Busy, please come later again</h1> "
else
buf = buf .. " <html> "
buf = buf .. " <head><title>WordClock Setup Page</title> "
buf = buf .. " </head><body> \n "
buf = buf .. " <h1>Welcome to the WordClock</h1>Please note that all settings are mandatory<br /><br /> "
buf = buf .. " <form action= \" \" method= \" POST \" > "
buf = buf .. " <table id= \" table-6 \" > "
buf = buf .. " <tr><th>WIFI-SSID</b></th><td><input id= \" ssid \" name= \" ssid \" value= \" " .. ssid .. " \" ></td><td>SSID of the wireless network</td></tr> "
buf = buf .. " <tr><th>WIFI-Password</th><td><input id= \" password \" name= \" password \" ></td><td>Password of the wireless network</td></tr> "
buf = buf .. " <tr><th>SNTP Server</th><td><input id= \" sntpserver \" name= \" sntpserver \" value= \" " .. sntpserverhostname .. " \" ></td><td>Server to sync the time with. Only one ntp server is allowed.</tr> "
buf = buf .. " <tr><th>Offset to UTC time</th><td><input id= \" timezoneoffset \" name= \" timezoneoffset \" value= \" " .. timezoneoffset .. " \" ></td><td>Define the offset to UTC time in hours. For example +1 hour for Germany</tr> "
buf = buf .. " <tr><td colspan= \" 3 \" ><div align= \" center \" ><input type= \" submit \" value= \" Save Configuration \" onclick= \" this.value='Submitting ..';this.disabled='disabled'; this.form.submit(); \" ></div></td></tr> "
buf = buf .. " </table></form> "
if answertype == 2 then
buf = buf .. " <h2><font color= \" green \" >New configuration saved</font></h2 \n > "
2016-06-19 00:30:09 +02:00
elseif answertype == 3 then
2016-06-18 23:19:39 +02:00
buf = buf .. " <h2><font color= \" red \" >ERROR</font></h2 \n > "
elseif answertype == 4 then
buf = buf .. " <h2><font color= \" orange \" >Not all parameters set</font></h2 \n > "
2016-06-18 19:35:22 +02:00
end
buf = buf .. " \n </body></html> "
2016-06-18 23:19:39 +02:00
end
2016-06-18 19:35:22 +02:00
conn : send ( buf )
buf = nil
2016-06-18 23:19:39 +02:00
collectgarbage ( )
2016-06-18 19:35:22 +02:00
end
function startWebServer ( )
srv = net.createServer ( net.TCP )
srv : listen ( 80 , function ( conn )
conn : on ( " receive " , function ( conn , payload )
if ( payload : find ( " GET / " ) ~= nil ) then
--here is code for handling http request from a web-browser
ssid , password , bssid_set , bssid = wifi.sta . getconfig ( )
sendWebPage ( conn , 1 )
conn : on ( " sent " , function ( conn ) conn : close ( ) end )
else if ( payload : find ( " POST / " ) ~= nil ) then
--code for handling the POST-request (updating settings)
_ , postdatastart = payload : find ( " \r \n \r \n " )
--Next lines catches POST-requests without POST-data....
if postdatastart == nil then postdatastart = 1 end
postRequestData = string.sub ( payload , postdatastart + 1 )
local _POST = { }
for i , j in string.gmatch ( postRequestData , " (%w+)=([^&]+)&* " ) do
_POST [ i ] = j
end
postRequestData = nil
if ( ( _POST.ssid ~= nil ) and ( _POST.password ~= nil ) and ( _POST.sntpserver ~= nil ) and ( _POST.timezoneoffset ~= nil ) ) then
2016-06-18 23:19:39 +02:00
2016-06-18 19:35:22 +02:00
-- Safe configuration:
2016-06-18 23:19:39 +02:00
file.remove ( configFile .. " .new " )
file.open ( configFile .. " .new " , " w " )
file.write ( " -- Config \n " .. " wifi.sta.config( \" " .. _POST.ssid .. " \" , \" " .. _POST.password .. " \" ) \n " .. " sntpserverhostname= \" " .. _POST.sntpserver .. " \" \n " .. " timezoneoffset= \" " .. _POST.timezoneoffset .. " \" \n " )
2016-06-18 19:35:22 +02:00
file.close ( )
2016-06-18 23:19:39 +02:00
file.remove ( configFile )
if ( file.rename ( configFile .. " .new " , configFile ) ) then
2016-06-19 00:50:18 +02:00
dofile ( configFile ) -- load the new values
2016-06-18 23:19:39 +02:00
sendWebPage ( conn , 2 ) -- success
else
sendWebPage ( conn , 3 ) -- error
end
2016-06-18 19:35:22 +02:00
else
ssid , password , bssid_set , bssid = wifi.sta . getconfig ( )
2016-06-18 23:19:39 +02:00
sendWebPage ( conn , 4 ) -- not all parameter set
2016-06-18 19:35:22 +02:00
end
2016-06-18 23:19:39 +02:00
conn : on ( " sent " , function ( conn ) conn : close ( ) end )
2016-06-18 19:35:22 +02:00
else
--here is code, if the connection is not from a webbrowser, i.e. telnet or nc
global_c = conn
function s_output ( str )
if ( global_c ~= nil )
then global_c : send ( str )
end
end
node.output ( s_output , 0 )
global_c : on ( " receive " , function ( c , l )
node.input ( l )
end )
global_c : on ( " disconnection " , function ( c )
node.output ( nil )
global_c = nil
end )
2016-06-18 23:19:39 +02:00
print ( " Welcome to Word Clock " )
2016-06-18 19:35:22 +02:00
end
end
end )
conn : on ( " disconnection " , function ( c )
node.output ( nil ) -- un-register the redirect output function, output goes to serial
end )
end )
end