Add web UI notification for under voltage/throttling events (#1203)

This commit is contained in:
Benjamin Krein
2023-09-01 02:23:12 -04:00
committed by GitHub
parent 3b6822d7c8
commit b32027f8c0
13 changed files with 207 additions and 2 deletions
+8
View File
@@ -27,3 +27,11 @@ class ReturnCodes:
EXTRACTIMAGE_NO_FILES_SPECIFIED = 91
EXTRACTIMAGE_NO_FILES_EXTRACTED = 92
EXTRACTIMAGE_COMMAND_ERROR = 93
UNDER_VOLTAGE_DETECTED = 100
ARM_FREQUENCY_CAPPED = 101
CURRENTLY_THROTTLED = 102
SOFT_TEMPERATURE_LIMIT_ACTIVE = 103
UNDER_VOLTAGE_HAS_OCCURRED = 116
ARM_FREQUENCY_CAPPING_HAS_OCCURRED = 117
THROTTLING_HAS_OCCURRED = 118
SOFT_TEMPERATURE_LIMIT_HAS_OCCURRED = 119
+36
View File
@@ -9,7 +9,9 @@ from re import findall, match
from socket import socket, gethostname, AF_INET, SOCK_DGRAM
from pathlib import Path
from platform import uname
from vcgencmd import Vcgencmd
from piscsi.return_codes import ReturnCodes
from piscsi.common_settings import SHELL_ERROR
@@ -263,3 +265,37 @@ class SysCmds:
return process.returncode, process.stdout.decode("utf-8")
return process.returncode, process.stderr.decode("utf-8")
@staticmethod
def get_throttled(enabled_modes, test_modes):
"""
Takes (list) enabled_modes & (list) test_modes parameters & returns a
tuple of (str) category & (str) message.
enabled_modes is a list of modes that will be enabled for display if
they're triggered. test_modes works similarly to enabled_mode but will
ALWAYS display the modes listed for troubleshooting styling.
"""
vcgcmd = Vcgencmd()
t_states = vcgcmd.get_throttled()['breakdown']
matched_states = []
state_msgs = {
"0": ("error", ReturnCodes.UNDER_VOLTAGE_DETECTED),
"1": ("warning", ReturnCodes.ARM_FREQUENCY_CAPPED),
"2": ("error", ReturnCodes.CURRENTLY_THROTTLED),
"3": ("warning", ReturnCodes.SOFT_TEMPERATURE_LIMIT_ACTIVE),
"16": ("warning", ReturnCodes.UNDER_VOLTAGE_HAS_OCCURRED),
"17": ("warning", ReturnCodes.ARM_FREQUENCY_CAPPING_HAS_OCCURRED),
"18": ("warning", ReturnCodes.THROTTLING_HAS_OCCURRED),
"19": ("warning", ReturnCodes.SOFT_TEMPERATURE_LIMIT_HAS_OCCURRED),
}
for k in t_states:
if t_states[k] and k in enabled_modes:
matched_states.append(state_msgs[k])
for t in test_modes:
matched_states.append(state_msgs[t])
return matched_states