Argon ONE V2 - Fan always on after reinstalling RPi OS

I just got my unit and I am facing the same problem. I am on latest version of raspbian (clean install too)

I only had connected HDDs once. Rebooted without disks connected an fan is always at maximum speed despite changing fan configs, restarting the service.

CPU temp reports as: 34.076
and HDD temp as expected reports: 0 as its not connected anymore.

There is another part at the /etc/argon/argononed.py script looks strange to me (download of today line 198 - 213, could be vary with older versions):

		if prevspeed == newspeed:
			time.sleep(30)
			continue
		elif newspeed < prevspeed:
			# Pause 30s before speed reduction to prevent fluctuations
			time.sleep(30)
		prevspeed = newspeed
		try:
			if newspeed > 0:
				# Spin up to prevent issues on older units
				argonregister_setfanspeed(bus, 100, argonregsupport)
				# Set fan speed has sleep
			argonregister_setfanspeed(bus, newspeed, argonregsupport)
			time.sleep(30)
		except IOError:
			time.sleep(60)

Please change to:

		if newspeed < prevspeed:
			# Pause 30s before speed reduction to prevent fluctuations
			time.sleep(30)
		prevspeed = newspeed
		try:
			# if newspeed > 0:
				# Spin up to prevent issues on older units
				# argonregister_setfanspeed(bus, 100, argonregsupport)
				# Set fan speed has sleep
			argonregister_setfanspeed(bus, newspeed, argonregsupport)
			time.sleep(30)
		except IOError:
			time.sleep(60)

I removed these lines:

		if prevspeed == newspeed:
			time.sleep(30)
			continue

because I know that the fan is enabled during power up at my case. If it’s at yours too, then the fan will not stopped until the temperature was once over a threshold, after every boot.

Alternatively you can try to change this single line (~ 185). That should helps too, but could fail if the first I2C message is going lost:
prevspeed=-1 or prevspeed=0
to
prevspeed=95

1 Like

Same problem with Argon One V1 and latest RPi OS on RPi 4…
Really annoying and no solution from Argon Forty.

THIS IS IT!

I tested multiple times, multiple reboots and I am happy to say this was it!

THANKS A LOT.

1 Like

You are welcome. Nice to know.

To make it maybe easier I have constructed a patch file. Save the content to new text file and apply the patch.

  • nano argononed.patch
  • copy & paste the content into the opened nano
--- argononed.py_20240604	2024-06-04 15:25:20.185538730 +0200
+++ argononed.py_corrected	2024-06-04 19:03:05.116735462 +0200
@@ -195,10 +195,7 @@
 		if tmpspeed > newspeed:
 			newspeed = tmpspeed
 
-		if prevspeed == newspeed:
-			time.sleep(30)
-			continue
-		elif newspeed < prevspeed:
+		if newspeed < prevspeed:
 			# Pause 30s before speed reduction to prevent fluctuations
 			time.sleep(30)
 		prevspeed = newspeed
--- argononed.py_20240604	2024-06-04 15:25:20.185538730 +0200
+++ argononed.py_corrected	2024-06-04 19:06:04.113740713 +0200
@@ -200,9 +200,9 @@
 			time.sleep(30)
 		prevspeed = newspeed
 		try:
-			if newspeed > 0:
+			# if newspeed > 0:
 				# Spin up to prevent issues on older units
-				argonregister_setfanspeed(bus, 100, argonregsupport)
+				# argonregister_setfanspeed(bus, 100, argonregsupport)
 				# Set fan speed has sleep
 			argonregister_setfanspeed(bus, newspeed, argonregsupport)
 			time.sleep(30)
  • save the file with CTRL-O and close nano with CTRL-X
  • stop argononed service
    sudo systemctl stop argononed
  • apply the patch
    sudo patch -p1 /etc/argon/argononed.py -i argononed.patch
  • start argononed service again
    sudo systemctl start argononed

Only if necessary, because you are dissatisfied with it, it is possible to undo the patch:
sudo patch -R -p1 /etc/argon/argononed.py -i argononed.patch

3 Likes

Many thanks for this. I confirm it worked on my case very well .

1 Like

I just checked my second RPi4 that is running at another location in an Argon ONE V2, I was setting it up towards the end of 2023 and it runs as expected.

It says:
Argon Configuration Tool Version 2311003
Screenshot 2024-06-23 at 22.11.05

I backed up the entire:
/etc/argon/
with the argononed.py

Would this be useful to anyone?

