computercraft/energy_control
2023-11-22 23:03:25 +01:00

119 lines
3.4 KiB
Lua

-- vi: ft=lua
local hostname = "pocket_computer" .. os.getComputerID()
redstone_toggle_id = 50
de_store_mon_id = 45
function dump(o)
if o == nil then
return ""
end
if type(o) == 'table' then
local s = '{ '
for k,v in pairs(o) do
if type(k) ~= 'number' then k = '"'..k..'"' end
s = s .. '['..k..'] = ' .. dump(v) .. ','
end
return s .. '} '
end
return tostring(o)
end
function poll()
while true do
if redstone_toggle_id ~= nil then
rednet.send(redstone_toggle_id, "get_state")
end
if de_store_mon_id ~= nil then
rednet.send(de_store_mon_id, "get_stats")
end
sleep(1)
end
end
function recv()
local redstone_toggle_state
local de_store_energy_stored, de_store_max_energy_stored, de_store_transfer_per_tick
local updated = false
while true do
local id, data = rednet.receive()
if id == redstone_toggle_id then
if type(data) == 'table' then
if data[1] == 'output_state' then
redstone_toggle_state = data[2]
updated = true
end
end
elseif id == de_store_mon_id then
if type(data) == 'table' then
if data[1] == 'energyStored' then
de_store_energy_stored = data[2]
end
if data[3] == 'maxEnergyStored' then
de_store_max_energy_stored = data[4]
end
if data[5] == 'transferPerTick' then
de_store_transfer_per_tick = data[6]
end
updated = true
end
end
if updated == true then
term.clear()
term.setCursorPos(1, 1)
term.setTextColor(colors.white)
term.setBackgroundColor(colors.black)
write('Press "T" to toggle the rainbows.\n')
term.write('Rainbows state: ')
if redstone_toggle_state == true then
term.setBackgroundColor(colors.green)
write('On\n')
elseif redstone_toggle_state == false then
term.setBackgroundColor(colors.red)
write('Off\n')
elseif redstone_toggle_state == nil then
term.setBackgroundColor(colors.purple)
write('Unknown\n')
end
term.setBackgroundColor(colors.black)
print()
print('Draconic Storage')
print('Current: ' .. de_store_energy_stored)
print('Max: ' .. de_store_max_energy_stored)
print('Transfer per Tick: ' .. de_store_transfer_per_tick)
end
end
end
function key_watcher()
while true do
local event, param = os.pullEvent("key")
if event == "key" then
-- print("Got key: " .. param)
if param == keys.backspace then
break
elseif param == keys.t then
rednet.send(redstone_toggle_id, 'toggle')
end
end
end
end
local sides = peripheral.getNames()
for i = 1, #sides do
if peripheral.getType(sides[i]) == "modem" then
modemSide = sides[i]
break
end
end
rednet.open(modemSide)
rednet.host("rmm", hostname)
parallel.waitForAny(poll, recv, key_watcher)
rednet.close(modemSide)