-- Reactor Info Server
-- Reads reactor statistics and broadcasts them via rednet every 0.5 seconds
-- Configuration
local BROADCAST_INTERVAL = 0.5
local PROTOCOL = "reactor_stats"
-- Initialize peripherals
local r = peripheral.wrap("bottom")
if not r then
print("Error: No reactor found on bottom!")
return
end
-- Open rednet on any available modem
local modem = nil
for _, side in ipairs(peripheral.getNames()) do
if peripheral.getType(side) == "modem" then
modem = peripheral.wrap(side)
if modem.isWireless() then
rednet.open(side)
print("Rednet opened on wireless modem: " .. side)
break
end
end
end
if not modem then
print("Error: No wireless modem found!")
return
end
print("Reactor Info Server Started")
print("Broadcasting on protocol: " .. PROTOCOL)
print("Interval: " .. BROADCAST_INTERVAL .. " seconds")
print("Press Ctrl+T to stop")
print("")
while true do
-- Get reactor information
local success, info = pcall(function() return r.getReactorInfo() end)
if success and info then
-- Print statistics to local terminal
term.clear()
term.setCursorPos(1, 1)
print("=== REACTOR SERVER STATUS ===")
print("Status: " .. tostring(info.status))
print("Temperature: " .. string.format("%.2f C", info.temperature))
print("Generation: " .. string.format("%.2f kRF/t", info.generationRate / 1000))
print("Field Drain: " .. string.format("%.2f kRF/t", info.fieldDrainRate / 1000))
print("Net Energy: " .. string.format("%.2f kRF/t", (info.generationRate - info.fieldDrainRate) / 1000))
print("Field Strength: " .. string.format("%.2f%%", (info.fieldStrength / info.maxFieldStrength) * 100))
print("Energy Saturation: " .. string.format("%.2f%%", (info.energySaturation / info.maxEnergySaturation) * 100))
-- Add fuel information if available
if info.fuelConversion and info.maxFuelConversion then
print("Fuel Progress: " .. string.format("%.2f%%", (info.fuelConversion / info.maxFuelConversion) * 100))
end
if info.fuelConversionRate then
print("Fuel Rate: " .. string.format("%.3f nb/t", info.fuelConversionRate / 1000))
end
print("")
print("Broadcasting to clients...")
-- Broadcast the reactor info to all clients
rednet.broadcast(info, PROTOCOL)
else
term.clear()
term.setCursorPos(1, 1)
print("=== REACTOR SERVER ERROR ===")
print("Failed to read reactor data!")
print("Error: " .. tostring(info))
print("")
print("Retrying in " .. BROADCAST_INTERVAL .. " seconds...")
end
sleep(BROADCAST_INTERVAL)
end