【基础】LwM2M 通讯协议

【基础】LwM2M 通讯协议

  • LwM2M 协议基础
    • LwM2M 简介
    • LwM2M 基本架构
    • LwM2M 资源定义
  • LwM2M 协议实现
    • 开源协议实现
    • Java LwM2M Client

LwM2M 协议基础

LwM2M 简介

LwM2M 的全称为 Lightweight Machine-To-Machine,是一种适用于物联网设备的轻量级的通讯协议,由 OMA(Open Mobile Alliance)公司提出并定义。LwM2M 协议适用于资源有限的终端设备。

LwM2M 协议的突出特点如下:

  • 协议基于 REST 框架实现;

  • 协议中消息的传输采用 CoAP 协议实现;

  • 协议定义了紧凑、高效且兼具扩展性的数据模型;

LwM2M 基本架构

LwM2M 协议的基本框架如下图所示:
在这里插入图片描述

协议的架构当中包含两个实体,分别为 LwM2M Server 以及 LwM2M Client:

  • LwM2M Server 为服务器,部署在 LwM2M 服务供应商处或者网络服务供应商处;

  • LwM2M Client 为客户端,部署在各个实际设备上;

除此之外,还可以加入 LwM2M Bootstrap Server(引导服务器)或者 SmartCard(智能卡)以实现对客户端的初始引导(告知客户端服务器的相关信息)。

LwM2M 协议在各个实体之间规定了 4 个接口来实现响应的功能:

  • Bootstrap(引导接口):引导接口的目的是向 LwM2M 客户端提供注册到 LwM2M 服务器的必要信息,如服务器的访问信息、客户端支持的资源信息等。这些信息可以由设备厂商预先存储在设备中,也可以通过引导服务器或者智能卡写入设备;

  • Client Registration(客户端注册接口):注册接口的目的是将 LwM2M 客户端与 LwM2M 进行互联,将 LwM2M 客户端的相关信息存储在 LwM2M 服务器上。只有完成了客户端的注册,LwM2M 才能实现与服务端之间的通信;

  • Device Management and Service Enablement(设备管理与服务实现接口):设备管理与服务实现接口的主控方为 LwM2M 服务器,其可以向客户端发送指定,由客户端对指令进行响应并将响应消息发送给服务器;

  • Information Reporting(信息上报接口):信息上报接口允许 LwM2M 服务器向客户端订阅资源信息,客户端接收到订阅消息后,按照约定的模式向服务器报告自身资源的变化情况,即观察者模式;

LwM2M 资源定义

LwM2M 协议的服务对象为资源有限的终端设备,因此选择支持 REST 架构的 CoAP 来实现消息的传递。(CoAP 协议的相关内容可以参看:【基础】CoAP 通讯协议-CSDN博客)。

为进一步节省数据传输的开销,协议的数据结构也必须足够简单。LwM2M 协议定义了以资源为基本单位的模型,所有的数据都存储在资源当中。数据的体系架构为“对象-实例-资源”三级架构,对应到 Java 中可以理解为“类-实例化对象-对象属性”。

LwM2M 协议预定义了 8 种对象(Object)来满足基本的需求,如下表所示:

Object 对象Object ID
Security(安全对象)0
Server(服务器对象)1
Access Control(访问控制对象)2
Device(设备对象)3
Connectivity Monitoring(连通性监控对象)4
Firmware(固件对象)5
Location(位置对象)6
Connectivity Statistic(连通性统计对象)7

考虑到扩展性,协议也允许用户根据实际需要自定义更多对象,对象的定义与资源代号可以参考 Lwm2m-registry。

在这样的数据模型中,资源、实例以及对象都是用数字对应的ID来表示的,以实现最大程度的压缩,因此任何资源都可以用最多 3 级的简洁方式表示,例如/1/0/1表示服务器对象(Server Object)第1个实例中的服务器短 ID 资源。 在注册阶段,LwM2M 客户端把携带了资源信息的对象实例传递给 LwM2M 服务器,以通知服务器自身设备所具备的能力。

LwM2M 协议实现

开源协议实现

LwM2M协议的主要开源实现有以下几个:

  • OMA LwM2M DevKit:提供可视化界面与 LwM2M 服务器交互;
  • Eclipse Leshan:基于 Java,提供了 LwM2M 服务器与 LwM2M 客户端的实现;
  • Eclipse Wakaama:基于 C,提供了LwM2M 服务器与 LwM2M 客户端的实现;
  • AVSystem Anjay:基于 C,提供了 LwM2M 客户端的实现;

Java LwM2M Client

LwM2M 客户端的代码基于 Eclipse Leshan 库编写(Github 地址)。

下述代码创建了 LwM2M Client 并连接到 Leshan 提供的公共服务器。

public class MyClientDemo {

    private static final int OBJECT_ID_TEMPERATURE_SENSOR = 3303;

