From 2fd7bd311ea0c88aa9ae78b4954ab8412180b7d8 Mon Sep 17 00:00:00 2001 From: Gabriel Moreira Minossi Date: Thu, 14 Jan 2021 19:29:48 -0300 Subject: [PATCH 1/3] Integrating power widget with it's datasource --- Programs/monitor-system/api/gui/page/init.lua | 25 +++++--- Programs/monitor-system/api/gui/widget.lua | 64 +++++++++++++++---- .../data/datasource/machines.lua | 27 ++++++++ .../data/mock/mock-energy-provider.lua | 12 +++- .../energy/get-energy-status-usecase.lua | 19 +++--- Programs/monitor-system/init.lua | 15 ++--- 6 files changed, 121 insertions(+), 41 deletions(-) create mode 100644 Programs/monitor-system/data/datasource/machines.lua diff --git a/Programs/monitor-system/api/gui/page/init.lua b/Programs/monitor-system/api/gui/page/init.lua index eeab951..d6ec4ed 100644 --- a/Programs/monitor-system/api/gui/page/init.lua +++ b/Programs/monitor-system/api/gui/page/init.lua @@ -26,6 +26,8 @@ Widget = require("api.gui.widget") | e | w | w | w | | l | power |b|f| --]] +local page = {} + local pages = { glasses = require("api.gui.page.glasses"), widgets = require("api.gui.page.widgets"), @@ -41,11 +43,8 @@ pages[4] = pages.stock pages[5] = pages.notifications pages[6] = pages.overview -local page = {} - local elements = { machineWidgets = {}, - powerWidgets = {}, panelSections = {}, navigationButtons = {} } @@ -182,8 +181,8 @@ function page.create(element) elements[15] = elements.machineWidgets.active[8] elements[16] = elements.machineWidgets.active[9] - elements[18] = elements.powerWidgets[1] - elements[19] = elements.powerWidgets[1] + elements[18] = elements.powerWidget + elements[19] = elements.powerWidget elements[1] = elements.panelSections[1] elements[5] = elements.panelSections[2] @@ -197,7 +196,13 @@ end function page.fake() elements.machineWidgets = Widget.fakeWidgets() - elements.powerWidgets = Widget.fakePowerWidget() + elements.powerWidget = Widget.fakePowerWidget() + page.create(pages.overview) +end + +function page.setup(energyBufferAddress) + elements.machineWidgets = Widget.fakeWidgets() + elements.powerWidget = Widget.createPowerWidget(energyBufferAddress) page.create(pages.overview) end @@ -208,10 +213,10 @@ function page.update() for index, activeMachineWidget in ipairs(elements.machineWidgets.active) do activeMachineWidget.draw(activeMachineWidget, index) end - for index, powerWidget in ipairs(elements.powerWidgets) do - powerWidget:update() - powerWidget:draw(index) - end + + elements.powerWidget:update() + elements.powerWidget:draw() + for index, navigationButton in ipairs(elements.navigationButtons) do navigationButton:update() navigationButton:draw(index) diff --git a/Programs/monitor-system/api/gui/widget.lua b/Programs/monitor-system/api/gui/widget.lua index 19f38e8..0ff8cd6 100644 --- a/Programs/monitor-system/api/gui/widget.lua +++ b/Programs/monitor-system/api/gui/widget.lua @@ -3,6 +3,7 @@ Unicode = require("unicode") DoubleBuffer = require("graphics.doubleBuffering") Constants = require("api.gui.constants") Colors = require("graphics.colors") +Utility = require("utils.utility") local widget = {} @@ -13,6 +14,11 @@ local states = { {name = "BROKEN", color = Colors.errorColor} } +local types = { + power = "power", + machine = "machine" +} + local function drawProgress(x, y, width, height, progress, maxProgress, color) progress = math.floor(progress * (width + height - 2) / (maxProgress ~= 0 and maxProgress or 1)) @@ -64,7 +70,7 @@ function widget.drawBaseWidget(x, y, width, height, title) end local function draw(self, index) - if self.type == "power" then + if self.type == types.power then index = 10 end local scale = self.scale or 1 @@ -83,13 +89,23 @@ local function draw(self, index) else local middleInfo = self:getMiddleString() if middleInfo then - DoubleBuffer.drawText(x + 3 + 3 + Unicode.len("IDLE"), y + height - 3, Colors.textColor, middleInfo) + DoubleBuffer.drawText( + x - 3 - 3 + width - Unicode.len(middleInfo) - + Unicode.len( + Utility.splitNumber(self.progress) .. " / " .. Utility.splitNumber(self.maxProgress) .. " s" + ), + y + height - 3, + Colors.textColor, + middleInfo + ) end DoubleBuffer.drawText( - x + width - Unicode.len(self.progress .. "/" .. self.maxProgress .. " s") - 3, + x + width - + Unicode.len(Utility.splitNumber(self.progress) .. " / " .. Utility.splitNumber(self.maxProgress) .. " s") - + 3, y + height - 3, Colors.accentA, - self.progress .. "/" .. self.maxProgress .. " s" + Utility.splitNumber(self.progress) .. " / " .. Utility.splitNumber(self.maxProgress) .. " s" ) end end @@ -198,7 +214,8 @@ end function fake.powerWidget:getMiddleString() local remaining = self.dProgress > 0 and self.maxProgress - self.progress or -self.progress return (self.dProgress > 0 and "+" or "") .. - self.dProgress .. "EU/s. " .. (self.dProgress > 0 and "Full in: " or "Empty in: ") .. remaining / self.dProgress + self.dProgress .. + "EU/s. " .. (self.dProgress > 0 and " Full in: " or "Empty in: ") .. remaining / self.dProgress end function fake.powerWidget.create() @@ -207,9 +224,9 @@ function fake.powerWidget.create() state = states[1], progress = math.random(16000000), maxProgress = 16000000, - scale = 2, - type = "power", dProgress = 1, + scale = 2, + type = types.power, update = fake.powerWidget.update, onClick = fake.powerWidget.onClick, getMiddleString = fake.powerWidget.getMiddleString, @@ -228,12 +245,37 @@ function widget.fakeWidgets() end function widget.fakePowerWidget() - local fakePowerWidgets = {} + return fake.powerWidget.create() +end - table.insert(fakePowerWidgets, fake.powerWidget.create()) - fakePowerWidgets[11] = fakePowerWidgets[10] +function widget.createPowerWidget(address) + local getPowerStatus = require("domain.energy.get-energy-status-usecase") + local function update(self) + for key, value in pairs(getPowerStatus(address, "power")) do + self[key] = value + end + end - return fakePowerWidgets + local function getMiddleString(self) + local time = self.timeToFull or self.timeToEmpty .. " s" + return (self.dProgress > 0 and "+" or "") .. + self.dProgress .. + " EU/s. " .. (self.dProgress > 0 and " Full in: " or "Empty in: ") .. Utility.splitNumber(time) + end + + local powerWidget = { + name = "Power", + scale = 2, + type = types.power, + update = update, + onClick = function() + end, + getMiddleString = getMiddleString, + draw = draw + } + powerWidget:update() + + return powerWidget end return widget diff --git a/Programs/monitor-system/data/datasource/machines.lua b/Programs/monitor-system/data/datasource/machines.lua new file mode 100644 index 0000000..c83fcf9 --- /dev/null +++ b/Programs/monitor-system/data/datasource/machines.lua @@ -0,0 +1,27 @@ +-- Import section +local mock = require("data.mock.mock-energy-provider") +EnergyProvider = require("data.datasource.energy-provider") +Inherits = require("utils.inherits") +-- + +local machine = + Inherits( + EnergyProvider, + { + mock = mock, + name = "Generic Machine" + } +) +local machines = {} + +function machine.getMachine(address, name) + if machines[address] then + return machines[address] + else + local mach = machine:new(address, name) + machines[address] = mach + return mach + end +end + +return machine diff --git a/Programs/monitor-system/data/mock/mock-energy-provider.lua b/Programs/monitor-system/data/mock/mock-energy-provider.lua index 0cd29a3..bb2d3d6 100755 --- a/Programs/monitor-system/data/mock/mock-energy-provider.lua +++ b/Programs/monitor-system/data/mock/mock-energy-provider.lua @@ -1,6 +1,7 @@ -- Import section Inherits = require("utils.inherits") MockSingleBlock = require("data.mock.mock-single-block") +Utility = require("utils.utility") -- local MockEnergyProvider = @@ -11,15 +12,20 @@ local MockEnergyProvider = } ) +local progress = math.random(1608388608) +local input = math.random(16000) +local output = math.random(16000) function MockEnergyProvider.getSensorInformation() + input = input + math.random(-100, 100) + output = input + math.random(-100, 100) return { "§9Insane Voltage Battery Buffer§r", "Stored Items:", - "§a1,608,383,129§r EU / §e1,608,388,608§r EU", + "§a" .. Utility.splitNumber(progress + input - output) .. "§r EU / §e1,608,388,608§r EU", "Average input:", - "11,396 EU/t", + Utility.splitNumber(input) .. " EU/t", "Average output:", - "11,158 EU/t", + Utility.splitNumber(output) .. " EU/t", n = 7 } end diff --git a/Programs/monitor-system/domain/energy/get-energy-status-usecase.lua b/Programs/monitor-system/domain/energy/get-energy-status-usecase.lua index b08630d..e6e4634 100755 --- a/Programs/monitor-system/domain/energy/get-energy-status-usecase.lua +++ b/Programs/monitor-system/domain/energy/get-energy-status-usecase.lua @@ -1,13 +1,14 @@ -- Import section -local getConsumption = require("domain.energy.get-consumption-usecase") -local getProduction = require("domain.energy.get-production-usecase") +Machine = require("data.datasource.machines") -- -local function exec(energyBuffer) +local function exec(address, name) + local energyBuffer = Machine.getMachine(address, name) -- local comsumption = getConsumption(energyBuffer) -- local production = getProduction(energyBuffer) local consumption = energyBuffer:getAverageInput() local production = energyBuffer:getAverageOutput() + local state = {name = "ON", color = Colors.workingColor} local changeRate = production - consumption @@ -17,14 +18,16 @@ local function exec(energyBuffer) local energyLimit = changeRate > 0 and maximumEnergy or 0 - local timeToFull = changeRate > 0 and (energyLimit - currentEnergy) / changeRate or nil - local timeToEmpty = changeRate < 0 and (energyLimit - currentEnergy) / changeRate or nil + local timeToFull = changeRate > 0 and math.floor((energyLimit - currentEnergy) / changeRate) or nil + local timeToEmpty = changeRate < 0 and math.floor((energyLimit - currentEnergy) / changeRate) or nil return { - consumption = consumption, - production = production, + progress = currentEnergy, + maxProgress = maximumEnergy, + dProgress = changeRate, timeToFull = timeToFull, - timeToEmpty = timeToEmpty + timeToEmpty = timeToEmpty, + state = state } end diff --git a/Programs/monitor-system/init.lua b/Programs/monitor-system/init.lua index 5e186c3..70d9d96 100755 --- a/Programs/monitor-system/init.lua +++ b/Programs/monitor-system/init.lua @@ -1,16 +1,14 @@ -- Import section --- Event = require("event") --- Colors = require("graphics.colors") --- Widget = require("api.gui.widget") + Page = require("api.gui.page") --- Graphics = require("graphics.graphics") + -- MultiBlock = require("data.datasource.multi-block") -- SingleBlock = require("data.datasource.single-block") --- EnergyProvider = require("data.datasource.energy-provider") +EnergyProvider = require("data.datasource.energy-provider") -- local cleanroomAddresses = require("config.addresses.cleanroom") -- local multiBlockAddresses = require("config.addresses.multi-blocks") --- local energyBufferAddresses = require("config.addresses.energy-buffers") +local energyBufferAddresses = require("config.addresses.energy-buffers") -- local protectCleanroomRecipes = require("domain.cleanroom.protect-recipes-usecase") -- local getMultiblockStatuses = require("domain.multiblock.get-multiblock-status-usecase") @@ -64,12 +62,11 @@ end require("api.sound.zelda-secret")() --]] - -Page.fake() +Page.setup(energyBufferAddresses.batteryBuffer1) while true do Page.update() - os.sleep(0) + os.sleep(0.2) end --[[ From 598cfeb95b3b523beefbce9952f28bdb7f44d302 Mon Sep 17 00:00:00 2001 From: Gabriel Moreira Minossi Date: Thu, 14 Jan 2021 21:11:27 -0300 Subject: [PATCH 2/3] Adding types to `machine.lua` Fixing `powerWidget.getMiddleString` bug --- Programs/monitor-system/api/gui/widget.lua | 6 ++-- .../data/datasource/machine.lua | 30 +++++++++++++++++++ .../data/datasource/machines.lua | 27 ----------------- 3 files changed, 33 insertions(+), 30 deletions(-) create mode 100644 Programs/monitor-system/data/datasource/machine.lua delete mode 100644 Programs/monitor-system/data/datasource/machines.lua diff --git a/Programs/monitor-system/api/gui/widget.lua b/Programs/monitor-system/api/gui/widget.lua index 0ff8cd6..a9bda49 100644 --- a/Programs/monitor-system/api/gui/widget.lua +++ b/Programs/monitor-system/api/gui/widget.lua @@ -251,16 +251,16 @@ end function widget.createPowerWidget(address) local getPowerStatus = require("domain.energy.get-energy-status-usecase") local function update(self) - for key, value in pairs(getPowerStatus(address, "power")) do + for key, value in pairs(getPowerStatus(address, self.name)) do self[key] = value end end local function getMiddleString(self) - local time = self.timeToFull or self.timeToEmpty .. " s" + local time = self.timeToFull or self.timeToEmpty or 0 return (self.dProgress > 0 and "+" or "") .. self.dProgress .. - " EU/s. " .. (self.dProgress > 0 and " Full in: " or "Empty in: ") .. Utility.splitNumber(time) + " EU/s. " .. (self.dProgress >= 0 and " Full in: " or "Empty in: ") .. Utility.splitNumber(time) .. " s" end local powerWidget = { diff --git a/Programs/monitor-system/data/datasource/machine.lua b/Programs/monitor-system/data/datasource/machine.lua new file mode 100644 index 0000000..4d0668c --- /dev/null +++ b/Programs/monitor-system/data/datasource/machine.lua @@ -0,0 +1,30 @@ +-- Import section +local mock = require("data.mock.mock-energy-provider") +EnergyProvider = require("data.datasource.energy-provider") +Inherits = require("utils.inherits") +-- + +local machine = Inherits(EnergyProvider) +local machines = {} +machine.types = { + energy = "energy", + multiblock = "multiblock", + singleblock = "singleblock" +} + +function machine.getMachine(address, name, type) + if machines[address] then + return machines[address] + else + local mach = {} + if type == machine.types.energy then + print(machine.name) + elseif type == machine.types.multiblock then + end + mach = machine:new(address, name) + machines[address] = mach + return mach + end +end + +return machine diff --git a/Programs/monitor-system/data/datasource/machines.lua b/Programs/monitor-system/data/datasource/machines.lua deleted file mode 100644 index c83fcf9..0000000 --- a/Programs/monitor-system/data/datasource/machines.lua +++ /dev/null @@ -1,27 +0,0 @@ --- Import section -local mock = require("data.mock.mock-energy-provider") -EnergyProvider = require("data.datasource.energy-provider") -Inherits = require("utils.inherits") --- - -local machine = - Inherits( - EnergyProvider, - { - mock = mock, - name = "Generic Machine" - } -) -local machines = {} - -function machine.getMachine(address, name) - if machines[address] then - return machines[address] - else - local mach = machine:new(address, name) - machines[address] = mach - return mach - end -end - -return machine From 6add69e5f8076ca3856f7821c425698b428a864f Mon Sep 17 00:00:00 2001 From: Gabriel Moreira Minossi Date: Thu, 14 Jan 2021 21:42:33 -0300 Subject: [PATCH 3/3] Adding energy specific status --- Programs/monitor-system/api/gui/widget.lua | 4 +--- .../data/mock/mock-energy-provider.lua | 3 ++- .../energy/get-energy-status-usecase.lua | 20 +++++++++++++------ setup.lua | 2 +- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/Programs/monitor-system/api/gui/widget.lua b/Programs/monitor-system/api/gui/widget.lua index a9bda49..197b1eb 100644 --- a/Programs/monitor-system/api/gui/widget.lua +++ b/Programs/monitor-system/api/gui/widget.lua @@ -258,9 +258,7 @@ function widget.createPowerWidget(address) local function getMiddleString(self) local time = self.timeToFull or self.timeToEmpty or 0 - return (self.dProgress > 0 and "+" or "") .. - self.dProgress .. - " EU/s. " .. (self.dProgress >= 0 and " Full in: " or "Empty in: ") .. Utility.splitNumber(time) .. " s" + return (self.dProgress >= 0 and " Full in: " or "Empty in: ") .. Utility.splitNumber(time) .. " s" end local powerWidget = { diff --git a/Programs/monitor-system/data/mock/mock-energy-provider.lua b/Programs/monitor-system/data/mock/mock-energy-provider.lua index bb2d3d6..b77d25a 100755 --- a/Programs/monitor-system/data/mock/mock-energy-provider.lua +++ b/Programs/monitor-system/data/mock/mock-energy-provider.lua @@ -18,10 +18,11 @@ local output = math.random(16000) function MockEnergyProvider.getSensorInformation() input = input + math.random(-100, 100) output = input + math.random(-100, 100) + progress = progress + input - output > 0 and progress + input - output or 0 return { "§9Insane Voltage Battery Buffer§r", "Stored Items:", - "§a" .. Utility.splitNumber(progress + input - output) .. "§r EU / §e1,608,388,608§r EU", + "§a" .. Utility.splitNumber(progress) .. "§r EU / §e1,608,388,608§r EU", "Average input:", Utility.splitNumber(input) .. " EU/t", "Average output:", diff --git a/Programs/monitor-system/domain/energy/get-energy-status-usecase.lua b/Programs/monitor-system/domain/energy/get-energy-status-usecase.lua index e6e4634..804666c 100755 --- a/Programs/monitor-system/domain/energy/get-energy-status-usecase.lua +++ b/Programs/monitor-system/domain/energy/get-energy-status-usecase.lua @@ -1,15 +1,12 @@ -- Import section -Machine = require("data.datasource.machines") +Machine = require("data.datasource.machine") -- local function exec(address, name) - local energyBuffer = Machine.getMachine(address, name) - -- local comsumption = getConsumption(energyBuffer) - -- local production = getProduction(energyBuffer) + local energyBuffer = Machine.getMachine(address, name, Machine.types.energy) + local consumption = energyBuffer:getAverageInput() local production = energyBuffer:getAverageOutput() - local state = {name = "ON", color = Colors.workingColor} - local changeRate = production - consumption local totalEnergy = energyBuffer:getTotalEnergy() @@ -18,6 +15,17 @@ local function exec(address, name) local energyLimit = changeRate > 0 and maximumEnergy or 0 + local state = {} + if (currentEnergy == maximumEnergy) then + state = {name = changeRate .. " EU/s", color = Colors.workingColor} + elseif currentEnergy == 0 then + state = {name = changeRate .. " EU/s", color = Colors.errorColor} + elseif changeRate > 0 then + state = {name = "+" .. changeRate .. " EU/s", color = Colors.idleColor} + else + state = {name = changeRate .. " EU/s", color = Colors.offColor} + end + local timeToFull = changeRate > 0 and math.floor((energyLimit - currentEnergy) / changeRate) or nil local timeToEmpty = changeRate < 0 and math.floor((energyLimit - currentEnergy) / changeRate) or nil diff --git a/setup.lua b/setup.lua index 2c2381b..a504e67 100644 --- a/setup.lua +++ b/setup.lua @@ -9,7 +9,7 @@ shell.execute("wget -fq " .. tarMan) shell.setWorkingDirectory("/bin") shell.execute("wget -fq " .. tarBin) -local InfOS = "https://github.com/gordominossi/InfOS/releases/download/v0.1/InfOS.tar" +local InfOS = "https://github.com/gordominossi/InfOS/releases/download/v0.2/InfOS.tar" shell.setWorkingDirectory("/home") if not shell.resolve("/home/lib") then