2021-01-12 00:52:28 +01:00

106 lines
2.4 KiB
Plaintext

--import utils for lamp rednet stuffs
dofile("/git-scripts/utils")
--regulate in between these in normal operation
NORMAL_THRESHOLD_U = 8000000
NORMAL_THRESHOLD_L = 7000000
--control rod pos for normal operation
NORMAL_ROD_POS = 81
--proportionally increase production when energy
--storage drops below this level
--(by removing control rods)
HIGH_THRESHOLD = 6000000
local active = false
local ctrl_rods = NORMAL_ROD_POS
local reactor = peripheral.wrap("back")
local mon = peripheral.wrap("right")
--connect to lamp via rednet (if present)
local modemSide = utils.getSideOf("modem")
if modemSide then --not nil
rednet.open("modemSide")
local lampID = rednet.lookup("reactLamp", "reactLamp")
end
print("Monitoring reactor...")
while (true)
do
--setup monitor
mon.clear()
--get reactor energy
local energy = reactor.getEnergyStored()
--display
mon.setCursorPos(1, 1) --why is there no print() ???
mon.write(energy)
mon.write("RF")
if (energy > NORMAL_THRESHOLD_U)
then
active = false
else
if (energy < NORMAL_THRESHOLD_L)
then
active = true
if (energy < HIGH_THRESHOLD)
then
--proportional control
ctrl_rods = NORMAL_ROD_POS * (energy / HIGH_THRESHOLD)
end
end
end
--actually set state
mon.setCursorPos(1, 2)
if (active)
then
reactor.setActive(true)
mon.write("On")
else
reactor.setActive(false)
mon.write("Off")
end
mon.setCursorPos(1, 4)
reactor.setAllControlRodLevels(ctrl_rods)
mon.write(ctrl_rods)
mon.write("%")
--display power produced
mon.setCursorPos(1, 3)
mon.write(math.floor(reactor.getEnergyProducedLastTick()))
mon.write("RF/t")
--also check if fuel has run out
--(if the fuel inside the reactor isn't
--getting refilled anymore)
local deltaFuel = reactor.getFuelAmountMax() - reactor.getFuelAmount()
if (deltaFuel > 1000) --more than 1 bucket
then
mon.setCursorPos(1, 5)
mon.write("REFUEL!")
--send fuel state to lamp
if lampID then --not nil: rednet present and found lamp!
rednet.send(lampID, "1", "reactLamp")
end
else
if lampID then
rednet.send(lampID, "0", "reactLamp")
end
end
sleep(1)
end
--infinite loop; rednet never gets closed