分享

Python:requests BMC 获取和设置服务器风速

 汉无为 2023-03-16 发布于湖北

简介:服务器风扇速率和控制在BMC中是一个很重要的功能,在服务器中风扇是非常高速也耗电的,根据统计在数据中心的运维成本上,电费占6-7成,并且如果让风扇长期处在全转状态也会有噪音和耗损度的问题。一般而言,获取服务器的风扇速度和控制需要先登录服务器,然后获取风扇,控制风速的模式或者百分比,这个过程是比较繁琐的,特别需要经常开关机换卡等操作时,为了防止未满速运行风扇造成设备过热,往往需要人工登录查看核实和调整。

历史攻略:

Python:requests + bmc开机、关机、优雅重启、强制重启

远程开机:wakeonlan

requests手动添加cookies

http库三剑客:requests

win10:笔记本设置风扇转速

实现思路:本质是cookie免登录。

1、手动登录

2、获取cookie

3、通过requests发送请求获取或者修改

操作步骤:需要注意的是有条件的话最好是单独开设一个账户用于管理风扇。

1、手动登录:略

2、获取cookie

图片

3、通过requests发送请求获取或者修改

案例源码:

# -*- coding: utf-8 -*-# time: 2023/3/12 12:16# file: fan.py# 公众号: 玩转测试开发import requestsimport warnings
warnings.filterwarnings('ignore')

def get_fans_speed(ip, username='admin', password='admin'): headers = { 'content-type': 'application/json', 'User-Agent': r'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36', 'X-CSRFTOKEN': 'PZYlUuJk', 'Cookie': 'i18next=zh-cn; lang=zh-cn; QSESSIONID=ef420de2050a7efacecN26J61JI0tlTj; refresh_disable=1', } s = requests.session() s.auth = (username, password)
# BMC地址ip:192.168.1.xxx    url = 'https://192.168.1.1/api/status/fan_info'
response = s.get(url=url, verify=False, headers=headers) response.encoding = 'utf-8'    print(f'返回信息:{response}')
fan_speed_percent_list = [] for i in response.json()['fans']:        for k, v in i.items(): if k == 'speed_percent': fan_speed_percent_list.append(v)
print('fan_number:', len(fan_speed_percent_list)) print(fan_speed_percent_list)

def change_fans(ip, username='admin', password='admin'): headers = { 'content-type': 'application/json', 'User-Agent': r'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36', 'X-CSRFTOKEN': 'fwd6lS4i', 'Cookie': 'i18next=zh-cn; lang=zh-cn; QSESSIONID=d9490daf3b0a7ee293UBtgzJiMomddNK; refresh_disable=1', } s = requests.session() s.auth = (username, password)
# BMC地址ip:192.168.1.xxx url = 'https://192.168.1.1/api/settings/fan/2'
data = {'duty': 100} response = s.put(url=url, json=data, verify=False, headers=headers) response.encoding = 'utf-8' print(f'返回信息:{response}') print('r:', response.json())

if __name__ == '__main__':    ip = '192.168.1.1' # login() get_fans_speed(ip) # change_fans(ip)

运行获取风速:

图片

运行调整风速百分比:

图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多