[+] update Battery service
This commit is contained in:
parent
a666658e0b
commit
f4f579b8f1
@ -5,7 +5,7 @@ project(
|
|||||||
).stdout().strip('\n'),
|
).stdout().strip('\n'),
|
||||||
# 'online.fxreader.uv',
|
# 'online.fxreader.uv',
|
||||||
# ['c', 'cpp'],
|
# ['c', 'cpp'],
|
||||||
version: '0.1.5.27',
|
version: '0.1.5.28',
|
||||||
# default_options: [
|
# default_options: [
|
||||||
# 'cpp_std=c++23',
|
# 'cpp_std=c++23',
|
||||||
# # 'prefer_static=true',
|
# # 'prefer_static=true',
|
||||||
|
@ -2047,6 +2047,152 @@ def loginctl(argv: list[str]) -> None:
|
|||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
|
class Battery:
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
should_start=None,
|
||||||
|
):
|
||||||
|
if should_start is None:
|
||||||
|
should_start = False
|
||||||
|
|
||||||
|
assert isinstance(should_start, bool)
|
||||||
|
|
||||||
|
self.last_check = None
|
||||||
|
self.period = 10
|
||||||
|
self.is_running = should_start
|
||||||
|
|
||||||
|
def check_is_needed(self):
|
||||||
|
now = datetime.datetime.now(tz=datetime.timezone.utc)
|
||||||
|
|
||||||
|
is_needed = None
|
||||||
|
|
||||||
|
if self.last_check is None:
|
||||||
|
is_needed = True
|
||||||
|
else:
|
||||||
|
if (now - self.last_check).total_seconds() >= self.period:
|
||||||
|
is_needed = True
|
||||||
|
else:
|
||||||
|
is_needed = False
|
||||||
|
|
||||||
|
if is_needed:
|
||||||
|
self.last_check = now
|
||||||
|
|
||||||
|
return is_needed
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
while True:
|
||||||
|
self.check()
|
||||||
|
|
||||||
|
time.sleep(self.period)
|
||||||
|
|
||||||
|
def terminate(self):
|
||||||
|
self.is_running = False
|
||||||
|
|
||||||
|
def wait(self, *args, **kwargs):
|
||||||
|
if self.is_running:
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def poll(self):
|
||||||
|
if self.is_running:
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
@property
|
||||||
|
def percentage_low(self) -> int:
|
||||||
|
try:
|
||||||
|
return int(
|
||||||
|
subprocess.check_output(
|
||||||
|
r"""
|
||||||
|
cat /etc/UPower/UPower.conf | grep -Po '^PercentageLow=\d+'
|
||||||
|
""",
|
||||||
|
shell=True,
|
||||||
|
)
|
||||||
|
.decode('utf-8')
|
||||||
|
.strip()
|
||||||
|
.split('=')[1]
|
||||||
|
)
|
||||||
|
except:
|
||||||
|
logger.exception('')
|
||||||
|
return 15
|
||||||
|
|
||||||
|
@property
|
||||||
|
def percentage_critical(self) -> int:
|
||||||
|
try:
|
||||||
|
return int(
|
||||||
|
subprocess.check_output(
|
||||||
|
r"""
|
||||||
|
cat /etc/UPower/UPower.conf | grep -Po '^PercentageCritical=\d+'
|
||||||
|
""",
|
||||||
|
shell=True,
|
||||||
|
)
|
||||||
|
.decode('utf-8')
|
||||||
|
.strip()
|
||||||
|
.split('=')[1]
|
||||||
|
)
|
||||||
|
except:
|
||||||
|
logger.exception('')
|
||||||
|
return 10
|
||||||
|
|
||||||
|
def check(self):
|
||||||
|
try:
|
||||||
|
if not self.check_is_needed():
|
||||||
|
return
|
||||||
|
|
||||||
|
t1 = subprocess.check_output(
|
||||||
|
['upower', '-d'],
|
||||||
|
timeout=1,
|
||||||
|
).decode('utf-8')
|
||||||
|
t2 = [o for o in t1.splitlines() if 'percentage' in o.lower()]
|
||||||
|
t4 = [o for o in t1.splitlines() if 'state' in o.lower()]
|
||||||
|
t3 = float(t2[0].split(':')[1].strip()[:-1])
|
||||||
|
# t5 = any(['discharging' in o.lower() for o in t4])
|
||||||
|
state = [[o2.strip() for o2 in o.lower().split()][1] for o in t4][1]
|
||||||
|
|
||||||
|
t5 = state != 'charging'
|
||||||
|
# t5 = True
|
||||||
|
if t3 < self.percentage_critical:
|
||||||
|
logging.error(
|
||||||
|
json.dumps(
|
||||||
|
dict(
|
||||||
|
msg='too low',
|
||||||
|
t3=t3,
|
||||||
|
t5=t5,
|
||||||
|
state=state,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
if t5:
|
||||||
|
subprocess.check_call(['systemctl', 'suspend'])
|
||||||
|
elif t3 < self.percentage_low:
|
||||||
|
msg = 'battery near low'
|
||||||
|
logging.error(
|
||||||
|
json.dumps(
|
||||||
|
dict(
|
||||||
|
msg=msg,
|
||||||
|
t3=t3,
|
||||||
|
t5=t5,
|
||||||
|
state=state,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
if t5:
|
||||||
|
subprocess.check_call(
|
||||||
|
[
|
||||||
|
'notify-send',
|
||||||
|
'-t',
|
||||||
|
'%d' % (5 * 1000),
|
||||||
|
msg,
|
||||||
|
'% 5.2f' % t3,
|
||||||
|
]
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
pass
|
||||||
|
print('\r%s % 5.2f%% %s' % (datetime.datetime.now().isoformat(), t3, str(t5)), end='')
|
||||||
|
except Exception:
|
||||||
|
logging.error(traceback.format_exc())
|
||||||
|
|
||||||
|
|
||||||
def desktop_services(argv):
|
def desktop_services(argv):
|
||||||
parser = optparse.OptionParser()
|
parser = optparse.OptionParser()
|
||||||
parser.add_option(
|
parser.add_option(
|
||||||
@ -2185,127 +2331,6 @@ def desktop_services(argv):
|
|||||||
|
|
||||||
return len(t3) > 0 and t4
|
return len(t3) > 0 and t4
|
||||||
|
|
||||||
class Battery:
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
should_start=None,
|
|
||||||
):
|
|
||||||
if should_start is None:
|
|
||||||
should_start = False
|
|
||||||
|
|
||||||
assert isinstance(should_start, bool)
|
|
||||||
|
|
||||||
self.last_check = None
|
|
||||||
self.period = 10
|
|
||||||
self.is_running = should_start
|
|
||||||
|
|
||||||
def check_is_needed(self):
|
|
||||||
now = datetime.datetime.now(tz=datetime.timezone.utc)
|
|
||||||
|
|
||||||
is_needed = None
|
|
||||||
|
|
||||||
if self.last_check is None:
|
|
||||||
is_needed = True
|
|
||||||
else:
|
|
||||||
if (now - self.last_check).total_seconds() >= self.period:
|
|
||||||
is_needed = True
|
|
||||||
else:
|
|
||||||
is_needed = False
|
|
||||||
|
|
||||||
if is_needed:
|
|
||||||
self.last_check = now
|
|
||||||
|
|
||||||
return is_needed
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
while True:
|
|
||||||
self.check()
|
|
||||||
|
|
||||||
time.sleep(self.period)
|
|
||||||
|
|
||||||
def terminate(self):
|
|
||||||
self.is_running = False
|
|
||||||
|
|
||||||
def wait(self, *args, **kwargs):
|
|
||||||
if self.is_running:
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def poll(self):
|
|
||||||
if self.is_running:
|
|
||||||
return None
|
|
||||||
else:
|
|
||||||
return 0
|
|
||||||
|
|
||||||
@property
|
|
||||||
def percentage_low(self) -> int:
|
|
||||||
try:
|
|
||||||
return int(
|
|
||||||
subprocess.check_output(
|
|
||||||
r"""
|
|
||||||
cat /etc/UPower/UPower.conf | grep -Po '^PercentageLow=\d+'
|
|
||||||
""",
|
|
||||||
shell=True,
|
|
||||||
)
|
|
||||||
.decode('utf-8')
|
|
||||||
.strip()
|
|
||||||
.split('=')[1]
|
|
||||||
)
|
|
||||||
except:
|
|
||||||
logger.exception('')
|
|
||||||
return 15
|
|
||||||
|
|
||||||
@property
|
|
||||||
def percentage_critical(self) -> int:
|
|
||||||
try:
|
|
||||||
return int(
|
|
||||||
subprocess.check_output(
|
|
||||||
r"""
|
|
||||||
cat /etc/UPower/UPower.conf | grep -Po '^PercentageCritical=\d+'
|
|
||||||
""",
|
|
||||||
shell=True,
|
|
||||||
)
|
|
||||||
.decode('utf-8')
|
|
||||||
.strip()
|
|
||||||
.split('=')[1]
|
|
||||||
)
|
|
||||||
except:
|
|
||||||
logger.exception('')
|
|
||||||
return 10
|
|
||||||
|
|
||||||
def check(self):
|
|
||||||
try:
|
|
||||||
if not self.check_is_needed():
|
|
||||||
return
|
|
||||||
|
|
||||||
t1 = subprocess.check_output(
|
|
||||||
['upower', '-d'],
|
|
||||||
timeout=1,
|
|
||||||
).decode('utf-8')
|
|
||||||
t2 = [o for o in t1.splitlines() if 'percentage' in o.lower()]
|
|
||||||
t4 = [o for o in t1.splitlines() if 'state' in o.lower()]
|
|
||||||
t3 = float(t2[0].split(':')[1].strip()[:-1])
|
|
||||||
t5 = any(['discharging' in o.lower() for o in t4])
|
|
||||||
if t3 < self.percentage_critical and t5:
|
|
||||||
logging.error(json.dumps(dict(msg='too low', t3=t3, t5=t5)))
|
|
||||||
subprocess.check_call(['systemctl', 'suspend'])
|
|
||||||
elif t3 < self.percentage_low and t5:
|
|
||||||
msg = 'battery near low'
|
|
||||||
logging.error(json.dumps(dict(msg=msg, t3=t3, t5=t5)))
|
|
||||||
subprocess.check_call(
|
|
||||||
[
|
|
||||||
'notify-send',
|
|
||||||
'-t',
|
|
||||||
'%d' % (5 * 1000),
|
|
||||||
msg,
|
|
||||||
'% 5.2f' % t3,
|
|
||||||
]
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
pass
|
|
||||||
print('\r%s % 5.2f%% %s' % (datetime.datetime.now().isoformat(), t3, str(t5)), end='')
|
|
||||||
except Exception:
|
|
||||||
logging.error(traceback.format_exc())
|
|
||||||
|
|
||||||
class Backlight:
|
class Backlight:
|
||||||
class Direction(enum.Enum):
|
class Direction(enum.Enum):
|
||||||
increase = 'increase'
|
increase = 'increase'
|
||||||
|
Loading…
Reference in New Issue
Block a user