Hello, i have the same Problem. I switched from older raspberry pi OS to new one, it worked fine before all, config and 0 fan speed. Now it not taking the numbers in the config file, and light is on on the fan hat board 25 and 50% like someone mentioned here.

HarryH made a pach i followed it but it seems not to work. But iam not that good at it. But when i open argononed.py it seems its a bit different. Maye thats why

prevspeed=INITIALSPEEDVAL
	while True:
		# Speed based on CPU Temp
		val = argonsysinfo_getcputemp()
		newspeed = get_fanspeed(val, fanconfig)
		# Speed based on HDD Temp
		val = argonsysinfo_getmaxhddtemp()
		tmpspeed = get_fanspeed(val, fanhddconfig)

		# Use faster fan speed
		if tmpspeed > newspeed:
			newspeed = tmpspeed

		if prevspeed == newspeed:
			time.sleep(30)
			continue
		elif newspeed < prevspeed and prevspeed != INITIALSPEEDVAL:
			# Pause 30s before speed reduction to prevent fluctuations
			time.sleep(30)
		prevspeed = newspeed
		try:
			if newspeed > 0:
				# Spin up to prevent issues on older units
				argonregister_setfanspeed(bus, 100, argonregsupport)
				# Set fan speed has sleep
			argonregister_setfanspeed(bus, newspeed, argonregsupport)
			time.sleep(30)
		except IOError:
			time.sleep(60)

Maybe Harry or someone other can change it so it fits to my config words.
Would be great if someone helps, fan is always on :frowning:

You are right, the script was changed. Argon40 seems trying to fix the known issue, but the result is currently not better than before, unfortunately.

I have extended the patch file. Please try this version:

--- argononed.py_20240604	2024-06-04 15:25:20.185538730 +0200
+++ argononed.py_corrected	2024-06-04 19:03:05.116735462 +0200
@@ -195,10 +195,7 @@
 		if tmpspeed > newspeed:
 			newspeed = tmpspeed
 
-		if prevspeed == newspeed:
-			time.sleep(30)
-			continue
-		elif newspeed < prevspeed:
+		if newspeed < prevspeed:
 			# Pause 30s before speed reduction to prevent fluctuations
 			time.sleep(30)
 		prevspeed = newspeed
--- argononed.py_20240604	2024-06-04 15:25:20.185538730 +0200
+++ argononed.py_corrected	2024-06-04 19:06:04.113740713 +0200
@@ -200,9 +200,9 @@
 			time.sleep(30)
 		prevspeed = newspeed
 		try:
-			if newspeed > 0:
+			# if newspeed > 0:
 				# Spin up to prevent issues on older units
-				argonregister_setfanspeed(bus, 100, argonregsupport)
+				# argonregister_setfanspeed(bus, 100, argonregsupport)
 				# Set fan speed has sleep
 			argonregister_setfanspeed(bus, newspeed, argonregsupport)
 			time.sleep(30)
--- argononed.py_20240727	2024-07-27 03:00:53.000000000 +0200
+++ argononed.py_corrected	2024-08-17 13:21:36.388359722 +0200
@@ -177,7 +177,7 @@
 # Location of config file varies based on OS
 #
 def temp_check():
-	INITIALSPEEDVAL = 200	# ensures fan speed gets set during initialization (e.g. change settings)
+	INITIALSPEEDVAL = 0	# ensures fan speed gets set during initialization (e.g. change settings)
 	argonregsupport = argonregister_checksupport(bus)

 	fanconfig = load_fancpuconfig()
@@ -196,10 +196,7 @@
 		if tmpspeed > newspeed:
 			newspeed = tmpspeed

-		if prevspeed == newspeed:
-			time.sleep(30)
-			continue
-		elif newspeed < prevspeed and prevspeed != INITIALSPEEDVAL:
+		if newspeed < prevspeed:
 			# Pause 30s before speed reduction to prevent fluctuations
 			time.sleep(30)
 		prevspeed = newspeed
1 Like

@willtell,

because I can’t see a normal logical error after a second look to the new script version from 2024-07-27, I assume, the issues occurs because of an I/O error during boot and a second try to stop the fan is missed until the service is restarted.

If you in the mood and have the time, please can you check and report if that version works too?
Important for this test: start with the unpatched argononed.py file.

--- argononed.py_20240727	2024-07-27 03:00:53.000000000 +0200
+++ argononed.py	2024-08-18 17:52:31.337489009 +0200
@@ -202,7 +202,6 @@
 		elif newspeed < prevspeed and prevspeed != INITIALSPEEDVAL:
 			# Pause 30s before speed reduction to prevent fluctuations
 			time.sleep(30)
