sensors

SNMP Temperature OIDs: ENTITY-SENSOR-MIB Reference

The SNMP OIDs for temperature — ENTITY-SENSOR-MIB entPhySensorValue/Type/Scale/Precision, LM-SENSORS on Linux, and vendor temperature OIDs, with the scale decode.

By the SNMP Monitoring team · Reviewed July 2026

Temperature has one portable home in SNMP — the ENTITY-SENSOR-MIB — and one recurring trap: the number you read is a raw integer that means nothing until you apply its scale and precision. This page is the paste-ready reference for the ENTITY-SENSOR temperature objects, the Linux LM-SENSORS variant, and where vendor temperature OIDs live. There is no single universal "CPU temperature OID"; the standard gives you the method, and the exact labelled sensor comes from the device.

The "how do I set thermal alerts" side is the twin: monitor temperature, plus room probes at temp & humidity. Hubs: sensors, all OIDs.

ENTITY-SENSOR-MIB temperature objects

The generic sensor table at 1.3.6.1.2.1.99.1.1.1 (RFC 3433) describes every physical sensor with a small set of columns. For temperature, entPhySensorType reads celsius:

ObjectOIDMeaning / type
entPhySensorType1.3.6.1.2.1.99.1.1.1.1Sensor type — celsius(8) for temperature
entPhySensorScale1.3.6.1.2.1.99.1.1.1.2SI multiplier (units, milli, kilo…)
entPhySensorPrecision1.3.6.1.2.1.99.1.1.1.3Decimal places in the value
entPhySensorValue1.3.6.1.2.1.99.1.1.1.4The reading (integer)
entPhySensorOperStatus1.3.6.1.2.1.99.1.1.1.5Sensor status (ok / unavailable / nonoperational)

The whole point of the design: a manager reads the type to know it's a temperature, then applies scale and precision to entPhySensorValue to get real degrees. Check entPhySensorOperStatus too — a sensor reporting unavailable means the reading is stale, not that the hardware is at 0 °C.

Applying scale & precision

The raw value is not the temperature. Decode it:

  1. Read entPhySensorType (.1) — confirm it's celsius.
  2. Read entPhySensorPrecision (.3) — the number of decimal places.
  3. Read entPhySensorScale (.2) — the SI unit multiplier.
  4. Read entPhySensorValue (.4) — the raw integer.
  5. Apply: real value = entPhySensorValue × 10^(−precision), then adjust by the scale unit.

So a value of 385 with precision 1 is 385 × 10^(−1) = 38.5 °C. With precision 0 the same 385 would be a nonsensical 385 °C — which is exactly the bug you get from skipping the decode. Scale usually stays at units for temperature, but read it rather than assume.

A practical warning on templating: precision is a per-sensor property, not a per-device constant. One box can report its inlet sensor at precision 0 and its CPU sensor at precision 1, so a template that hard-codes "divide by 10" for every sensor will be right on some and off by a factor of ten on others. Read the precision alongside every value and apply it per sensor. It costs one extra object per poll and saves you from a dashboard that quietly reads a healthy 22 °C inlet as 220 °C.

LM-SENSORS-MIB (Linux)

On Linux hosts running Net-SNMP with the lm-sensors integration, temperatures also show up in the LM-SENSORS-MIB — handy for reading CPU and board temps from lm-sensors without a vendor MIB:

  • lmTempSensorsValue1.3.6.1.4.1.2021.13.16.2.1 — temperature sensor values from lm-sensors.

This is the Linux answer to "CPU temp over SNMP" where the box uses lm-sensors. It's Net-SNMP-specific (and requires the module be enabled in snmpd.conf), so it won't appear on network gear — but on a Linux server it's often the quickest path to a temperature reading. Values follow the module's own scaling, so confirm the unit on your host.

Vendor temperature OIDs

Labelled, per-location temperatures (inlet, CPU, exhaust) usually come from a vendor enterprise MIB under 1.3.6.1.4.1:

  • HP/HPE iLO, Dell iDRAC, Cisco, and others each publish their own temperature objects with named sensors and thresholds.

