-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
115 additions
and
110 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
# memtemp shows memory infos and cpu temperature | ||
# | ||
# mem usage, cpu load, cpu temp | ||
# mem usage, cpu load, cpu temp, cpu frequency | ||
# | ||
############################################################### | ||
# | ||
|
@@ -16,6 +16,13 @@ | |
# - Added CPU load | ||
# - Added horizontal and vertical orientation | ||
# | ||
# 19-09-2020 by crahan <[email protected]> | ||
# - Added CPU frequency | ||
# - Made field types and order configurable (max 3 fields) | ||
# - Made line spacing and position configurable | ||
# - Refactored to dynamically generate UI elements | ||
# - Changed horizontal UI elements to Text | ||
# - Updated to version 1.0.2 | ||
############################################################### | ||
from pwnagotchi.ui.components import LabeledValue, Text | ||
from pwnagotchi.ui.view import BLACK | ||
|
@@ -31,149 +38,147 @@ class MemTemp(plugins.Plugin): | |
__license__ = 'GPL3' | ||
__description__ = 'A plugin that will display memory/cpu usage and temperature' | ||
|
||
ALLOWED_FIELDS = { | ||
'mem': 'mem_usage', | ||
'cpu': 'cpu_load', | ||
'temp': 'cpu_temp', | ||
'freq': 'cpu_freq' | ||
} | ||
DEFAULT_FIELDS = ['mem', 'cpu', 'temp'] | ||
LINE_SPACING = 10 | ||
LABEL_SPACING = 0 | ||
FIELD_WIDTH = 4 | ||
|
||
def on_loaded(self): | ||
logging.info("memtemp plugin loaded.") | ||
|
||
def mem_usage(self): | ||
return int(pwnagotchi.mem_usage() * 100) | ||
return f"{int(pwnagotchi.mem_usage() * 100)}%" | ||
|
||
def cpu_load(self): | ||
return int(pwnagotchi.cpu_load() * 100) | ||
return f"{int(pwnagotchi.cpu_load() * 100)}%" | ||
|
||
@staticmethod | ||
def pad_text(width, data, symbol): | ||
data = str(data) + symbol | ||
return " " * (width - len(data)) + data | ||
def cpu_temp(self): | ||
if self.options['scale'] == "fahrenheit": | ||
temp = (pwnagotchi.temperature() * 9 / 5) + 32 | ||
symbol = "f" | ||
elif self.options['scale'] == "kelvin": | ||
temp = pwnagotchi.temperature() + 273.15 | ||
symbol = "k" | ||
else: | ||
# default to celsius | ||
temp = pwnagotchi.temperature() | ||
symbol = "c" | ||
return f"{temp}{symbol}" | ||
|
||
def cpu_freq(self): | ||
with open('/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq', 'rt') as fp: | ||
return f"{round(float(fp.readline())/1000000, 1)}G" | ||
|
||
def pad_text(self, data): | ||
return " " * (self.FIELD_WIDTH - len(data)) + data | ||
|
||
def on_ui_setup(self, ui): | ||
if ui.is_waveshare_v2(): | ||
h_pos_line1 = (178, 84) | ||
h_pos_line2 = (178, 94) | ||
v_pos_line1 = (202, 74) # (127, 75) | ||
v_pos_line2 = (202, 84) # (122, 84) | ||
v_pos_line3 = (197, 94) # (127, 94) | ||
elif ui.is_waveshare_v1(): | ||
h_pos_line1 = (170, 80) | ||
h_pos_line2 = (170, 90) | ||
v_pos_line1 = (170, 61) # (130, 70) | ||
v_pos_line2 = (170, 71) # (125, 80) | ||
v_pos_line3 = (165, 81) # (130, 90) | ||
elif ui.is_waveshare144lcd(): | ||
h_pos_line1 = (53, 77) | ||
h_pos_line2 = (53, 87) | ||
v_pos_line1 = (78, 67) # (67, 73) | ||
v_pos_line2 = (78, 77) # (62, 83) | ||
v_pos_line3 = (73, 87) # (67, 93) | ||
elif ui.is_inky(): | ||
h_pos_line1 = (140, 68) | ||
h_pos_line2 = (140, 78) | ||
v_pos_line1 = (165, 54) # (127, 60) | ||
v_pos_line2 = (165, 64) # (122, 70) | ||
v_pos_line3 = (160, 74) # (127, 80) | ||
elif ui.is_waveshare27inch(): | ||
h_pos_line1 = (192, 138) | ||
h_pos_line2 = (192, 148) | ||
v_pos_line1 = (216, 122) # (6,120) | ||
v_pos_line2 = (216, 132) # (1,135) | ||
v_pos_line3 = (211, 142) # (6,150) | ||
else: | ||
h_pos_line1 = (155, 76) | ||
h_pos_line2 = (155, 86) | ||
v_pos_line1 = (180, 61) # (127, 51) | ||
v_pos_line2 = (180, 71) # (127, 56) | ||
v_pos_line3 = (175, 81) # (102, 71) | ||
try: | ||
# Configure field list | ||
self.fields = self.options['fields'].split(',') | ||
self.fields = [x.strip() for x in self.fields if x.strip() in self.ALLOWED_FIELDS.keys()] | ||
self.fields = self.fields[:3] # limit to the first 3 fields | ||
except Exception: | ||
# Set default value | ||
self.fields = self.DEFAULT_FIELDS | ||
|
||
label_spacing = 0 | ||
try: | ||
# Configure line_spacing | ||
line_spacing = int(self.options['linespacing']) | ||
except Exception: | ||
# Set default value | ||
line_spacing = self.LINE_SPACING | ||
|
||
try: | ||
# Configure position | ||
pos = self.options['position'].split(',') | ||
pos = [int(x.strip()) for x in pos] | ||
if self.options['orientation'] == "vertical": | ||
v_pos = (pos[0], pos[1]) | ||
else: | ||
h_pos = (pos[0], pos[1]) | ||
except Exception: | ||
# Set default position based on screen type | ||
if ui.is_waveshare_v2(): | ||
h_pos = (178, 84) | ||
v_pos = (197, 74) | ||
elif ui.is_waveshare_v1(): | ||
h_pos = (170, 80) | ||
v_pos = (165, 61) | ||
elif ui.is_waveshare144lcd(): | ||
h_pos = (53, 77) | ||
v_pos = (73, 67) | ||
elif ui.is_inky(): | ||
h_pos = (140, 68) | ||
v_pos = (160, 54) | ||
elif ui.is_waveshare27inch(): | ||
h_pos = (192, 138) | ||
v_pos = (211, 122) | ||
else: | ||
h_pos = (155, 76) | ||
v_pos = (175, 61) | ||
|
||
if self.options['orientation'] == "vertical": | ||
ui.add_element( | ||
'memtemp_line1', | ||
LabeledValue( | ||
color=BLACK, | ||
label='mem:', | ||
value='-', | ||
position=v_pos_line1, | ||
label_font=fonts.Small, | ||
text_font=fonts.Small, | ||
label_spacing=label_spacing, | ||
for idx, field in enumerate(self.fields): | ||
v_pos_x = v_pos[0] | ||
v_pos_y = v_pos[1] + ((len(self.fields) - 3) * -1 * line_spacing) | ||
ui.add_element( | ||
f"memtemp_{field}", | ||
LabeledValue( | ||
color=BLACK, | ||
label=f"{self.pad_text(field)}:", | ||
value="-", | ||
position=(v_pos_x, v_pos_y + (idx * line_spacing)), | ||
label_font=fonts.Small, | ||
text_font=fonts.Small, | ||
label_spacing=self.LABEL_SPACING, | ||
) | ||
) | ||
) | ||
ui.add_element( | ||
'memtemp_line2', | ||
LabeledValue( | ||
color=BLACK, | ||
label='cpu:', | ||
value='-', | ||
position=v_pos_line2, | ||
label_font=fonts.Small, | ||
text_font=fonts.Small, | ||
label_spacing=label_spacing, | ||
) | ||
) | ||
ui.add_element( | ||
'memtemp_line3', | ||
LabeledValue( | ||
color=BLACK, | ||
label='temp:', | ||
value='-', | ||
position=v_pos_line3, | ||
label_font=fonts.Small, | ||
text_font=fonts.Small, | ||
label_spacing=label_spacing, | ||
) | ||
) | ||
logging.info(f"memtemp: created '{field}'") | ||
else: | ||
# default to horizontal | ||
h_pos_x = h_pos[0] | ||
h_pos_y = h_pos[1] | ||
ui.add_element( | ||
'memtemp_line1', | ||
'memtemp_header', | ||
Text( | ||
color=BLACK, | ||
value=' mem cpu temp', | ||
position=h_pos_line1, | ||
value=" ".join([self.pad_text(x) for x in self.fields]), | ||
position=(h_pos_x, h_pos_y), | ||
font=fonts.Small, | ||
) | ||
) | ||
ui.add_element( | ||
'memtemp_line2', | ||
'memtemp_data', | ||
Text( | ||
color=BLACK, | ||
value=' - - -', | ||
position=h_pos_line2, | ||
value=" ".join([self.pad_text("-") for x in self.fields]), | ||
position=(h_pos_x, h_pos_y + line_spacing), | ||
font=fonts.Small, | ||
) | ||
) | ||
|
||
def on_unload(self, ui): | ||
with ui._lock: | ||
if self.options['orientation'] == "vertical": | ||
ui.remove_element('memtemp_line1') | ||
ui.remove_element('memtemp_line2') | ||
ui.remove_element('memtemp_line3') | ||
for idx, field in enumerate(self.fields): | ||
ui.remove_element(f"memtemp_{field}") | ||
else: | ||
ui.remove_element('memtemp_line1') | ||
ui.remove_element('memtemp_line2') | ||
# default to horizontal | ||
ui.remove_element('memtemp_header') | ||
ui.remove_element('memtemp_data') | ||
|
||
def on_ui_update(self, ui): | ||
if self.options['scale'] == "fahrenheit": | ||
temp = (pwnagotchi.temperature() * 9 / 5) + 32 | ||
symbol = "f" | ||
elif self.options['scale'] == "kelvin": | ||
temp = pwnagotchi.temperature() + 273.15 | ||
symbol = "k" | ||
else: | ||
# default to celsius | ||
temp = pwnagotchi.temperature() | ||
symbol = "c" | ||
|
||
if self.options['orientation'] == "vertical": | ||
ui.set('memtemp_line1', f"{self.mem_usage()}%") | ||
ui.set('memtemp_line2', f"{self.cpu_load()}%") | ||
ui.set('memtemp_line3', f"{temp}{symbol}") | ||
for idx, field in enumerate(self.fields): | ||
ui.set(f"memtemp_{field}", getattr(self, self.ALLOWED_FIELDS[field])()) | ||
else: | ||
# default to horizontal | ||
ui.set( | ||
'memtemp_line2', | ||
self.pad_text(4, self.mem_usage(), "%") + | ||
self.pad_text(5, self.cpu_load(), "%") + | ||
self.pad_text(5, temp, symbol) | ||
) | ||
data = " ".join([self.pad_text(getattr(self, self.ALLOWED_FIELDS[x])()) for x in self.fields]) | ||
ui.set('memtemp_data', data) |