    public static void main(String[] args) {
//        String url = "coap://localhost:5685";
        String url = "coap://leshan.eclipseprojects.io:5683";
        String endpoint = "lwM2M-test-client";
        LeshanClientBuilder builder = new LeshanClientBuilder(endpoint);

        List<ObjectModel> models = ObjectLoader.loadAllDefault();
        String[] modelsPath = new String[] {"3303.xml"};
        try {
            models.addAll(ObjectLoader.loadDdfResources("/models", modelsPath));
        } catch (IOException | InvalidModelException | InvalidDDFFileException e) {
            e.printStackTrace();
        }

        ObjectsInitializer initializer = new ObjectsInitializer(new StaticModel(models));
        initializer.setInstancesForObject(LwM2mId.SECURITY, Security.noSec(url, 123));
        initializer.setInstancesForObject(LwM2mId.SERVER, new Server(123, 300, EnumSet.of(BindingMode.U), false, BindingMode.U));
        initializer.setInstancesForObject(LwM2mId.DEVICE, new Device("LwM2M-Client", "model Y", "88.163", EnumSet.of(BindingMode.U)));
        initializer.setInstancesForObject(LwM2mId.LOCATION, new MyLocation());
        initializer.setInstancesForObject(OBJECT_ID_TEMPERATURE_SENSOR, new RandomTemperatureSensor());

        builder.setObjects(initializer.createAll());
        builder.setEndpointsProviders(new JavaCoapClientEndpointsProvider());

        LeshanClient client = builder.build();
        client.start();
    }

}

启动程序后,访问https://leshan.eclipseprojects.io/#/clients即可看到自己编写的客户端,点击相应的客户端名称即可查看客户端的数据,如下所示:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/684319.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

再也不怕消息遗漏了,团队协作最强辅助:可道云teamOS协作通知功能,及时通知项目进展,让协作更高效

大家是否曾遇到过这样的困扰&#xff1a;在网盘中进行协作时&#xff0c;由于无法及时了解文件的最新变化&#xff0c;导致信息滞后&#xff0c;影响工作效率&#xff1f;甚至因为未能及时跟进文件更新&#xff0c;阻碍团队协作和项目推进&#xff0c;从而给团队造成严重后果。…

技巧:合并ZIP分卷压缩包

如果ZIP压缩文件文件体积过大&#xff0c;大家可能会选择“分卷压缩”来压缩ZIP文件&#xff0c;那么&#xff0c;如何合并zip分卷压缩包呢&#xff1f;今天我们分享两个ZIP分卷压缩包合并的方法给大家。 方法一&#xff1a; 我们可以将分卷压缩包&#xff0c;通过解压的方式…

C#——break、continue、goto关键字的使用

break break是搭配循环语句使用的&#xff0c;用于跳出循环。 举例 : 当for循环执行到第5次时&#xff0c;使用break方法 跳出循环。 continue continue 语句的工作原理与 break 语句类似&#xff0c;但是 continue 语句并不会跳出整个循环&#xff0c;而是跳过本次循环继续执…

idea修改国际化语言教程

教程背景 第一种&#xff0c;如果以前的项目已经有国际化语言了&#xff0c;现在的项目是导入的。 第二种&#xff0c;你中途把idea删除卸载了&#xff0c;在安装了别的版本&#xff0c;把这个项目导入进来后的。 第三种&#xff0c;你下载或复制的别人的项目。 以上这三种…

# log.info(“消息发送成功“); 红色报错 解决方案

log.info(“消息发送成功”); 红色报错 解决方案 一、错误描述&#xff1a; 在使用 idea 创建 maven 项目导入 lombok 依赖时&#xff0c;出现 log.info 报红错误&#xff0c;检查导入依赖正确&#xff0c;网络正常&#xff0c;错误依旧。 二、解决方案&#xff1a; 1、在 i…

Vue3+.NET6前后端分离式管理后台实战(二十六)

1&#xff0c;Vue3.NET6前后端分离式管理后台实战(二十六)已经在微信公众号更新&#xff0c;有兴趣的扫码关注一起交流学习。

智能家居——Kompas.ai如何改变我们的生活

引言 在现代生活中&#xff0c;智能家居逐渐成为提升生活质量的重要手段。随着科技的进步&#xff0c;智能家居的应用越来越广泛。本文将探讨智能家居的发展趋势&#xff0c;并介绍Kompas.ai如何通过AI技术改变我们的家庭生活。 智能家居的发展及其重要性 智能家居的概念起源…

现在有一个生产计划,甲乙丙3个品类共16个产品,生产时间6天,每天甲品类可以生产1张单,乙3张,丙1张,请用MySQL写出H列的效果

现在有一个生产计划&#xff0c;甲乙丙3个品类共16个产品&#xff0c;生产时间6天&#xff0c;每天甲品类可以生产1张单&#xff0c;乙3张&#xff0c;丙1张&#xff0c;请用MySQL写出H列的效果吗&#xff1f; 最终展示结果要求为&#xff1a; 品类产品生产时间开始生产时间…

IIS 服务器,下载APK 文件,用于发布更新最新的APK包

