• 国内物联网平台(1):百度物接入IoT Hub


    国内物联网平台(1)

    ——百度物接入IoT Hub

    马智

    物接入IoT Hub - 架构

    • 全托管的云服务,帮助建立设备与云端之间安全可靠的双向连接
    • 支撑海量设备的数据收集、监控、故障预测等各种物联网场景

    物接入IoT Hub - 功能

    • 通信协议:支持MQTT
    • 数据安全:设备级认证、策略授权;双向安全连接、SSL传输
    • 开发语言:支持多种开发语言、兼容主流硬件设备
      • 支持C、C#、Python、Java、PHP等
      • 支持CLI命令行工具(Python)
    • 分析服务:对接百度大数据服务

    物接入IoT Hub – 概念

    概念

    描述

    MQTT

    MQTT是基于二进制消息的发布/订阅(Publish/Subscribe)模式的协议,
    最早由IBM提出的,如今已经成为OASIS规范,
    更符合M2M大规模沟通。

    endpoint

    IoT Hub 的服务实例,代表一个完整的IoT Hub 服务。

    thing

    表示IoT Hub 设备,
    用户可以在每个endpoint中创建一个或多个thing。

    principal

    principal是一个抽象概念,表示设备(thing)的身份。
    每个thing可以绑定一个principal,
    每个principal拥有一个policy权限。

    policy

    为身份principal设置对应的策略policy,一个principal对应一个policy。

    permission

    为每一个policy设置一组权限permission,其中包括主题topic,和对该主题的操作权限operation。

    topic

    每一个policy都需要指定一个主题项目(topic),在进行使用IoT Hub 服务之前,
    需要先为我们即将开展的订阅发布信息创建一个主题名称,
    该主题应用于MQTT客户端。topic规则允许字符串可以带一个通配符"#",
    例如"temperature/#"就是匹配前缀是temperature的所有topic;单独的"#"表示匹配所有topic。

    operation

    对topic的操作权限。目前基于MQTT协议,IoT Hub 支持创建发布PUBLISH和订阅SUBSCRIBE两种权限。

     

    MQTT协议

    MQTT(Message Queuing Telemetry Transport)是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与机器的通信(M2M)以及物联网环境(IoT)。

    客户端

    1. 发布应用消息给其它相关的客户端。
    2. 订阅以请求接受相关的应用消息
    3. 取消订阅以移除接受应用消息的请求。
    4. 从服务端断开连接。

    服务端

    1. 接受来自客户端的网络连接
    2. 接受客户端发布的应用消息
    3. 处理客户端的订阅和取消订阅请求。
    4. 转发应用消息给符合条件的客户端订阅。

     

    MQTT vs HTTPS:

    • 吞吐量:93倍
    • 发送数据电量消耗: 1/11
    • 接收数据电量消耗:1/170
    • 连接保持电量消耗:1/2
    • 网络开销:1/8

     

    物接入IoT Hub – 操作流程

    目前每个账户只能创建2个endpoint,100个things,100个principal。

     

    物接入IoT Hub – 连接类型

    • IoT Hub为每个实例提供3种默认连接方式
      • TCP:端口1883,不支持传输数据加密,可以通过MQTT.fx客户端连接。
      • SSL:端口1884,支持SSL/TLS加密传输,MQTT.fx客户端连接
      • WSS:端口8884,支持WebSocket浏览器方式连接,同样包含SSL加密

     

    tcp://yourendpoint.mqtt.iot.gz.baiduce.com:1883

    ssl://yourendpoint.mqtt.iot.gz.baiduce.com:1884

    wss://yourendpoint.mqtt.iot.gz.baidubce.com:8884

     

    物接入IoT Hub – 运维界面

    创建设备

    创建身份

    创建策略

    生成秘钥

     

    物接入IoT Hub – MQTT客户端类型

    • Websockets Client:百度开放云基于浏览器开发的mqtt客户端
    • MQTT.fx:目前主流的mqtt客户端,可以快速验证是否可以与IoT Hub 服务交流发布或订阅消息
    • Paho:Eclipse基金会提供的开源MQTT客户端实现,可以很好的支持百度开放云物接入IoT Hub 服务以实现设备互联和物联网应用。

     

    物接入IoT Hub – Paho客户端源码示例

    订阅一栋办公楼内第五层的温度值

    通过NetBeans 来展示如何通过代码来与物接入服务发送或者接受消息。新建一个Java应用程序类型的Maven项目,右击"依赖关系"选择添加依赖关系,查询org.eclipse.paho,并加入对org.eclipse.paho.client.mqttv3的依赖。

    package com.baidu.iot;

    import java.io.InputStream;

    import java.security.KeyStore;

    import java.security.cert.Certificate;

    import java.security.cert.CertificateFactory;

    import javax.net.ssl.SSLContext;

    import javax.net.ssl.TrustManager;

    import javax.net.ssl.TrustManagerFactory;

    import org.eclipse.paho.client.mqttv3.MqttClient;

    import org.eclipse.paho.client.mqttv3.MqttConnectOptions;

    import org.eclipse.paho.client.mqttv3.MqttMessage;

    public class Thermometer {

    public static void main(String[] args) throws Exception {

    String endpoint = "hostname"; //输入创建实例endpoint返回的hostname

    String username = "yourendpoint/yourthing"; //输入创建thing返回的username

    String password = "Dm3yyvOHb7zt/uRWsPgsfsgbnj7CxuVMc+uDbf4j960="; //输入创建principal返回的password

    String topic = "building-b/floor-5/temperature-1"; //订阅的消息主题,本例是指订阅b号楼第五层的温度

    TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");

    tmf.init((KeyStore)null);

    TrustManager[] trustManagers = tmf.getTrustManagers();

     

    SSLContext ctx = SSLContext.getInstance("TLS");

    ctx.init(null, trustManagers, null);

    MqttConnectOptions options = new MqttConnectOptions();

    options.setCleanSession(true);

    options.setUserName(username);

    options.setPassword(password.toCharArray());

    options.setSocketFactory(ctx.getSocketFactory());

    MqttClient client = new MqttClient(endpoint, "java-client");

    client.connect(options);

    MqttMessage message = new MqttMessage();

    message.setPayload("15".getBytes());

    client.publish(topic, message);

    client.disconnect();

    }

    }

     

    物接入IoT Hub – 与大数据分析服务对接

  • 相关阅读:
    Go网络文件传输
    Go网络编程
    LNMP环境搭建(PHP7.4.0)
    LNMP环境搭建(PHP7.2.25)
    Please ensure the argon2 header and library are installed
    MySQL权限管理
    nginx ingress controller配置默认SSL证书
    kubernetes pod内抓包,telnet检查网络连接的几种方式
    ansible取出register变量中最长字符串
    kubernetes flannel pod CrashLoopBackoff解决
  • 原文地址:https://www.cnblogs.com/ibrahim/p/baidu-iot-hub.html
Copyright © 2020-2023  润新知