Это потрясающе. Я хотел бы знать больше о сценарии, и если вы планируете поделиться. Я бег Ubuntu с очень аналогичной установкой, но моя установка смонтирована в проволочном стеллаже, который стоил $ 8 здесь. Может быть, следующий этап будет что-то вроде этого.
Спасибо. Я рад поделиться. единственное изменение, которое я сделал с ним в том, что я удалил несколько строк, которые имеют отношение к обновлению RRD (циклическая база данных) с некоторыми из статистики, так как это действие очень специфично для моей установки. остальные должны работать очень хорошо для общих целей. дайте мне знать, если это не произойдет, или если у вас есть какие-либо вопросы по этому поводу.
питон 2,7 (вместо 2,6) требовалось что-то, один из модулей, я думаю, но я не помню точно, что это было. Python 2.6 работает нормально, я редактировал #! линия ниже, чтобы отразить это.
#! / USR / бен / питон
от повторного импорта FindAll, поиск
от shlex раскола импорта
из подпроцесса импорта POPEN, ТРУБЫ
от Sys импорта стандартного вывода, ARGV
из зева импорта окружа
# Определить целевой диапазон темпов
TEMP_COOL = 60
TEMP_LOW = 68
TEMP_HIGH = 72
TEMP_CRIT = 80
# Определить скорость вентилятора пределы
FAN_MIN = 20
FAN_MAX = 100
# строка для всех команд аппаратного опроса
GET_ADAPTERS = 'aticonfig --list-адаптеры'
GET_TEMPS = 'aticonfig --odgt --adapter = все'
GET_CLOCKS = 'aticonfig --odgc --adapter = все'
GET_FANS = «aticonfig --pplib-CMD "получить FANSPEED 0"'
SET_FANS = «aticonfig --pplib-CMD "набор FANSPEED 0 $"'
# Сделать его проще для отображения текста терминала в цвете
TEXT_COLORS = ["черный", "красный", "зеленый", "желтый", "синий", "фуксин", "циан", "белый"]
Защиту TextColor (текст, цвет):
Код = ул (TEXT_COLORS.index (цвет) + 30)
вернуть "\ 033 [0;" + Код + "м" + Текст + "\ 033 [м"
# Получить все текущие статы от аппаратных средств (кроме вентиляторов)
raw_adapters = Popen (сплит (GET_ADAPTERS), стандартный вывод = ТРУБА) .communicate () [0]
raw_temps = Popen (сплит (GET_TEMPS), стандартный вывод = ТРУБА) .communicate () [0]
raw_clocks = Popen (сплит (GET_CLOCKS), стандартный вывод = ТРУБА) .communicate () [0]
# Составить список адаптеров идентификаторов
adapter_ids = FindAll (г"\ *? \ S + (\ г) \.", Raw_adapters)
# Получение данных вентилятора немного специализированы и требует некоторой итерации
raw_fans = {}
для г в adapter_ids:
п = INT (я)
# ДИСПЛЕЙ окр вар необходимо установить перед каждым вентилятора опрашивается
окружать ["DISPLAY"знак равно ": 0." + я
raw_fans [п] = Popen (сплит (GET_FANS), стандартный вывод = ТРУБА) .communicate () [0]
# Все анализируемые статистики будут храниться здесь
Адаптеры = []
# Итерацию по каждому адаптеру для анализа статистики и сохранять их
для г в adapter_ids:
п = INT (я)
# Анализировать статистику с регулярным выражением хранения вещей, как адаптируемыми, насколько это возможно
температура = поиск ("(? S)" + "адаптер " + I + ". *?" + г"(\ D + \. \ D +)", Raw_temps)
часы = поиск ("(? S)" + "адаптер " + I + ". *?" + г"(\ D +) \ S + (\ D +)" + ". *?" + г"(\ D +) \ S + (\ D +)" + ". *?" + г"(\ D +),%", Raw_clocks)
вентилятор = поиск (г"(\ D +),%", Raw_fans [п])
# Сохранить анализируемые данные в список адаптеров и преобразование типов
adapters.insert (п, {})
Cur = адаптеры [п]
текущ ["DEV"] = П
текущ ["температура"] = Поплавок (temp.group (1))
текущ ["ядро"] = INT (clocks.group (1))
текущ ["мем"] = INT (clocks.group (2))
текущ ["pcore"] = INT (clocks.group (3))
текущ ["Pmem"] = INT (clocks.group (4))
текущ ["нагрузка"] = INT (clocks.group (5))
текущ ["поклонник"] = INT (fan.group (1))
текущ ["dfan"] = 0
# Если температура находится за пределами диапазона, то отрегулировать скорость вращения вентилятора вверх или вниз
Защиту adjust_fan (дворняжка):
если текущ ["температура"] < TEMP_LOW: текущ ["dfan"] = -1
Элиф текущ ["температура"] > TEMP_HIGH: текущ ["dfan"] = 1
в то время как Cur ["поклонник"] + Текущ ["dfan"] < FAN_MIN: текущ ["dfan"] + = 1
в то время как Cur ["поклонник"] + Текущ ["dfan"] > FAN_MAX: текущ ["dfan"] - = 1
если текущ ["dfan"] = 0:
текущ ["поклонник"] + = Текущ ["dfan"]
окружать ["DISPLAY"знак равно ": 0." + Ул (текущ ["DEV"])
Команда = SET_FANS.replace ("$", Ул (текущ ["поклонник"]))
Popen (сплит (команда), стандартный вывод = ТРУБА)
# Цвет дисплея Темп на основе его текущей стоимости
Защиту color_temps (CUR):
цвет = "зеленый"
если текущ ["температура"] < TEMP_COOL: цвет = "синий"
Элиф текущ ["температура"] < TEMP_LOW: цвет = "циан"
Элиф текущ ["температура"] > TEMP_CRIT: цвет = "красный"
Элиф текущ ["температура"] > TEMP_HIGH: цвет = "желтый"
текущ ["температура"] = TextColor ("% .1fC" % Текущ ["температура"], цвет)
# Сохраняет порядок, этикетки, и формат строки каждого вывода
Выходы = (
("DEV", "ГПУ% d"),
("температура", "% s"),
("нагрузка", "% D %%"),
("ядро", "% d"),
("pcore", "% d"),
("мем", "% d"),
("Pmem", "% d"),
("поклонник", "% D %%"),
("dfan", "% + D %%"))
# Печать заголовки столбцов и строк данных для каждого адаптера
# Также регулировать скорость вращения вентилятора для каждого адаптера, если это необходимо
для вывода на выходах: stdout.write (выход [0] + "\ т")
stdout.write ("\ п")
для адаптера адаптеров:
adjust_fan (адаптер)
color_temps (адаптер)
для вывода в выходах:
Имя = выход [0]
Формат = выход [1]
значение = адаптер [имя]
stdout.write (формат% значение + "\ т")
stdout.write ("\ п")