Updated EON control scripts

Argon-EON

This repository contains modifications to the code distributed by Argon40 (www.argon40.com) for their EON product

Supported OS Versions

Currently supports 32 and 64 bit versions of Raspberry PI OS, as well as:

  • Ubuntu 21.04, 21.10 and 22.04
  • DietPi 64 bit Bullseye based. Make sure you have enabled I2C, and have rebooted the system.

Differences from Argon40’s Scripts

argoneon.conf

Modified the code to support one main configuration file. All the other files, with the exception of the rtc configuration file have been moved into /etc/argoneon.conf. If this file does not exist the code will generate a new version when the argononed.service starts. All defaults will be set, including a better (well, I think it is) set of default fan settings.

Default ConfigFile:

[General]
temperature = C
debug = N

[OLED]
screenduration = 30
screensaver = 120
screenlist = clock cpu storage bandwidth raid ram temp ip
enabled = Y

[CPUFan]
55.0 = 30
60.0 = 55
65.0 = 100

[HDDFan]
40.0 = 25
44.0 = 30
46.0 = 35
48.0 = 40
50.0 = 50
52.0 = 55
54.0 = 60
60.0 = 100

Setting debug = Y in the General section enables debug tracking of the fan settings in the file /var/log/argoneon.log. This is a good mechanism to determine if the fan setting are actually working. If you have issues with fan settings, please enable the logging, restart the service and send me the log output after 10 minutes or so.

argon-status

usage: argon-status [-h] [-v] [-a] [-c] [-d] [-f] [-i] [-m] [-r] [-s] [-t] [-u] [--hddtemp]

optional arguments:
  -h, --help     show this help message and exit
  -v, --version  Display the version of the argon scripts.
  -a, --all      Display full status of the Argon EON.
  -c, --cpu      Display the current CPU utilization.
  -d, --devices  Display informaton about devices in the EON.
  -f, --fan      Get current fan speed.
  -i, --ip       Display currently configured IP addresses.
  -m, --memory   Display memory utilization on the EON.
  -r, --raid     Display current state of the raid Array if it exists.
  -s, --storage  Display information about the storage system.
  -t, --temp     Display information about the current temperature.
  -u, --hdduse   Display disk utilization.
  --hddtemp      Display the temperature of the storage devices.

When used with no arguments, argon-status will display as if argon-status --devices --ip was used. If you do not wish to have this as a default, set the ARGON_STATUS_DEFAULT to what you wish the default to be, such as

export ARGON_STATUS_DEFAULT="-t --hddtemp -f"

Monitoring the NVME Temperature

This code also adds the NVME drive into the list of devices it obtains the temerature for. You may be annoyed with this, as it will set the fan speed earlier, unless you have a good heat sync on your NVME device.

Install

To install, simply execute the following on the node:

curl -L https://raw.githubusercontent.com/JeffCurless/argoneon/main/argoneon.sh | bash

After intall you may want to modify the fan configuration to match your environment You can change the default temperature setting by editing the file /etc/argoneon.conf. The fan will be triggered by one of two separate settings, the CPU temperature, or the HDD temperature. Which ever component passes the set threashold first will cause the fan to turn on. For instance, if your HDD temp hits 35C, the fan will turn on at 30%, even if the CPU temp is running below 55C.

Uninstall

Just like the original simply execute:

sudo /etc/argon/argon-uninstall

or run argon-config, and select the uninstall option.

Put back the Original

If for some reason you don’t like the changes, run argon-config and uninstall. Then reinstall the original scripts:

curl http://download.argon40.com/argoneon.sh | bash
2 Likes

Thanks for posting this! I’ll give it a shot, definitely could use a screensaver for the display as mine is starting to show ghosts already.

A long time ago, I read and article about air flow from fans in a case with a obstructed air inlet/outlet… the gist of the article was… if the barrier is around 1 hub diameter away from the obstruction, the airflow was improved.

