马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
留意事项:
1.新版本pysnmp包不支持getcmd接口,必要指定安装老版本Pysnmp包
解决方法:
① 先pip uninstall pysnmp、pip uninstall pyasn1、pip install pyasn1-modules
② 接着安装pyasn1-modules,指定版本pip install pyasn1-modules0.2.7(此时,它会自动帮你安装pyasn1,版本 是 0.4.8)
③ 最后再安装pysnmp,指定版本pip install pysnmp5.1.0
点击查察代码- from pysnmp.hlapi import *
- import requests
- import json
- # 配置信息
- PRINTER_IP = '1.1.1.1' # 打印机IP
- COMMUNITY_STRING = 'public' # SNMP团体名
- DINGTALK_WEBHOOK = 'https://oapi.dingtalk.com/robot/send?test' # 替换成钉钉机器人Webhook地址
- # 理光打印机OID信息
- TONER_OIDS = {
- '黑色': '1.3.6.1.2.1.43.11.1.1.9.1.1',
- '青色': '1.3.6.1.2.1.43.11.1.1.9.1.2',
- '品红色': '1.3.6.1.2.1.43.11.1.1.9.1.3',
- '黄色': '1.3.6.1.2.1.43.11.1.1.9.1.4',
- 'black_max': '1.3.6.1.2.1.43.11.1.1.8.1.1',
- }
- def get_snmp_value(oid):
- """获取SNMP值并处理异常"""
- try:
- error_indication, error_status, error_index, var_binds = next(
- getCmd(SnmpEngine(),
- CommunityData(COMMUNITY_STRING),
- UdpTransportTarget((PRINTER_IP, 161)),
- ContextData(),
- ObjectType(ObjectIdentity(oid)))
- )
- if error_indication:
- print(f"SNMP错误: {error_indication}")
- return None
- elif error_status:
- print(f"SNMP错误: {error_status.prettyPrint()}")
- return None
- return var_binds[0][1] if var_binds else None
- except Exception as e:
- print(f"SNMP查询异常: {str(e)}")
- return None
- def send_dingtalk_message(message):
- """发送消息到钉钉机器人"""
- headers = {'Content-Type': 'application/json'}
- payload = {
- "msgtype": "markdown",
- "markdown": {
- "title": "打印机碳粉状态",
- "text": message
- }
- }
- try:
- response = requests.post(DINGTALK_WEBHOOK,
- data=json.dumps(payload),
- headers=headers,
- timeout=5)
- response.raise_for_status()
- print("状态已发送至钉钉")
- except requests.exceptions.RequestException as e:
- print(f"钉钉消息发送失败: {str(e)}")
- def get_toner_status():
- """获取并格式化碳粉状态"""
- print("正在获取打印机状态...")
- # 构建消息内容
- status_report = [
- "### 理光IMC2000碳粉状态报告",
- f"**IP地址**: {PRINTER_IP} \n", # 换行符用于钉钉markdown格式
- "|颜色|剩余量|\n|-|-|"
- ]
- for color, oid in TONER_OIDS.items():
- if 'max' in color:
- continue # 跳过最大容量值
- value = get_snmp_value(oid)
- if value is not None:
- status_report.append(f"|{color.upper()}|{value}%|")
- else:
- status_report.append(f"|{color.upper()}|获取失败|")
- # 发送钉钉通知
- send_dingtalk_message("\n".join(status_report))
- if __name__ == "__main__":
- get_toner_status()
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |