sample_code/ups_info.py
2025-03-07 00:24:33 +08:00

79 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# -*-coding:utf-8 -*-
'''
# @Author :幸运锦鲤
# @Time : 2025-02-02 16:09:53
# @version : python3
# @Update time :
# @Description : UPS信息获取用于后期处理示例代码
'''
from pynut2 import nut2 as PyNUT
import json
class UPSInfo:
def __init__(self, nut_server='127.0.0.1', nut_port=3493, ups_name='my_ups_name'):
"""初始化UPSInfo实例"""
self.nut_server = nut_server
self.nut_port = nut_port
self.ups_name = ups_name
def build_nested_dict(self, d, keys, value):
"""辅助函数,用于递归构建嵌套字典"""
if len(keys) == 1:
d[keys[0]] = value
else:
if keys[0] not in d:
d[keys[0]] = {}
self.build_nested_dict(d[keys[0]], keys[1:], value)
def get_ups_data(self):
"""获取UPS数据并返回JSON格式"""
try:
client = PyNUT.PyNUTClient(host=self.nut_server, port=self.nut_port)
ups_vars = client.list_vars(self.ups_name)
# 组织数据为字典形式
ups_data = {}
for key, value in ups_vars.items():
parts = key.split(':')
self.build_nested_dict(ups_data, parts, value)
# 返回JSON格式字符串
return json.dumps(ups_data, indent=4)
except Exception as e:
# 返回错误信息的JSON
error_response = {
"error": "Failed to retrieve UPS data",
"details": str(e)
}
return json.dumps(error_response, indent=4)
def get_ups_data_as_dict(self):
"""获取UPS数据并返回字典格式"""
try:
client = PyNUT.PyNUTClient(host=self.nut_server, port=self.nut_port)
ups_vars = client.list_vars(self.ups_name)
# 组织数据为字典形式
ups_data = {}
for key, value in ups_vars.items():
parts = key.split(':')
self.build_nested_dict(ups_data, parts, value)
# 返回字典
return ups_data
except Exception as e:
# 返回错误信息的字典
return {
"error": "Failed to retrieve UPS data",
"details": str(e)
}
if __name__ == '__main__':
# 示例调用,方便测试
ups_info = UPSInfo(nut_server="192.168.100.100", nut_port=3493, ups_name="ups")
print(ups_info.get_ups_data())