.+)$/'; // Ch. 0 DIMM 0: +98.5°C (low = +127.5°C, high = +127.5°C) // Core 0: +49.0°C (high = +80.0°C, crit = +100.0°C) // fan5: 0 RPM (min = 712 RPM) ALARM // temp4: -128.0°C (high = +85.0°C, hyst = +80.0°C) sensor = Intel PECI // Core 0: +50.0°C (high = +80.0°C, crit = +100.0°C) $pattern_sensor = '/^(?[^:]+):\s+(?[+\-]?\d[\d\.]*)\s*(?\S+)(?.*)$/'; $pattern_limits = '/\((?.+?)\)/'; // intrusion0: OK // beep_enable: disabled $pattern_status = '/^(?[^:]+):\s+(?[a-zA-Z]+)$/'; $module = ''; $adapter = ''; foreach ($array as $line) { // Set module name if (preg_match($pattern_module, $line)) { $module = $line; } // Set adapter name if (preg_match($pattern_adapter, $line, $matches)) { $adapter = $matches['adapter']; } // Reset module and adapter after empty line if (trim($line) == '') { $module = ''; $adapter = ''; } $sensor = ['scale' => 1]; if (preg_match($pattern_sensor, $line, $matches)) { // Numeric sensors $unit = preg_replace('/[^a-zA-Z]/', '', $matches['unit']); $sensor['descr'] = trim($matches['descr']); // Used as Index if (strlen($module) && strlen($adapter)) { // Append rename rrd, since description changed $sensor['rename_rrd'] = 'lmsensors-' . $sensor['descr']; $sensor['descr'] .= ' (' . $module . ')'; } $sensor['current'] = preg_replace('/[^0-9\.\-]/', '', $matches['value']); switch ($unit) { case "F": $sensor['class'] = "temperature"; $sensor['unit'] = 'F'; break; case "C": $sensor['class'] = "temperature"; break; case "RPM": $sensor['class'] = "fanspeed"; break; case "V": $sensor['class'] = "voltage"; break; case "W": $sensor['class'] = "power"; break; } // Limits if (isset($matches['additional']) && preg_match($pattern_limits, $matches['additional'], $limits)) { // low = +127.5°C, high = +127.5°C foreach (explode(',', $limits['limits']) as $limit) { // low = +127.5°C [$param, $value] = explode('=', $limit); $param = trim($param); switch ($param) { case "low": case "high": case "crit": case "warn": case "hyst": $sensor[$param] = preg_replace('/[^0-9\.\-]/', '', $value); break; } } } } elseif (preg_match($pattern_status, $line, $matches)) { // Named status $sensor['descr'] = trim($matches['descr']); $sensor['status'] = trim($matches['status']); } else { // Skip other lines continue; } $sensors_array[$sensor['descr']] = $sensor; } foreach ($sensors_array as $key => $sensor) { $options = []; if (isset($sensor['status'])) { // Statuses switch (strtolower($sensor['status'])) { case 'ok': $istatus = 1; $type = 'unix-agent-state'; break; case 'disabled': $istatus = 1; $type = 'unix-agent-enable'; break; case 'enabled': $istatus = 0; $type = 'unix-agent-enable'; break; case 'non-critical': // Warn $istatus = 2; $type = 'unix-agent-state'; break; default: // Fail $istatus = 0; $type = 'unix-agent-state'; } discover_status($device, '', $key, $type, $sensor['descr'], $istatus, ['entPhysicalClass' => 'other'], 'agent'); $agent_sensors['state'][$type][$key] = ['description' => $sensor['descr'], 'current' => $istatus, 'index' => $key]; // Statuses End } else { // Sensors if (isset($sensor['crit'])) { // high = +80.0°C, crit = +100.0°C $options['limit_high'] = $sensor['crit']; if (isset($sensor['high'])) { $options['limit_high_warn'] = $sensor['high']; } } elseif (isset($sensor['high'])) { // high = +85.0°C, hyst = +80.0°C $options['limit_high'] = $sensor['high']; if (isset($sensor['hyst'])) { $options['limit_high_warn'] = $sensor['hyst']; } } elseif (isset($sensor['max'])) { // min = +2.70 V, max = +3.30 V $options['limit_high'] = $sensor['max']; } if (isset($sensor['low']) && $sensor['low'] != $sensor['high']) { // low = +127.5°C, high = +127.5°C $options['limit_low'] = $sensor['low']; } elseif (isset($sensor['min'])) { // min = +2.70 V, max = +3.30 V $options['limit_low'] = $sensor['min']; } $agent_sensors[$sensor['class']]['lmsensors'][$key] = ['description' => $sensor['descr'], 'current' => $sensor['current'], 'index' => $key]; if (isset($sensor['unit'])) { $options['sensor_unit'] = $sensor['unit']; $agent_sensors[$sensor['class']]['lmsensors'][$key]['unit'] = $sensor['unit']; } if (isset($sensor['rename_rrd'])) { $options['rename_rrd'] = $sensor['rename_rrd']; $agent_sensors[$sensor['class']]['lmsensors'][$key]['rename_rrd'] = $sensor['rename_rrd']; } discover_sensor($sensor['class'], $device, '', $key, 'lmsensors', $sensor['descr'], $sensor['scale'], $sensor['current'], $options, 'agent'); } } #print_r($sensors_array); unset($sensor, $sensors_array); } // EOF