IIS 默认情况下无法下载 .apk 文件&#xff0c;需要对 IIS 服务进行设置 1、打开 IIS 对应的应用 选中MIME 类型 右键 打开功能 2、右键添加 文件扩展名&#xff1a;.apk MIME 类型输入&#xff1a;application/vnd.android.package-archive 3、重启应用 4、浏览器访问 服务地…

开发构建一个体育数据资料库:不同数据的具体意义

构建一个体育数据资料库&#xff0c;应包括“赛程赛果”、“比赛阵容”、“比赛指数”、“比赛详情”、“统计数据”以及“榜单数据”等关键信息。而借助东莞梦幻网络科技的源码&#xff0c;您可以打造一个属于自己的体育直播平台。通过该平台的资料库展示模块&#xff0c;您能…

下载centos7镜像及在VMware上安装Linux (Centos7)操作系统详细教程

文章目录 下载centos7镜像文件及在VMware上安装centos7详细教程一、下载Centos7镜像二、 利用VM安装Centos7进入VM软件安装配置虚拟机 安装Centos7进入图形化界面配置 三、访问外网 配置IP地址结语Linux配置IP网卡Linux配置本地yum源 下载centos7镜像文件及在VMware上安装cento…

Cesium开发环境搭建

由于win7搭建很费事&#xff0c;重新安装了OS&#xff0c;win10的。 记录一下&#xff0c;搭建步骤&#xff1a; 1.下载node.js。百度搜索即可下载对应的版本。下载cesium。 2.安装node.js。安装后&#xff0c;输入node -v&#xff0c;显示版本信息&#xff0c;表示安装成功…

windows下使用命令清空U盘

1、CMD命令打开后输入diskpart命令打开磁盘分区管理工具 diskpart打开如下窗口 Microsoft DiskPart 版本 10.0.19041.3636 Copyright (C) Microsoft Corporation. 在计算机上: DESKTOP-TR9HQRP 2、输入查看所有磁盘命令 list disk打印如下windows 磁盘 ###  状态    …

并查集,CF1619G - Unusual Minesweeper

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 1619G - Codeforces 二、解题报告 1、思路分析 考虑距离在k内的两点可以合并 那么不断合并可以得到若干连通块 每个连通块自然爆炸的时间取决于连通块内的最早爆炸时间 我们还可以在每个时间点…

海外转仓系统应用案例解读:如何高效快速解决海外仓补货需求

海外仓转仓在跨境电商中是一个非常重要的业务类型&#xff0c;所谓的海外仓转仓&#xff0c;也就是指客户讲货物发送到某个海外仓后&#xff0c;根据业务需求&#xff0c;将货物中专到另一个海外仓的过程。 主要是应用在补货、销售渠道调整或者临时仓储需求上。对海外仓来说&a…

空间数据采集与管理

你还在为找不到合适的数据而苦恼吗&#xff1f;你还在面对大量数据束手无策&#xff0c;不知如何处理吗&#xff1f;对于从事生产和科研的人员来说&#xff0c;空间数据的采集与管理是地理信息系统&#xff08;GIS&#xff09;和空间分析领域的关键环节。通过准确高效地采集和管…

【Python字符串攻略】:玩转文字,编织程序的叙事艺术

文章目录 &#x1f680;一.字符串基础&#x1f308;二.查看数据类型⭐三.转化❤️四.字符串索引&#x1f6b2;五.字符串切片&#x1f3ac;六.字符串切片-步长☔七.反向切片注意事项&#x1f6b2;八.字符串&#x1f4a5;查&#x1f4a5;改&#x1f4a5;删 ❤️九.字符串拼接&…

本地Nginx的安装到使用

借鉴文章 https://blog.csdn.net/weixin_44005802/article/details/135488448 1.官网下载链接&#xff1a;链接: https://nginx.org/en/download.html 2.将下载的zip包解压后&#xff0c;打开D:…\nginx-1.20.2\conf\nginx.conf&#xff0c;修改server为实际配置。 worker_pr…

Al2O3/SiC纳米复相陶瓷力学性能显著提升 我国研究机构数量较多

Al2O3/SiC纳米复相陶瓷力学性能显著提升 我国研究机构数量较多 Al2O3/SiC纳米复相陶瓷&#xff0c;是以氧化铝&#xff08;Al2O3&#xff09;为基体相&#xff0c;以纳米碳化硅&#xff08;SiC&#xff09;为第二相&#xff0c;将第二相纳米颗粒弥散进入基体相&#xff0c;经高…

教科书般的充电桩平台多租户技术架构设计,建议收藏!-慧哥充电桩开源平台

慧哥充电桩开源平台V2.5.2_----- SpringCloud 汽车 电动自行车 云快充1.5、云快充1.6 https://liwenhui.blog.csdn.net/article/details/134773779?spm1001.2014.3001.5502 一、多租户的概念 多租户本质上是一种软件的技术架构&#xff0c;它最核心的特征是多个租户可以共享一…