robathome icon

Basic miner remote console

robathome | PRO | 10/27/25 07:50:47 PM UTC | 0 ⭐ | 324 👁️ | Never ⏰ | []
text |

1.75 KB

|

None

|

0 👍

/

0 👎

-- 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