——————-——————-———————————————————————————————-——————————————————————
CHANGELOG:
March 21, 2017 - Fixed mekanism compatibility. added positive/negative change in stored energy. Modified how the currently stored energy is displayed
(may look into Zetta Industries mod compatibility)
I made a small computer program for advanced computers that tells you your power levels for energy cells(TE3), mfe,mfsu,batbox(ic2), enderIO capacitor banks and mekanism energy cubes.
-note: currently only works with single EnderIO capacitors . doesnt work with the EnderIO multiblock
the program could work with any block that stores energy
To use the code just type: pastebin get 9b6m3ym1 install.lua in the terminal. note: must be advanced computer and advanced monitors!
then just run install.lua in the console. the installer will run and download the program for you
[Lua] Power Monitor Installer V:30 - Pastebin.com
[Lua] Power Monitor setup V:30 - Pastebin.com (note: you dont need to pastebin get this one. it is done automatically with the installation program)
[Lua] Power Monitor Program V:30 - Pastebin.com (note: you dont need to pastebin get this one. it is done automatically with the installation program)
Pictures Of Terminal
Spoiler
This is the setup walkthrough i made for itthis is the information panel
this is a basic setup.
Spoiler
note:Spoiler
Setup Code
--[[ Power Monitoring Program Written By: 0_Mr_Redstone_0 AKA MoJoCreatior
This code is considered free for use both commercial and private and can be redistributed so long as it meats following criteria:
1: 0_Mr_Redstone_0 and MoJoCreatior are credited as the original authors
2: You do not try to take full ownership of the code/written program
3: If you modify the code for re-upload you must provide it under the same conditions. as in- Open Source, and credit me as original author]]
program = "Power Monitor"
setup = "f2ty2kg3"
program = "trrwXhMX"
--functions
function intro()
term.setBackgroundColour(colors.white)
term.clear()
term.setCursorPos(1,1)
term.setTextColour(colors.green)
print(program.." -Written By: 0_Mr_Redstone_0 AKA MoJoCreatior\n")
end
function install()
fs.delete("setup.lua")
fs.delete("program.lua")
fs.delete("config/")
shell.run("pastebin get "..setup.." setup.lua")
shell.run("pastebin get "..program.." program.lua")
fs.delete("startup")
startup = fs.open("startup","w")
startup.write('shell.run("setup.lua")')
startup.close()
if fs.exists("config/update") == true then print("Updated")
else print("Installed")
end
end
function configSave(name,data)
cfg = fs.open("config/"..name,"w")
cfg.write(data)
cfg.close()
end
function RFAPI()
rfAPI = false
if peripheral.find("tile_thermalexpansion_cell_resonant_name") == nil then
else cube = peripheral.find("tile_thermalexpansion_cell_resonant_name")
rfAPI = true
end
if peripheral.find("tile_blockcapacitorbank_name") == nil then
else cube = peripheral.find("tile_blockcapacitorbank_name")
rfAPI = true
end
end
function IC2Check()
IC2 = false
if peripheral.find("mfsu") == nil then
else cube = peripheral.find("mfsu")
IC2 = true
end
if peripheral.find("mfe") == nil then
else cube = peripheral.find("mfe")
IC2 = true
end
if peripheral.find("cesu") == nil then
else cube = peripheral.find("cesu")
IC2 = true
end
if peripheral.find("batbox") == nil then
else cube = peripheral.find("batbox")
IC2 = true
end
end
function mekanismCheck()
mekanism = false
if peripheral.find("Basic Energy Cube") == nil then
else cube = peripheral.find("Basic Energy Cube")
mekanism = true
end
if peripheral.find("Advanced Energy Cube") == nil then
else cube = peripheral.find("Advanced Energy Cube")
mekanism = true
end
if peripheral.find("Elite Energy Cube") == nil then
else cube = peripheral.find("Elite Energy Cube")
mekanism = true
end
if peripheral.find("Ultimate Energy Cube") == nil then
else cube = peripheral.find("Ultimate Energy Cube")
mekanism = true
end
if peripheral.find("Induction Matrix") == nil then
else cube = peripheral.find("Induction Matrix")
mekanism = true
end
end
RFAPI()
IC2Check()
mekanismCheck()
intro()
if peripheral.find("monitor") == nil then
print("Connect Monitor!") print("terminating") sleep(2.5) os.reboot()
end
if rfAPI == true then
elseif IC2 == true then
elseif mekanism == true then
else print("Connect Energy Cell!") print("terminating") sleep(2.5) os.reboot()
end
install()
os.reboot()
Program Code
--[[ Power Monitoring Program Written By: 0_Mr_Redstone_0 AKA MoJoCreatior
This code is considered free for use both commercial and private and can be redistributed so long as it meats following criteria:
1: 0_Mr_Redstone_0 and MoJoCreatior are credited as the original authors
2: You do not try to take full ownership of the code/written program
3: If you modify the code for re-upload you must provide it under the same conditions. as in- Open Source, and credited to me as original author]]
program = "Power Monitoring Program V:30"
--Function
function intro()
term.setBackgroundColour(colors.white)
term.clear()
term.setCursorPos(1,1)
term.setTextColour(colors.green)
print(program.." -Written By: 0_Mr_Redstone_0 AKA MoJoCreatior")
print(" ")
end
function centerText(text,yVal)
length = string.len(text)
minus = math.floor(monX-length)
x = math.floor(minus/2)
mon.setCursorPos(x+1,yVal)
mon.write(text)
end
function centerTextC(text,line,colorB,colorT)
mon.setBackgroundColour(colorB)
mon.setTextColour(colorT)
length = string.len(text)
minus = math.floor(monX-length)
x = math.floor(minus/2)
mon.setCursorPos(x+1,line)
mon.write(text)
end
function clearScreen()
mon.setBackgroundColour(convert(colorMB))
mon.clear()
end
function config(name)
if fs.exists("config/"..name) then
cfg = fs.open("config/"..name,"r")
name = cfg.readAll()
cfg.close()
return name
else
fs.delete("startup")
startup = fs.open("startup","w")
startup.write('shell.run("setup.lua")')
startup.close()
term.setTextColour(colors.red)
print("ERROR! 404")
print(name.." config not found")
term.setTextColour(colors.blue)
print("rebooting into setup")
print("3") sleep(1)
print("2") sleep(1)
print("1") sleep(1)
os.reboot()
end
end
function textScale()
mon.setTextScale(0.5)
monX,monY = mon.getSize()
if monX <= 16 or monY <= 11 then mon.setTextScale(0.5) elseif
monX <= 37 or monY <= 25 then mon.setTextScale(1) elseif
monX <= 58 or monY <= 39 then mon.setTextScale(1.5) elseif
monX <= 80 or monY <= 53 then mon.setTextScale(2) elseif
monX <= 101 or monY <= 68 then mon.setTextScale(2.5) else
mon.setTextScale(3)
end
end
function IC2Check()
IC2 = false
if peripheral.find("mfsu") == nil then
else cube = peripheral.find("mfsu")
IC2 = true
end
if peripheral.find("mfe") == nil then
else cube = peripheral.find("mfe")
IC2 = true
end
if peripheral.find("cesu") == nil then
else cube = peripheral.find("cesu")
IC2 = true
end
if peripheral.find("batbox") == nil then
else cube = peripheral.find("batbox")
IC2 = true
end
end
function mekanismCheck()
mekanism = false
if peripheral.find("Basic Energy Cube") == nil then
else cube = peripheral.find("Basic Energy Cube")
mekanism = true
end
if peripheral.find("Advanced Energy Cube") == nil then
else cube = peripheral.find("Advanced Energy Cube")
mekanism = true
end
if peripheral.find("Elite Energy Cube") == nil then
else cube = peripheral.find("Elite Energy Cube")
mekanism = true
end
if peripheral.find("Ultimate Energy Cube") == nil then
else cube = peripheral.find("Ultimate Energy Cube")
mekanism = true
end
if peripheral.find("Induction Matrix") == nil then
else cube = peripheral.find("Induction Matrix")
mekanism = true
end
end
function RFAPI()
if peripheral.find("tile_thermalexpansion_cell_resonant_name") == nil then
else cube = peripheral.find("tile_thermalexpansion_cell_resonant_name")
end
if peripheral.find("tile_blockcapacitorbank_name") == nil then
else cube = peripheral.find("tile_blockcapacitorbank_name")
end
end
function convert(color)
if color == "white" then color = colors.white end
if color == "orange" then color = colors.orange end
if color == "magenta" then color = colors.magenta end
if color == "lightBlue" then color = colors.lightBlue end
if color == "yellow" then color = colors.yellow end
if color == "lime" then color = colors.lime end
if color == "pinkgray" then color = colors.pinkgray end
if color == "gray" then color = colors.gray end
if color == "lightGray" then color = colors.lightGray end
if color == "cyan" then color = colors.cyan end
if color == "purple" then color = colors.purple end
if color == "blue" then color = colors.blue end
if color == "brown" then color = colors.brown end
if color == "green" then color = colors.green end
if color == "red" then color = colors.red end
if color == "black" then color = colors.black end
return color
end
function eChange()
newE = curE
local difference = (newE-oldE)
oldE = curE
if rate == "f" then dividend = 20 elseif rate == "s" then dividend = 100 end
local change = math.floor(difference/dividend)
return(change)
end
--PreFace
--Color Coneverter
--Load Settings
title = config("title")
rate = config("rate")
dynamic = config("dynamic")
colorTB = config("colorTB")
colorTT = config("colorTT")
colorMB = config("colorMB")
colorST = config("colorST")
colorBT = config("colorBT")
colorBE = config("colorBE")
colorBF = config("colorBF")
colorPR = config("colorPR")
colorPos = config("colorPos")
colorNeg = config("colorNeg")
redstone = config("redstone")
side = config("side")
bundled = config("bundled")
options = config("options")
IC2Check()
mekanismCheck()
RFAPI()
--Shows Settings inside control computer
intro()
term.setTextColour(colors.red)
print("Final Settings")
term.setTextColour(colors.blue)
print(" Title: "..title)
if rate == "f" then print(" Refresh Rate: fast") else print(" Refresh Rate: slow") end
if mekanism == true then print(" Mekanism: true") else print(" Mekanism: false") end
if IC2 == true then print(" IC2: true") else print(" IC2: false") end
if dynamic == "y" then print(" Dynamic Scaling: true") else print(" Dynamic Scaling: false") end
if options == "y" then
term.setTextColour(colors.red)
print("\nAdvanced Options")
term.setTextColour(colors.blue)
print(" Title Text Color: "..colorTT)
print(" Title Background: "..colorTB)
print(" Background Color: "..colorMB)
print(" Statistics Color: "..colorST)
print(" Bar Percent Text: "..colorBT)
print(" Bars Empty Color: "..colorBE)
print(" Bar Filled Color: "..colorBF)
print(" Positive Change: "..colorPos)
print(" Negative Change: "..colorNeg)
end
term.setTextColour(colors.gray)
print("Million < Billion < Trillion < Quadrillion")
term.setTextColour(colors.red)
print("\nIf settings are incorrect. Run setup.lua")
print("Hold CTRL+T to stop program")
--RF/EU label
if IC2 == true then energyAPI = " EU" else energyAPI = " RF" end
if IC2 == true then energyAPI_ = "EU" else energyAPI_ = "RF" end
--Wraps the Monitor
mon = peripheral.find("monitor")
monX,monY = mon.getSize()
textScale()
monX,monY = mon.getSize()
oldE,newE,curE,maxE = 0,0,0,0
while true do
if dynamic == "y" then textScale() end
--Main Program
--Variables for Calculations
if mekanism == true then maxE = cube.getMaxEnergy() or 1
elseif IC2 == true then maxE = cube.getEUCapacity() or 1
else maxE = cube.getMaxEnergyStored() or 1
end
if mekanism == true then curE = cube.getEnergy() or 1
elseif IC2 == true then curE = cube.getEUStored() or 1
else curE = cube.getEnergyStored() or 1
end
if mekanism == true then
maxE = math.floor(maxE/2.5)
curE = math.floor(curE/2.5)
end
percent = math.floor(((curE/maxE)*100)+0.5)
bar = math.floor(((curE/maxE)*(monX-2))+0.5)
stats = curE
--Redstone Output
if redstone == "y" then
if bundled == "1" then
if percent >= 99 then
rs.setBundledOutput(side,convert(colorPR))
else rs.setBundledOutput(side,0)
end
else
if percent >= 99 then
rs.setOutput(side,true)
else rs.setOutput(side,false)
end
end
end
--Centers and Displays Title On Monitor
clearScreen()
mon.setBackgroundColour(colors.black)
mon.setTextColour(colors.lightGray)
mon.setCursorPos(1,1)
centerTextC(string.rep(" ",string.len(title)+2),1,convert(colorTB),convert(colorTT))
centerTextC(title,1,convert(colorTB),convert(colorTT))
--Monitor Statistics
--[[if curE >= 1000000 and curE <= 1000000000 then
stats = math.floor(stats/1000)
stats = (stats/1000)
mbtq = " M"
else]]if curE >= 1000000000 and curE <= 1000000000000 then
stats = math.floor(stats/100000)
stats = (stats/1000)
mbtq = " B"
elseif curE >= 1000000000000 and curE <= 1000000000000000 then
stats = math.floor(stats/100000000)
stats = (stats/1000)
mbtq = " T"
elseif curE >= 1000000000000000 then
stats = math.floor(stats/100000000000)
stats = (stats/1000)
mbtq = " Q"
elseif curE <= 1000000 then mbtq = " "
end
mon.setBackgroundColour(convert(colorMB))
mon.setTextColour(convert(colorST))
if curE >= 1000000 then eAPI = energyAPI_ else eAPI = energyAPI end
centerText(stats..mbtq..eAPI,3)
--[[
if monX >= math.floor(string.len(stats)+9)
then
centerText("Total:"..stats..mbtq..eAPI,3)
else
centerText("Total:",3)
centerText(stats..mbtq..eAPI,4)
end
]]
--Change Per Tick Calculator and Display
e_Change = eChange()
if e_Change >= 0 then sign = "+" elseif e_Change <= 0 then sign = "-" end
if e_Change >= 0 then signC = colorPos elseif e_Change <= 0 then signC = colorNeg end
centerTextC(sign..e_Change..energyAPI.."/t",5,convert(colorMB),convert(signC))
centerTextC(percent.."% Full",monY-3,convert(colorMB),convert(colorBT))
--Loading Bar Code Re-Written Much MUCH simpler than before
mon.setCursorPos(2,monY-2)
mon.setBackgroundColour(convert(colorBE))
mon.write(string.rep(" ",monX-2))
mon.setCursorPos(2,monY-2)
mon.setBackgroundColour(convert(colorBF))
mon.write(string.rep(" ",bar))
mon.setCursorPos(2,monY-1)
mon.setBackgroundColour(convert(colorBE))
mon.write(string.rep(" ",monX-2))
mon.setCursorPos(2,monY-1)
mon.setBackgroundColour(convert(colorBF))
mon.write(string.rep(" ",bar))
if rate == "f" then os.sleep(1)
elseif rate == "s" then os.sleep(5)
else os.sleep(5) end
end
Setup Code
--[[ Power Monitoring Program Written By: 0_Mr_Redstone_0 AKA MoJoCreatior
This code is considered free for use both commercial and private and can be redistributed so long as it meats following criteria:
1: 0_Mr_Redstone_0 and MoJoCreatior are credited as the original authors
2: You do not try to take full ownership of the code/written program
3: If you modify the code for re-upload you must provide it under the same conditions. as in- Open Source, and credit me as original author]]
program = "Power Monitoring Setup V:21"
--functions
function intro()
term.setBackgroundColour(colors.white)
term.clear()
term.setCursorPos(1,1)
term.setTextColour(colors.green)
print(program.." -Written By: 0_Mr_Redstone_0 AKA MoJoCreatior\n")
term.setTextColour(colors.orange)
print("Hold 'CTRL+R' to start over\n")
end
function setup(question,file,binary,subText)
term.setBackgroundColour(colors.white)
term.clear()
intro()
term.setTextColour(colors.gray)
print(question)
if binary == 1 then
term.setTextColour(colors.lightGray)
print(subText)
end
term.setTextColour(colors.cyan)
fs.delete("config/"..file)
cfg = fs.open("config/"..file,"w")
answer = io.read()
cfg.write(answer)
cfg.close()
end
function setupSub(question,file,binary,subText)
term.setTextColour(colors.gray)
print(question)
if binary == 1 then
term.setTextColour(colors.lightGray)
print(subText)
end
term.setTextColour(colors.cyan)
fs.delete("config/"..file)
cfg = fs.open("config/"..file,"w")
answer = io.read()
cfg.write(answer)
cfg.close()
end
function update()
fs.delete("startup")
startup = fs.open("startup","w")
startup.write("shell.run('install.lua')")
startup.close()
end
function config(name)
cfg = fs.open("config/"..name,"r")
name = cfg.readAll()
cfg.close()
return name
end
function configSave(name,data)
cfg = fs.open("config/"..name,"w")
cfg.write(data)
cfg.close()
end
--Setup
if not fs.exists("install.lua") then shell.run("pastebin get 9b6m3ym1 install.lua") end
intro()
if fs.exists("config/update") then setup("Do you want to Update?","update",1," [y/n]") updateV = answer end
configSave("update","true")
if updateV == "y" then update() os.reboot() end
setup("Would you like Advanced Options?","options",1,"[y/n]\n Allows you to set Custom Colors")
setup("What do you want the Title to be?","title",1,"Titles will appear off screen if made too long")
if config("options") == "y" then
setupSub("\nWhat color should the Titles Background be?","colorTB",1," Case Sensitive")
setupSub("\nWhat color should the Titles Text be?","colorTT",1," Case Sensitive")
setup("What color should the Monitor Background be?","colorMB",1," Case Sensitive")
setupSub("\nWhat color should the Energy Statistics be?","colorST",1," Case Sensitive")
setupSub("\nWhat color should the Empty Bar be?","colorBE",1," Case Sensitive")
setupSub("\nWhat color should the Filled Bar be?","colorBF",1," Case Sensitive")
setupSub("\nWhat color should the % Filled be?","colorBT",1," Case Sensitive")
setupSub("\nWhat color should positive change be?","colorPos",1," Case Sensitive")
setupSub("\nWhat color should negative change be?","colorNeg",1," Case Sensitive")
else
configSave("colorTB","black")
configSave("colorTT","white")
configSave("colorMB","white")
configSave("colorST","blue")
configSave("colorBE","gray")
configSave("colorBF","lime")
configSave("colorBT","cyan")
configSave("colorPos","green")
configSave("colorNeg","red")
end
setup("Would you like to enable Redstone Output?","redstone",1," [y/n]")
if config("redstone") == "y" then
setupSub("Are you using -1-Project:Red Bundled Cable or -2-Vanilla Redstone?","bundled",1," [1/2]\n You can choose Bundled Cable Color\n as well the side the output is on")
setupSub("What side of the computer should the output be on?","side",1," right,left,front,back,top,bottom")
if config("bundled") == "1" then
setupSub("What color cable should the output be on?","colorPR",1," Case Sensitive")
else configSave("colorPR","0")
end
else
configSave("bundled","0")
configSave("side","0")
configSave("colorPR","0")
end
setup("Should the Monitor Refresh be fast or slow?","rate",1," [f/s]\n fast is every 1 second\n slow is every 5 seconds")
setup("Would you like Dynamic Text Scaling to be turned on?","dynamic",1,"[y/n]\n Makes Text Scaling update as\n you Change the monitor size")
intro()
print("Auto Restart in 3 seconds!") sleep(1)
print("Auto Restart in 2 seconds!") sleep(1)
print("Auto Restart in 1 seconds!") sleep(1)
print("Restarting...")
startup = fs.open("startup","w")
startup.write('shell.run("program.lua")')
startup.close()
os.reboot()
More Info
using side name such as "top" and "back" in the name input doesn't currently works perfectly. DO NOT USE THE QUOTES!
All peripherals should automatically connect, because of this make sure to only have one of each peripheral connected to the same network, otherwise the program will use the first one it finds and skip the rest.
Feel free to ask questions of needed. or just leave any suggestions for the code. :)/>/&gt;
EDIT: Fixed Images
EDIT 2: Added more documentation
EDIT 13: applied major update
EDIT 15: Added full color support
EDIT 17: Updated spoiler with new code, fixed some documentation