[Reactors] Автоматическое отключение реактора при нехватке хладагента
Автор: GooodGame · Обновлён:
Всем ку! Данный гайдик поможет тем, кто не хочет, чтобы его реактор бахнул из-за случайно кончившегося лазурита 😆.
Принцип работы:
Автоматический контроль осуществляется роботом из мода OpenComputers. Робот контролирует уровень хладагента в входном жидкостном шлюзе реактора, и при снижении уровня ниже заданного "выключает" его. Выключение реализовано путём сноса этого самого шлюза (иного способа выключить реактор я не нашёл 🙂). Для удобства я также прикрутил отправку сообщений в Telegram (дабы вы могли если что зайти в игру).
Требования:
- Робот (компоненты ниже)
- Ваджра
- Зарядник для робота
- Рычаг
- Флакс точка для зарядника
Реализация схемы:
В первую очередь нам нужно собрать самого робота, делается это сборщике из OC
Скрытый текст
В сам сборщик вставляем следующие компоненты:
- Системный блок (3-ий уровень)
- Центральный процессор (ЦП) (3-ий уровень)
- Память (уровень 3.5) х2
- Видеокарта (3-ий уровень)
- Жёсткий диск (3-ий уровень)
- Интернет карта
- Клавиатура
- Монитор (1-ий уровень)
- Дисковод
- EEPROM (Lua BIOS)
- Улучшение "Контроллер бака"
- Улучшение "Контроллер инвентаря"
- Улучшение "Инвентарь"
-
Полная схема должна выглядеть вот так:
Скрытый текст
Далее нажимаем на "Собрать" и ждём, пока наш робот будет готов.
P.S. уровни компонентов можно брать и ниже, но я не вижу в этом смысла, т.к. они крафтятся очень легко.
Когда робот будет готов переходим к размещению нашей схемы:
- Ставим робота прямо под входной шлюз с хладагентом
- Ставим зарядник вплотную к роботу с любой стороны (проверяйте стороны, зарядник заряжает там, где зеленые квадратики)
- Ставим на зарядник рычаг и флакс точку, рычаг включаем
-
Открываем робота и вставляем в слот для дискеты дискету OpenOS
Скрытый текст
Пишет в терминал install, далее соглашаемся отправив Y, в конце соглашаемся на ребут также отправив Y
-
Открываем робота и кладём в него ваджру в нужны слот (скрин ниже)
Скрытый текст
Итоговый вид схемы:
Скрытый текст

Собственно всё, наша схема готова, переходим к программе:
Программа:
Сама программа выглядит максимально просто и изначально писалась "для себя", поэтому там нет никаких проверок "на дурака", например на случай если каких-то компонентов в роботе не окажется, или вместо ваджры будет другой предмет/ваджры вообще не будет.
Скачиваем программу командой
Цитата
Скрытый текст
Исходный код:
local component = require("component")
local tank = component.tank_controller
local internet = require("internet")
local robot = require("robot")
--config
local tg_token = "токен вашего бота"
local chat_id = "ваш чат-id"
local update_interval = 1 -- инвервал обновления информации о шлюзе в секундах
local danger_level = 100000 -- нижний порог хладагента в шлюзе в mB. Если упадёт ниже - реактор сломается и выключится
local function urlEncode(str)
if not str then return '' end
return string.gsub(str, "([^%w%-%_%.~])", function(c)
return string.format("%%%02X", string.byte(c))
end)
end
local function sendToTelegram(text)
local encoded_text = urlEncode(text)
local url = string.format(
"https://api.telegram.org/bot%s/sendMessage?chat_id=%s&text=%s",
tg_token,
chat_id,
encoded_text
)
local response, error_msg = internet.request(url)
if response then
print("Сообщение в тг отправлено!")
else
print("Ошибка отправки сообщения тг: " .. (error_msg or "неизвестная ошибка"))
end
end
local function getTankInfo()
if tank.getTankLevel(1) <= danger_level then
print("[ТРЕВОГА!] В реакторе заканчивается хладагент! Ломаю обшивку!")
sendToTelegram("⚠️⚠️⚠️ [ТРЕВОГА!] В реакторе заканчивается хладагент! Ломаю обшивку!")
if robot.swingUp() then
robot.suckUp()
print("Обшивка сломана!")
sendToTelegram("Обшивка сломана! Хате не пизда, иди чини!")
os.exit()
else
print("Обшивка не сломана! Хате пизда!")
sendToTelegram("Обшивка не сломана! Хате пизда! 💥💥💥 Можешь ливать нахуй!")
os.exit()
end
return
end
end
print("Скрипт запущен!")
sendToTelegram("Скрипт запущен!")
while true do
getTankInfo()
os.sleep(update_interval)
end
В самом начале программы мы увидим настройки:
- Токен вашего бота в телеграмме (создать бота и получить токен можно у бота @BotFather)
- Ваш чат-айди (Получить ваш чат-айди можно у бота @getmyid_bot)
- Интервал обновления информации о жидкости в шлюзе (по дефолту 1 секунда, этого хватает)
- Порог хладагента в mB (миллибакетах), я поставил 100к, можете менять, как вам удобно, но не ставьте слишком маленькое значение.
Скрытый текст
Измените токен бота и чат-айди на ваши (обязательно), и интервал обновления и нижний порог жидкости (по желанию). Если вам не нужны сообщения в тг, то просто уберите или закомментируйте вызовы функции sendToTelegram()
Далее запускаем программу, написав в терминал робота reactor
Мы увидим сообщение о успешном запуске скрипта. Всё, теперь наш реактор под защитой!
Скрытый текст
В случае, если в шлюзе упадёт уровень жидкости ниже критического (который вы указали в конфиге), то робот сломает шлюз ваджрой и реактор выключится. Шлюз будет в инвентаре у робота, можете его потом забрать. В телеграмме вам придёт такое сообщение:
Скрытый текст
Если по какой-то причине робот не сможет сломать шлюз, то он тоже пришлёт сообщение, правда уже грустное🤫
Скрытый текст
Если остались какие-то вопросы/пожелания - пишите в дискорд @gooodgame