-
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmemtemp-plus.py
156 lines (138 loc) · 5.51 KB
/
memtemp-plus.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# This is a customized version of the builtin Pwnagotchi Memtemp plugin which
# includes the changes from https://github.com/evilsocket/pwnagotchi/pull/918
# but tweaked further to better fit my specific requirements.
#
# Author: https://github.com/xenDE
# Contributors: spees <[email protected]>, [email protected]
#Edits by discord@rai68 - allows all 4 status - tested only on wave 2.13 v3
import logging
import pwnagotchi
import pwnagotchi.plugins as plugins
import pwnagotchi.ui.fonts as fonts
from pwnagotchi.ui.components import LabeledValue, Text
from pwnagotchi.ui.view import BLACK
class MemTempPlus(plugins.Plugin):
__author__ = 'https://github.com/xenDE'
__version__ = '1.0.3'
__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', 'freq'] # enables 4 by default
LINE_SPACING = 12
LABEL_SPACING = 0
FIELD_WIDTH = 4
def __init__(self):
self.options = dict()
def on_loaded(self):
logging.info('memtemp plugin loaded.')
def mem_usage(self):
return f'{int(pwnagotchi.mem_usage() * 100)}%'
def cpu_load(self):
return f'{int(pwnagotchi.cpu_load() * 100)}%'
def cpu_temp(self):
if self.options['scale'].lower() == 'fahrenheit':
temp = (pwnagotchi.temperature() * 9 / 5) + 32
symbol = 'F'
elif self.options['scale'].lower() == '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):
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[:4] # CHANGED to limit to the first 4 fields
except Exception:
# Set default value
self.fields = self.DEFAULT_FIELDS
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]
v_pos = (pos[0], pos[1])
h_pos = v_pos
except Exception:
# Set position based on screen type
if ui.is_waveshare_v2() or ui.is_waveshare_v3():
v_pos = (197, 70)
h_pos = (175, 85)
else:
v_pos = (175, 50)
h_pos = (155, 60)
if self.options['orientation'] == 'vertical':
# Dynamically create the required LabeledValue objects
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,
)
)
else:
# default to horizontal
h_pos_x = h_pos[0] + ((len(self.fields) - 3) * -1 * 25)
h_pos_y = h_pos[1]
ui.add_element(
'memtemp_header',
Text(
color=BLACK,
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_data',
Text(
color=BLACK,
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':
for idx, field in enumerate(self.fields):
ui.remove_element(f'memtemp_{field}')
else:
# default to horizontal
ui.remove_element('memtemp_header')
ui.remove_element('memtemp_data')
def on_ui_update(self, ui):
if self.options['orientation'] == 'vertical':
for idx, field in enumerate(self.fields):
ui.set(f'memtemp_{field}', getattr(self, self.ALLOWED_FIELDS[field])())
else:
# default to horizontal
data = ' '.join([self.pad_text(getattr(self, self.ALLOWED_FIELDS[x])()) for x in self.fields])
ui.set('memtemp_data', data)