Fan Issues on Fresh Install (Raspbian Lite 64-Bit): Fan Blasting + Unable to Set RTC

Settling temperature values to 0, i.e. 30=0 will (using the Argon code) set the fan to 25%.

If you want the minimum temp to be 45, remove all other ranges and set it.

i.e.
45=10
50=25
55=75

Hi

TBH, I was hoping to turn the fan completely off until the HDD’s reached 45C and the CPU reached 50C looking at the documentation the RPi4 should cope with 80C no higher without frying itself, so 50C, while not ideal, is an acceptable level.

Is the Argon EON designed by default to have the fan permanently on by any chance, given setting it to 0 doesn’t actually set it to 0 (i.e. Off) but sets it to 25%? Because if that’s the situation, then I’m wasting my time trying to stop the thing from sounding like a 747 getting ready to take off at Heathrow.

Okay… modify your config file. Eliminate all settings except the ones you want. As explained before setting a fan speed to zero sets the speed to 25. It’s right there in the code.

The way to set a fan speed to zero for a specific temp is to not have a setting.

So by having your first setting in the file

45=10

This will keep the fan off until the max temp of any drive is 45. When that happens it will run the fan at 10%

Hi

Ahh, the clouds part for me now.

OK, much appreciated.

Many thanks

OK, for anyone stumbling across this thread. Using the default argon-config won’t work if you’re looking to switch the fan off until it reaches the desired level. There is no way to set the threshold level of (in my case) 45C for the fan to start, the argon-config demands an input for the 30C entry before it will move to the 35C entry which in turn demands an input. Setting 30C, 35C and 40C to 0 (Zero) is pointless as that will default to 25% fan speed which is not “Off”.

You need to edit argononed.conf and argononed-hdd.conf respectively with your favourite text editor Nano or in my case Vim
sudo vim /etc/argononed.conf [This is for the CPU settings]
sudo vim /etc/argononed-hdd.conf [This is for the hard drive settings]

Just delete the fan speed settings (Not the temperatures) for 30C, 35C and 40C on the HDD’s (obviously the same applies to CPU) don’t forget to set fan speeds for 45C and above.

HTH

Hi everyone, new to the EON, been using OMV for quite some time.

Found the HDD temp script is messing with hdd spindown (hdparm), spinning them up regularly (once a minute maybe).
Uninstalled OLED script and hdparm spindown works just fine (verified on OMV5 and OMV6).

Is there any way the EON fan can be controlled by only checking the RPi temp and not have the hdd temp checked?

Thanks!

Yes, edit the script to remove the call to hdparm (hdtemp)

Thanks!!!
You mean on the install script or after the install?

exit the script after the install.

Could anyone explain how to do this

Thanks @NHHiker, I´m not much of a programmer really :frowning: , could you please point me in the right direction? Name of the script that needs to be edited?
Thanks again

1 Like
DISABLE HDD TEMP CHECK - HDD SPINDOWN RE-ENABLED

1 - Comment lines on /etc/argon/argonsysinfo.py defs "argonsysinfo_gethddtemp" and "argonsysinfo_getdevhddtemp" to look like this:

def argonsysinfo_gethddtemp():
        # May 2022: Used smartctl, hddtemp is not available on some platforms
        hddtempcmd = "/usr/sbin/smartctl"
        if os.path.exists(hddtempcmd) == False:
                # Fallback for now
                hddtempcmd = "/usr/sbin/hddtemp"

        outputobj = {}
#       if os.path.exists(hddtempcmd):
#               try:
#                       tmp = os.popen("lsblk | grep -e '0 disk' | awk '{print $1}'").read()
#                       alllines = tmp.split("\n")
#                       for curdev in alllines:
#                               if curdev[0:2] == "sd" or curdev[0:2] == "hd":
#                                       tempval = argonsysinfo_getdevhddtemp(hddtempcmd,curdev)
#                                       if tempval > 0:
#                                               outputobj[curdev] = tempval
#                       return outputobj
#               except:
#                       return outputobj
        return outputobj

def argonsysinfo_getdevhddtemp(hddtempcmd, curdev):
        cmdstr = ""
#       if hddtempcmd == "/usr/sbin/hddtemp":
#               cmdstr = "/usr/sbin/hddtemp -n sata:/dev/"+curdev
#       elif hddtempcmd == "/usr/sbin/smartctl":
#               cmdstr = "/usr/sbin/smartctl -d sat -A /dev/"+curdev+" | grep Temperature_Celsius | awk '{print $10}'"
#
        tempval = 0
#       if len(cmdstr) > 0:
#               try:
#                       temperaturestr = os.popen(cmdstr+" 2>&1").read()
#                       tempval = float(temperaturestr)
#               except:
#                       tempval = -1
#
        return tempval

2 - Save & exit
3 - Reboot
2 Likes
1 Like

I’m going to try this out and see if it works for me, though I’m a little concerned that I’m not going to be checking HDD temp any more. Would there be a way to only check the temp if the HDDs are spinning?

Well, you would have to query the drive to see if it is currently spinning. With a number of drives… that would start the drive spinning. While some drives are easy to check and prevent the spin, others are not so easy… so yeah, for some drives you could.

Personally if you want the drives to spin up on use, don’t monitor temps…

1 Like

Haha, I was hoping that wouldn’t be the case, but it makes sense. I’ll have to think about what my long term solution is, but for the most part the HDDs are minimally used unless we’re actively interacting with it. Because of that, repeatedly spinning them up with a temp query feels like a bad idea. All things considered, not monitoring the drive temp isn’t the worst solution, for now at least.

