结合钉钉呆板人用python写监控打印机碳粉状态程序

打印 上一主题 下一主题

主题 1917|帖子 1917|积分 5751

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

点击查察代码
  1. from pysnmp.hlapi import *
  2. import requests
  3. import json
  4. # 配置信息
  5. PRINTER_IP = '1.1.1.1'       # 打印机IP
  6. COMMUNITY_STRING = 'public'  # SNMP团体名
  7. DINGTALK_WEBHOOK = 'https://oapi.dingtalk.com/robot/send?test'  # 替换成钉钉机器人Webhook地址
  8. # 理光打印机OID信息
  9. TONER_OIDS = {
  10.     '黑色': '1.3.6.1.2.1.43.11.1.1.9.1.1',
  11.     '青色': '1.3.6.1.2.1.43.11.1.1.9.1.2',
  12.     '品红色': '1.3.6.1.2.1.43.11.1.1.9.1.3',
  13.     '黄色': '1.3.6.1.2.1.43.11.1.1.9.1.4',
  14.     'black_max': '1.3.6.1.2.1.43.11.1.1.8.1.1',
  15. }
  16. def get_snmp_value(oid):
  17.     """获取SNMP值并处理异常"""
  18.     try:
  19.         error_indication, error_status, error_index, var_binds = next(
  20.             getCmd(SnmpEngine(),
  21.                    CommunityData(COMMUNITY_STRING),
  22.                    UdpTransportTarget((PRINTER_IP, 161)),
  23.                    ContextData(),
  24.                    ObjectType(ObjectIdentity(oid)))
  25.         )
  26.         if error_indication:
  27.             print(f"SNMP错误: {error_indication}")
  28.             return None
  29.         elif error_status:
  30.             print(f"SNMP错误: {error_status.prettyPrint()}")
  31.             return None
  32.         return var_binds[0][1] if var_binds else None
  33.     except Exception as e:
  34.         print(f"SNMP查询异常: {str(e)}")
  35.         return None
  36. def send_dingtalk_message(message):
  37.     """发送消息到钉钉机器人"""
  38.     headers = {'Content-Type': 'application/json'}
  39.     payload = {
  40.         "msgtype": "markdown",
  41.         "markdown": {
  42.             "title": "打印机碳粉状态",
  43.             "text": message
  44.         }
  45.     }
  46.     try:
  47.         response = requests.post(DINGTALK_WEBHOOK,
  48.                                  data=json.dumps(payload),
  49.                                  headers=headers,
  50.                                  timeout=5)
  51.         response.raise_for_status()
  52.         print("状态已发送至钉钉")
  53.     except requests.exceptions.RequestException as e:
  54.         print(f"钉钉消息发送失败: {str(e)}")
  55. def get_toner_status():
  56.     """获取并格式化碳粉状态"""
  57.     print("正在获取打印机状态...")
  58.     # 构建消息内容
  59.     status_report = [
  60.         "### 理光IMC2000碳粉状态报告",
  61.         f"**IP地址**: {PRINTER_IP}  \n",  # 换行符用于钉钉markdown格式
  62.         "|颜色|剩余量|\n|-|-|"
  63.     ]
  64.     for color, oid in TONER_OIDS.items():
  65.         if 'max' in color:
  66.             continue  # 跳过最大容量值
  67.         value = get_snmp_value(oid)
  68.         if value is not None:
  69.             status_report.append(f"|{color.upper()}|{value}%|")
  70.         else:
  71.             status_report.append(f"|{color.upper()}|获取失败|")
  72.     # 发送钉钉通知
  73.     send_dingtalk_message("\n".join(status_report))
  74. if __name__ == "__main__":
  75.     get_toner_status()
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

忿忿的泥巴坨

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表