My Changes so far.
This commit is contained in:
+28
-11
@@ -130,6 +130,10 @@ class Drive:
|
||||
""" Return True if drive is in low power state, False otherwise. """
|
||||
return (self.getState() in (Drive.DriveState.STANDBY, Drive.DriveState.SLEEPING))
|
||||
|
||||
def isUnknown(self):
|
||||
""" Return True if drive is in unknown state, False otherwise. """
|
||||
return self.getState() == Drive.DriveState.UNKNOWN
|
||||
|
||||
def getTemperature(self):
|
||||
""" Get drive temperature in Celcius using either hddtemp or hdparm. """
|
||||
if not self.supports_hitachi_temp_query:
|
||||
@@ -156,7 +160,8 @@ class Drive:
|
||||
temp_unit = drive_data[4]
|
||||
if temp_unit != "C":
|
||||
raise RuntimeError("hddtemp daemon is not returning temp as Celsius")
|
||||
temp = int(drive_data[3])
|
||||
else:
|
||||
temp = int(drive_data[3])
|
||||
found = True
|
||||
break
|
||||
if not found:
|
||||
@@ -342,12 +347,12 @@ class Fan:
|
||||
def setPwmValue(self, value):
|
||||
""" Set fan PWM value. """
|
||||
assert(0 <= value <= 255)
|
||||
with open(self.enable_filepath, "r+t") as enable_file:
|
||||
enabled_val = int(enable_file.read().strip())
|
||||
if enabled_val != 1:
|
||||
self.logger.warning("%s was %u, setting it to 1", self.enable_filepath, enabled_val)
|
||||
enable_file.seek(0)
|
||||
enable_file.write("1")
|
||||
# with open(self.enable_filepath, "r+t") as enable_file:
|
||||
# enabled_val = int(enable_file.read().strip())
|
||||
# if enabled_val != 1:
|
||||
# self.logger.warning("%s was %u, setting it to 1", self.enable_filepath, enabled_val)
|
||||
# enable_file.seek(0)
|
||||
# enable_file.write("1")
|
||||
self.logger.debug("Setting PWM value to %u" % (value))
|
||||
with open(self.pwm_filepath, "wt") as pwm_file:
|
||||
pwm_file.write("%u" % (value))
|
||||
@@ -571,18 +576,28 @@ def main(drive_filepaths, fan_pwm_filepaths, fan_start_values, fan_stop_values,
|
||||
# calc max drive temperature
|
||||
temps = []
|
||||
awakes = []
|
||||
unknowns= []
|
||||
for drive in drives:
|
||||
awake = not drive.isSleeping()
|
||||
unknown = drive.isUnknown()
|
||||
|
||||
awakes.append(awake)
|
||||
if awake or drive.supports_hitachi_temp_query:
|
||||
temps.append(drive.getTemperature())
|
||||
else:
|
||||
unknowns.append(unknown)
|
||||
if (awake and not unknown) or drive.supports_hitachi_temp_query:
|
||||
try:
|
||||
temps.append(drive.getTemperature())
|
||||
except Exception as e:
|
||||
logger.error("Could not get Temperature: " + str(e))
|
||||
temps.append(35)
|
||||
elif not awake:
|
||||
logger.debug("Drive %s is in low power state, unable to query temperature" % (drive))
|
||||
else:
|
||||
logger.debug("Drive %s is in unknown state, unable to query temperature" % (drive))
|
||||
if temps:
|
||||
temp = max(temps)
|
||||
logger.info("Maximum drive temperature: %u C" % (temp))
|
||||
else:
|
||||
assert(not any(awakes))
|
||||
#assert(not any(awakes))
|
||||
logger.info("All drives are in low power state")
|
||||
|
||||
if not any(awakes):
|
||||
@@ -592,6 +607,8 @@ def main(drive_filepaths, fan_pwm_filepaths, fan_start_values, fan_stop_values,
|
||||
if temps and (temp > min_temp):
|
||||
fan_speed_prct = 100 * (temp - min_temp) // (max_temp - min_temp)
|
||||
fan_speed_prct = int(min(fan_speed_prct, 100))
|
||||
elif any(unknowns):
|
||||
fan_speed_prct = 6
|
||||
else:
|
||||
fan_speed_prct = 0
|
||||
fan_speed_prct = max(fan_speed_prct, min_fan_speed_prct)
|
||||
|
||||
Reference in New Issue
Block a user