IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 从阿里云mqtt配置解析到用户名密码等信息 -> 正文阅读

[嵌入式]从阿里云mqtt配置解析到用户名密码等信息

Python正常进行mqtt相关开发,使用paho-mqtt模块(需要了解的可以看我另一篇Python快速实现MQTT双向订阅发布),需要参数如:name、clientId、host、port、username、password。
但在阿里云物联网网关开发时,一机一密型直接使用productKey、deviceName、deviceSecret进行开发(需要了解的可以看完另一篇博客Python对阿里云物联网MQTT设备接入端开发)。
本文从阿里云源码解析,将阿里云一机一密型中的配置解析出常规的配置信息。
用处在于如果没有设备网关,可以将数据解析后,使用MQTT桌面平台,填入常规mqtt配置信息,进而和阿里云物联网平台进行通信,进行数据发送,模拟、测试。

1. 先上代码

# -*- coding: utf-8 -*-

import sys
import time
import hmac
import hashlib

options = {
        'productKey': 'your productKey',
        'deviceName': 'your deviceName',
        'deviceSecret': 'your deviceSecret',
        'port': 1883,
        'host': 'iot-as-mqtt.cn-shanghai.aliyuncs.com'
    }
if sys.version > '3':
    PY3 = True
else:
    PY3 = False


def get_client_id(client_id, secure_mode=2, sign_method='hmacsha1'):
    """
    获取加密后id
    :param client_id:
    :param secure_mode:
    :param sign_method:
    :return:
    """
    ts = str(int(time.time()))
    return client_id + '|securemode=' + str(secure_mode) + ',signmethod=' + sign_method + ',timestamp=' + ts + '|'


def get_sort_keys(product_key, device_name, client_id):
    """
    key排序
    :param product_key: 产品key
    :param device_name: 设备名称
    :param client_id: 客户id
    :return:
    """
    ts = str(int(time.time()))
    d = {'productKey': product_key, 'deviceName': device_name,
         'timestamp': ts, 'clientId': client_id}
    sort_d = [(k, d[k]) for k in sorted(d.keys())]

    content = ''
    for i in sort_d:
        content += str(i[0])
        content += str(i[1])
    return content


def create_signature(secret_key, text, sign_method='hmacsha1'):
    """
    生成签名
    :param secret_key:
    :param text:
    :param sign_method:
    :return:
    """
    if PY3:
        content_to_sign = bytes(text, 'utf-8')
        secret_key = bytes(secret_key, 'utf-8')
    else:
        content_to_sign = text.encode('utf-8')

    if sign_method == 'hmacsha1':
        hashed = hmac.new(secret_key, content_to_sign, hashlib.sha1)
    elif sign_method == 'hmacmd5':
        hashed = hmac.new(secret_key, content_to_sign, hashlib.md5)
    return hashed.hexdigest().upper()


if __name__ == '__main__':

    client_id = 'iot_client'
    mqtt_client_id = get_client_id(client_id, 3, 'hmacsha1')
    user_name = options['deviceName'] + '&' + options['productKey']
    ordered_keys = get_sort_keys(options['productKey'], options['deviceName'], client_id)
    password = create_signature(options['deviceSecret'], ordered_keys)
    print("name:", options['deviceName'])
    print("clientId:", mqtt_client_id)![请添加图片描述](https://img-blog.csdnimg.cn/6067a47763eb4c6a81da193a1b898347.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ3OTU4Mjg5,size_16,color_FFFFFF,t_70)

    print("host:", 'mqtt://', options['host'], ':', options['port'])
    print("port:", options['port'])
    print("username:", user_name)
    print("password:", password.lower())

2. 使用指南

将8-14行该为你的阿里云物联网设备对应信息。productKey、deviceName、deviceSecret
port默认就是1883,host该为和自己一致的。

解析为常规的mqtt配置信息,就是从阿里云aliyun-iot-linkkit源码入手,拿到加密方法和数据组合结构,把封装的东西还原,最后得到数据。

3. 将解析后的数据填入MQTT桌面平台,模拟设备进行和阿里云物联网通信

本人使用MQTT X作为桌面平台。
1.解析的数据与MQTT X 对应关系如下图
请添加图片描述
2.从阿里云拿到配置数据到最后完成连接流程如下图
请添加图片描述
3.MQTT X连接完成与阿里云物联网平台设备显示在线,如下图
请添加图片描述
4.该设备对应主题发布一条消息至阿里云物联网平台,如下图
请添加图片描述
5.阿里云物联网在日志查询里面可以看到对应设备接收到的对应消息
请添加图片描述

总结

欢迎各位交流。您的点赞是我坚持的动力。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-26 12:16:06  更:2021-08-26 12:18:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 2:45:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码