summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/util-evo.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkiv/util-evo.lua')
-rw-r--r--tex/context/base/mkiv/util-evo.lua109
1 files changed, 75 insertions, 34 deletions
diff --git a/tex/context/base/mkiv/util-evo.lua b/tex/context/base/mkiv/util-evo.lua
index 7f0b59ac4..dfb395e08 100644
--- a/tex/context/base/mkiv/util-evo.lua
+++ b/tex/context/base/mkiv/util-evo.lua
@@ -161,15 +161,22 @@ local function loadedtable(filename)
for i=1,10 do
local t = loadtable(filename)
if t then
+ report("file %a loaded",filename)
return t
else
ossleep(1/4)
end
end
end
+ report("file %a not loaded",filename)
return { }
end
+local function savedtable(filename,data)
+ savetable(filename,data)
+ report("file %a saved",filename)
+end
+
local function loadpresets(filename)
local presets = loadtable(filename)
if presets then
@@ -194,6 +201,13 @@ local function loadeverything(filename)
return loadedtable(filename)
end
+local function loadlatest(filename)
+ if type(filename) == "table" and validpresets(filename) then
+ filename = filename.files and filename.files.latest
+ end
+ return loadedtable(filename)
+end
+
local function result(t,fmt,a,b,c)
if t then
report(fmt,a or "done",b or "done",c or "done","done")
@@ -365,6 +379,21 @@ local function findzone(presets,name)
return usedzones and usedzones[name]
end
+local function getzonenames(presets)
+ if not presets then
+ return { }
+ end
+ local data = presets.data
+ if not data then
+ return { }
+ end
+ local t = sortedkeys(data.zones or { })
+ for i=1,#t do
+ t[i] = lower(t[i])
+ end
+ return t
+end
+
local function gettargets(zone) -- maybe also for a day
local schedule = zone.schedule
local min = false
@@ -503,7 +532,7 @@ local function geteverything(presets,noschedules)
end
end
end
- savetable(presets.files.everything,data)
+ savedtable(presets.files.everything,data)
return result(data,"getting everything, %s")
end
end
@@ -521,26 +550,29 @@ local function gettemperatures(presets)
for i=1,#data do
local gateways = data[i].gateways
local locationinfo = data[i].locationInfo
- local locationid = locationinfo.locationId
- if gateways then
- local status = getstatus(presets,locationid,locationinfo.name)
- if status then
- for i=1,#gateways do
- local g = status.gateways[i]
- local gateway = gateways[i]
- local systems = gateway.temperatureControlSystems
- if systems then
- local s = g.temperatureControlSystems
- for i=1,#systems do
- local zones = systems[i].zones
- if zones then
- local z = s[i].zones
- for i=1,#zones do
- if validzonetypes[zone.zoneType] then
- local z = z[i]
- if z.name == zone.name then
- zone.temperatureStatus = z.temperatureStatus
- updated = true
+ if locationinfo then
+ local locationid = locationinfo.locationId
+ if gateways then
+ local status = getstatus(presets,locationid,locationinfo.name)
+ if status then
+ for i=1,#gateways do
+ local g = status.gateways[i]
+ local gateway = gateways[i]
+ local systems = gateway.temperatureControlSystems
+ if systems then
+ local s = g.temperatureControlSystems
+ for i=1,#systems do
+ local zones = systems[i].zones
+ if zones then
+ local z = s[i].zones
+ for i=1,#zones do
+ local zone = zones[i]
+ if validzonetypes[zone.zoneType] then
+ local z = z[i]
+ if z.name == zone.name then
+ zone.temperatureStatus = z.temperatureStatus
+ updated = true
+ end
end
end
end
@@ -548,12 +580,16 @@ local function gettemperatures(presets)
end
end
end
+ else
+ report("no gateways")
end
+ else
+ report("no location info")
end
end
if updated then
data.time = ostime()
- savetable(presets.files.latest,data)
+ savedtable(presets.files.latest,data)
end
return result(data,"getting temperatures, %s")
end
@@ -601,7 +637,10 @@ end
local function loadtemperatures(presets)
if validpresets(presets) then
- local status = loadeverything(presets)
+ local status = loadlatest(presets)
+ if not status or not next(status) then
+ status = loadeverything(presets)
+ end
if status then
local usedgateways = presets.data.gateways
for i=1,#status do
@@ -637,9 +676,10 @@ end
local function updatetemperatures(presets)
if validpresets(presets) then
local everythingname = presets.files.everything
+ local latestname = presets.files.latest
local historyname = presets.files.history
- if everythingname and historyname then
- gettemperatures(presets,everythingname)
+ if (everythingname or latestname) and historyname then
+ gettemperatures(presets)
local t = loadtemperatures(presets)
if t then
local data = { }
@@ -649,7 +689,7 @@ local function updatetemperatures(presets)
end
local history = loadhistory(historyname) or { }
setmoment(history,ostime(),data)
- savetable(historyname,history)
+ savedtable(historyname,history)
return result(t,"updating temperatures, %s")
end
end
@@ -747,10 +787,10 @@ local function off(presets,name)
end
end
-local function on(presets,name)
+local function on(presets,name,temperature)
local zone = presets and getzonestate(presets,name)
if zone then
- setzonestate(presets,name,zone.highest)
+ setzonestate(presets,name,temperature or zone.highest)
end
end
@@ -787,7 +827,7 @@ local function settask(presets,when,tag,action)
else
list[tag] = nil
end
- savetable(presets.files.schedules,list)
+ savedtable(presets.files.schedules,list)
end
end
@@ -832,7 +872,7 @@ local function checktasks(presets)
for k, v in next, q do
list[q] = nil
end
- savetable(presets.files.schedules,list)
+ savedtable(presets.files.schedules,list)
end
return list
end
@@ -954,10 +994,10 @@ end
evohome = {
helpers = {
- getaccesstoken = getaccesstoken, -- presets
- getuserinfo = getuserinfo, -- presets
- getlocationinfo = getlocationinfo, -- presets
- getschedule = getschedule, -- presets, name
+ getaccesstoken = getaccesstoken, -- presets
+ getuserinfo = getuserinfo, -- presets
+ getlocationinfo = getlocationinfo, -- presets
+ getschedule = getschedule, -- presets, name
--
geteverything = geteverything, -- presets, noschedules
gettemperatures = gettemperatures, -- presets
@@ -965,6 +1005,7 @@ evohome = {
setzonestate = setzonestate, -- presets, name, temperature
resetzonestate = resetzonestate, -- presets, name
getzonedata = findzone, -- presets, name
+ getzonenames = getzonenames, -- presets
--
loadpresets = loadpresets, -- filename
loadhistory = loadhistory, -- presets | filename