battery
This commit is contained in:
parent
02c3f7a18e
commit
a4997efc3f
58
power.py
58
power.py
@ -6,6 +6,7 @@ from nut2 import PyNUTClient
|
|||||||
from email.mime.text import MIMEText
|
from email.mime.text import MIMEText
|
||||||
from logging.handlers import TimedRotatingFileHandler
|
from logging.handlers import TimedRotatingFileHandler
|
||||||
|
|
||||||
|
ups_id = config.UPS_ID
|
||||||
gmail_user = config.GMAIL_USER
|
gmail_user = config.GMAIL_USER
|
||||||
gmail_password = config.GMAIL_PASS
|
gmail_password = config.GMAIL_PASS
|
||||||
recipient_email = config.GMAIL_ADDR
|
recipient_email = config.GMAIL_ADDR
|
||||||
@ -32,7 +33,10 @@ def monitor_ups(logger):
|
|||||||
client = PyNUTClient()
|
client = PyNUTClient()
|
||||||
try:
|
try:
|
||||||
ups_status = client.list_vars('ups')
|
ups_status = client.list_vars('ups')
|
||||||
return ups_status.get('ups.status')
|
return{
|
||||||
|
ups_status.get('ups.status'),
|
||||||
|
'battery_charge': float(ups_status.get('battery.charge'))
|
||||||
|
}
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error communicating with NUT: {e}")
|
logger.error(f"Error communicating with NUT: {e}")
|
||||||
return None
|
return None
|
||||||
@ -56,31 +60,45 @@ def main():
|
|||||||
logger.info("Starting UPS monitoring service.")
|
logger.info("Starting UPS monitoring service.")
|
||||||
prev_status = None
|
prev_status = None
|
||||||
while True:
|
while True:
|
||||||
status = monitor_ups(logger)
|
ups_data = monitor_ups(logger)
|
||||||
if status and status != prev_status:
|
if ups_data:
|
||||||
if status == "OB DISCHRG": # "On Battery"
|
status = ups_data['status']
|
||||||
logger.warning("Outage detected! Power On Battery.")
|
battery = ups_data['battery_charge']
|
||||||
|
if status and status != prev_status:
|
||||||
|
if status == "OB DISCHRG":
|
||||||
|
logger.warning(f"Outage detected! Power On Battery. {battery}% charge remaining.")
|
||||||
|
send_email(
|
||||||
|
f"{ups_id}: Power Outage Detected",
|
||||||
|
f"The {ups_id} UPS is running on battery power! {battery}% charge remaining.",
|
||||||
|
recipient_email,
|
||||||
|
gmail_user,
|
||||||
|
gmail_password,
|
||||||
|
logger
|
||||||
|
)
|
||||||
|
elif status == "OL":
|
||||||
|
logger.info(f"Power On Line. {battery}% charge remaining.")
|
||||||
|
send_email(
|
||||||
|
f"{ups_id}: Power On Line",
|
||||||
|
f"{ups_id} UPS power has been restored! {battery}% charge remaining.",
|
||||||
|
recipient_email,
|
||||||
|
gmail_user,
|
||||||
|
gmail_password,
|
||||||
|
logger
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
logger.info(f"UPS status changed to: {status}")
|
||||||
|
prev_status = status
|
||||||
|
if status = "OB DISCHRG" and battery < 50:
|
||||||
|
logger.warning(f"Battery level low: {battery}% charge remaining.")
|
||||||
send_email(
|
send_email(
|
||||||
"Power Outage Detected",
|
f"{ups_id} battery low.",
|
||||||
"The UPS is running on battery power!",
|
f"{ups_id} battery level low: {battery}% charge remaining.",
|
||||||
recipient_email,
|
recipient_email,
|
||||||
gmail_user,
|
gmail_user,
|
||||||
gmail_password,
|
gmail_password,
|
||||||
logger
|
logger
|
||||||
)
|
)
|
||||||
elif status == "OL": # "On Line"
|
time.sleep(30)
|
||||||
logger.info("Power On Line.")
|
|
||||||
send_email(
|
|
||||||
"Power On Line",
|
|
||||||
"UPS power has been restored!",
|
|
||||||
recipient_email,
|
|
||||||
gmail_user,
|
|
||||||
gmail_password,
|
|
||||||
logger
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
logger.info(f"UPS status changed to: {status}")
|
|
||||||
prev_status = status
|
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
Loading…
Reference in New Issue
Block a user