The exact leaf differs per device, so this reference deliberately doesn't invent one. Learn the ENTITY-SENSOR/LM-SENSORS pattern here, then pull the precise labelled objects from the device pages for your hardware. Don't copy a "CPU temp OID" from a forum and assume it maps to your board — walk the tree and confirm.

Worked snmpwalk example

Walk the sensor table and pick out the celsius entries:

snmpwalk -v2c -c <RO_string> <host> 1.3.6.1.2.1.99.1.1.1
ENTITY-SENSOR-MIB::entPhySensorType.10 = INTEGER: celsius(8)
ENTITY-SENSOR-MIB::entPhySensorScale.10 = INTEGER: units(9)
ENTITY-SENSOR-MIB::entPhySensorPrecision.10 = INTEGER: 1
ENTITY-SENSOR-MIB::entPhySensorValue.10 = INTEGER: 385
ENTITY-SENSOR-MIB::entPhySensorOperStatus.10 = INTEGER: ok(1)

Sensor .10 is a temperature reading 385 × 10^(−1) = 38.5 °C, status ok. Cross-reference the same index against the ENTITY-MIB inventory at 1.3.6.1.2.1.47 to learn whether it's the CPU, inlet, or a PSU. <RO_string> is a placeholder; keep live communities out of committed scripts.

snmpwalk output of ENTITY-SENSOR temperature value and scale

How to monitor temperature (how-to)

Reference stops here. The alerting logic — inlet vs CPU thresholds, ASHRAE room guidance, sustained-vs-spike — is on the twins: monitor temperature for hardware and temp & humidity for room probes. Related: fan-speed OIDs, device pages, the OID catalog, and glossary.

Frequently asked questions

What OID is temperature in SNMP?

The portable one is entPhySensorValue (1.3.6.1.2.1.99.1.1.1.4) from the ENTITY-SENSOR-MIB, for any sensor whose entPhySensorType is celsius. On Linux with lm-sensors, lmTempSensorsValue (1.3.6.1.4.1.2021.13.16.2.1) works too. Labelled CPU/inlet temps come from vendor MIBs — there's no single universal temperature OID.

How do I convert the value to °C?

Read entPhySensorPrecision and entPhySensorScale with the value, then compute entPhySensorValue × 10^(−precision) and adjust by the scale unit. For precision 1, that's the raw value divided by 10 — so 385 becomes 38.5 °C. Skipping the decode is the classic mistake.

What MIB has temperature sensors?

The standard one is the ENTITY-SENSOR-MIB (RFC 3433) at 1.3.6.1.2.1.99, which types sensors generically including celsius. Linux hosts also expose lm-sensors data via the LM-SENSORS-MIB, and vendors publish richer, labelled temperature objects under their enterprise arc 1.3.6.1.4.1.

What's the Linux CPU temperature OID?

On a Net-SNMP host with the lm-sensors module enabled, lmTempSensorsValue (1.3.6.1.4.1.2021.13.16.2.1) exposes the lm-sensors temperatures, including CPU where the board reports it. Confirm which index maps to the CPU on your hardware, since the ordering is device-dependent.

Key takeaways

  • Temperature is portable via ENTITY-SENSOR-MIBentPhySensorValue 1.3.6.1.2.1.99.1.1.1.4, type celsius.
  • Decode: real = value × 10^(−precision), adjusted by scale — precision 1 means divide by 10.
  • Linux/lm-sensors: lmTempSensorsValue at 1.3.6.1.4.1.2021.13.16.2.1.
  • No universal CPU-temp OID — labelled sensors live in vendor MIBs under 1.3.6.1.4.1.
  • Check entPhySensorOperStatus so a stale/unavailable sensor isn't read as 0 °C.
  • Procedures: temperature how-to, room probes; catalog: sensors/all.

Monitor it from outside the network

SNMP only tells you a box is healthy while something is still asking. ostr.io polls your endpoints externally and fires email + SMS alerts the moment a reading crosses your line — or the agent goes silent.