@@ -239,6 +239,21 @@ def humidity_ready(self):
239239 # Forced measurement trigger
240240 # --------------------------------------------------
241241
242+ def _is_sleep_mode (self ):
243+ """Return True if the sensor is in sleep mode."""
244+ return (self ._read_reg (REG_CTRL_MEAS ) & MODE_MASK ) == MODE_SLEEP
245+
246+ def _ensure_data (self ):
247+ """Trigger a forced measurement if the sensor is in sleep mode.
248+
249+ In normal mode this is a no-op. In sleep mode it triggers a
250+ single conversion and waits for completion so that subsequent
251+ register reads return fresh data.
252+ """
253+ if self ._is_sleep_mode ():
254+ self .trigger_one_shot ()
255+ self ._wait_measurement ()
256+
242257 def trigger_one_shot (self ):
243258 """Trigger a single forced measurement. Poll data_ready() for completion."""
244259 ctrl = self ._read_reg (REG_CTRL_MEAS )
@@ -323,24 +338,44 @@ def _compensate_humidity(self, raw_hum):
323338 # --------------------------------------------------
324339
325340 def temperature (self ):
326- """Return compensated temperature in °C (float)."""
341+ """Return compensated temperature in °C (float).
342+
343+ If the sensor is in sleep mode, a forced measurement is triggered
344+ automatically before reading.
345+ """
346+ self ._ensure_data ()
327347 raw_temp , _ , _ = self ._read_raw ()
328348 return self ._compensate_temperature (raw_temp ) / 100.0
329349
330350 def pressure_hpa (self ):
331- """Return compensated pressure in hPa (float)."""
351+ """Return compensated pressure in hPa (float).
352+
353+ If the sensor is in sleep mode, a forced measurement is triggered
354+ automatically before reading.
355+ """
356+ self ._ensure_data ()
332357 raw_temp , raw_press , _ = self ._read_raw ()
333358 self ._compensate_temperature (raw_temp )
334359 return self ._compensate_pressure (raw_press ) / 25600.0
335360
336361 def humidity (self ):
337- """Return compensated relative humidity in %RH (float)."""
362+ """Return compensated relative humidity in %RH (float).
363+
364+ If the sensor is in sleep mode, a forced measurement is triggered
365+ automatically before reading.
366+ """
367+ self ._ensure_data ()
338368 raw_temp , _ , raw_hum = self ._read_raw ()
339369 self ._compensate_temperature (raw_temp )
340370 return self ._compensate_humidity (raw_hum ) / 1024.0
341371
342372 def read (self ):
343- """Return (temperature_c, pressure_hpa, humidity_rh) tuple."""
373+ """Return (temperature_c, pressure_hpa, humidity_rh) tuple.
374+
375+ If the sensor is in sleep mode, a forced measurement is triggered
376+ automatically before reading.
377+ """
378+ self ._ensure_data ()
344379 raw_temp , raw_press , raw_hum = self ._read_raw ()
345380 temp_c = self ._compensate_temperature (raw_temp ) / 100.0
346381 press_hpa = self ._compensate_pressure (raw_press ) / 25600.0
0 commit comments