%D \module %D [ file=s-evohome, %D version=2017.11.12, %D title=\CONTEXT\ Style File, %D subtitle=Evohome Graphics, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \setupbodyfont[dejavu] \starttext \startluacode local evohome = require("util-evo") moduledata.evohome = { } function moduledata.evohome.status(specification) local presets = evohome.helpers.loadpresets(specification.presets) local zones = evohome.helpers.loadtemperatures(presets) -- todo : time if not zones then context("no zones") context.blank() return end local t = zones.time t = t and os.date("%Y-%m-%d %H:%M:%S",t) or "unknown time" context.starttitle { title = t } context.starttabulate { "|l|c|c|c|c|" } context.BC() context("name") context.BC() context("current") context.BC() context("min") context.BC() context("max") context.BC() context("target") context.NC() context.NR() for i=1,#zones do local zone = zones[i] context.NC() context.word(zone.name) context.NC() context("%0.1f",zone.current) context.NC() context("%0.1f",zone.min) context.NC() context("%0.1f",zone.max) context.NC() context("%0.1f",zone.target) context.NC() context.NR() end context.stoptabulate() for i=1,#zones do local zone = zones[i] -- evohome.helpers.updatezone(presets,zone.name) local data = evohome.helpers.getzonestate(presets,zone.name) local schedule = data and data.schedule or { } context.startsubject { title = zone.name } context.starttabulate { "|l|c|c|" } context.BC() context("day") context.BC() context("time") context.BC() context("temperature") context.NR() local daily = schedule.dailySchedules if daily then for i=1,#daily do local d = daily[i] local s = d.switchpoints if s then for i=1,#s do context.NC() if i == 1 then context.word(d.dayOfWeek) end context.NC() context(s[i].timeOfDay) context.NC() context(s[i].temperature) context.NC() context.NR() end end end end context.stoptabulate() context.stopsubject() end context.stoptitle() end function moduledata.evohome.history(specification) local presets = evohome.helpers.loadpresets(specification.presets) local zones = evohome.helpers.loadtemperatures(presets) if not zones then context("no zones") context.blank() return end local data = evohome.helpers.loadhistory(presets) if not zones then context("no history") return end local years = data.years if not years then context("no years") return end local minyear = specification.year or 2017 local maxyear = minyear local minmonth = specification.month or 1 local maxmonth = specification.month or 12 local scale = 1/8 -- 20 local mark = 3 local abstemp = 25 for y=minyear,maxyear do local year = years[y] for m=minmonth,maxmonth do local month = year.months[m] if month then context.starttitle { title = "\\month{" .. m .. "}\\enspace" .. y } -- todo: function context.Month(m) end for i=1,#zones do local zone = zones[i] local where = zone.name local mintemp = zone.min local maxtemp = zone.max -- context.startMPpage { offset = "10pt" } context.startlinecorrection() context.startMPcode() context("linecap := butt; pickup pencircle scaled .5") context("fill (%s,%s) -- (%s,%s) -- (%s,%s) -- (%s,%s) -- cycle withcolor .8white ;", 0, mintemp/scale, 31 * 24, mintemp/scale, 31 * 24, maxtemp/scale, 0, maxtemp/scale ) for i=0,abstemp do context("draw (%s,%s) -- (%s,%s) withcolor .6white ;", 0, i/scale, 31 * 24, i/scale ) end local days = month.days if days then local nd = os.nofdays(y,m) for d=1,nd do local day = days[d] local xoffset = (d-1) * 24 local wd = os.weekday(d,m,y) local weekend = wd == 1 or wd == 7 if not weekend then -- okay elseif mark == 1 then context("draw (%s,%s) -- (%s,%s) ; ",xoffset, -17.5,xoffset, -32.5) context("draw (%s,%s) -- (%s,%s) ; ",xoffset+24,-17.5,xoffset+24,-32.5) elseif mark == 2 then context("draw (%s,%s) -- (%s,%s) ; ",xoffset, -17.5,xoffset+24,-17.5) context("draw (%s,%s) -- (%s,%s) ; ",xoffset, -32.5,xoffset+24,-32.5) elseif mark == 3 then context("draw unitsquare xysized (%s,%s) shifted (%s,%s) ; ",24,15,xoffset,-32.5) end context([[draw textext("%s") shifted (%s,%s) ; ]],d,xoffset + 12,-25) if day then for h=0,23 do local hours = day.hours if hours then local hour = hours[h] if hour then local a = 0 local n = 0 local m = 0 for minute, d in next, hour do local v = d[where] if v then a = a + v n = n + 1 if v > m then m = v end end end if n > 0 then a = a / n else a = 0 end local dx = xoffset + h local dy = a/scale local dm = m/scale context("draw (%s,%s) -- (%s,%s) withcolor %s ; ", dx, 0,dx,dy,weekend and "darkmagenta" or "darkblue") context("draw (%s,%s) -- (%s,%s) withcolor %s ; ", dx,dy,dx,dm,"darkred") end end end end end for d=0,30 do local xoffset = d * 24 context("draw (%s,%s) -- (%s,%s) withcolor darkgray ; ",xoffset+ 0,0,xoffset+ 0,-10) context("draw (%s,%s) -- (%s,%s) withcolor darkgray ; ",xoffset+ 6,0,xoffset+ 6,-2.5) context("draw (%s,%s) -- (%s,%s) withcolor darkgray ; ",xoffset+12,0,xoffset+12,-5) context("draw (%s,%s) -- (%s,%s) withcolor darkgray ; ",xoffset+18,0,xoffset+18,-2.5) end local xoffset = 31 * 24 context("draw (%s,%s) -- (%s,%s) withcolor darkgray ; ",xoffset,0,xoffset,-10) end for i=0,abstemp,5 do context([[draw textext.lft("%s") shifted (%s,%s) ; ]],i,-10,i/scale) context("draw (%s,%s) -- (%s,%s) withcolor .2white ;",0,i/scale,31 * 24,i/scale) end context([[draw textext("\strut\month{%s}\enspace%s\enspace:\enspace%s") shifted (%s,%s) ; ]], m, y, where, 31 * 24 / 2, -50) context([[draw textext.lft("\textdegree{}C") shifted (%s,%s) ; ]],-10,-25) context("currentpicture := currentpicture xsized TextWidth") ; context.stopMPcode() context.stoplinecorrection() -- context.stopMPpage() end context.stoptitle() end end end end \stopluacode \continueifinputfile{s-evohome.mkiv} \usemodule[art-01] \setuplayout [article] [footer=0cm, header=1cm, topspace=5mm, bottomspace=5mm] \starttext \startluacode -- os.execute([[mtxrun --script evohome --collect --presets=c:/data/develop/domotica/code/evohome-presets.lua]]) -- local specification = { -- year = 2017, -- -- month = 11, -- presets = "c:/data/develop/domotica/evohome/evohome-presets.lua", -- } -- moduledata.evohome.status (specification) -- moduledata.evohome.history(specification) local specification = { year = 2018, -- month = 11, presets = "c:/data/develop/domotica/evohome/evohome-presets.lua", } -- moduledata.evohome.status (specification) moduledata.evohome.history(specification) \stopluacode \stoptext