View difference between Paste ID: v49i8z3T and 9KpbFEqb
SHOW: | | - or go back to the newest paste.
1-
--PowergraphMulti is made by Stekeblad 11/2017
1+
-- TODO: actually make graph?
2
3-
  ------------- Configuration part ------------------
3+
local monitor = peripheral.find "monitor"
4-
  
4+
local storage = peripheral.find(settings.get "storage_type" or "draconic_rf_storage")
5-
  -- Seconds between checking stored energy
5+
local capacity = (storage.getMaxEnergyStored or storage.getEnergyCapacity)()
6-
  -- and updating monitors (default: 5)
6+
local delay = 0.1
7-
local updateInterval = 5
7+
local ticks_delay = 0.1 / 0.05
8
9-
-- Simple mode tries to scan for compatible storages and
9+
local function read_energy()
10-
-- wrap the first found one and the first found monitor
10+
	return storage.getEnergyStored()
11-
-- For more advanced configuration, set this to false and
11+
12-
-- and fill the dataTable below (example follows)
12+
13-
-- Default: true
13+
monitor.setTextScale(1)
14-
local simpleMode = true 
14+
monitor.setBackgroundColor(colors.black)
15-
     
15+
monitor.setTextColor(colors.white)
16-
local dataTable = {
16+
local data = {}
17-
   
17+
18-
}
18+
local prefixes = {"", "k", "M", "G", "T", "P", "E", "Z", "Y", "R", "Q"}
19
local function SI_prefix(value, unit)
20-
  -- help for how to fill dataTable:
20+
    local i = 1
21-
--[[ add a comma at the end of all lines except the
21+
    local x = value
22-
  last one in all tables.
22+
    while x > 1000 or x < -1000 do
23-
  "[required]" in front of a line means you need to
23+
        x = x / 1000
24-
  have it or the program won't work, rows with
24+
        i = i + 1
25-
  "[optional]" are optional and can be left out.
25+
26-
  The following information can be added:
26+
    return ("%.3f%s%s"):format(x, prefixes[i], unit)
27
end
28-
  [required] monitor = the side or network name
28+
29-
            of a monitor connected to the computer.
29+
local function display(data)
30-
  [required] energy = the energy storage witch
30+
	monitor.clear()
31-
            content should be displayed on the
31+
	local longest_label = 0
32-
            monitor defined above.
32+
	for _, val in pairs(data) do
33-
  [optional] text = a word or sentence that will
33+
		if #val[1] > longest_label then longest_label = #val[1] end
34-
            be displayed at the bottom line on the
34+
35-
            monitor.
35+
	local i = 1
36-
  [optional] blitColor = Will be ignored if its
36+
	for _, val in pairs(data) do
37-
            not a advanced monitor, specifies the
37+
		monitor.setCursorPos(1, i)
38-
            color of the graph, see following link
38+
		monitor.write(val[1] .. ":" .. (" "):rep(longest_label - #val[1] + 2) .. val[2])
39-
            for help:
39+
		i = i + 1
40-
            http://www.computercraft.info/wiki/Colors_(API)#Colors
40+
41-
            allowed values are 0-9 and a-f,
41+
42-
            defaults to 5 (green)
42+
43-
  [optional] textSize = Sets how large the text is and
43+
local past_RF_per_tick = {}
44-
            how thick the graph line is.
44+
local history_length = 1200 / ticks_delay
45-
            Needs to be between 0.5 and 5 and is in
45+
local function display_stats()
46-
            steps of 0.5. eg 0.5, 1, 1.5 ... 4.5, 5
46+
	local previous
47-
            Default is 1. (5 is very large text)
47+
	while true do
48-
            
48+
		local energy = read_energy()
49-
local Example = {
49+
		if previous then
50-
  {
50+
			local diff = energy - previous
51-
    monitor = "monitor_1",    <-- comma
51+
			local RF_per_tick = diff / ticks_delay
52-
    energy = "tile_blockcapacitorbank_name_0", <--comma
52+
			table.insert(past_RF_per_tick, RF_per_tick)
53-
    text = "ME Backup",     <-- comma
53+
			if #past_RF_per_tick > history_length then table.remove(past_RF_per_tick, 1) end
54-
    blitColor = "5"       <-- no comma, last line for this monitor-battery pair
54+
			local total = 0
55-
    },{         <-- comma between braces, there are more monitor-battery pairs
55+
			for _, h in pairs(past_RF_per_tick) do total = total + h end
56-
    monitor = "top",      <-- comma
56+
			local average = total / #past_RF_per_tick
57-
    energy = "back",      <-- comma
57+
			
58-
    textSize = 0.5    <-- no comma, last line in this pair
58+
			display {
59-
    }       <-- no comma, this was last pair
59+
				{ "Time", ("%s.%03d"):format(os.date "!%X", os.epoch "utc" % 1000) },
60-
  }         <-- closing the example table, no comma
60+
				{ "Stored", SI_prefix(energy, "RF") },
61
				{ "Capacity", SI_prefix(capacity, "RF") },
62-
  ]] -- (ignore this two brackets, they indicate
62+
				{ "% filled", ("%.4f%%"):format(energy / capacity * 100) },
63-
     -- the end of this long multi-line comment)
63+
				{ "Inst I/O", SI_prefix(RF_per_tick, "RF/t") },
64
				{ "60s I/O" , SI_prefix(average, "RF/t") },
65-
------------- End of configuration part --------------------
65+
			}
66
		end
67-
-- Dont change anything below this line
67+
		previous = energy
68-
-- if you not know what you are doing!
68+
		sleep(delay)
69
	end
70-
if simpleMode then
70+
71-
  dataTable.auto = {}
71+
72-
  
72+
display_stats()