How to re-enable hdd temperature check in future?

Uncomment those lines and reboot? Have not tried it though

You can have both. Temp checks and spin down. But you have to consider that the interval of the temp checks has to be longer as the spindown timeout. I patched the “argonsysinfo.py” script to do so (quick and dirty).

--- argonsysinfo.py.orig	2022-05-25 16:33:24.000000000 +0200
+++ argonsysinfo.py	2022-08-26 15:42:29.817984727 +0200
@@ -8,6 +8,9 @@
 import time
 import socket
 
+outputobj = {}
+lasthddtemp = 0
+
 def argonsysinfo_listcpuusage(sleepsec = 1):
 	outputlist = []
 	curusage_a = argonsysinfo_getcpuusagesnapshot()
@@ -151,22 +154,29 @@
 		return maxtempval
 
 def argonsysinfo_gethddtemp():
+	global outputobj
+	global lasthddtemp
 	# May 2022: Used smartctl, hddtemp is not available on some platforms
+	now = int(time.time())
+	if (lasthddtemp + 300) > now:
+		return outputobj
+	lasthddtemp = now
+
 	hddtempcmd = "/usr/sbin/smartctl"
 	if os.path.exists(hddtempcmd) == False:
 		# Fallback for now
 		hddtempcmd = "/usr/sbin/hddtemp"
 
-	outputobj = {}
 	if os.path.exists(hddtempcmd):
 		try:
 			tmp = os.popen("lsblk | grep -e '0 disk' | awk '{print $1}'").read()
 			alllines = tmp.split("\n")
 			for curdev in alllines:
 				if curdev[0:2] == "sd" or curdev[0:2] == "hd":
-					tempval = argonsysinfo_getdevhddtemp(hddtempcmd,curdev)
-					if tempval > 0:
-						outputobj[curdev] = tempval
+					outputobj[curdev] = argonsysinfo_getdevhddtemp(hddtempcmd,curdev)
+#					tempval = argonsysinfo_getdevhddtemp(hddtempcmd,curdev)
+#					if tempval > 0:
+#						outputobj[curdev] = tempval
 			return outputobj
 		except:
 			return outputobj
@@ -177,7 +187,8 @@
 	if hddtempcmd == "/usr/sbin/hddtemp":
 		cmdstr = "/usr/sbin/hddtemp -n sata:/dev/"+curdev
 	elif hddtempcmd == "/usr/sbin/smartctl":
-		cmdstr = "/usr/sbin/smartctl -d sat -A /dev/"+curdev+" | grep Temperature_Celsius | awk '{print $10}'"
+#		cmdstr = "/usr/sbin/smartctl -n standby,0 -A /dev/"+curdev+" | grep Temperature_Celsius | awk '{print $10}'"
+                cmdstr = "/usr/sbin/smartctl -n standby,0 -A /dev/"+curdev+" | egrep 'Temperature.*Cels' | sed -E 's/^.*\s+([0-9]+)\s+[C\(][eM0-9].*$/\\1/'"
 
 	tempval = 0
 	if len(cmdstr) > 0:

In the line “if (lasthddtemp + 300) > now:” the 300 are the seconds for the real temp check interval. This must be longer as your actual hdd spindown timeout.

The change to the smartctl call prevents checks if the HDD already is in standby. And the change to the “grep” afterwards makes it possible to check NVMe devices as well.

I do not see this working, I’ve tested the modified smartctl command on my EON, and can see the results from the NVME, however when I use this on an non-nvme device I don’t get those results… just an error:

Testing on my EON:

Non-NVME drive:

smartctl -d sat -A /dev/sdd 
MART Attributes Data Structure revision number: 1
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail  Always       -       0
  9 Power_On_Hours          0x0032   099   099   000    Old_age   Always       -       4490
 12 Power_Cycle_Count       0x0032   099   099   000    Old_age   Always       -       55
177 Wear_Leveling_Count     0x0013   100   100   000    Pre-fail  Always       -       0
179 Used_Rsvd_Blk_Cnt_Tot   0x0013   100   100   010    Pre-fail  Always       -       0
181 Program_Fail_Cnt_Total  0x0032   100   100   010    Old_age   Always       -       0
182 Erase_Fail_Count_Total  0x0032   100   100   010    Old_age   Always       -       0
183 Runtime_Bad_Block       0x0013   100   100   010    Pre-fail  Always       -       0
187 Uncorrectable_Error_Cnt 0x0032   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0032   075   049   000    Old_age   Always       -       25
195 ECC_Error_Rate          0x001a   200   200   000    Old_age   Always       -       0
199 CRC_Error_Count         0x003e   100   100   000    Old_age   Always       -       0
235 POR_Recovery_Count      0x0012   099   099   000    Old_age   Always       -       52
241 Total_LBAs_Written      0x0032   099   099   000    Old_age   Always       -       39874272

Non-NVME drive:

smartctl -n standby,0, -A /dev/sdd

smartctl 7.2 2020-12-30 r5155 [aarch64-linux-5.15.76-v8+] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

/dev/sdd: Unknown USB bridge [0x1741:0x1156 (0x100)]
Please specify device type with the -d option.

Use smartctl -h to get a usage summary

If I specify the type (-d sat) the non-NVME devices work, but the NVME does not…