-- remote_console.lua (CC:Tweaked)
-- Advanced wireless computer. Mirrors turtle logs and sends basic controls.
-- Keys: [P]=pause [R]=resume [S]=stop [Q]=quit viewer
local PROTO = "tmine.v1"
local function openAnyModem()
for _,side in ipairs(rs.getSides()) do
if peripheral.getType(side) == "modem" then
local m = peripheral.wrap(side)
if m and m.isWireless and m.isWireless() then
rednet.open(side)
return true
end
end
end
return false
end
assert(openAnyModem(), "No wireless modem found/opened")
local filterID = nil
term.clear(); term.setCursorPos(1,1)
print("Turtle Log Console")
print("Optional: enter a Turtle computer ID to filter, or press Enter:")
local line = read()
if line and line:match("%d+") then filterID = tonumber(line) end
term.clear(); term.setCursorPos(1,1)
print("Listening for logs... [P]=pause [R]=resume [S]=stop [Q]=quit")
local function sendCmd(cmd)
rednet.broadcast({cmd=cmd}, PROTO)
end
local function keyTask()
while true do
local e, key = os.pullEvent("key")
if key == keys.p then sendCmd("pause")
elseif key == keys.r then sendCmd("resume")
elseif key == keys.s then sendCmd("stop")
elseif key == keys.q then break
end
end
end
local function logTask()
while true do
local _, sender, payload, proto = os.pullEvent("rednet_message")
if proto == PROTO and type(payload)=="table" and payload.msg then
if not filterID or filterID == payload.id then
local ts = os.date("!%H:%M:%S", math.floor((payload.t or 0)/1000))
print(("[%s] #%s: %s"):format(ts, tostring(payload.id or "?"), payload.msg))
end
end
end
end
parallel.waitForAny(keyTask, logTask)
print("Console closed.")
Comments