So I attempted and experiment. Since I am not using anything but SSD’s, (i.e. no 3.5" drives) I put some brass stand offs in the fan holes, and lowered the fan by about the diameter of the fan hub. It seems to run quieter… but that may just be wishful thinking… Running a non-standard fan that already has bearings fail. Trying to get an original fan as the one I had lost a blade.

Anyone know of a good 12 volt to pin fan? Possibly in the 80mm range instead of 60? I can make a 3d printed stand off to lower the fan.

Hi nice work.
Will this script prevent HDDs spinning down?
I have a 3.5in HDD, that should only really spin up for a nightly backup.

Well, it should ignore the drives if they are spun down. If not let me know.

Adding a new feature:

./argon-status.py --cool

CPU Temperature:
-------------
C     | F    
----- | -----
28.72 | 83.69
-------------

Storage Temperature:
---------------------
Device | C    | F    
------ | ---- | -----
sda    | 23.0 | 73.4 
sdb    | 23.0 | 73.4 
sdc    | 40.0 | 104.0
sdd    | 23.0 | 73.4 
sde    | 23.0 | 73.4 
---------------------

Fan Speed
-------
Speed %
-------
25     
-------

Temperature Settings Table:
-----------------------------------------------------------------------
Temperature  | 40.0 | 44.0 | 50.0 | 52.0 | 54.0 | 55.0 | 60.0 | 65.0
------------ | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ----
HDD fanspeed | <25> | 30   | 35   | 55   | 60   |      | 100  |     
CPU fanspeed |      |      |      |      |      | 30   | 55   | 100 
-----------------------------------------------------------------------

Not checked in yet, but… working on it. More testing to do, however the table at the end indicates which of the items is fording the fan to be on, i.e. highlighted with <>. In this case the max HDD temp is 40 (which in my case is the NVME device), so the fanspeed is set to 25.

Had to edit the output to make it fix the width of the text box…

Thank you for your quick reply, I’ll try it later today.

Hi,
I was able to try yesterday and unfortunately this script seems to keep the HDD spun up by checking it’s temp. Every 40 seconds or so there is a little ‘chunter’.
With the original script I was able to prevent this by commenting out the HDD checking as is described elsewhere on the forum.

Kind regards
P

Okay, so shutdown the service or uninstall and see if this spins the drives up:

sudo smartctl -d sat -n standby,0 -A /dev/sda

Also try:

sudo smartctl -d sat -n sleep,0 -A /dev/sda

Switching out /dev/sda for one of your hard drives that is spun down and post the full output from the command.

See if one or the other (or both) spins up the drive

Hi NHHiker,

Neither appeared to spin the drive up. I currently have the older script installed with the HDD lines commented out.

The output is below:

pikeynas@pikeynas-pi4:~ $ sudo smartctl -d sat -n standby,0 -A /dev/sdb smartctl 7.2 2020-12-30 r5155 [aarch64-linux-5.15.84-v8+] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 4
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
5 Reallocated_Sector_Ct 0x0032 100 100 — Old_age Always - 0
9 Power_On_Hours 0x0032 100 100 — Old_age Always - 16262
12 Power_Cycle_Count 0x0032 100 100 — Old_age Always - 379
165 Block_Erase_Count 0x0032 100 100 — Old_age Always - 38691996137
166 Minimum_PE_Cycles_TLC 0x0032 100 100 — Old_age Always - 1
167 Max_Bad_Blocks_per_Die 0x0032 100 100 — Old_age Always - 71
168 Maximum_PE_Cycles_TLC 0x0032 100 100 — Old_age Always - 14
169 Total_Bad_Blocks 0x0032 100 100 — Old_age Always - 294
170 Grown_Bad_Blocks 0x0032 100 100 — Old_age Always - 0
171 Program_Fail_Count 0x0032 100 100 — Old_age Always - 0
172 Erase_Fail_Count 0x0032 100 100 — Old_age Always - 0
173 Average_PE_Cycles_TLC 0x0032 100 100 — Old_age Always - 4
174 Unexpected_Power_Loss 0x0032 100 100 — Old_age Always - 344
184 End-to-End_Error 0x0032 100 100 — Old_age Always - 0
187 Reported_Uncorrect 0x0032 100 100 — Old_age Always - 0
188 Command_Timeout 0x0032 100 100 — Old_age Always - 0
194 Temperature_Celsius 0x0022 070 051 — Old_age Always - 30 (Min/Max 20/51)
199 UDMA_CRC_Error_Count 0x0032 100 100 — Old_age Always - 0
230 Media_Wearout_Indicator 0x0032 001 001 — Old_age Always - 0x006100280061
232 Available_Reservd_Space 0x0033 100 100 004 Pre-fail Always - 100
233 NAND_GB_Written_TLC 0x0032 100 100 — Old_age Always - 2229
234 NAND_GB_Written_SLC 0x0032 100 100 — Old_age Always - 3622
241 Host_Writes_GiB 0x0030 253 253 — Old_age Offline - 2117
242 Host_Reads_GiB 0x0030 253 253 — Old_age Offline - 8903
244 Temp_Throttle_Status 0x0032 000 100 — Old_age Always - 0

pikeynas@pikeynas-pi4:~ $ sudo smartctl -d sat -n sleep,0 -A /dev/sdb
smartctl 7.2 2020-12-30 r5155 [aarch64-linux-5.15.84-v8+] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 4
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
5 Reallocated_Sector_Ct 0x0032 100 100 — Old_age Always - 0
9 Power_On_Hours 0x0032 100 100 — Old_age Always - 16262
12 Power_Cycle_Count 0x0032 100 100 — Old_age Always - 379
165 Block_Erase_Count 0x0032 100 100 — Old_age Always - 38691996137
166 Minimum_PE_Cycles_TLC 0x0032 100 100 — Old_age Always - 1
167 Max_Bad_Blocks_per_Die 0x0032 100 100 — Old_age Always - 71
168 Maximum_PE_Cycles_TLC 0x0032 100 100 — Old_age Always - 14
169 Total_Bad_Blocks 0x0032 100 100 — Old_age Always - 294
170 Grown_Bad_Blocks 0x0032 100 100 — Old_age Always - 0
171 Program_Fail_Count 0x0032 100 100 — Old_age Always - 0
172 Erase_Fail_Count 0x0032 100 100 — Old_age Always - 0
173 Average_PE_Cycles_TLC 0x0032 100 100 — Old_age Always - 4
174 Unexpected_Power_Loss 0x0032 100 100 — Old_age Always - 344
184 End-to-End_Error 0x0032 100 100 — Old_age Always - 0
187 Reported_Uncorrect 0x0032 100 100 — Old_age Always - 0
188 Command_Timeout 0x0032 100 100 — Old_age Always - 0
194 Temperature_Celsius 0x0022 069 051 — Old_age Always - 31 (Min/Max 20/51)
199 UDMA_CRC_Error_Count 0x0032 100 100 — Old_age Always - 0
230 Media_Wearout_Indicator 0x0032 001 001 — Old_age Always - 0x006100280061
232 Available_Reservd_Space 0x0033 100 100 004 Pre-fail Always - 100
233 NAND_GB_Written_TLC 0x0032 100 100 — Old_age Always - 2229
234 NAND_GB_Written_SLC 0x0032 100 100 — Old_age Always - 3622
241 Host_Writes_GiB 0x0030 253 253 — Old_age Offline - 2117
242 Host_Reads_GiB 0x0030 253 253 — Old_age Offline - 8903
244 Temp_Throttle_Status 0x0032 000 100 — Old_age Always - 0

P.S. I seem to have screwed up posting the results in, mine just shows the whole thing rather than a neat 10 lines that you can scroll up and down, sorry.

I might have been being even more stupid. It was just doing it and I realised I’d walked away from my PC leaving my browser connection to my EON on in the OMV dashboard.
I’ll do further tests.

Well if neither one of those spun up the drive… those are the commands I used within the code to get temp…

So not sure unless it was operator error

Me not understanding what’s going on, I think.
I have reinstalled your new script and it acts as it should (30 mins of testing so far).
The issue I was having is caused by the OMV dashboard being open, specifically S.M.A.R.T. checking the disks every time the page refreshes.

Cool! I didn’t want to pull my setup apart again and rebuild to test spinning rust… :wink: