У меня установлены датчики lm, и мне интересно, есть ли какие-либо привязки для доступа к этим драйверам из PHP? Я хочу получить доступ к показаниям температуры на разных серверах и использовать pushover, чтобы уведомить мой iPhone, если в нескольких удаленных комнатах сервера ситуация становится слишком горячей. У меня также есть web enabled power switches, что мои серверы могут получить доступ к автоматическому отключению оборудования в чрезвычайной ситуации. У меня есть несколько других систем мониторинга, написанных в пакетном PHP, поэтому я предпочел бы, чтобы это было написано на PHP, поэтому я могу повторно использовать существующий код. Кроме того, это самый удобный для меня язык. Думаю, я мог бы использовать exec для запуска датчиков и анализа вывода, но если кто-то еще уже написал класс PHP для доступа к показаниям температуры материнской платы, я бы хотел просто использовать это, если это возможно.Как получить показания температуры материнской платы в PHP на Debian?
ответ
Решение, которое я попал собирается с было используя PHP для чтения содержимого/sys/class/therm/therm_zone0/temp через/sys/class/therm/therm_zone2/temp. В этих файлах содержится одно число, то есть температура в тысячных долях градуса. Это стандартная часть ядра Linux, и more documentation is available. Кажется, это стандартная функция ядра, поэтому она должна оставаться доступной для большинства новых Linux-систем. Он был доступен на 6 тестах.
не испытанный, но вы можете установить пакет как lm-sensors
, а затем просто запустить команду sensors
через Exec или что-то подобное и распечатать вывод
однако, безусловно, есть лучшие способы сделать это.
редактировать
Я думал, вы могли бы войти в темп процессора или что-нибудь вообще и просто прочитать файл журнала в PHP и распечатать вывод
Да, я мог бы просто использовать exec, как я сказал в своем вопросе. Но это означало бы написание кода для анализа выходных сигналов датчиков и, следовательно, надежду, что он никогда не изменится. Кроме того, у меня разные машины различного количества датчиков, с разными именами датчиков, что делает вещи немного более сложными. Вот почему я надеялся, что кто-то либо написал привязки php к библиотеке lm-sensors, либо php-класс, чтобы разобрать этот вывод, который мне не нужно было бы поддерживать. – fastfinge
я написал парсер для вывода датчиков,
function read_sensors(): array {
if (0) {
// for debugging/testing
$stdout = getStdOut();
} else {
exec ("sensors -u", $stdout, $ret);
if ($ret !== 0) {
throw new \RuntimeException ('sensors failed! returned ' . var_export ($ret, true));
}
$stdout = implode ("\n", $stdout);
}
unset ($ret);
$ret = [ ];
foreach (array_filter (array_map ('trim', explode ("\n\n", trim ($stdout))), 'strlen') as $sensor) {
// var_dump($sensor) & die();
$infRaw = array_filter (array_map ('trim', explode ("\n", trim ($sensor))), 'strlen');
if (count ($infRaw) < 2) {
throw new \LogicException ('unknown format from sensors, could not understand: ' . $sensor);
}
$name = $infRaw [0];
unset ($infRaw [0]);
$ret [$name] = [ ];
if (0 !== strlen (trim (explode (":", $infRaw [1], 2) [1]))) {
// some devices doesn't have a type. seen in 1/5 intel systems tested, and only on 1 device (named `Adapter: Virtual device`, not sure what it was)
$ret [$name] ['type'] = $infRaw [1];
unset ($infRaw [1]);
}
$currentKey = NULL;
foreach ($infRaw as $line) {
$debugRawLine = $line;
if (false !== ($pos = strpos ($line, '_'))) {
$line = array_filter (array_map ('trim', explode (":", trim (substr ($line, $pos + 1)))), 'strlen');
if (count ($line) !== 2) {
throw new \RuntimeException ('unknown format from sensors, could not understand: ' . $debugRawLine);
}
$ret [$name] [$currentKey] [$line [0]] = $line [1];
} elseif (substr ($line, - 1) === ':') {
$line = substr ($line, 0, - 1);
$currentKey = $line;
} else {
throw new \LogicException ('unknown format from sensors, could not understand: ' . $debugRawLine);
}
}
}
return $ret;
}
и он был протестирован на 5 различных системах успешно, в том числе Debian 9, убунту 16,04, и арка (полностью обновлен 2018-01-09), и он не удался по очень старой системе amd (где формат вывода сенсоров был совершенно другим)
- 1. Получить данные датчика материнской платы
- 2. Как получить имя материнской платы в VB.net?
- 3. Как получить тип материнской платы в C?
- 4. Как получить идентификатор процессора и материнской платы?
- 5. Как получить первый серийный номер материнской платы?
- 6. Как получить серийный номер материнской платы в GUI (в java)
- 7. Звуковой сигнал материнской платы на Windows CE
- 8. Как получить идентификатор материнской платы или серийный номер в Delphi?
- 9. Как получить серийный номер материнской платы в Delphi?
- 10. Как я могу получить идентификатор материнской платы в flex builder?
- 11. Как отслеживать номер материнской платы по vb.net
- 12. Как получить uuid материнской платы с помощью c
- 13. Как получить тип канала памяти материнской платы с помощью C#?
- 14. Получение серийного номера процессора или материнской платы?
- 15. Adobe AIR 1.5 Песочница + Динамик материнской платы
- 16. Confused о USB и материнской платы спецификации
- 17. Как я мог «слушать» звуки на внутреннем динамике материнской платы
- 18. Восстановление резервной копии материнской платы Linux
- 19. Библиотека для поиска материнской платы + модель?
- 20. функции API для ПОЛУЧИТЬ материнской платы и других устройств информации
- 21. Как подключить два показания платы arduino с помощью программы C?
- 22. Regex для разделения данных линии в показания года/температуры
- 23. Получение уникального идентификационного номера материнской платы thru vC++ programming
- 24. Получение серийного номера материнской платы без WMI и без аутентификации
- 25. запуск будильника материнской платы через C++ для генерации кода Морзе
- 26. сомнения относительно материализации материнской платы и хэш-таблиц
- 27. Преобразовать показания с датчика температуры, подключенного к XBee
- 28. Проблемы с прошивкой материнской платы Прошивка с использованием BlueNRG Gui
- 29. Как получить уникальный идентификатор компьютера в Java (например, идентификатор диска или идентификатор материнской платы)
- 30. Как получить уникальные идентификаторы материнской платы и процессора в Mono под Linux?
возможно через stdin: // –
Если вы используете SNMP, PHP имеет [реализацию для него] (http: //www.php .net/manual/en/book.snmp.php), что позволит решить ваши проблемы с изменением формата вывода и нескольких датчиков. Вы также можете пойти на полный пакет, такой как cacti или zabbix, определить свои пороговые значения и запустить сценарий, когда они запускаются. – Wrikken
К сожалению, я ничего не знаю о SNMP, хотя я, вероятно, должен это сделать. Я также обнаружил, что на всех машинах, о которых идет речь, существуют каталоги, такие как/sys/class/therm/therm_zone0, поэтому, возможно, я могу их прочитать через мои PHP-скрипты. Могу ли я зависеть от правильности этих значений? – fastfinge