Merge branch 'temparture' (where temperature was removed)
This commit is contained in:
commit
c5aae1c7e3
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
|||||||
wlancfg.lua
|
wlancfg.lua
|
||||||
|
config.lua
|
||||||
*.swp
|
*.swp
|
||||||
unit/testTimesMarchOctoberWithAllSeconds.lua
|
unit/testTimesMarchOctoberWithAllSeconds.lua
|
||||||
|
349
displayword.lua
349
displayword.lua
@ -1,63 +1,45 @@
|
|||||||
-- Module filling a buffer, sent to the LEDs
|
-- Module filling a buffer, sent to the LEDs
|
||||||
|
local M
|
||||||
function updateColor(data, inverseRow, characters2draw)
|
do
|
||||||
if (inverseRow == nil) then
|
local updateColor = function (data)
|
||||||
inverseRow=false
|
if (data.amountOfChars > 0) then
|
||||||
end
|
local div = tonumber(data.drawnCharacters/data.amountOfChars)
|
||||||
-- special case, and there are exactly 4 words to display (so each word for each minute)
|
if (div < 1) then
|
||||||
if (not inverseRow) then -- nomral row
|
|
||||||
if (data.drawnCharacters < data.charsPerMinute) then
|
|
||||||
return data.colorFg
|
return data.colorFg
|
||||||
elseif (data.drawnCharacters < data.charsPerMinute*2) then
|
elseif (div < 2) then
|
||||||
return data.colorMin1
|
return data.colorMin1
|
||||||
elseif (data.drawnCharacters < data.charsPerMinute*3) then
|
elseif (div < 3) then
|
||||||
return data.colorMin2
|
return data.colorMin2
|
||||||
elseif (data.drawnCharacters > data.charsPerMinute*4) then
|
elseif (div < 4) then
|
||||||
return data.colorMin3
|
return data.colorMin3
|
||||||
elseif (data.drawnCharacters > data.charsPerMinute*5) then
|
elseif (div < 5) then
|
||||||
return data.colorMin4
|
return data.colorMin4
|
||||||
else
|
else
|
||||||
return data.colorFg
|
return data.colorFg
|
||||||
end
|
end
|
||||||
else -- inverse row
|
|
||||||
--FIXME magic missing to start on the left side
|
|
||||||
if (data.drawnCharacters < data.charsPerMinute) then
|
|
||||||
return data.colorMin1
|
|
||||||
elseif (data.drawnCharacters < data.charsPerMinute*2) then
|
|
||||||
return data.colorMin2
|
|
||||||
elseif (data.drawnCharacters < data.charsPerMinute*3) then
|
|
||||||
return data.colorMin3
|
|
||||||
elseif (data.drawnCharacters > data.charsPerMinute*4) then
|
|
||||||
return data.colorMin4
|
|
||||||
else
|
else
|
||||||
return data.colorFg
|
return data.colorFg
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
function drawLEDs(data, numberNewChars, inverseRow)
|
local drawLEDs = function(data, numberNewChars)
|
||||||
if (inverseRow == nil) then
|
|
||||||
inverseRow=false
|
|
||||||
end
|
|
||||||
if (numberNewChars == nil) then
|
if (numberNewChars == nil) then
|
||||||
numberNewChars=0
|
numberNewChars=0
|
||||||
end
|
end
|
||||||
print(tostring(numberNewChars) .. " charactes " .. tostring(data.charsPerMinute) .. " per minute; " .. tonumber(data.drawnCharacters) .. " used characters")
|
|
||||||
local tmpBuf=nil
|
local tmpBuf=nil
|
||||||
for i=1,numberNewChars do
|
for i=1,numberNewChars do
|
||||||
if (tmpBuf == nil) then
|
if (tmpBuf == nil) then
|
||||||
tmpBuf = updateColor(data, inverseRow, numberNewChars)
|
tmpBuf = updateColor(data)
|
||||||
else
|
else
|
||||||
tmpBuf=tmpBuf .. updateColor(data, inverseRow, numberNewChars)
|
tmpBuf=tmpBuf .. updateColor(data)
|
||||||
end
|
end
|
||||||
data.drawnCharacters=data.drawnCharacters+1
|
data.drawnCharacters=data.drawnCharacters+1
|
||||||
end
|
end
|
||||||
data.drawnWords=data.drawnWords+1
|
|
||||||
return tmpBuf
|
return tmpBuf
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Utility function for round
|
-- Utility function for round
|
||||||
function round(num)
|
local round = function(num)
|
||||||
under = math.floor(num)
|
under = math.floor(num)
|
||||||
upper = math.floor(num) + 1
|
upper = math.floor(num) + 1
|
||||||
underV = -(under - num)
|
underV = -(under - num)
|
||||||
@ -69,10 +51,17 @@ function round(num)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local data={}
|
||||||
|
|
||||||
-- Module displaying of the words
|
-- Module displaying of the words
|
||||||
function generateLEDs(words, colorForground, colorMin1, colorMin2, colorMin3, colorMin4, characters)
|
local generateLEDs = function(words, colorBg, colorFg, colorMin1, colorMin2, colorMin3, colorMin4, invertRows, amountOfChars)
|
||||||
-- Set the local variables needed for the colored progress bar
|
-- Set the local variables needed for the colored progress bar
|
||||||
data={}
|
if (words == nil) then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
if (invertRows == nil) then
|
||||||
|
invertRows=false
|
||||||
|
end
|
||||||
|
|
||||||
local minutes=1
|
local minutes=1
|
||||||
if (words.min1 == 1) then
|
if (words.min1 == 1) then
|
||||||
@ -84,37 +73,47 @@ function generateLEDs(words, colorForground, colorMin1, colorMin2, colorMin3, co
|
|||||||
elseif (words.min4 == 1) then
|
elseif (words.min4 == 1) then
|
||||||
minutes = minutes + 4
|
minutes = minutes + 4
|
||||||
end
|
end
|
||||||
data.charsPerMinute = round( (characters / minutes) )
|
-- always set a foreground value
|
||||||
if (adc ~= nil) then
|
if (colorFg == nil) then
|
||||||
briPercent=(100*adc.read(0)/900)
|
colorFg = string.char(255,255,255)
|
||||||
print("Minutes : " .. tostring(minutes) .. " Char minutes: " .. tostring(data.charsPerMinute) .. " bright: " .. tostring(briPercent) .. "%")
|
end
|
||||||
data.colorFg = colorForground
|
|
||||||
data.colorMin1 = colorMin1
|
if (amountOfChars ~= nil) then
|
||||||
data.colorMin2 = colorMin2
|
data.amountOfChars = amountOfChars/minutes
|
||||||
data.colorMin3 = colorMin3
|
else
|
||||||
data.colorMin4 = colorMin4
|
data.amountOfChars = 0
|
||||||
|
end
|
||||||
|
|
||||||
|
if ( (adc ~= nil) and (words.briPercent ~= nil) ) then
|
||||||
|
local per = math.floor(100*adc.read(0)/1000)
|
||||||
|
words.briPercent = tonumber( ((words.briPercent * 4) + per) / 5)
|
||||||
|
print("Minutes : " .. tostring(minutes) .. " bright: " .. tostring(words.briPercent) .. "% current: " .. tostring(per) .. "%")
|
||||||
|
data.colorFg = string.char(string.byte(colorFg,1) * briPercent / 100, string.byte(colorFg,2) * briPercent / 100, string.byte(colorFg,3) * briPercent / 100)
|
||||||
|
data.colorMin1 = string.char(string.byte(colorMin1,1) * briPercent / 100, string.byte(colorMin1,2) * briPercent / 100, string.byte(colorMin1,3) * briPercent / 100)
|
||||||
|
data.colorMin2 = string.char(string.byte(colorMin2,1) * briPercent / 100, string.byte(colorMin2,2) * briPercent / 100, string.byte(colorMin2,3) * briPercent / 100)
|
||||||
|
data.colorMin3 = string.char(string.byte(colorMin3,1) * briPercent / 100, string.byte(colorMin3,2) * briPercent / 100, string.byte(colorMin3,3) * briPercent / 100)
|
||||||
|
data.colorMin4 = string.char(string.byte(colorMin4,1) * briPercent / 100, string.byte(colorMin4,2) * briPercent / 100, string.byte(colorMin4,3) * briPercent / 100)
|
||||||
else
|
else
|
||||||
-- devide by five (Minute 0, Minute 1 to Minute 4 takes the last chars)
|
-- devide by five (Minute 0, Minute 1 to Minute 4 takes the last chars)
|
||||||
print("Minutes : " .. tostring(minutes) .. " Char minutes: " .. tostring(data.charsPerMinute) )
|
data.colorFg=colorFg
|
||||||
data.colorFg=colorForground
|
|
||||||
data.colorMin1=colorMin1
|
data.colorMin1=colorMin1
|
||||||
data.colorMin2=colorMin2
|
data.colorMin2=colorMin2
|
||||||
data.colorMin3=colorMin3
|
data.colorMin3=colorMin3
|
||||||
data.colorMin4=colorMin4
|
data.colorMin4=colorMin4
|
||||||
end
|
end
|
||||||
data.words=words
|
|
||||||
data.drawnCharacters=0
|
data.drawnCharacters=0
|
||||||
data.drawnWords=0
|
|
||||||
data.amountWords=display_countwords_de(words)
|
|
||||||
local charsPerLine=11
|
local charsPerLine=11
|
||||||
|
|
||||||
-- Space / background has no color by default
|
-- Space / background has no color by default
|
||||||
local space=string.char(0,0,0)
|
local space=string.char(0,0,0)
|
||||||
-- set FG to fix value:
|
|
||||||
colorFg = string.char(255,255,255)
|
if (colorBg ~= nil) then
|
||||||
|
space = colorBg
|
||||||
|
end
|
||||||
|
|
||||||
-- Set the foreground color as the default color
|
-- Set the foreground color as the default color
|
||||||
local buf=colorFg
|
local buf=data.colorFg
|
||||||
|
local line=space
|
||||||
-- line 1----------------------------------------------
|
-- line 1----------------------------------------------
|
||||||
if (words.it==1) then
|
if (words.it==1) then
|
||||||
buf=drawLEDs(data,2) -- ES
|
buf=drawLEDs(data,2) -- ES
|
||||||
@ -136,120 +135,158 @@ if (words.fiveMin== 1) then
|
|||||||
buf= buf .. space:rep(4)
|
buf= buf .. space:rep(4)
|
||||||
end
|
end
|
||||||
-- line 2-- even row (so inverted) --------------------
|
-- line 2-- even row (so inverted) --------------------
|
||||||
if (words.twenty == 1) then
|
|
||||||
buf= buf .. drawLEDs(data,7,true) -- ZWANZIG
|
|
||||||
else
|
|
||||||
buf= buf .. space:rep(7)
|
|
||||||
end
|
|
||||||
if (words.tenMin == 1) then
|
if (words.tenMin == 1) then
|
||||||
buf= buf .. drawLEDs(data,4,true) -- ZEHN
|
line= drawLEDs(data,4) -- ZEHN
|
||||||
else
|
else
|
||||||
buf= buf .. space:rep(4)
|
line= space:rep(4)
|
||||||
end
|
end
|
||||||
|
if (words.twenty == 1) then
|
||||||
|
line= line .. drawLEDs(data,7) -- ZWANZIG
|
||||||
|
else
|
||||||
|
line= line .. space:rep(7)
|
||||||
|
end
|
||||||
|
-- fill, the buffer
|
||||||
|
for i = 0,10 do
|
||||||
|
buf = buf .. line:sub((11-i)*3-2,(11-i)*3)
|
||||||
|
end
|
||||||
|
|
||||||
-- line3----------------------------------------------
|
-- line3----------------------------------------------
|
||||||
if (words.threequater == 1) then
|
if (words.threequater == 1) then
|
||||||
buf= buf .. drawLEDs(data,11) -- Dreiviertel
|
line= drawLEDs(data,11) -- Dreiviertel
|
||||||
elseif (words.quater == 1) then
|
elseif (words.quater == 1) then
|
||||||
buf= buf .. space:rep(4)
|
line= space:rep(4)
|
||||||
buf= buf .. drawLEDs(data,7) -- VIERTEL
|
line= line .. drawLEDs(data,7) -- VIERTEL
|
||||||
else
|
else
|
||||||
buf= buf .. space:rep(11)
|
line= space:rep(11)
|
||||||
end
|
end
|
||||||
|
-- fill, the buffer
|
||||||
|
buf = buf .. line
|
||||||
--line 4-------- even row (so inverted) -------------
|
--line 4-------- even row (so inverted) -------------
|
||||||
if (words.before == 1) then
|
|
||||||
buf=buf .. space:rep(2)
|
|
||||||
buf= buf .. drawLEDs(data,3,true) -- VOR
|
|
||||||
else
|
|
||||||
buf= buf .. space:rep(5)
|
|
||||||
end
|
|
||||||
if (words.after == 1) then
|
if (words.after == 1) then
|
||||||
buf= buf .. drawLEDs(data,4,true) -- NACH
|
line= space:rep(2) -- TG
|
||||||
buf= buf .. space:rep(2) -- TG
|
line= line .. drawLEDs(data,4) -- NACH
|
||||||
else
|
else
|
||||||
buf= buf .. space:rep(6)
|
line= space:rep(6)
|
||||||
|
end
|
||||||
|
if (words.before == 1) then
|
||||||
|
line= line .. drawLEDs(data,3) -- VOR
|
||||||
|
line= line .. space:rep(2)
|
||||||
|
else
|
||||||
|
line= line .. space:rep(5)
|
||||||
|
end
|
||||||
|
if (invertRows == true) then
|
||||||
|
buf = buf .. line
|
||||||
|
else
|
||||||
|
for i = 0,10 do
|
||||||
|
buf = buf .. line:sub((11-i)*3-2,(11-i)*3)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
if (words.half == 1) then
|
if (words.half == 1) then
|
||||||
buf= buf .. drawLEDs(data,4) -- HALB
|
line= drawLEDs(data,4) -- HALB
|
||||||
buf= buf .. space:rep(1) -- X
|
line= line .. space:rep(1) -- X
|
||||||
else
|
else
|
||||||
buf= buf .. space:rep(5)
|
line= space:rep(5)
|
||||||
end
|
end
|
||||||
if (words.twelve == 1) then
|
if (words.twelve == 1) then
|
||||||
buf= buf .. drawLEDs(data,5) -- ZWOELF
|
line= line .. drawLEDs(data,5) -- ZWOELF
|
||||||
buf= buf .. space:rep(1) -- P
|
line= line .. space:rep(1) -- P
|
||||||
else
|
else
|
||||||
buf= buf .. space:rep(6)
|
line= line .. space:rep(6)
|
||||||
|
end
|
||||||
|
if (invertRows == true) then
|
||||||
|
for i = 0,10 do
|
||||||
|
buf = buf .. line:sub((11-i)*3-2,(11-i)*3)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
buf=buf .. line
|
||||||
end
|
end
|
||||||
------------even row (so inverted) ---------------------
|
------------even row (so inverted) ---------------------
|
||||||
if (words.seven == 1) then
|
if (words.seven == 1) then
|
||||||
buf= buf .. drawLEDs(data,6,true) -- SIEBEN
|
line= space:rep(5)
|
||||||
buf= buf .. space:rep(5)
|
line= line .. drawLEDs(data,6) -- SIEBEN
|
||||||
elseif (words.oneLong == 1) then
|
elseif (words.oneLong == 1) then
|
||||||
buf= buf .. space:rep(5)
|
line= space:rep(2)
|
||||||
buf= buf .. drawLEDs(data,4,true) -- EINS
|
line= line .. drawLEDs(data,4) -- EINS
|
||||||
buf= buf .. space:rep(2)
|
line= line .. space:rep(5)
|
||||||
elseif (words.one == 1) then
|
elseif (words.one == 1) then
|
||||||
buf= buf .. space:rep(6)
|
line= space:rep(2)
|
||||||
buf= buf .. drawLEDs(data,3,true) -- EIN
|
line= line .. drawLEDs(data,3) -- EIN
|
||||||
buf= buf .. space:rep(2)
|
line= line .. space:rep(6)
|
||||||
elseif (words.two == 1) then
|
elseif (words.two == 1) then
|
||||||
buf= buf .. space:rep(7)
|
line= drawLEDs(data,4) -- ZWEI
|
||||||
buf= buf .. drawLEDs(data,4,true) -- ZWEI
|
line= line .. space:rep(7)
|
||||||
else
|
else
|
||||||
buf= buf .. space:rep(11)
|
line= space:rep(11)
|
||||||
|
end
|
||||||
|
if (invertRows == true) then
|
||||||
|
buf = buf .. line
|
||||||
|
else
|
||||||
|
for i = 0,10 do
|
||||||
|
buf = buf .. line:sub((11-i)*3-2,(11-i)*3)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
if (words.three == 1) then
|
if (words.three == 1) then
|
||||||
buf= buf .. space:rep(1)
|
line= space:rep(1)
|
||||||
buf= buf .. drawLEDs(data,4) -- DREI
|
line= line .. drawLEDs(data,4) -- DREI
|
||||||
buf= buf .. space:rep(6)
|
line= line .. space:rep(6)
|
||||||
elseif (words.five == 1) then
|
elseif (words.five == 1) then
|
||||||
buf= buf .. space:rep(7)
|
line= space:rep(7)
|
||||||
buf= buf .. drawLEDs(data,4) -- FUENF
|
line= line .. drawLEDs(data,4) -- FUENF
|
||||||
else
|
else
|
||||||
buf= buf .. space:rep(11)
|
line= space:rep(11)
|
||||||
end
|
end
|
||||||
|
buf = buf .. line
|
||||||
------------even row (so inverted) ---------------------
|
------------even row (so inverted) ---------------------
|
||||||
if (words.four == 1) then
|
if (words.four == 1) then
|
||||||
buf= buf .. drawLEDs(data,4,true) -- VIER
|
line= space:rep(7)
|
||||||
buf= buf .. space:rep(7)
|
line= line .. drawLEDs(data,4) -- VIER
|
||||||
elseif (words.nine == 1) then
|
elseif (words.nine == 1) then
|
||||||
buf= buf .. space:rep(4)
|
line= space:rep(3)
|
||||||
buf= buf .. drawLEDs(data,4,true) -- NEUN
|
line= line .. drawLEDs(data,4) -- NEUN
|
||||||
buf= buf .. space:rep(3)
|
line= line .. space:rep(4)
|
||||||
elseif (words.eleven == 1) then
|
elseif (words.eleven == 1) then
|
||||||
buf= buf .. space:rep(8)
|
line= drawLEDs(data,3) -- ELEVEN
|
||||||
buf= buf .. drawLEDs(data,3,true) -- ELEVEN
|
line= line .. space:rep(8)
|
||||||
else
|
else
|
||||||
buf= buf .. space:rep(11)
|
line= space:rep(11)
|
||||||
|
end
|
||||||
|
|
||||||
|
for i = 0,10 do
|
||||||
|
buf = buf .. line:sub((11-i)*3-2,(11-i)*3)
|
||||||
end
|
end
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
if (words.eight == 1) then
|
if (words.eight == 1) then
|
||||||
buf= buf .. space:rep(1)
|
line= space:rep(1)
|
||||||
buf= buf .. drawLEDs(data,4) -- ACHT
|
line= line .. drawLEDs(data,4) -- ACHT
|
||||||
buf= buf .. space:rep(6)
|
line= line .. space:rep(6)
|
||||||
elseif (words.ten == 1) then
|
elseif (words.ten == 1) then
|
||||||
buf= buf .. space:rep(5)
|
line= space:rep(5)
|
||||||
buf= buf .. drawLEDs(data,4) -- ZEHN
|
line= line .. drawLEDs(data,4) -- ZEHN
|
||||||
buf= buf .. space:rep(2)
|
line= line .. space:rep(2)
|
||||||
else
|
else
|
||||||
buf= buf .. space:rep(11)
|
line= space:rep(11)
|
||||||
end
|
end
|
||||||
|
buf = buf .. line
|
||||||
------------even row (so inverted) ---------------------
|
------------even row (so inverted) ---------------------
|
||||||
if (words.clock == 1) then
|
|
||||||
buf= buf .. drawLEDs(data,3,true) -- UHR
|
|
||||||
else
|
|
||||||
buf= buf .. space:rep(3)
|
|
||||||
end
|
|
||||||
if (words.six == 1) then
|
if (words.six == 1) then
|
||||||
buf= buf .. space:rep(2)
|
line= space:rep(1)
|
||||||
buf= buf .. drawLEDs(data,5,true) -- SECHS
|
line= line .. drawLEDs(data,5) -- SECHS
|
||||||
buf= buf .. space:rep(1)
|
line= line .. space:rep(2)
|
||||||
else
|
else
|
||||||
buf= buf .. space:rep(8)
|
line= space:rep(8)
|
||||||
|
end
|
||||||
|
if (words.clock == 1) then
|
||||||
|
line= line .. drawLEDs(data,3) -- UHR
|
||||||
|
else
|
||||||
|
line= line .. space:rep(3)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
for i = 0,10 do
|
||||||
|
buf = buf .. line:sub((11-i)*3-2,(11-i)*3)
|
||||||
|
end
|
||||||
|
------ Minutes -----------
|
||||||
if (words.min1 == 1) then
|
if (words.min1 == 1) then
|
||||||
buf= buf .. colorFg
|
buf= buf .. colorFg
|
||||||
else
|
else
|
||||||
@ -271,7 +308,79 @@ if (words.fiveMin== 1) then
|
|||||||
buf= buf .. space:rep(1)
|
buf= buf .. space:rep(1)
|
||||||
end
|
end
|
||||||
collectgarbage()
|
collectgarbage()
|
||||||
|
|
||||||
return buf
|
return buf
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Count amount of characters to display
|
||||||
|
local countChars = function(words)
|
||||||
|
local characters = 0
|
||||||
|
for key,value in pairs(words) do
|
||||||
|
if (value > 0) then
|
||||||
|
if (key == "it") then
|
||||||
|
characters = characters + 2
|
||||||
|
elseif (key == "is") then
|
||||||
|
characters = characters + 3
|
||||||
|
elseif (key == "fiveMin") then
|
||||||
|
characters = characters + 4
|
||||||
|
elseif (key == "tenMin") then
|
||||||
|
characters = characters + 4
|
||||||
|
elseif (key == "after") then
|
||||||
|
characters = characters + 4
|
||||||
|
elseif (key == "before") then
|
||||||
|
characters = characters + 3
|
||||||
|
elseif (key == "threeHour") then
|
||||||
|
characters = characters + 4
|
||||||
|
elseif (key == "quater") then
|
||||||
|
characters = characters + 7
|
||||||
|
elseif (key == "threequater") then
|
||||||
|
characters = characters + 11
|
||||||
|
elseif (key == "half") then
|
||||||
|
characters = characters + 4
|
||||||
|
elseif (key == "one") then
|
||||||
|
characters = characters + 3
|
||||||
|
elseif (key == "oneLong") then
|
||||||
|
characters = characters + 4
|
||||||
|
elseif (key == "two") then
|
||||||
|
characters = characters + 4
|
||||||
|
elseif (key == "three") then
|
||||||
|
characters = characters + 4
|
||||||
|
elseif (key == "four") then
|
||||||
|
characters = characters + 4
|
||||||
|
elseif (key == "five") then
|
||||||
|
characters = characters + 4
|
||||||
|
elseif (key == "six") then
|
||||||
|
characters = characters + 4
|
||||||
|
elseif (key == "seven") then
|
||||||
|
characters = characters + 6
|
||||||
|
elseif (key == "eight") then
|
||||||
|
characters = characters + 4
|
||||||
|
elseif (key == "nine") then
|
||||||
|
characters = characters + 4
|
||||||
|
elseif (key == "ten") then
|
||||||
|
characters = characters + 4
|
||||||
|
elseif (key == "eleven") then
|
||||||
|
characters = characters + 3
|
||||||
|
elseif (key == "twelve") then
|
||||||
|
characters = characters + 5
|
||||||
|
elseif (key == "twenty") then
|
||||||
|
characters = characters + 7
|
||||||
|
elseif (key == "clock") then
|
||||||
|
characters = characters + 3
|
||||||
|
elseif (key == "sr_nc") then
|
||||||
|
characters = characters + 3
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return characters
|
||||||
|
end
|
||||||
|
|
||||||
|
M = {
|
||||||
|
generateLEDs = generateLEDs,
|
||||||
|
round = round,
|
||||||
|
drawLEDs = drawLEDs,
|
||||||
|
updateColor = updateColor,
|
||||||
|
data = data,
|
||||||
|
countChars = countChars
|
||||||
|
}
|
||||||
|
end
|
||||||
|
displayword = M
|
||||||
|
22
index.html
22
index.html
@ -1,22 +0,0 @@
|
|||||||
<html>
|
|
||||||
<head><title>WordClock Setup Page</title>
|
|
||||||
</head><body>
|
|
||||||
<h1>Welcome to the WordClock</h1>
|
|
||||||
<form action="" method="POST">
|
|
||||||
<table>
|
|
||||||
<tr><th>WIFI-SSID</b></th><td><input name="ssid" value="${SSID}"></td><td /></tr>
|
|
||||||
<tr><th>WIFI-Password</th><td><input name="password"></td><td /></tr>
|
|
||||||
<tr><th>SNTP Server</th><td><input name="sntpserver" value="${sntpserverhostname}" ></td><td>ntp server to sync the time</tr>
|
|
||||||
<tr><th>Offset to UTC time</th><td><input type="number" name="timezoneoffset" value="${TIMEZONEOFFSET}"></td><td>Define the offset to UTC time in hours. E.g +1</tr>
|
|
||||||
<tr><th>Color</th><td><input type="color" name="fcolor" value="${HEXCOLOR}"></td><td /></tr>
|
|
||||||
<tr><th>1. Minute Color</th><td><input type=\"color\" name=\"colorMin1\" value=\"" .. hexColor1 .. "\"></td><td /></tr>"
|
|
||||||
<tr><th>2. Minute Color</th><td><input type=\"color\" name=\"colorMin2\" value=\"" .. hexColor2 .. "\"></td><td /></tr>"
|
|
||||||
<tr><th>3. Minute Color</th><td><input type=\"color\" name=\"colorMin3\" value=\"" .. hexColor3 .. "\"></td><td /></tr>"
|
|
||||||
<tr><th>4. Minute Color</th><td><input type=\"color\" name=\"colorMin4\" value=\"" .. hexColor4 .. "\"></td><td /></tr>"
|
|
||||||
<tr><th>Three quater</th><td><input type="checkbox" name="threequater" ${THREEQUARTERCHECKED}></td><td>Dreiviertel Joa/nei</td></tr>
|
|
||||||
<tr><th>ColorMode</th><td><input type="checkbox" name="colorMode" ${COLORMODECHECKED}></td><td>If checked, words are dark, rest is colored</td></tr>
|
|
||||||
<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>
|
|
||||||
<tr><td colspan="3"><div align="center"><input type="submit" name="action" value="Reboot"></div></td></tr>
|
|
||||||
</table></form>
|
|
||||||
$ADDITIONAL_LINE
|
|
||||||
</body></html>
|
|
6
init.lua
6
init.lua
@ -36,8 +36,10 @@ end
|
|||||||
function mydofile(mod)
|
function mydofile(mod)
|
||||||
if (file.open(mod .. ".lua")) then
|
if (file.open(mod .. ".lua")) then
|
||||||
dofile( mod .. ".lua")
|
dofile( mod .. ".lua")
|
||||||
else
|
elseif (file.open(mod .. ".lc")) then
|
||||||
dofile(mod .. ".lc")
|
dofile(mod .. ".lc")
|
||||||
|
else
|
||||||
|
print("Error: " .. mod)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -49,7 +51,7 @@ tmr.alarm(1, 5000, 0, function()
|
|||||||
(file.open("timecore.lua")) or
|
(file.open("timecore.lua")) or
|
||||||
(file.open("wordclock.lua")) or
|
(file.open("wordclock.lua")) or
|
||||||
(file.open("displayword.lua")) or
|
(file.open("displayword.lua")) or
|
||||||
(file.open("webserver.lua"))
|
(file.open("telnet.lua"))
|
||||||
) then
|
) then
|
||||||
c = string.char(0,128,0)
|
c = string.char(0,128,0)
|
||||||
w = string.char(0,0,0)
|
w = string.char(0,0,0)
|
||||||
|
161
main.lua
161
main.lua
@ -1,5 +1,7 @@
|
|||||||
-- Main Module
|
-- Main Module
|
||||||
|
|
||||||
|
displayword = {}
|
||||||
|
|
||||||
function startSetupMode()
|
function startSetupMode()
|
||||||
tmr.stop(0)
|
tmr.stop(0)
|
||||||
tmr.stop(1)
|
tmr.stop(1)
|
||||||
@ -29,53 +31,62 @@ end
|
|||||||
|
|
||||||
|
|
||||||
function syncTimeFromInternet()
|
function syncTimeFromInternet()
|
||||||
--ptbtime1.ptb.de
|
if (syncRunning == nil) then
|
||||||
|
syncRunning=true
|
||||||
sntp.sync(sntpserverhostname,
|
sntp.sync(sntpserverhostname,
|
||||||
function(sec,usec,server)
|
function(sec,usec,server)
|
||||||
print('sync', sec, usec, server)
|
print('sync', sec, usec, server)
|
||||||
displayTime()
|
displayTime()
|
||||||
|
syncRunning=nil
|
||||||
end,
|
end,
|
||||||
function()
|
function()
|
||||||
print('failed!')
|
print('failed!')
|
||||||
|
syncRunning=nil
|
||||||
end
|
end
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
briPercent = 50
|
||||||
function displayTime()
|
function displayTime()
|
||||||
sec, usec = rtctime.get()
|
local sec, usec = rtctime.get()
|
||||||
-- Handle lazy programmer:
|
-- Handle lazy programmer:
|
||||||
if (timezoneoffset == nil) then
|
if (timezoneoffset == nil) then
|
||||||
timezoneoffset=0
|
timezoneoffset=0
|
||||||
end
|
end
|
||||||
time = getTime(sec, timezoneoffset)
|
local time = getTime(sec, timezoneoffset)
|
||||||
words = display_timestat(time.hour, time.minute)
|
local words = display_timestat(time.hour, time.minute)
|
||||||
|
if ((dim ~= nil) and (dim == "on")) then
|
||||||
local charactersOfTime = display_countcharacters_de(words)
|
words.briPercent=briPercent
|
||||||
local wordsOfTime = display_countwords_de(words)
|
if (words.briPercent ~= nil and words.briPercent < 3) then
|
||||||
ledBuf = generateLEDs(words, color, color1, color2, color3, color4,
|
words.briPercent=3
|
||||||
charactersOfTime)
|
|
||||||
|
|
||||||
print("Local time : " .. time.year .. "-" .. time.month .. "-" .. time.day .. " " .. time.hour .. ":" .. time.minute .. ":" .. time.second .. " in " .. charactersOfTime .. " chars " .. wordsOfTime .. " words")
|
|
||||||
|
|
||||||
--if lines 4 to 6 are inverted due to hardware-fuckup, unfuck it here
|
|
||||||
if ((inv46 ~= nil) and (inv46 == "on")) then
|
|
||||||
tempstring = ledBuf:sub(1,99) -- first 33 leds
|
|
||||||
rowend = {44,55,66}
|
|
||||||
for _, startled in ipairs(rowend) do
|
|
||||||
for i = 0,10 do
|
|
||||||
tempstring = tempstring .. ledBuf:sub((startled-i)*3-2,(startled-i)*3)
|
|
||||||
end
|
end
|
||||||
end
|
|
||||||
tempstring = tempstring .. ledBuf:sub((67*3)-2,ledBuf:len())
|
|
||||||
ws2812.write(tempstring)
|
|
||||||
tempstring=nil
|
|
||||||
else
|
else
|
||||||
ws2812.write(ledBuf)
|
words.briPercent=nil
|
||||||
ledBuf=nil
|
end
|
||||||
|
dofile("displayword.lc")
|
||||||
|
if (displayword ~= nil) then
|
||||||
|
--if lines 4 to 6 are inverted due to hardware-fuckup, unfuck it here
|
||||||
|
local invertRows=false
|
||||||
|
if ((inv46 ~= nil) and (inv46 == "on")) then
|
||||||
|
invertRows=true
|
||||||
|
end
|
||||||
|
local characters = displayword.countChars(words)
|
||||||
|
ledBuf = displayword.generateLEDs(words, colorBg, color, color1, color2, color3, color4, invertRows, characters)
|
||||||
|
end
|
||||||
|
displayword = nil
|
||||||
|
if (ledBuf ~= nil) then
|
||||||
|
ws2812.write(ledBuf)
|
||||||
|
else
|
||||||
|
if ((colorBg ~= nil) and (color ~= nil)) then
|
||||||
|
ws2812.write(colorBg:rep(107) .. color:rep(3))
|
||||||
|
else
|
||||||
|
local space=string.char(0,0,0)
|
||||||
|
-- set FG to fix value:
|
||||||
|
colorFg = string.char(255,0,0)
|
||||||
|
ws2812.write(space:rep(107) .. colorFg:rep(3))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- Used for debugging
|
-- Used for debugging
|
||||||
if (clockdebug ~= nil) then
|
if (clockdebug ~= nil) then
|
||||||
for key,value in pairs(words) do
|
for key,value in pairs(words) do
|
||||||
@ -85,7 +96,7 @@ function displayTime()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- cleanup
|
-- cleanup
|
||||||
|
briPercent=words.briPercent
|
||||||
words=nil
|
words=nil
|
||||||
time=nil
|
time=nil
|
||||||
collectgarbage()
|
collectgarbage()
|
||||||
@ -97,18 +108,41 @@ function normalOperation()
|
|||||||
-- Color is defined as GREEN, RED, BLUE
|
-- Color is defined as GREEN, RED, BLUE
|
||||||
color=string.char(0,0,250)
|
color=string.char(0,0,250)
|
||||||
end
|
end
|
||||||
|
print("Fg Color: " .. tostring(string.byte(color,1)) .. "x" .. tostring(string.byte(color,2)) .. "x" .. tostring(string.byte(color,3)) )
|
||||||
|
|
||||||
connect_counter=0
|
connect_counter=0
|
||||||
-- Wait to be connect to the WiFi access point.
|
-- Wait to be connect to the WiFi access point.
|
||||||
tmr.alarm(0, 1000, 1, function()
|
tmr.alarm(0, 500, 1, function()
|
||||||
connect_counter=connect_counter+1
|
connect_counter=connect_counter+1
|
||||||
if wifi.sta.status() ~= 5 then
|
if wifi.sta.status() ~= 5 then
|
||||||
print(connect_counter .. "/60 Connecting to AP...")
|
print(connect_counter .. "/60 Connecting to AP...")
|
||||||
if (connect_counter % 2 == 0) then
|
if (connect_counter % 5 ~= 4) then
|
||||||
local wlanColor=string.char((connect_counter % 6)*20,(connect_counter % 5)*20,(connect_counter % 3)*20)
|
local wlanColor=string.char((connect_counter % 6)*20,(connect_counter % 5)*20,(connect_counter % 3)*20)
|
||||||
local space=string.char(0,0,0)
|
local space=string.char(0,0,0)
|
||||||
local buf=space:rep(6) .. wlanColor .. space:rep(4)
|
local buf=space:rep(6)
|
||||||
buf= buf .. space:rep(3) .. wlanColor:rep(3)
|
if ((connect_counter % 5) >= 1) then
|
||||||
|
buf = buf .. wlanColor
|
||||||
|
else
|
||||||
|
buf = buf .. space
|
||||||
|
end
|
||||||
|
buf = buf .. space:rep(4)
|
||||||
|
buf= buf .. space:rep(3)
|
||||||
|
if ((connect_counter % 5) >= 3) then
|
||||||
|
buf = buf .. wlanColor
|
||||||
|
else
|
||||||
|
buf = buf .. space
|
||||||
|
end
|
||||||
|
if ((connect_counter % 5) >= 2) then
|
||||||
|
buf = buf .. wlanColor
|
||||||
|
else
|
||||||
|
buf = buf .. space
|
||||||
|
end
|
||||||
|
if ((connect_counter % 5) >= 0) then
|
||||||
|
buf = buf .. wlanColor
|
||||||
|
else
|
||||||
|
buf = buf .. space
|
||||||
|
end
|
||||||
|
buf = buf .. space:rep(100)
|
||||||
ws2812.write(buf)
|
ws2812.write(buf)
|
||||||
else
|
else
|
||||||
ws2812.write(string.char(0,0,0):rep(114))
|
ws2812.write(string.char(0,0,0):rep(114))
|
||||||
@ -118,23 +152,40 @@ function normalOperation()
|
|||||||
print('IP: ',wifi.sta.getip())
|
print('IP: ',wifi.sta.getip())
|
||||||
-- Here the WLAN is found, and something is done
|
-- Here the WLAN is found, and something is done
|
||||||
print("Solving dependencies")
|
print("Solving dependencies")
|
||||||
local dependModules = { "timecore" , "wordclock", "displayword" }
|
local dependModules = { "timecore" , "wordclock", "telnet", "mqtt" }
|
||||||
for _,mod in pairs(dependModules) do
|
for _,mod in pairs(dependModules) do
|
||||||
print("Loading " .. mod)
|
print("Loading " .. mod)
|
||||||
mydofile(mod)
|
mydofile(mod)
|
||||||
end
|
end
|
||||||
|
|
||||||
tmr.alarm(2, 500, 0 ,function()
|
setupCounter=5
|
||||||
|
tmr.alarm(1, 5000, 1 ,function()
|
||||||
|
if (setupCounter > 4) then
|
||||||
syncTimeFromInternet()
|
syncTimeFromInternet()
|
||||||
end)
|
setupCounter=setupCounter-1
|
||||||
tmr.alarm(3, 2000, 0 ,function()
|
elseif (setupCounter > 3) then
|
||||||
print("Start webserver...")
|
if (startTelnetServer ~= nil) then
|
||||||
mydofile("webserver")
|
startTelnetServer()
|
||||||
startWebServer()
|
else
|
||||||
end)
|
print("NO Telent found")
|
||||||
|
end
|
||||||
|
setupCounter=setupCounter-1
|
||||||
|
elseif (setupCounter > 2) then
|
||||||
|
if (startMqttClient ~= nil) then
|
||||||
|
startMqttClient()
|
||||||
|
else
|
||||||
|
print("NO Mqtt found")
|
||||||
|
end
|
||||||
|
setupCounter=setupCounter-1
|
||||||
|
else
|
||||||
displayTime()
|
displayTime()
|
||||||
-- Start the time Thread
|
end
|
||||||
tmr.alarm(1, 20000, 1 ,function()
|
collectgarbage()
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- sync the time every 5 minutes
|
||||||
|
tmr.alarm(2, 300003, 1 ,function()
|
||||||
|
syncTimeFromInternet()
|
||||||
displayTime()
|
displayTime()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
@ -148,15 +199,37 @@ function normalOperation()
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function stopWordclock()
|
||||||
|
for i=0,5,1 do tmr.stop(i) end
|
||||||
|
end
|
||||||
|
|
||||||
-------------------main program -----------------------------
|
-------------------main program -----------------------------
|
||||||
ws2812.init() -- WS2812 LEDs initialized on GPIO2
|
ws2812.init() -- WS2812 LEDs initialized on GPIO2
|
||||||
|
|
||||||
if ( file.open("config.lua") ) then
|
if ( file.open("config.lua") ) then
|
||||||
--- Normal operation
|
--- Normal operation
|
||||||
wifi.setmode(wifi.STATION)
|
wifi.setmode(wifi.STATION)
|
||||||
dofile("config.lua")
|
mydofile("config")
|
||||||
normalOperation()
|
normalOperation()
|
||||||
else
|
else
|
||||||
-- Logic for inital setup
|
-- Logic for inital setup
|
||||||
startSetupMode()
|
startSetupMode()
|
||||||
end
|
end
|
||||||
|
----------- button ---------
|
||||||
|
gpio.mode(3, gpio.INPUT)
|
||||||
|
btnCounter=0
|
||||||
|
-- Start the time Thread
|
||||||
|
tmr.alarm(4, 500, 1 ,function()
|
||||||
|
if (gpio.read(3) == 0) then
|
||||||
|
tmr.stop(1) -- stop the LED thread
|
||||||
|
print("Button pressed " .. tostring(btnCounter))
|
||||||
|
btnCounter = btnCounter + 5
|
||||||
|
local ledBuf= string.char(128,0,0):rep(btnCounter) .. string.char(0,0,0):rep(110 - btnCounter)
|
||||||
|
ws2812.write(ledBuf)
|
||||||
|
if (btnCounter >= 110) then
|
||||||
|
file.remove("config.lua")
|
||||||
|
file.remove("config.lc")
|
||||||
|
node.restart()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
76
mqtt.lua
Normal file
76
mqtt.lua
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
-- Global variable
|
||||||
|
m=nil
|
||||||
|
mqttConnected = false
|
||||||
|
|
||||||
|
-- MQTT extension
|
||||||
|
function registerMqtt()
|
||||||
|
m = mqtt.Client("wordclock", 120)
|
||||||
|
-- on publish message receive event
|
||||||
|
m:on("message", function(client, topic, data)
|
||||||
|
print(topic .. ":" )
|
||||||
|
if data ~= nil then
|
||||||
|
print(data)
|
||||||
|
if (data == "ON") then
|
||||||
|
briPercent=100
|
||||||
|
m:publish(mqttPrefix .. "/clock", "ON", 0, 0)
|
||||||
|
elseif (data == "OFF") then
|
||||||
|
briPercent=0
|
||||||
|
m:publish(mqttPrefix .. "/clock", "OFF", 0, 0)
|
||||||
|
elseif (data:sub(1,1) == "#" and data:len() == 7) then
|
||||||
|
red = tonumber(data:sub(2,3), 16)
|
||||||
|
green = tonumber(data:sub(4,5), 16)
|
||||||
|
blue = tonumber(data:sub(6,7), 16)
|
||||||
|
colorBg=string.char(red, green, blue)
|
||||||
|
print("Updated BG: " .. tostring(red) .. "," .. tostring(green) .. "," .. tostring(blue) )
|
||||||
|
if (displayTime~= nil) then
|
||||||
|
displayTime()
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if (tonumber(data) >= 0 and tonumber(data) <= 100) then
|
||||||
|
briPercent=tonumber(data)
|
||||||
|
m:publish(mqttPrefix .. "/clock", tostring(data), 0, 0)
|
||||||
|
else
|
||||||
|
print "Unknown MQTT command"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
m:connect(mqttServer, 1883, 0, function(client)
|
||||||
|
print("MQTT is connected")
|
||||||
|
mqttConnected = true
|
||||||
|
-- subscribe topic with qos = 0
|
||||||
|
client:subscribe(mqttPrefix .. "/command", 0)
|
||||||
|
tmr.alarm(3, 500, 0, function()
|
||||||
|
-- publish a message with data = hello, QoS = 0, retain = 0
|
||||||
|
client:publish(mqttPrefix .. "/ip", tostring(wifi.sta.getip()), 0, 0)
|
||||||
|
end)
|
||||||
|
end,
|
||||||
|
function(client, reason)
|
||||||
|
print("failed reason: " .. reason)
|
||||||
|
mqttConnected = false
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function startMqttClient()
|
||||||
|
if (mqttServer ~= nil and mqttPrefix ~= nil) then
|
||||||
|
registerMqtt()
|
||||||
|
print "Started MQTT client"
|
||||||
|
oldBrightness=0
|
||||||
|
oldTemp=0
|
||||||
|
tmr.alarm(5, 5001, 1 ,function()
|
||||||
|
if (mqttConnected) then
|
||||||
|
local temp = nil
|
||||||
|
if (t ~= nil) then
|
||||||
|
temp=readTemp()
|
||||||
|
end
|
||||||
|
if (oldBrightness ~= briPercent) then
|
||||||
|
m:publish(mqttPrefix .. "/brightness", tostring(briPercent), 0, 0)
|
||||||
|
else
|
||||||
|
m:publish(mqttPrefix .. "/heap", tostring(node.heap()), 0, 0)
|
||||||
|
end
|
||||||
|
oldBrightness = briPercent
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
4078
os/esptool.py
4078
os/esptool.py
File diff suppressed because it is too large
Load Diff
13
os/flash.sh
13
os/flash.sh
@ -4,7 +4,7 @@ if [ $# -ne 1 ]; then
|
|||||||
echo "One parameter required: the device of the serial interface"
|
echo "One parameter required: the device of the serial interface"
|
||||||
echo "$0 <device>"
|
echo "$0 <device>"
|
||||||
echo "e.g.:"
|
echo "e.g.:"
|
||||||
echo "$0 ttyUSB0"
|
echo "$0 /dev/ttyUSB0"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -14,8 +14,8 @@ DEVICE=$1
|
|||||||
|
|
||||||
# check the serial connection
|
# check the serial connection
|
||||||
|
|
||||||
if [ ! -c /dev/$DEVICE ]; then
|
if [ ! -c $DEVICE ]; then
|
||||||
echo "/dev/$DEVICE does not exist"
|
echo "$DEVICE does not exist"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -24,13 +24,12 @@ if [ ! -f esptool.py ]; then
|
|||||||
echo "esptool.py"
|
echo "esptool.py"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
python3 esptool.py --port $DEVICE $BAUD read_mac
|
||||||
./esptool.py --port /dev/$DEVICE $BAUD read_mac
|
|
||||||
|
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "Error reading the MAC -> set the device into the bootloader!"
|
echo "Error reading the MAC -> set the device into the bootloader!"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "Flashing the new"
|
echo "Flashing the new"
|
||||||
#./esptool.py --port /dev/$DEVICE $BAUD write_flash -fm dio 0x00000 nodemcu2.bin
|
#python3 esptool.py --port $DEVICE $BAUD write_flash -fm dio 0x00000 nodemcu2.bin
|
||||||
./esptool.py --port /dev/$DEVICE $BAUD write_flash -fm dio 0x00000 0x00000.bin 0x10000 0x10000.bin 0x3fc000 esp_init_data_default.bin 0x07e000 blank.bin 0x3fe000 blank.bin
|
python3 esptool.py --port $DEVICE write_flash -fm dio 0x00000 0x00000.bin 0x10000 0x10000.bin 0x3fc000 esp_init_data_default.bin
|
||||||
|
@ -1,15 +1,13 @@
|
|||||||
green=0
|
green2=200
|
||||||
green2=128
|
|
||||||
red=128
|
red=128
|
||||||
blue=0
|
blue=200
|
||||||
|
|
||||||
color=string.char(0, 0, 128)
|
color=string.char(0, 0, blue)
|
||||||
color1=string.char(128, 0, 0)
|
color1=string.char(red, 0, 0)
|
||||||
color2=string.char(tonumber(green2*0.8), 0, 0)
|
color2=string.char(tonumber(red*0.8), 0, 0)
|
||||||
color3=string.char(tonumber(green2*0.4), 0, 0)
|
color3=string.char(0, tonumber(green2*0.4), 0)
|
||||||
color4=string.char(tonumber(green2*0.2), 0, 0)
|
color4=string.char(0,0 ,tonumber(blue*0.2))
|
||||||
|
|
||||||
colorBg=string.char(0,0,0) -- black is the default background color
|
colorBg=string.char(0,0,0) -- black is the default background color
|
||||||
sntpserverhostname="ptbtime1.ptb.de"
|
sntpserverhostname="ptbtime1.ptb.de"
|
||||||
timezoneoffset=1
|
timezoneoffset=1
|
||||||
|
|
||||||
|
@ -12,4 +12,6 @@ public interface LuaSimulation {
|
|||||||
public void rebootTriggered();
|
public void rebootTriggered();
|
||||||
|
|
||||||
public void setSimulationTime(long timeInMillis);
|
public void setSimulationTime(long timeInMillis);
|
||||||
|
|
||||||
|
public void setADC(int value);
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ import org.luaj.vm2.LuaValue;
|
|||||||
import org.luaj.vm2.lib.jse.JsePlatform;
|
import org.luaj.vm2.lib.jse.JsePlatform;
|
||||||
|
|
||||||
import de.c3ma.ollo.mockup.DoFileFunction;
|
import de.c3ma.ollo.mockup.DoFileFunction;
|
||||||
|
import de.c3ma.ollo.mockup.ESP8266Adc;
|
||||||
import de.c3ma.ollo.mockup.ESP8266File;
|
import de.c3ma.ollo.mockup.ESP8266File;
|
||||||
import de.c3ma.ollo.mockup.ESP8266Net;
|
import de.c3ma.ollo.mockup.ESP8266Net;
|
||||||
import de.c3ma.ollo.mockup.ESP8266Node;
|
import de.c3ma.ollo.mockup.ESP8266Node;
|
||||||
@ -36,6 +37,7 @@ public class WS2812Simulation implements LuaSimulation {
|
|||||||
private ESP8266Node espNode = new ESP8266Node(this);
|
private ESP8266Node espNode = new ESP8266Node(this);
|
||||||
private DoFileFunction doFile = new DoFileFunction(globals);
|
private DoFileFunction doFile = new DoFileFunction(globals);
|
||||||
private ESP8266Ws2812 ws2812 = new ESP8266Ws2812();
|
private ESP8266Ws2812 ws2812 = new ESP8266Ws2812();
|
||||||
|
private ESP8266Adc adc = new ESP8266Adc();
|
||||||
private String scriptName;
|
private String scriptName;
|
||||||
|
|
||||||
public WS2812Simulation(File sourceFolder) {
|
public WS2812Simulation(File sourceFolder) {
|
||||||
@ -44,6 +46,7 @@ public class WS2812Simulation implements LuaSimulation {
|
|||||||
globals.load(espTmr);
|
globals.load(espTmr);
|
||||||
globals.load(espFile);
|
globals.load(espFile);
|
||||||
globals.load(espNode);
|
globals.load(espNode);
|
||||||
|
globals.load(adc);
|
||||||
globals.load(new ESP8266Wifi());
|
globals.load(new ESP8266Wifi());
|
||||||
globals.load(new ESP8266Net());
|
globals.load(new ESP8266Net());
|
||||||
globals.load(new ESP8266Time());
|
globals.load(new ESP8266Time());
|
||||||
@ -93,9 +96,16 @@ public class WS2812Simulation implements LuaSimulation {
|
|||||||
if (args.length >= 3) {
|
if (args.length >= 3) {
|
||||||
File additionalFile = new File(args[2]);
|
File additionalFile = new File(args[2]);
|
||||||
if (additionalFile.exists() && (simu.doFile != null)) {
|
if (additionalFile.exists() && (simu.doFile != null)) {
|
||||||
|
File targetFile = new File(simu.doFile.getWorkingDirectory()
|
||||||
Files.copy(additionalFile.toPath(), new File(simu.doFile.getWorkingDirectory()
|
+ File.separator + additionalFile.getName());
|
||||||
+ File.separator + additionalFile.getName()).toPath());
|
if (targetFile.exists()) {
|
||||||
|
if (targetFile.delete()) {
|
||||||
|
System.out.println("Removed original " + targetFile.getName() + "");
|
||||||
|
} else {
|
||||||
|
System.err.println("Cannot removed original " + targetFile.getName() + "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Files.copy(additionalFile.toPath(), targetFile.toPath());
|
||||||
System.out.println("Integrate " + additionalFile.getName() + " into simulation");
|
System.out.println("Integrate " + additionalFile.getName() + " into simulation");
|
||||||
} else {
|
} else {
|
||||||
System.err.println("Script " + args[2] + " cannot be found");
|
System.err.println("Script " + args[2] + " cannot be found");
|
||||||
@ -152,7 +162,6 @@ public class WS2812Simulation implements LuaSimulation {
|
|||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void callScript(String filename) {
|
private void callScript(String filename) {
|
||||||
@ -170,4 +179,9 @@ public class WS2812Simulation implements LuaSimulation {
|
|||||||
public void setSimulationTime(long timeInMillis) {
|
public void setSimulationTime(long timeInMillis) {
|
||||||
ESP8266Time.setOverwrittenTime(timeInMillis);
|
ESP8266Time.setOverwrittenTime(timeInMillis);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setADC(int value) {
|
||||||
|
adc.setADC(value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,8 +26,6 @@ public class DoFileFunction extends OneArgFunction {
|
|||||||
public LuaValue call(LuaValue luaFilename) {
|
public LuaValue call(LuaValue luaFilename) {
|
||||||
String filename = luaFilename.checkjstring();
|
String filename = luaFilename.checkjstring();
|
||||||
|
|
||||||
System.out.println("[Nodemcu] dofile " + filename);
|
|
||||||
|
|
||||||
File f = new File(workingDir.getAbsolutePath() + File.separator + filename);
|
File f = new File(workingDir.getAbsolutePath() + File.separator + filename);
|
||||||
|
|
||||||
if (f.exists()) {
|
if (f.exists()) {
|
||||||
|
47
simulation/src/de/c3ma/ollo/mockup/ESP8266Adc.java
Normal file
47
simulation/src/de/c3ma/ollo/mockup/ESP8266Adc.java
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
package de.c3ma.ollo.mockup;
|
||||||
|
|
||||||
|
import org.luaj.vm2.LuaTable;
|
||||||
|
import org.luaj.vm2.LuaValue;
|
||||||
|
import org.luaj.vm2.Varargs;
|
||||||
|
import org.luaj.vm2.lib.TwoArgFunction;
|
||||||
|
import org.luaj.vm2.lib.VarArgFunction;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* created at 24.04.2019 - 21:12:03<br />
|
||||||
|
* creator: ollo<br />
|
||||||
|
* project: WS2812Emulation<br />
|
||||||
|
* $Id: $<br />
|
||||||
|
* @author ollo<br />
|
||||||
|
*/
|
||||||
|
public class ESP8266Adc extends TwoArgFunction {
|
||||||
|
|
||||||
|
private int mAdc = 0;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LuaValue call(LuaValue modname, LuaValue env) {
|
||||||
|
env.checkglobals();
|
||||||
|
final LuaTable adc = new LuaTable();
|
||||||
|
adc.set("read", new Read(this));
|
||||||
|
env.set("adc", adc);
|
||||||
|
env.get("package").get("loaded").set("adc", adc);
|
||||||
|
return adc;
|
||||||
|
}
|
||||||
|
|
||||||
|
private class Read extends VarArgFunction {
|
||||||
|
|
||||||
|
private ESP8266Adc adc;
|
||||||
|
|
||||||
|
public Read(ESP8266Adc a) {
|
||||||
|
this.adc = a;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Varargs invoke(Varargs varargs) {
|
||||||
|
return LuaValue.valueOf(this.adc.mAdc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setADC(int newValue) {
|
||||||
|
this.mAdc = newValue;
|
||||||
|
System.out.println("[ADC] updated to " + this.mAdc);
|
||||||
|
}
|
||||||
|
}
|
@ -21,7 +21,10 @@ import javax.swing.JButton;
|
|||||||
import javax.swing.JFrame;
|
import javax.swing.JFrame;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JSlider;
|
||||||
import javax.swing.JTextField;
|
import javax.swing.JTextField;
|
||||||
|
import javax.swing.event.ChangeEvent;
|
||||||
|
import javax.swing.event.ChangeListener;
|
||||||
import javax.swing.event.DocumentEvent;
|
import javax.swing.event.DocumentEvent;
|
||||||
import javax.swing.event.DocumentListener;
|
import javax.swing.event.DocumentListener;
|
||||||
|
|
||||||
@ -42,6 +45,13 @@ public class WS2812Layout extends JFrame {
|
|||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -6815557232118826140L;
|
private static final long serialVersionUID = -6815557232118826140L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parameter for the ADC brightness control
|
||||||
|
*/
|
||||||
|
private static final int ADC_INIT = 512;
|
||||||
|
private static final int ADC_MIN = 0;
|
||||||
|
private static final int ADC_MAX = 1024;
|
||||||
|
|
||||||
private ArrayList<String> mLines = new ArrayList<String>();
|
private ArrayList<String> mLines = new ArrayList<String>();
|
||||||
private int mColumn = 0;
|
private int mColumn = 0;
|
||||||
private int mRow = 0;
|
private int mRow = 0;
|
||||||
@ -106,6 +116,18 @@ public class WS2812Layout extends JFrame {
|
|||||||
}
|
}
|
||||||
contentPane.add(ledPanel, BorderLayout.CENTER);
|
contentPane.add(ledPanel, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
JSlider adc = new JSlider(JSlider.VERTICAL,
|
||||||
|
ADC_MIN, ADC_MAX, ADC_INIT);
|
||||||
|
adc.addChangeListener(new ChangeListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void stateChanged(ChangeEvent e) {
|
||||||
|
nodemcuSimu.setADC(adc.getValue());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
contentPane.add(adc, BorderLayout.EAST);
|
||||||
|
|
||||||
JPanel bottomPanel = new JPanel();
|
JPanel bottomPanel = new JPanel();
|
||||||
|
|
||||||
final JTextField dateTime = new JTextField("yyyy-mm-dd HH:MM:SS");
|
final JTextField dateTime = new JTextField("yyyy-mm-dd HH:MM:SS");
|
||||||
|
222
telnet.lua
Normal file
222
telnet.lua
Normal file
@ -0,0 +1,222 @@
|
|||||||
|
-- Telnet Server
|
||||||
|
function startTelnetServer()
|
||||||
|
s=net.createServer(net.TCP, 180)
|
||||||
|
s:listen(23,function(c)
|
||||||
|
global_c=c
|
||||||
|
printlines = {}
|
||||||
|
function s_output(str)
|
||||||
|
if(global_c~=nil) then
|
||||||
|
if #printlines > 0 then
|
||||||
|
printlines[ #printlines + 1] = str
|
||||||
|
else
|
||||||
|
printlines[ #printlines + 1] = str
|
||||||
|
global_c:send("\r") -- Send something, so the queue is read after sending
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
node.output(s_output, 0)
|
||||||
|
c:on("receive",function(c,l)
|
||||||
|
node.input(l)
|
||||||
|
end)
|
||||||
|
c:on("disconnection",function(c)
|
||||||
|
node.output(nil)
|
||||||
|
global_c=nil
|
||||||
|
end)
|
||||||
|
c:on("sent", function()
|
||||||
|
if #printlines > 0 then
|
||||||
|
global_c:send(table.remove(printlines, 1))
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
print("Welcome to the Wordclock.")
|
||||||
|
print("- storeConfig()")
|
||||||
|
print("Visite https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_en for further commands")
|
||||||
|
end)
|
||||||
|
print("Telnetserver is up")
|
||||||
|
end
|
||||||
|
|
||||||
|
function storeConfig(_ssid, _password, _timezoneoffset, _sntpserver, _inv46, _dim, _fcolor, _colorMin1, _colorMin2, _colorMin3, _colorMin4, _bcolor, _threequater)
|
||||||
|
|
||||||
|
if ( (_ssid == nil) and
|
||||||
|
(_password == nil) and
|
||||||
|
(_timezoneoffset == nil) and
|
||||||
|
(_sntpserver == nil) and
|
||||||
|
(_inv46 == nil) and
|
||||||
|
(_dim == nil) and
|
||||||
|
(_fcolor == nil) and
|
||||||
|
(_colorMin1 == nil) and
|
||||||
|
(_colorMin2 == nil) and
|
||||||
|
(_colorMin3 == nil) and
|
||||||
|
(_colorMin4 == nil) and
|
||||||
|
(_bcolor == nil) and
|
||||||
|
(_threequater == nil) ) then
|
||||||
|
print("one parameter is mandatory:")
|
||||||
|
print("storeConfig(ssid, ")
|
||||||
|
print(" password,")
|
||||||
|
print(" timezoneoffset,")
|
||||||
|
print(" sntpserver,")
|
||||||
|
print(" inv46,")
|
||||||
|
print(" dim,")
|
||||||
|
print(" fcolor,")
|
||||||
|
print(" colorMin1,")
|
||||||
|
print(" colorMin2,")
|
||||||
|
print(" colorMin3,")
|
||||||
|
print(" colorMin4,")
|
||||||
|
print(" bcolor,")
|
||||||
|
print(" threequater)")
|
||||||
|
print(" ")
|
||||||
|
print("e.g.:")
|
||||||
|
print('storeConfig(nil, nil, 1, nil, "on", true, "00FF00", "00FF88", "008888", "00FF44", "004488", "000000", true)')
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if (_password==nil) then
|
||||||
|
_, password, _, _ = wifi.sta.getconfig()
|
||||||
|
print("Restore password")
|
||||||
|
else
|
||||||
|
password = _password
|
||||||
|
end
|
||||||
|
if (_ssid==nil) then
|
||||||
|
ssid, _, _, _ = wifi.sta.getconfig()
|
||||||
|
else
|
||||||
|
ssid = _ssid
|
||||||
|
end
|
||||||
|
|
||||||
|
if (_sntpserver == nil) then
|
||||||
|
sntpserver = sntpserverhostname
|
||||||
|
print("Restore SNTP: " .. tostring(sntpserver))
|
||||||
|
else
|
||||||
|
sntpserver = _sntpserver
|
||||||
|
end
|
||||||
|
|
||||||
|
if (_timezoneoffset ~= nil) then
|
||||||
|
timezoneoffset = _timezoneoffset
|
||||||
|
end
|
||||||
|
if (_inv46 ~= nil) then
|
||||||
|
if ((_inv46 == true) or (_inv == "on")) then
|
||||||
|
inv46 = "on"
|
||||||
|
elseif ((_inv46 == false) or (_inv == "off")) then
|
||||||
|
inv46 = "off"
|
||||||
|
else
|
||||||
|
inv46 = "off"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if ( _dim ~= nil) then
|
||||||
|
dim = _dim
|
||||||
|
end
|
||||||
|
if (_fcolor ~= nil) then
|
||||||
|
fcolor = _fcolor
|
||||||
|
end
|
||||||
|
if (_bcolor ~= nil) then
|
||||||
|
bcolor = _bcolor
|
||||||
|
end
|
||||||
|
if (_colorMin1 ~= nil) then
|
||||||
|
colorMin1 = _colorMin1
|
||||||
|
end
|
||||||
|
if (_colorMin2 ~= nil) then
|
||||||
|
colorMin2 = _colorMin2
|
||||||
|
end
|
||||||
|
if (_colorMin3 ~= nil) then
|
||||||
|
colorMin3 = _colorMin3
|
||||||
|
end
|
||||||
|
if (_colorMin4 ~= nil) then
|
||||||
|
colorMin4 = _colorMin4
|
||||||
|
end
|
||||||
|
if (_threequater ~= nil) then
|
||||||
|
threequater = _threequater
|
||||||
|
end
|
||||||
|
|
||||||
|
print("SSID = " .. tostring(ssid))
|
||||||
|
print("TZNE = " .. tostring(timezoneoffset))
|
||||||
|
print("NTP = " .. tostring(sntpserver))
|
||||||
|
print("INVT = " .. tostring(inv46))
|
||||||
|
print("DIM = " .. tostring(dim))
|
||||||
|
print("FCOL = " .. tostring(fcolor))
|
||||||
|
print("BCOL = " .. tostring(bcolor))
|
||||||
|
print("MIN1 = " .. tostring(colorMin1))
|
||||||
|
print("MIN2 = " .. tostring(colorMin2))
|
||||||
|
print("MIN3 = " .. tostring(colorMin3))
|
||||||
|
print("MIN4 = " .. tostring(colorMin4))
|
||||||
|
print("3QRT = " .. tostring(threequater))
|
||||||
|
|
||||||
|
local configFile="config.lua"
|
||||||
|
-- Safe configuration:
|
||||||
|
file.remove(configFile .. ".new")
|
||||||
|
sec, _ = rtctime.get()
|
||||||
|
file.open(configFile.. ".new", "w+")
|
||||||
|
file.write("-- Config\n" .. "station_cfg={}\nstation_cfg.ssid=\"" .. ssid .. "\"\nstation_cfg.pwd=\"" .. password .. "\"\nstation_cfg.save=false\nwifi.sta.config(station_cfg)\n")
|
||||||
|
file.write("sntpserverhostname=\"" .. sntpserver .. "\"\n" .. "timezoneoffset=\"" .. timezoneoffset .. "\"\n".. "inv46=\"" .. tostring(inv46) .. "\"\n" .. "dim=\"" .. tostring(dim) .. "\"\n")
|
||||||
|
|
||||||
|
if (fcolor ~= nil) then
|
||||||
|
local hexColor=string.sub(fcolor, 1)
|
||||||
|
local red = tonumber(string.sub(hexColor, 1, 2), 16)
|
||||||
|
local green = tonumber(string.sub(hexColor, 3, 4), 16)
|
||||||
|
local blue = tonumber(string.sub(hexColor, 5, 6), 16)
|
||||||
|
file.write("color=string.char(" .. green .. "," .. red .. "," .. blue .. ")\n")
|
||||||
|
-- fill the current values
|
||||||
|
color=string.char(green, red, blue)
|
||||||
|
end
|
||||||
|
if (colorMin1 ~= nil) then
|
||||||
|
local hexColor=string.sub(colorMin1, 1)
|
||||||
|
local red = tonumber(string.sub(hexColor, 1, 2), 16)
|
||||||
|
local green = tonumber(string.sub(hexColor, 3, 4), 16)
|
||||||
|
local blue = tonumber(string.sub(hexColor, 5, 6), 16)
|
||||||
|
file.write("color1=string.char(" .. green .. "," .. red .. "," .. blue .. ")\n")
|
||||||
|
color1=string.char(green, red, blue)
|
||||||
|
end
|
||||||
|
if ( colorMin2 ~= nil) then
|
||||||
|
local hexColor=string.sub(colorMin2, 1)
|
||||||
|
local red = tonumber(string.sub(hexColor, 1, 2), 16)
|
||||||
|
local green = tonumber(string.sub(hexColor, 3, 4), 16)
|
||||||
|
local blue = tonumber(string.sub(hexColor, 5, 6), 16)
|
||||||
|
file.write("color2=string.char(" .. green .. "," .. red .. "," .. blue .. ")\n")
|
||||||
|
color2=string.char(green, red, blue)
|
||||||
|
end
|
||||||
|
if ( colorMin3 ~= nil) then
|
||||||
|
local hexColor=string.sub(colorMin3, 1)
|
||||||
|
local red = tonumber(string.sub(hexColor, 1, 2), 16)
|
||||||
|
local green = tonumber(string.sub(hexColor, 3, 4), 16)
|
||||||
|
local blue = tonumber(string.sub(hexColor, 5, 6), 16)
|
||||||
|
file.write("color3=string.char(" .. green .. "," .. red .. "," .. blue .. ")\n")
|
||||||
|
color3=string.char(green, red, blue)
|
||||||
|
end
|
||||||
|
if ( colorMin4 ~= nil) then
|
||||||
|
local hexColor=string.sub(colorMin4, 1)
|
||||||
|
local red = tonumber(string.sub(hexColor, 1, 2), 16)
|
||||||
|
local green = tonumber(string.sub(hexColor, 3, 4), 16)
|
||||||
|
local blue = tonumber(string.sub(hexColor, 5, 6), 16)
|
||||||
|
file.write("color4=string.char(" .. green .. "," .. red .. "," .. blue .. ")\n")
|
||||||
|
color4=string.char(green, red, blue)
|
||||||
|
end
|
||||||
|
if ( bcolor ~= nil) then
|
||||||
|
local hexColor=string.sub(bcolor, 1)
|
||||||
|
local red = tonumber(string.sub(hexColor, 1, 2), 16)
|
||||||
|
local green = tonumber(string.sub(hexColor, 3, 4), 16)
|
||||||
|
local blue = tonumber(string.sub(hexColor, 5, 6), 16)
|
||||||
|
file.write("colorBg=string.char(" .. green .. "," .. red .. "," .. blue .. ")\n")
|
||||||
|
-- fill the current values
|
||||||
|
colorBg=string.char(green, red, blue)
|
||||||
|
end
|
||||||
|
if (getTime ~= nil) then
|
||||||
|
time = getTime(sec, timezoneoffset)
|
||||||
|
file.write("print(\"Config from " .. time.year .. "-" .. time.month .. "-" .. time.day .. " " .. time.hour .. ":" .. time.minute .. ":" .. time.second .. "\")\n")
|
||||||
|
end
|
||||||
|
if ( threequater ~= nil) then
|
||||||
|
file.write("threequater=true\n")
|
||||||
|
-- fill the current values
|
||||||
|
threequater=true
|
||||||
|
else
|
||||||
|
file.write("threequater=nil\n") -- unset threequater
|
||||||
|
-- fill the current values
|
||||||
|
threequater=nil
|
||||||
|
end
|
||||||
|
file.close()
|
||||||
|
collectgarbage()
|
||||||
|
sec=nil
|
||||||
|
file.remove(configFile)
|
||||||
|
if (file.rename(configFile .. ".new", configFile)) then
|
||||||
|
print("Rename Successfully")
|
||||||
|
else
|
||||||
|
print("Cannot rename " .. configFile .. ".new")
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
@ -3,6 +3,7 @@
|
|||||||
LUATOOL=./tools/luatool.py
|
LUATOOL=./tools/luatool.py
|
||||||
|
|
||||||
DEVICE=$1
|
DEVICE=$1
|
||||||
|
BAUD=115200
|
||||||
|
|
||||||
# check the serial connection
|
# check the serial connection
|
||||||
|
|
||||||
@ -12,23 +13,38 @@ if [ ! -c $DEVICE ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [ $# -ne 1 ]; then
|
if [ $# -eq 0 ]; then
|
||||||
echo ""
|
echo ""
|
||||||
echo "e.g. usage $0 <device>"
|
echo "e.g. usage $0 <device> [<files to upoad>]"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
FILES="displayword.lua main.lua timecore.lua webpage.html webserver.lua wordclock.lua init.lua"
|
if [ $# -eq 1 ]; then
|
||||||
|
FILES="displayword.lua main.lua timecore.lua webpage.html webserver.lua telnet.lua wordclock.lua init.lua"
|
||||||
|
else
|
||||||
|
FILES=$2
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Format filesystem first
|
# Format filesystem first
|
||||||
echo "Format the complete ESP"
|
echo "Format the complete ESP"
|
||||||
$LUATOOL -p $DEVICE -w -b 115200
|
$LUATOOL -p $DEVICE -w -b $BAUD
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "STOOOOP"
|
echo "STOOOOP"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo
|
#stty -F $DEVICE $BAUD
|
||||||
|
#echo "Reboot the ESP"
|
||||||
|
#echo "node.restart()" >> $DEVICE
|
||||||
|
#sleep 1
|
||||||
|
#for i in $(seq 0 5); do
|
||||||
|
# echo "Stop TMR $i"
|
||||||
|
# echo "tmr.stop($i)" >> $DEVICE
|
||||||
|
# sleep 1
|
||||||
|
#done
|
||||||
|
|
||||||
|
#echo
|
||||||
echo "Start Flasing ..."
|
echo "Start Flasing ..."
|
||||||
for f in $FILES; do
|
for f in $FILES; do
|
||||||
if [ ! -f $f ]; then
|
if [ ! -f $f ]; then
|
||||||
@ -37,7 +53,7 @@ for f in $FILES; do
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "------------- $f ------------"
|
echo "------------- $f ------------"
|
||||||
$LUATOOL -p $DEVICE -f $f -b 115200 -t $f
|
$LUATOOL -p $DEVICE -f $f -b $BAUD -t $f
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "STOOOOP"
|
echo "STOOOOP"
|
||||||
exit 1
|
exit 1
|
||||||
@ -45,6 +61,6 @@ for f in $FILES; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
echo "Reboot the ESP"
|
echo "Reboot the ESP"
|
||||||
$LUATOOL -p $DEVICE -r -b 115200
|
echo "node.restart()" >> $DEVICE
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
@ -49,7 +49,7 @@ def main(nodeip, luafile, volatile=None):
|
|||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
s.connect((nodeip, 80))
|
s.connect((nodeip, 23))
|
||||||
time.sleep(0.050)
|
time.sleep(0.050)
|
||||||
s.sendall("\n")
|
s.sendall("\n")
|
||||||
# Receive the hello Message of answer of the ESP
|
# Receive the hello Message of answer of the ESP
|
||||||
@ -94,7 +94,7 @@ def main(nodeip, luafile, volatile=None):
|
|||||||
print "add a space at the end"
|
print "add a space at the end"
|
||||||
|
|
||||||
if (volatile is None):
|
if (volatile is None):
|
||||||
if (not sendCmd(s, "w([[" + l + "]]);")):
|
if (not sendCmd(s, "w([==[" + l + "]==]);")):
|
||||||
print "Cannot write line " + str(i)
|
print "Cannot write line " + str(i)
|
||||||
s.close()
|
s.close()
|
||||||
sys.exit(4)
|
sys.exit(4)
|
||||||
|
@ -56,7 +56,6 @@ expected.itis=1
|
|||||||
expected.one=1
|
expected.one=1
|
||||||
expected.clock=1
|
expected.clock=1
|
||||||
checkWords(leds, expected, 1, 0)
|
checkWords(leds, expected, 1, 0)
|
||||||
checkCharacter(display_countwords_de(leds), 11)
|
|
||||||
|
|
||||||
leds=display_timestat(2,5)
|
leds=display_timestat(2,5)
|
||||||
expected={}
|
expected={}
|
||||||
@ -64,7 +63,6 @@ expected.two=1
|
|||||||
expected.fiveMin=1
|
expected.fiveMin=1
|
||||||
expected.after=1
|
expected.after=1
|
||||||
checkWords(leds, expected, 2 , 5)
|
checkWords(leds, expected, 2 , 5)
|
||||||
checkCharacter(display_countwords_de(leds), 12)
|
|
||||||
|
|
||||||
leds=display_timestat(3,10)
|
leds=display_timestat(3,10)
|
||||||
expected={}
|
expected={}
|
||||||
@ -72,7 +70,6 @@ expected.three=1
|
|||||||
expected.tenMin=1
|
expected.tenMin=1
|
||||||
expected.after=1
|
expected.after=1
|
||||||
checkWords(leds, expected, 3 , 10)
|
checkWords(leds, expected, 3 , 10)
|
||||||
checkCharacter(display_countwords_de(leds), 12)
|
|
||||||
|
|
||||||
leds=display_timestat(4,15)
|
leds=display_timestat(4,15)
|
||||||
expected={}
|
expected={}
|
||||||
@ -80,7 +77,6 @@ expected.four=1
|
|||||||
expected.after=1
|
expected.after=1
|
||||||
expected.quater=1
|
expected.quater=1
|
||||||
checkWords(leds, expected, 4 , 15)
|
checkWords(leds, expected, 4 , 15)
|
||||||
checkCharacter(display_countwords_de(leds), 15)
|
|
||||||
|
|
||||||
leds=display_timestat(5,20)
|
leds=display_timestat(5,20)
|
||||||
expected={}
|
expected={}
|
||||||
@ -88,7 +84,6 @@ expected.five=1
|
|||||||
expected.twenty=1
|
expected.twenty=1
|
||||||
expected.after=1
|
expected.after=1
|
||||||
checkWords(leds, expected, 5 , 20)
|
checkWords(leds, expected, 5 , 20)
|
||||||
checkCharacter(display_countwords_de(leds), 15)
|
|
||||||
|
|
||||||
leds=display_timestat(6,25)
|
leds=display_timestat(6,25)
|
||||||
expected={}
|
expected={}
|
||||||
@ -97,7 +92,6 @@ expected.fiveMin=1
|
|||||||
expected.before=1
|
expected.before=1
|
||||||
expected.half=1
|
expected.half=1
|
||||||
checkWords(leds, expected, 6 , 25)
|
checkWords(leds, expected, 6 , 25)
|
||||||
checkCharacter(display_countwords_de(leds), 17)
|
|
||||||
|
|
||||||
leds=display_timestat(7,30)
|
leds=display_timestat(7,30)
|
||||||
expected={}
|
expected={}
|
||||||
@ -105,7 +99,6 @@ expected.itis=1
|
|||||||
expected.eight=1
|
expected.eight=1
|
||||||
expected.half=1
|
expected.half=1
|
||||||
checkWords(leds, expected, 7 , 30)
|
checkWords(leds, expected, 7 , 30)
|
||||||
checkCharacter(display_countwords_de(leds), 13)
|
|
||||||
|
|
||||||
leds=display_timestat(8,35)
|
leds=display_timestat(8,35)
|
||||||
expected={}
|
expected={}
|
||||||
@ -114,7 +107,6 @@ expected.half=1
|
|||||||
expected.fiveMin=1
|
expected.fiveMin=1
|
||||||
expected.after=1
|
expected.after=1
|
||||||
checkWords(leds, expected, 8 , 35)
|
checkWords(leds, expected, 8 , 35)
|
||||||
checkCharacter(display_countwords_de(leds), 16)
|
|
||||||
|
|
||||||
leds=display_timestat(9,40)
|
leds=display_timestat(9,40)
|
||||||
expected={}
|
expected={}
|
||||||
@ -122,7 +114,6 @@ expected.ten=1
|
|||||||
expected.twenty=1
|
expected.twenty=1
|
||||||
expected.before=1
|
expected.before=1
|
||||||
checkWords(leds, expected, 9 , 40)
|
checkWords(leds, expected, 9 , 40)
|
||||||
checkCharacter(display_countwords_de(leds), 14)
|
|
||||||
|
|
||||||
leds=display_timestat(10,45)
|
leds=display_timestat(10,45)
|
||||||
expected={}
|
expected={}
|
||||||
@ -130,7 +121,6 @@ expected.eleven=1
|
|||||||
expected.quater=1
|
expected.quater=1
|
||||||
expected.before=1
|
expected.before=1
|
||||||
checkWords(leds, expected, 10 , 45)
|
checkWords(leds, expected, 10 , 45)
|
||||||
checkCharacter(display_countwords_de(leds), 13)
|
|
||||||
|
|
||||||
leds=display_timestat(11,50)
|
leds=display_timestat(11,50)
|
||||||
expected={}
|
expected={}
|
||||||
@ -138,7 +128,6 @@ expected.twelve=1
|
|||||||
expected.tenMin=1
|
expected.tenMin=1
|
||||||
expected.before=1
|
expected.before=1
|
||||||
checkWords(leds, expected, 11 , 50)
|
checkWords(leds, expected, 11 , 50)
|
||||||
checkCharacter(display_countwords_de(leds), 12)
|
|
||||||
|
|
||||||
leds=display_timestat(12,55)
|
leds=display_timestat(12,55)
|
||||||
expected={}
|
expected={}
|
||||||
@ -146,7 +135,6 @@ expected.oneLong=1
|
|||||||
expected.fiveMin=1
|
expected.fiveMin=1
|
||||||
expected.before=1
|
expected.before=1
|
||||||
checkWords(leds, expected, 12 , 55)
|
checkWords(leds, expected, 12 , 55)
|
||||||
checkCharacter(display_countwords_de(leds), 11)
|
|
||||||
|
|
||||||
leds=display_timestat(13,00)
|
leds=display_timestat(13,00)
|
||||||
expected={}
|
expected={}
|
||||||
@ -154,7 +142,6 @@ expected.itis=1
|
|||||||
expected.one=1
|
expected.one=1
|
||||||
expected.clock=1
|
expected.clock=1
|
||||||
checkWords(leds, expected, 13 , 00)
|
checkWords(leds, expected, 13 , 00)
|
||||||
checkCharacter(display_countwords_de(leds), 11)
|
|
||||||
|
|
||||||
-- test the minutes inbetween
|
-- test the minutes inbetween
|
||||||
leds=display_timestat(14,01)
|
leds=display_timestat(14,01)
|
||||||
@ -164,7 +151,6 @@ expected.two=1
|
|||||||
expected.min1=1
|
expected.min1=1
|
||||||
expected.clock=1
|
expected.clock=1
|
||||||
checkWords(leds, expected, 14 , 01)
|
checkWords(leds, expected, 14 , 01)
|
||||||
checkCharacter(display_countwords_de(leds), 12)
|
|
||||||
|
|
||||||
leds=display_timestat(15,02)
|
leds=display_timestat(15,02)
|
||||||
expected={}
|
expected={}
|
||||||
@ -173,7 +159,6 @@ expected.three=1
|
|||||||
expected.min2=1
|
expected.min2=1
|
||||||
expected.clock=1
|
expected.clock=1
|
||||||
checkWords(leds, expected, 15 , 02)
|
checkWords(leds, expected, 15 , 02)
|
||||||
checkCharacter(display_countwords_de(leds), 12)
|
|
||||||
|
|
||||||
leds=display_timestat(16,03)
|
leds=display_timestat(16,03)
|
||||||
expected={}
|
expected={}
|
||||||
@ -182,7 +167,6 @@ expected.four=1
|
|||||||
expected.min3=1
|
expected.min3=1
|
||||||
expected.clock=1
|
expected.clock=1
|
||||||
checkWords(leds, expected, 16 , 03)
|
checkWords(leds, expected, 16 , 03)
|
||||||
checkCharacter(display_countwords_de(leds), 12)
|
|
||||||
|
|
||||||
leds=display_timestat(17,04)
|
leds=display_timestat(17,04)
|
||||||
expected={}
|
expected={}
|
||||||
@ -191,7 +175,6 @@ expected.five=1
|
|||||||
expected.min4=1
|
expected.min4=1
|
||||||
expected.clock=1
|
expected.clock=1
|
||||||
checkWords(leds, expected, 17 , 04)
|
checkWords(leds, expected, 17 , 04)
|
||||||
checkCharacter(display_countwords_de(leds), 12)
|
|
||||||
|
|
||||||
leds=display_timestat(18,06)
|
leds=display_timestat(18,06)
|
||||||
expected={}
|
expected={}
|
||||||
@ -200,7 +183,6 @@ expected.after=1
|
|||||||
expected.min1=1
|
expected.min1=1
|
||||||
expected.six=1
|
expected.six=1
|
||||||
checkWords(leds, expected, 18 , 06)
|
checkWords(leds, expected, 18 , 06)
|
||||||
checkCharacter(display_countwords_de(leds), 13)
|
|
||||||
|
|
||||||
leds=display_timestat(19,09)
|
leds=display_timestat(19,09)
|
||||||
expected={}
|
expected={}
|
||||||
@ -209,7 +191,6 @@ expected.after=1
|
|||||||
expected.min4=1
|
expected.min4=1
|
||||||
expected.seven=1
|
expected.seven=1
|
||||||
checkWords(leds, expected, 19 , 09)
|
checkWords(leds, expected, 19 , 09)
|
||||||
checkCharacter(display_countwords_de(leds), 14)
|
|
||||||
|
|
||||||
leds=display_timestat(20,17)
|
leds=display_timestat(20,17)
|
||||||
expected={}
|
expected={}
|
||||||
@ -218,7 +199,6 @@ expected.after=1
|
|||||||
expected.min2=1
|
expected.min2=1
|
||||||
expected.eight=1
|
expected.eight=1
|
||||||
checkWords(leds, expected, 20 , 17)
|
checkWords(leds, expected, 20 , 17)
|
||||||
checkCharacter(display_countwords_de(leds), 15)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -48,15 +48,6 @@ Please note that all settings are mandatory<br /><br />
|
|||||||
<tr><th>SNTP Server</th><td><input id="sntpserver" name="sntpserver" value="$SNTPSERVER"></td><td>Server to sync the time with. Only one ntp server is allowed.</td></tr>
|
<tr><th>SNTP Server</th><td><input id="sntpserver" name="sntpserver" value="$SNTPSERVER"></td><td>Server to sync the time with. Only one ntp server is allowed.</td></tr>
|
||||||
<tr><th>Offset to UTC time</th><td><input id="timezoneoffset" name="timezoneoffset" value="$TIMEOFFSET"></td><td>Define the offset to UTC time in hours. For example +1 hour for Germany</td></tr>
|
<tr><th>Offset to UTC time</th><td><input id="timezoneoffset" name="timezoneoffset" value="$TIMEOFFSET"></td><td>Define the offset to UTC time in hours. For example +1 hour for Germany</td></tr>
|
||||||
<tr><th>Foreground Color</th><td><input type="color" name="fcolor" value="$HEXCOLORFG"></td><td>LED Color for all minutes, divisible by five</td></tr>
|
<tr><th>Foreground Color</th><td><input type="color" name="fcolor" value="$HEXCOLORFG"></td><td>LED Color for all minutes, divisible by five</td></tr>
|
||||||
<tr><th>Background Color</th><td><input type="color" name="bcolor" value="$HEXCOLORBG"></td><td>Background LED Color</td></tr>
|
|
||||||
<tr><th>1. Minute Color</th><td><input type="color" name="colorMin1" value="$HEXCOLOR1"></td><td>First minute after</td></tr>
|
|
||||||
<tr><th>2. Minute Color</th><td><input type="color" name="colorMin2" value="$HEXCOLOR2"></td><td>Second minute after</td></tr>
|
|
||||||
<tr><th>3. Minute Color</th><td><input type="color" name="colorMin3" value="$HEXCOLOR3"></td><td>Third minute after</td></tr>
|
|
||||||
<tr><th>4. Minute Color</th><td><input type="color" name="colorMin4" value="$HEXCOLOR4"></td><td>Fourth minute after</td></tr>
|
|
||||||
|
|
||||||
<tr><th>Three quater</th><td><input type="checkbox" name="threequater" $THREEQUATER></td><td>Dreiviertel Joa/nei</td></tr>
|
|
||||||
<tr><th>Invert lines 4-6</th><td><input type="checkbox" name="inv46" $THREEQUATER></td><td>invert</td></tr>
|
|
||||||
|
|
||||||
<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>
|
<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>
|
||||||
<tr><td colspan="3"><div align="center"><input type="submit" name="action" value="Reboot"></div></td></tr>
|
<tr><td colspan="3"><div align="center"><input type="submit" name="action" value="Reboot"></div></td></tr>
|
||||||
</table>
|
</table>
|
||||||
|
@ -122,6 +122,8 @@ function fillDynamicMap()
|
|||||||
replaceMap["$HEXCOLOR3"]=hexColor3
|
replaceMap["$HEXCOLOR3"]=hexColor3
|
||||||
replaceMap["$HEXCOLOR4"]=hexColor4
|
replaceMap["$HEXCOLOR4"]=hexColor4
|
||||||
replaceMap["$HEXCOLORBG"]=hexColorBg
|
replaceMap["$HEXCOLORBG"]=hexColorBg
|
||||||
|
replaceMap["$INV46"]=((inv46 ~= nil and inv46 == "on") and "checked" or "")
|
||||||
|
replaceMap["$AUTODIM"]=((dim ~= nil and dim == "on") and "checked" or "")
|
||||||
return replaceMap
|
return replaceMap
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -139,8 +141,6 @@ function stopWordclock()
|
|||||||
getUTCtime = nil
|
getUTCtime = nil
|
||||||
getTime = nil
|
getTime = nil
|
||||||
display_timestat = nil
|
display_timestat = nil
|
||||||
display_countcharacters_de = nil
|
|
||||||
display_countwords_de = nil
|
|
||||||
collectgarbage()
|
collectgarbage()
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -207,7 +207,7 @@ function startWebServer()
|
|||||||
sec, _ = rtctime.get()
|
sec, _ = rtctime.get()
|
||||||
file.open(configFile.. ".new", "w+")
|
file.open(configFile.. ".new", "w+")
|
||||||
file.write("-- Config\n" .. "station_cfg={}\nstation_cfg.ssid=\"" .. _POST.ssid .. "\"\nstation_cfg.pwd=\"" .. _POST.password .. "\"\nstation_cfg.save=false\nwifi.sta.config(station_cfg)\n")
|
file.write("-- Config\n" .. "station_cfg={}\nstation_cfg.ssid=\"" .. _POST.ssid .. "\"\nstation_cfg.pwd=\"" .. _POST.password .. "\"\nstation_cfg.save=false\nwifi.sta.config(station_cfg)\n")
|
||||||
file.write("sntpserverhostname=\"" .. _POST.sntpserver .. "\"\n" .. "timezoneoffset=\"" .. _POST.timezoneoffset .. "\"\n".. "inv46=\"" .. tostring(_POST.inv46) .. "\"\n")
|
file.write("sntpserverhostname=\"" .. _POST.sntpserver .. "\"\n" .. "timezoneoffset=\"" .. _POST.timezoneoffset .. "\"\n".. "inv46=\"" .. tostring(_POST.inv46) .. "\"\n" .. "dim=\"" .. tostring(_POST.dim) .. "\"\n")
|
||||||
|
|
||||||
if ( _POST.fcolor ~= nil) then
|
if ( _POST.fcolor ~= nil) then
|
||||||
-- color=string.char(_POST.green, _POST.red, _POST.blue)
|
-- color=string.char(_POST.green, _POST.red, _POST.blue)
|
||||||
|
101
wordclock.lua
101
wordclock.lua
@ -64,7 +64,7 @@ function display_timestat(hours, minutes, longmode)
|
|||||||
ret.before=1
|
ret.before=1
|
||||||
elseif (minutes==9) then
|
elseif (minutes==9) then
|
||||||
-- Hande if three quater or quater before is displayed
|
-- Hande if three quater or quater before is displayed
|
||||||
if (threequater ~= nil) then
|
if ((threequater ~= nil) and (threequater==true or threequater=="on")) then
|
||||||
ret.threequater=1
|
ret.threequater=1
|
||||||
else
|
else
|
||||||
ret.quater = 1
|
ret.quater = 1
|
||||||
@ -136,102 +136,3 @@ function display_timestat(hours, minutes, longmode)
|
|||||||
collectgarbage()
|
collectgarbage()
|
||||||
return ret
|
return ret
|
||||||
end
|
end
|
||||||
|
|
||||||
-- @fn display_countcharacters_de
|
|
||||||
-- Count the amount of characters, used to describe the current time in words
|
|
||||||
-- @param words the same structure, as generated with the function @see display_timestat
|
|
||||||
-- @return the amount of characters, used to describe the time or <code>0</code> on errors
|
|
||||||
function display_countcharacters_de(words)
|
|
||||||
local amount=0
|
|
||||||
if (words.it == 1) then
|
|
||||||
amount = amount + 2
|
|
||||||
end
|
|
||||||
if (words.is == 1) then
|
|
||||||
amount = amount + 3
|
|
||||||
end
|
|
||||||
if (words.fiveMin == 1) then
|
|
||||||
amount = amount + 4
|
|
||||||
end
|
|
||||||
if (words.tenMin == 1) then
|
|
||||||
amount = amount + 4
|
|
||||||
end
|
|
||||||
if (words.twenty == 1) then
|
|
||||||
amount = amount + 7
|
|
||||||
end
|
|
||||||
if (words.threequater == 1) then
|
|
||||||
amount = amount + 11
|
|
||||||
end
|
|
||||||
if (words.quater == 1) then
|
|
||||||
amount = amount + 7
|
|
||||||
end
|
|
||||||
if (words.before == 1) then
|
|
||||||
amount = amount + 3
|
|
||||||
end
|
|
||||||
if (words.after == 1) then
|
|
||||||
amount = amount + 4
|
|
||||||
end
|
|
||||||
if (words.half == 1) then
|
|
||||||
amount = amount + 4
|
|
||||||
end
|
|
||||||
if (words.twelve == 1) then
|
|
||||||
amount = amount + 5
|
|
||||||
end
|
|
||||||
if (words.seven == 1) then
|
|
||||||
amount = amount + 6
|
|
||||||
end
|
|
||||||
if (words.one == 1) then
|
|
||||||
amount = amount + 3
|
|
||||||
end
|
|
||||||
if (words.oneLong == 1) then
|
|
||||||
amount = amount + 4
|
|
||||||
end
|
|
||||||
if (words.two == 1) then
|
|
||||||
amount = amount + 4
|
|
||||||
end
|
|
||||||
if (words.three == 1) then
|
|
||||||
amount = amount + 4
|
|
||||||
end
|
|
||||||
if (words.five == 1) then
|
|
||||||
amount = amount + 4
|
|
||||||
end
|
|
||||||
if (words.four == 1) then
|
|
||||||
amount = amount + 4
|
|
||||||
end
|
|
||||||
if (words.nine == 1) then
|
|
||||||
amount = amount + 4
|
|
||||||
end
|
|
||||||
if (words.eleven == 1) then
|
|
||||||
amount = amount + 3
|
|
||||||
end
|
|
||||||
if (words.eight == 1) then
|
|
||||||
amount = amount + 4
|
|
||||||
end
|
|
||||||
if (words.ten == 1) then
|
|
||||||
amount = amount + 4
|
|
||||||
end
|
|
||||||
if (words.clock == 1) then
|
|
||||||
amount = amount + 3
|
|
||||||
end
|
|
||||||
if (words.six == 1) then
|
|
||||||
amount = amount + 5
|
|
||||||
end
|
|
||||||
|
|
||||||
return amount
|
|
||||||
end
|
|
||||||
|
|
||||||
-- @fn display_countcharacters_de
|
|
||||||
-- Count the amount of words, used to describe the current time in words!
|
|
||||||
-- (min1 to min4 are ignored)
|
|
||||||
-- @param words the same structure, as generated with the function @see display_timestat
|
|
||||||
-- @return the amount of words, used to describe the time or <code>0</code> on errors
|
|
||||||
function display_countwords_de(words)
|
|
||||||
local amount = 0
|
|
||||||
for k,v in pairs(words) do
|
|
||||||
if (v ~= nil and v == 1) then
|
|
||||||
if (k ~= "min1" and k ~= "min2" and k ~= "min3" and k ~= "min4") then
|
|
||||||
amount = amount + 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return amount
|
|
||||||
end
|
|
||||||
|
Loading…
Reference in New Issue
Block a user