Micropython学习交流群 学习QQ群:786510434 提供多种固件下载和学习交流。
Micropython-扇贝物联 QQ群:31324057 扇贝物联是一个让你与智能设备沟通更方便的物联网云平台
Micropython学习交流群 学习QQ群:468985481 学习交流ESP8266、ESP32、ESP8285、wifi模块开发交流、物联网。
Micropython老哥俩的IT农场分享QQ群:929132891 为喜欢科创制作的小白们分享一些自制的计算机软硬件免费公益课程,由两位多年从事IT研发的中年大叔发起。
准备用ESP32-S3做个监控设备,监测未接入环动设备的运行情况,当设备出现问题可以通过企业微信机器人和钉钉群机器人报警。
micropython做钉钉群 机器人的时候出现了问题,钉钉机器人安全设置为“加密”,官方给的DEMO中使用的python库在micropython中都没有,网上找了一圈也没找到micropython能用的钉钉机器人代码。
安全设置如果是关键词或IP地址应该跟微信机器人一样比较简单,但这个机器人已经在很多设备上运行很久了,不想修改以前的代码,只能继续研究micro python。
研究了两天,终于弄出一个micropython能用的钉钉群机器人代码。
import urequests as requests import json def sendDingTalkMsg(msgAlert): import time import uhashlib import ubinascii webhook = 'https://oapi.dingtalk.com/robot/send?access_token=3ae63bd51de7053486b32d4e2d2eeb176e4f52b8798fdbd680e4be61f78cec87' secret_key = 'SEC1306372b3167575940247b5fdc840fabda0fe28408b0e8c8dd232d29c70f2e9e' timestamp = str(round((time.time() + 946656000) * 1000)) def hmac_sha256(key, message): block_size = 64 if len(key) > block_size: key = uhashlib.sha256(key).digest() if len(key) < block_size: key = key + b'\x00' * (block_size - len(key)) o_key_pad = bytearray([0x5c ^ b for b in key]) i_key_pad = bytearray([0x36 ^ b for b in key]) inner = uhashlib.sha256(i_key_pad + message).digest() hmac_code = uhashlib.sha256(o_key_pad + inner).digest() return hmac_code def get_Hmac(): secret_enc = secret_key.encode('utf-8') string_to_sign = '{}\n{}'.format(timestamp, secret_key) string_to_sign_enc = string_to_sign.encode('utf-8') hmac_code = hmac_sha256(secret_enc, string_to_sign_enc) return hmac_code def is_alnum(char): return ('0' <= char <= '9') or ('a' <= char <= 'z') or ('A' <= char <= 'Z') def url_encode(s): result = [] for char in s: if is_alnum(char) or char in '-_.~': result.append(char) elif char == ' ': result.append('+') else: result.append('%{:02X}'.format(ord(char))) return ''.join(result) hmac = get_Hmac() base64_data = ubinascii.b2a_base64(hmac) base64_data = base64_data.decode('utf-8') sign = url_encode(base64_data) if sign.endswith("%0A"): sign=sign.rstrip('%0A') signed_webhook = '{}×tamp={}&sign={}'.format(webhook, timestamp, sign) headers = {'content-type': "application/json"} body = { "msgtype":"text", "at":{ "isAtAll":"true" }, "text": { "content":msgAlert } } d = json.dumps(body) response = requests.post(signed_webhook, data = d.encode("utf-8"), headers = headers) if response.status_code == 200 and response.json().get('errcode') == 0: print("钉钉发送成功") else: print("钉钉发送失败",response.text)
Copyright © 2014 ESP56.com All Rights Reserved
执行时间: 0.0066261291503906 seconds