-		prevspeed = newspeed
 		try:
 			if newspeed > 0:
 				# Spin up to prevent issues on older units
@@ -210,6 +209,7 @@
 				# Set fan speed has sleep
 			argonregister_setfanspeed(bus, newspeed, argonregsupport)
 			time.sleep(30)
+			prevspeed = newspeed
 		except IOError:
 			time.sleep(60)

Hello,
i tried, i wrote it myself into the file and saved, restart service and reboot it does not work. I tried patch it, creat file in nano and apply but there is an error hunk 1 failed at 202 and hunk 2 failed at 210. Could be me i dont know. A working file or new download from argon would be great, otherwise i have to uninstall the fan.
Thanks for helping :slight_smile:

Can you please be more specific which changes you tried, so I have a chance to follow your comments? Currently I’m unsure if one of the patches works for you or nothing of that. :wink:

The “Hunk #1 FAILED at 195” message with the patch from here: Argon ONE V2 - Fan always on after reinstalling RPi OS - #29 by HarryH is expected, because this also includes a patch for the old versions of the argononed.py (before 2024-07-27) too.

$ patch -p1 argononed.py -i argononed.patch
patching file argononed.py
Hunk #1 FAILED at 195.
1 out of 1 hunk FAILED -- saving rejects to file argononed.py.rej
patching file argononed.py
Hunk #1 succeeded at 204 (offset 4 lines).
patching file argononed.py

On that way it should applyable to the versions 2024-02 till 2024-07. The downside of that construct, only 2 of 3 should match, the third will trigger that hunk message and can ignored. With script versions from last year only 1 patch will match, because the other trouble making code part wasn’t there yet.

Depending on your feedback if it work or doesn’t work, I will remove or modify this kind of combined patch, because it could also confuse if someone will revert the changes and selects the wrong hunk to revert.

If you changed the argononed.py file by hand or downloaded it some days before 2024-07-27, it’s possible that only 1 or nothing matches because of the changes I can’t verify.

In your case, I recommend first checking that the I2C bus is working properly and is not being blocked by another service, such as ioBroker.

  • stop argononed service
    sudo systemctl stop argononed
  • send the stop command to the fan
    sudo i2cset -y 1 0x1a 0x00

If that stopped the fan, do the following

  • make yourself into root
    sudo -i
  • stop the argononed service if you have not already done so
    systemctl stop argononed
  • change into /etc/argon directory
    cd /etc/argon
  • mage a backup of your current script version
    cp -p argononed.py argononed.py_bak
  • download the argononed.py file again
    wget https://download.argon40.com/scripts/argononed.py
  • apply only this patch (my first attempt from above seems to be converted to wrong whitespacing)
--- argononed.py_20240727	2024-07-27 03:00:53.000000000 +0200
+++ argononed.py	2024-08-18 17:52:31.337489009 +0200
@@ -202,7 +202,6 @@
 		elif newspeed < prevspeed and prevspeed != INITIALSPEEDVAL:
 			# Pause 30s before speed reduction to prevent fluctuations
 			time.sleep(30)
-		prevspeed = newspeed
 		try:
 			if newspeed > 0:
 				# Spin up to prevent issues on older units
@@ -210,6 +209,7 @@
 				# Set fan speed has sleep
 			argonregister_setfanspeed(bus, newspeed, argonregsupport)
 			time.sleep(30)
+			prevspeed = newspeed
 		except IOError:
 			time.sleep(60)
 

  • start the argononed service
    systemctl start argononed
  • look for error messages
    systemctl status argononed
  • do a reboot and check if it stops the fan
1 Like

Hi,
i did not download it anywhere else, i tried myself but the patch and manual apply did not work. I donwloaded it fresh with the command, and i made a backup of the file myself just i case.
First of all, iam not an expert at this. I have a Teamspeak 3 voice server running with docker on it and pihole to block advertisement and so on. These things work fine. I learn a lot about it but thats it.
The Argon fan worked fine too, until i installed new OS on py raspberry pi 4, because the old one, like i read about it, will be out of service.

I tried the thing with the i2c bus and the command " sudo i2cset -y 1 0x1a 0x00" did not stop the fan and caused an Error: Write failed. If that helps.
i also tried the other config with different temperatures and so on, manual in the config file and over putty with command “argon-config”. If nothing going on much on the device, i check that with command “htop” the temperature is about 35-45. So when its set to 55 at 50% speed for example it should not spin. I tried 20c with 0% aswell if that makes a difference. I check the temp with argon-config you can check it there or with the command “vcgencmd measure_temp” it shows the temperature of the pi. So you can follow me what i do.

