Micropython学习交流群 学习QQ群:786510434 提供多种固件下载和学习交流。

Micropython-扇贝物联 QQ群:31324057 扇贝物联是一个让你与智能设备沟通更方便的物联网云平台

Micropython学习交流群 学习QQ群:468985481 学习交流ESP8266、ESP32、ESP8285、wifi模块开发交流、物联网。

Micropython老哥俩的IT农场分享QQ群:929132891 为喜欢科创制作的小白们分享一些自制的计算机软硬件免费公益课程,由两位多年从事IT研发的中年大叔发起。

Micropython ESP频道

ESP32 micropython 调用钉钉群机器人群发消息


准备用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.0074310302734375 seconds