View difference between Paste ID: pXpZrPs2 and 42Kjh0hf
SHOW: | | - or go back to the newest paste.
1
-- RD CC Reactor Control
2
-- v 0.0.2
3
4
-- Dependancies:
5
--   rdCore
6
7
-- Thank you for choosing this Big Reactors reactor
8
-- control program for automating it with CC.
9
10
-- User Settings
11
12
-- Stored Power Threshold
13
-- Set a custom stored power threshold to lower the
14
-- reactor cores to in order to save power. 
15
16
local reacStTh = 100 -- 1/100 Default: 100
17
18
-- Reactor Shutdown Threshold
19
-- Should the reactor shut down after a particular
20
-- point to conserve fuel. Must be set equal or
21
-- higher then Stored Power Threshold.
22
23
local reacOf = false -- true/false Default: false
24
25
local reacOfTh = 100 -- 5/100 Default: 100
26
27
-- Reactor Name
28
-- If a monitor is found, a name may be displayed
29
-- for the reactor.
30
31
local reacName = ""
32
33
-- Debug Feedback
34
-- For double-checking numbers through the monitor. 
35
-- Should not be needed unless issues or discrepancies
36
-- arrise.
37
38
local debugF = true -- true/false Default: false
39
40
--====== DO NOT EDIT BELOW THIS POINT ======--
41
42
43
44
-- Reactor Variables
45
46
local function reUpdate()
47
48
	reEn = tonumber(reactor.getEnergyStored())
49
	dBR("Reactor Stored Energy: "..reEn.." rf")
50
	reOn = reactor.getActive()
51
	dBR("Reactor State: "..reOn)
52
	reFuel = tonumber(reactor.getFuelAmount())
53
	dBR("Reactor Fuel: "..reFuel.." mB")
54
	reEnPr = tonumber(reactor.getEnergyProducedLastTick())
55
	dBR("Reactor Energy Produced: "..reEnPr.." rf/t")
56
	reWa = tonumber(reactor.getWasteAmount())
57
	dBR("Reactor Waste: "..eWa.." mB")
58
	reFuWa = tonumber(reactor.getFuelAmountMax())
59
	dBR("Reactor Fuel/Waste Contained: "..reFuWa.." mB")
60
	reEnPerc = math.floor((reEn/10000000)*100)
61
	dBR("Reactor Energy Filled Percentage: "..reEnPerc.."%")
62
	reFTemp = tonumber(reactor.getFuelTemp)
63-
	dBR("Reactor Fuel Temp: "..reFTemp.." ¥B0 C")
63+
	dBR("Reactor Fuel Temp: "..reFTemp.." ° C")
64
	reCTemp = tonumber(reactor.getCasingTemp)
65-
	dBR("Reactor Casing Temp: "..reFTemp.." ¥B0 C")
65+
	dBR("Reactor Casing Temp: "..reFTemp.." ° C")
66
	reTemp = ((reCTemp+reFTemp)/2)
67-
	dBR("Reactor Avg Temp: "..reTemp.." ¥B0 C")
67+
	dBR("Reactor Avg Temp: "..reTemp.." ° C")
68
69
  
70
end
71
72
-- Debug readout function
73
74
local function dBR(var)
75
	if debugF == true then
76
		print(var)
77
	end
78
end
79
80
-- Control Rod Controls
81
82
local function reCtrlRod()
83
	reUpdate()
84
	print(reEnPerc.."%.")
85
	if reEnPerc <= reacStTh then
86
		dBR("Changing Ctrl Rod Levels to "..reEnPerc.."%.")
87
		reactor.setAllControlRodLevels(reEnPerc)
88
	end
89
end
90
91
-- Power Threshold
92
93
local function rePowThr()
94
  reUpdate()
95
  if reEnPerc > reacOfTh then
96
    reactor.setActive = false
97
  elseif reEnPerc < (reacOfTh-5) then
98
    reactor.setActive = true
99
  end
100
end
101
102
-- Adv Monitor Functionality
103
104
-- monitor variables
105
106
maxX, maxY = term.getSize()
107
108
-- monitor functions
109
110
local function updateScreen()
111
	if monTest ~= nil then