If you provide more instructions to try i can do it :smiley:

If you had stopped the argononed service, than it looks that the I2C communication is disturbed.

  • check what sudo i2cdetect -y 1 reports and publish the outcome
  • provide the content of your config.txt
sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

So it seems like nothing detected?

config of the temperatores and stuff its basic settings:

#
# Argon Fan Speed Configuration CPU
#
# Min Temp=Fan Speed
55=50
60=70
65=100

sudo raspi-config nonint get_i2c
0

look for the whole content of the config.txt:
cat /boot/config.txt or cat /boot/firmware/config.txt

DO NOT EDIT THIS FILE

The file you are looking for has moved to /boot/firmware/config.txt
root@raspberrypi:/home/pi# cat /boot/firmware/config.txt
# For more options and information see
# http://rptl.io/configtxt
# Some settings may impact device functionality. See link above for details

# Uncomment some or all of these to enable the optional hardware interfaces
dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on

# Enable audio (loads snd_bcm2835)
dtparam=audio=on

# Additional overlays and parameters are documented
# /boot/firmware/overlays/README

# Automatically load overlays for detected cameras
camera_auto_detect=1

# Automatically load overlays for detected DSI displays
display_auto_detect=1

# Automatically load initramfs files, if found
auto_initramfs=1

# Enable DRM VC4 V3D driver
dtoverlay=vc4-kms-v3d
max_framebuffers=2

# Don't have the firmware create an initial video= setting in cmdline.txt.
# Use the kernel's default instead.
disable_fw_kms_setup=1

# Run in 64-bit mode
arm_64bit=1

# Disable compensation for displays with overscan
disable_overscan=1

# Run as fast as firmware / board allows
arm_boost=1

[cm4]
# Enable host mode on the 2711 built-in XHCI USB controller.
# This line should be removed if the legacy DWC2 controller is required
# (e.g. for USB device mode) or if USB support is not required.
otg_mode=1

[cm5]
dtoverlay=dwc2,dr_mode=host

[all]
enable_uart=1
root@raspberrypi:/home/pi#

ok, next.

  • look for messages regarding I2C in kernel log
    sudo dmesg | grep -i i2c

  • disable argononed service
    sudo systemctl disable argononed

  • unplug the power supply to make the case powerless for some
    seconds

  • boot into shell and check the I2C again
    sudo i2cdetect -y 1

sudo dmesg | grep -i i2c
[    2.208988] brcmstb-i2c fef04500.i2c:  @97500hz registered in polling mode
[    2.209387] brcmstb-i2c fef09500.i2c:  @97500hz registered in polling mode
[   10.801787] i2c_dev: i2c /dev entries driver
[   26.557528] i2c-bcm2835 fe804000.i2c: i2c transfer timed out
[   27.581596] i2c-bcm2835 fe804000.i2c: i2c transfer timed out


i did disable it and unplug and check:

root@raspberrypi:/home/pi# sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- 1a -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

and the fan stopped wow! Dont know yet if its working with temperatures.

do i have to activate it again?

I know that the MCU inside of the case can stuck if some special I2C commands are fired. After that, the only way to get the MCU back to work is to make the pcb with the MCU powerless.

You should keep that in mind, if that happens again.

Now it’s on you to find out if you had a one time hiccup of such case or if there is a systematic issue which triggers such issue.

Yes, you could enable the argononed service again. You need this service for temperature depending fan control and for a properly shutdown!

But, if it’s a systematic issue in combination with the new script version(s), then it will happen again.

To near down the root cause, I recommend the following:

  1. boot into shell and check if the MCU (0x1a) is via I2C available
    sudo i2cdetect -y 1

  2. if available, start the argononed service manually
    sudo systemctl start argononed

  3. check if the fan is stopped

  4. reboot (not shutdown) 2 - 3 times and repeat the steps 1 - 3 after every reboot

  5. if the MCU was reported at I2C at every attempt, repeat these steps again 2 - 3 times with shutdown instead of reboot

  6. if all attempts with step 5 works too, enable the service for automatic startup at boot and test again 2 - 3 times reboot and shutdown situations
    sudo systemctl enable argononed

  7. if all things are fine now, please provide the current version of your argononed.py so we can see if you use a modified version now or the version of 2024-07-27 you got via wget.