$entry) { // Skip if this sensor has been disabled for display in the web interface if ($entry['isDeviceConfigDisplay'] == 'enabled') { // Temperature // isDeviceConfigTemperatureIndex.1 = INTEGER: 1 // isDeviceMonitorTemperatureName.1 = STRING: "Temperature1" // isDeviceMonitorTemperature.1 = INTEGER: 3121 // isDeviceConfigTemperatureName.1 = STRING: "Temperature1" $descr = $entry['isDeviceMonitorTemperatureName']; $oid = ".1.3.6.1.4.1.19011.1.3.2.1.3.1.1.1.3.$index"; $value = $entry['isDeviceMonitorTemperature']; // Warning/Critical limits can be enabled/disabled in the web interface. Use them as supplied if enabled, calculate our own if not enabled. // // isDeviceConfigTemperatureLowWarning.1 = INTEGER: 2300 // isDeviceConfigTemperatureLowCritical.1 = INTEGER: 2000 // isDeviceConfigTemperatureHighWarning.1 = INTEGER: 2700 // isDeviceConfigTemperatureHighCritical.1 = INTEGER: 3000 // isDeviceConfigTemperatureLowWarningState.1 = INTEGER: disabled(2) // isDeviceConfigTemperatureLowCriticalState.1 = INTEGER: disabled(2) // isDeviceConfigTemperatureHighWarningState.1 = INTEGER: disabled(2) // isDeviceConfigTemperatureHighCriticalState.1 = INTEGER: disabled(2) $options = ['limit_high' => ($entry['isDeviceConfigTemperatureHighCriticalState'] == 'enabled' ? $entry['isDeviceConfigTemperatureHighCritical'] / 100 : NULL), 'limit_high_warn' => ($entry['isDeviceConfigTemperatureHighWarningState'] == 'enabled' ? $entry['isDeviceConfigTemperatureHighWarning'] / 100 : NULL), 'limit_low_warn' => ($entry['isDeviceConfigTemperatureLowWarningState'] == 'enabled' ? $entry['isDeviceConfigTemperatureLowWarning'] / 100 : NULL), 'limit_low' => ($entry['isDeviceConfigTemperatureLowCriticalState'] == 'enabled' ? $entry['isDeviceConfigTemperatureLowCritical'] / 100 : NULL)]; if ($isConfigTemperatureUnit == 'fahrenheit') { $options['sensor_unit'] = 'F'; } else { $options['sensor_unit'] = 'C'; } // Not used: // isDeviceConfigTemperatureCalibration.1 = INTEGER: temperatureIncrease0Point0(1) // isDeviceConfigTemperatureHysteresis.1 = INTEGER: 200 // 32768 = No sensor connected if ($value != 32768 && $value != '') { discover_sensor('temperature', $device, $oid, "isDeviceMonitorTemperature.$index", 'ispro-mib', $descr, 0.01, $value, $options); } $oid = ".1.3.6.1.4.1.19011.1.3.2.1.3.1.1.1.4.$index"; $value = $entry['isDeviceMonitorTemperatureAlarm']; // isDeviceMonitorTemperatureAlarm.1 = INTEGER: normal(3) // unknown = No sensor connected if ($value != 'unknown' && $value != '') { discover_status($device, $oid, "isDeviceMonitorTemperatureAlarm.$index", 'ispro-mib-threshold-state', $descr, $value); } // Humidity // isDeviceConfigHumidityIndex.1 = INTEGER: 1 // isDeviceMonitorHumidityName.1 = STRING: "Humidity1" // isDeviceMonitorHumidity.1 = INTEGER: 2166 // isDeviceConfigHumidityName.1 = STRING: "Humidity1" $descr = $entry['isDeviceMonitorHumidityName']; $oid = ".1.3.6.1.4.1.19011.1.3.2.1.3.1.2.1.3.$index"; $value = $entry['isDeviceMonitorHumidity']; // Warning/Critical limits can be enabled/disabled in the web interface. Use them as supplied if enabled, calculate our own if not enabled. // // isDeviceConfigHumidityLowWarning.1 = INTEGER: 4000 // isDeviceConfigHumidityLowCritical.1 = INTEGER: 3500 // isDeviceConfigHumidityHighWarning.1 = INTEGER: 5000 // isDeviceConfigHumidityHighCritical.1 = INTEGER: 5500 // isDeviceConfigHumidityLowWarningState.1 = INTEGER: disabled(2) // isDeviceConfigHumidityLowCriticalState.1 = INTEGER: disabled(2) // isDeviceConfigHumidityHighWarningState.1 = INTEGER: disabled(2) // isDeviceConfigHumidityHighCriticalState.1 = INTEGER: disabled(2) $options = ['limit_high' => ($entry['isDeviceConfigHumidityHighCriticalState'] == 'enabled' ? $entry['isDeviceConfigHumidityHighCritical'] / 100 : NULL), 'limit_high_warn' => ($entry['isDeviceConfigHumidityHighWarningState'] == 'enabled' ? $entry['isDeviceConfigHumidityHighWarning'] / 100 : NULL), 'limit_low_warn' => ($entry['isDeviceConfigHumidityLowWarningState'] == 'enabled' ? $entry['isDeviceConfigHumidityLowWarning'] / 100 : NULL), 'limit_low' => ($entry['isDeviceConfigHumidityLowCriticalState'] == 'enabled' ? $entry['isDeviceConfigHumidityLowCritical'] / 100 : NULL)]; // Not used: // isDeviceConfigHumidityCalibration.1 = INTEGER: humidityIncrease0Point0(1) // isDeviceConfigHumidityHysteresis.2 = INTEGER: 500 // 32768 = No sensor connected if ($value != 32768 && $value != '') { discover_sensor('humidity', $device, $oid, "isDeviceMonitorHumidity.$index", 'ispro-mib', $descr, 0.01, $value, $options); } $oid = ".1.3.6.1.4.1.19011.1.3.2.1.3.1.2.1.4.$index"; $value = $entry['isDeviceMonitorHumidityAlarm']; // isDeviceMonitorHumidityAlarm.1 = INTEGER: normal(3) // unknown = No sensor connected if ($value != 'unknown' && $value != '') { discover_status($device, $oid, "isDeviceMonitorHumidityAlarm.$index", 'ispro-mib-threshold-state', $descr, $value); } } } $oids = snmpwalk_cache_oid($device, 'isDeviceMonitorDigitalInTable', [], 'ISPRO-MIB'); $oids = snmpwalk_cache_oid($device, 'isDeviceConfigDigitalInTable', $oids, 'ISPRO-MIB'); foreach ($oids as $index => $entry) { // Unfortunately, there is no (direct) SNMP link between the sensors connected above, even though they are represented together in the Web UI. // Unless we use a ugly "divide by 2" hack, we can't know if these alerts are meant to be "not displayed" like we do for Temp/Humidity. // If you don't want digital sensors displayed, make sure they are set to Disabled and not Normal Open or Normal Close. // isDeviceMonitorDigitalInIndex.1 = INTEGER: 1 // isDeviceMonitorDigitalInName.1 = STRING: "Alarm1-1" // isDeviceMonitorDigitalIn.1 = INTEGER: inactive(2) // isDeviceMonitorDigitalInAlarm.1 = INTEGER: normal(1) $descr = $entry['isDeviceMonitorDigitalInName'] /* . ' (' . $entry['isDeviceConfigDigitalInState'] . ')'*/ ; $oid = ".1.3.6.1.4.1.19011.1.3.2.1.3.1.3.1.4.$index"; $value = $entry['isDeviceMonitorDigitalInAlarm']; if ($entry['isDeviceConfigDigitalInState'] != 'disabled' && $value != '') { discover_status($device, $oid, "isDeviceMonitorDigitalInAlarm.$index", 'ispro-mib-trigger-state', $descr, $value); } } // EOF