Перейти к содержимому
maxutka99

Мониторинг MFSU на табличке с помощью Sign I/O Upgrade

Рекомендуемые сообщения

За пару минут написал вот такую вот программу:

local component = require("component")
local mfsu = require("component").mfsu
local sign = require("component").sign

print("MFSU Monitoring for OC")
print("Using sign I/O Upgrade")
os.sleep(2)
print("Look at sign! :)")
while true do 
  energy = mfsu.getStored()..'  EU'
  sign.setValue(1, energy)
  os.sleep(2)
end

Не судите строго т.к. это была программа которую я написал одной из первых для OC

Для создания вам понадобиться:

1.Компьютер

2.Адаптер(x2)

3.MFSU

4.Табличка

5.Улучшение Sign I/O(которое надо установить в адаптер)

 

Табличка должна быть установлена на адаптер(есть возможность настройки в коде программы путём изменения числа 1 на другое в строке

sign.setValue(1, energy)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

За пару часов написал вот такую программу. Позволяет подключить любое количество мфэх и табличек. Возможность горячего добавления или убирания мфэх или табличек во время работы программы. Вывод в процентах. Программа сама находит сторону, где находится табличка. Работает в фоне. Также если мфэх больше 4 штук, то на табличке идёт прокрутка по очереди всех мфэх.

 

giphy.gif

 

Обычная версия:

Скрытый текст


local component = require("component")
local event = require("event")

local mfsu
local sign
local count = 0 --с какой строки начинается отсчёт для расчёта строки на таблички
local arg = {...}
local isStarted
local MfsuSpeed = 1 --частота обновения энергии мфэх в сек
local SignSpeed = 0.5 --табличек в сек

local function init()
  --поиск всех мфэх
  mfsu = {}

  for i, k in pairs(component.list("mfsu")) do
    table.insert(mfsu, {address = i, stored = 0}) --добавляем все адреса мфэх
  end

  if mfsu == {} then
    print("MFSU not found.")
    os.exit()
  end

  --поиск табличек
  sign = {}

  for i, k in pairs(component.list("sign")) do
    local side
    for ii = 0, 5 do
      if component.proxy(i).getValue(ii) then --получаем сторону где есть табличка
        side = ii
        break
      end
    end
    if side then
      table.insert(sign, {address = i, side = side}) --добавляем все адреса табличек
    end
  end

  if #sign == 0 then
    print("Sign not found.")
    os.exit()
  end
end

local function updateMFSU()
  for i, k in pairs(mfsu) do --Проверяем и записываем все значения в массив
    local buffer = math.floor(component.proxy(mfsu[i].address).getStored()) --для оптимизации
    if buffer ~= 0 then
      mfsu[i].stored = i..":"..buffer.."eu "..math.floor(buffer/40000000*100).."%"
      if string.len(mfsu[i].stored) > 15 then
        mfsu[i].stored = i..":"..buffer.."  "..math.floor(buffer/40000000*100).."%" --если не влазиет строка в табличку можно укоротить
      end
    else
      mfsu[i].stored = i..":0eu 0%"
    end
  end
end

local function updateSigns()
  local strInt = {}
  if #mfsu > 4 then --если меньше 4 мфэх то прокрутка не нужна
    for i = 1 + count, 4 + count do --получаем нужные строки для обновления
      if i > #mfsu then
        strInt[i - count] = i - #mfsu
      else
        strInt[i - count] = i
      end
    end
    count = count + 1
    if count > #mfsu - 1 then
      count = 0
    end
  else
    strInt = {1, 2, 3, 4}
  end
  
  local str = ""
  
  for i = 1, math.min(4, #mfsu) do
    str = str..mfsu[strInt[i]].stored.."\n"
  end
  
  for i = 1, #sign do
    component.proxy(sign[i].address).setValue(sign[i].side, str)
  end
end

local function start()
  init()
  updateMFSU()
  updateSigns()
  idTimerMfsu = event.timer(MfsuSpeed, updateMFSU, math.huge)
  idTimerSigns = event.timer(SignSpeed, updateSigns, math.huge)
  event.listen("component_removed", init)
  event.listen("component_added", init)
  started = true
end

local function stop()
  event.ignore("component_removed", init)
  event.ignore("component_added", init)
  event.cancel(idTimerMfsu)
  event.cancel(idTimerSigns)
  started = false
end

if isStarted then
  if arg[1] == "setSpeed" then
    stop()
    arg[2] = string.lower(arg[2])
    arg[3] = tonumber(arg[3])
    if arg[2] == "mfsu" then
      MfsuSpeed = arg[3]
    elseif arg[2] == "sign" then
      SignSpeed = arg[3]
    else
      io.stderr:write("Error in the parameters")
    end
    start()
  elseif arg[1] == "stop" then
    if not isStarted then
      stop()
    end
  else
    io.stderr:write("Error in the parameters")
  end
else
  start()
  print("Found:")
  print(#sign.." sign")
  print(#mfsu.." MFSU")
end

 

Скачать:

pastebin get mjF0Qw4x mfsu.lua

Команды:

mfsu - Запустить программу

mfsu setSpeed mfsu/sign [количество] - Указать скорость

Пример: mfsu setSpeed sign 2 - Данные на табличках будут обновляться каждые 2 секунды

mfsu stop - Остановить обновление

 

Версия для rc:

Скрытый текст


local component = require("component")
local event = require("event")

local mfsu
local sign
local count = 0 --с какой строки начинается отсчёт для расчёта строки на таблички
local arg = {...}
local isStarted
local MfsuSpeed = 1 --частота обновения энергии мфэх в сек
local SignSpeed = 0.5 --табличек в сек
local isRestart = false

local function init()
  --поиск всех мфэх
  mfsu = {}

  for i, k in pairs(component.list("mfsu")) do
    table.insert(mfsu, {address = i, stored = 0}) --добавляем все адреса мфэх
  end

  if mfsu == {} then
    print("MFSU not found.")
    os.exit()
  end

  --поиск табличек
  sign = {}

  for i, k in pairs(component.list("sign")) do
    local side
    for ii = 0, 5 do
      if component.proxy(i).getValue(ii) then --получаем сторону где есть табличка
        side = ii
        break
      end
    end
    if side then
      table.insert(sign, {address = i, side = side}) --добавляем все адреса табличек
    end
  end

  if #sign == 0 then
    print("Sign not found.")
    os.exit()
  end
end

local function updateMFSU()
  for i, k in pairs(mfsu) do --Проверяем и записываем все значения в массив
    local buffer = math.floor(component.proxy(mfsu[i].address).getStored()) --для оптимизации
    if buffer ~= 0 then
      mfsu[i].stored = i..":"..buffer.."eu "..math.floor(buffer/40000000*100).."%"
      if string.len(mfsu[i].stored) > 15 then
        mfsu[i].stored = i..":"..buffer.." "..math.floor(buffer/40000000*100).."%" --если не влазиет строка в табличку можно укоротить
      end
    else
      mfsu[i].stored = i..":0eu 0%"
    end
  end
end

local function updateSigns()
  local strInt = {}
  if #mfsu > 4 then --если меньше 4 мфэх то прокрутка не нужна
    for i = 1 + count, 4 + count do --получаем нужные строки для обновления
      if i > #mfsu then
        strInt[i - count] = i - #mfsu
      else
        strInt[i - count] = i
      end
    end
    count = count + 1
    if count > #mfsu - 1 then
      count = 0
    end
  else
    strInt = {1, 2, 3, 4}
  end
  
  local str = ""
  
  for i = 1, math.min(4, #mfsu) do
    str = str..mfsu[strInt[i]].stored.."\n"
  end
  
  for i = 1, #sign do
    component.proxy(sign[i].address).setValue(sign[i].side, str)
  end
end

function start()
  if isStarted then
    io.stderr:write("MFSU is now running")
  end
  init()
  updateMFSU()
  updateSigns()
  if not isRestart then
    print("Found:")
    print(#sign.." sign")
    print(#mfsu.." MFSU")
  end
  idTimerMfsu = event.timer(MfsuSpeed, updateMFSU, math.huge)
  idTimerSigns = event.timer(SignSpeed, updateSigns, math.huge)
  event.listen("component_removed", init)
  event.listen("component_added", init)
  started = true
end

function stop()
  if not isStarted then
    io.stderr:write("MFSU is now stop")
  end
  event.ignore("component_removed", init)
  event.ignore("component_added", init)
  event.cancel(idTimerMfsu)
  event.cancel(idTimerSigns)
  started = false
end

function setSpeed(from, num)
  isRestart = true
  stop()
  from = string.lower(from)
  if from == "mfsu" then
    MfsuSpeed = num
  elseif from == "sign" then
    SignSpeed = num
  else
    io.stderr:write("Error in the parameters")
  end
  start()
  isRestart = false
end

 

Скачать: 

pastebin get mcvBWAfH /etc/rc.d/mfsu.lua

Команды:

rc mfsu start - Запустить программу

rc mfsu setSpeed mfsu/sign [количество] - Указать скорость

Пример: rc mfsu setSpeed sign 2 - Данные на табличках будут обновляться каждые 2 секунды

rc mfsu stop - Остановить обновление и закрыть программу

Изменено пользователем Romanok2805
Убрал лишний код (остался случайно).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

>Мелкие таблички, на которых ничего не видно уже с 5-6 блоков

Есть же мониторы, зачем так изощряться? :blink:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 18.08.2019 в 13:45, BrightYC сказал:

>Мелкие таблички, на которых ничего не видно уже с 5-6 блоков

Есть же мониторы, зачем так изощряться? :blink:

Надо было использовать что-то технологичней дорогих мониторов, например таблички.:sarcasm:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
14 минуты назад, maxutka99 сказал:

Надо было использовать что-то технологичней дорогих мониторов, например таблички.:sarcasm:

Хоть это и :sarcasm:, но мониторить МФСУ(! делается из алмазов - следовательно на 2-3 тир монитор/пк ресурсы есть) на табличках - мазахизм в чистом виде. А если ресурсов нету - иди в шахту, мониторить тебе явно нечего=d

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
7 минут назад, BrightYC сказал:

Хоть это и :sarcasm:, но мониторить МФСУ(! делается из алмазов - следовательно на 2-3 тир монитор/пк ресурсы есть) на табличках - мазахизм в чистом виде. А если ресурсов нету - иди в шахту, мониторить тебе явно нечего=d

А если аргументов нету, просто скажи — да иди ты в шахту!

 

В песочницу каждый имеет право играть так, как ему нравится. И что является большим мазохизмом: мониторинг на табличках или же поход в шахту, учёные пока ещё не выяснили. Но радость может приносить и то и другое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, eu_tomat сказал:

В песочницу каждый имеет право играть так, как ему нравится. И что является большим мазохизмом: мониторинг на табличках или же поход в шахту, учёные пока ещё не выяснили. Но радость может приносить и то и другое.

Разумеется, в песочницу волен играть каждый как хочет. Но ведь мы здесь не в ридонли пришли ;)

Холивары то поддерживать надо. Кто-то же должен это делать, верно?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, BrightYC сказал:

Холивары то поддерживать надо. Кто-то же должен это делать, верно?

Интересный холивар можно и поддержать. Но большинство холиваров уходит в мусорку.

Вот, например, какой смысл в аргументации вида "выброси таблички, иди в шахту"? Разве этот аргумент как-то изменит ценность опубликованной программы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, eu_tomat сказал:

Вот, например, какой смысл в аргументации вида "выброси таблички, иди в шахту"?

Это уже передёргивание фактов. Я такого не говорил. Но раз уж на то пошло - намного лучше посидеть в шахте пол часика и сделать клёвую мониторилку, которую видно хоть из окна соседа

6 минут назад, eu_tomat сказал:

Разве этот аргумент как-то изменит ценность опубликованной программы?

Это не аргумент, а лишь придирка. Программа у @Romanok2805 крутая, но пользоваться или нет решает игрок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
8 минут назад, BrightYC сказал:

Но раз уж на то пошло - намного лучше посидеть в шахте пол часика и сделать клёвую мониторилку, которую видно хоть из окна соседа

А лучше для кого?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, eu_tomat сказал:

А лучше для кого?

Думаю, для того кто мониторит. Я же никого насильно с дулом пистолет не заставляю использовать мониторы, а не таблички=d

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
6 минут назад, BrightYC сказал:

Думаю, для того кто мониторит.

Разные игроки мониторят. Это лучше для всех игроков?

 

7 минут назад, BrightYC сказал:

Я же никого насильно с дулом пистолет не заставляю использовать мониторы, а не таблички=d

Предположим, не заставляешь. Тогда почему составляешь фразу в форме приказа, выраженного в категоричной форме?

1 час назад, BrightYC сказал:

иди в шахту, мониторить тебе явно нечего=d

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
10 часов назад, eu_tomat сказал:

Разные игроки мониторят. Это лучше для всех игроковв?

Нет. Кто-то вообще может играть на ванилле, и ему до мфс'у как до лампочки.

10 часов назад, eu_tomat сказал:

Предположим, не заставляешь. Тогда почему составляешь фразу в форме приказа, выраженного в категоричной форме?

Составлять "приказ" я не хотел. А текстовым смайлом хотел смягчить, чтобы не вышло как-то грубо. Но если всё таки так получилось - извиняюсь. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...