112
		reUpdate()
113
		mon.clear()
114
		reacTitle()
115
		reacEnergy()
116
		reacReadout()
117
	end
118
end
119
120
local function reacTitle()
121-
	local progTitle = ("RD Reactor Control ver "..progVer)
121+
	local progTitle = "RD Reactor Control ver "..progVer
122-
	local reacTitle = ("Monitoring: "..reacName)
122+
	local reacTitle = reacName
123
	mon.setCursorPos(maxX/2-string.len(progTitle)/2,2)
124
	mon.setTextColor(colors.purple)
125
	mon.write(progTitle)
126
	if reacName ~= nil then
127
		mon.setCursorPos(maxX/2-string.len(reacTitle)/2,3)
128
		mon.setTextColor(colors.purple)
129
		mon.write(reacTitle)
130
	end
131
end
132
133
local function put(text,x,y,color)
134
	term.setCursorPos(x,y)
135
	term.setTextColor(color or 1)
136
	term.write(text)
137
end
138
139
local function reacEnergy()
140
	local enTitle = "Reactor RF Stored"
141-
	local enAmt = (reEn.." RF")
141+
	local enAmt = reEn.." RF"
142-
	local enPerc = (reEnPerc.." %")
142+
	local enPerc = reEnPerc.." %"
143
	
144
	put(enTitle,maxX/2-string.len(enTitle), 5, colors.blue)
145
	put(enTitle,maxX/2-string.len(enAmt.." / "..enPerc), 7, colors.blue)
146
	
147
	paintutils.drawLine(8,9,28,9,colors.white)
148
	paintutils.drawLine(8,9,(20*(reEnPerc/100))+8,9,colors.red)
149
	mon.setBackgroundColor(colors.black)
150
151
end
152
153
local function reacReadout()
154
155
end
156
157
158
-- Find Reactor & Monitor Peripherals
159
160
local function getPeripherals()
161
162
	reactor = peripheral.wrap(pSearch("BigReactors-Reactor"))
163
	monTest = peripheral.find("monitor")
164
165
	if reactor.getConnected() == true then
166
		dBR("Reactor Connected")
167
	else
168
		print("Reactor Not Found")
169
		term.setTextColor(colors.red)
170
		print("Please relocate this computer next to the reactor's computer port!")
171
		term.setTextColor(colors.white)
172
		--break
173
	end
174
	if monTest ~= nil then
175
		mon = peripheral.wrap(pSearch("monitor"))
176
		dBR("Monitor Found")
177
	else
178
		dBR("Monitor Not Found")
179
	end
180
181
end
182
	
183
-- Main Program
184
185
local rdCTest = fs.exists("rdCore") 
186
local rdCPB = "vKDJH93Y"
187
progVer = "0.0.2"
188
local req = 0
189
local runs = 0
190
191
if rdCTest == false then
192
	print("rdCore Api Not Found. Installing embedded version.")
193
	shell.run("pastebin", "get", "rdCPB", "rdCore")
194
	shell.run("rdCore")
195-
		add2Start("rdReactorControl")
195+
196
	if rdCTest == true then
197-
  req = 1
197+
		add2Start("reactorControl")
198
		print("rdCore Api ver "..rdCV.." Installed Successfully")
199
		req = 1
200
	else
201
		print("rdCore Api Unavailable. RD Reactor Control Unable to Start")
202
		--break
203
	end
204
else
205
	print("rdCore Api Found")
206
end
207
208-
local temp = tostring("RD Reactor Control ver: "..progVer.." Initialized Successfully")
208+
209
210
local temp = ("RD Reactor Control ver: "..progVer.." Initialized Successfully")
211
print(temp)
212
213
  while true do
214
	if runs == 0 then
215
		if req == 0 then
216
			break
217
		else
218
			print(temp)
219
		end
220
		
221
	elseif runs == 5 then
222
	
223
		updateScreen()
224-
		runs = runs+1
224+
225
	else
226
		runs = runs + 1
227
	end 
228
	
229
	reCtrlRod()
230
	if reacOf == true then
231
		rePowThr()
232
	end
233
	
234
	sleep(2)
235
  end
236
--end