【基础】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即可看到自己编写的客户端,点击相应的客户端名称即可查看客户端的数据,如下所示:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter基础 -- Flutter布局练习(小项目)

目录 1. Splash 布局&#xff08;第一页&#xff09; 1.1 目标 1.2 当前效果图 1.3 创建 Splash 界面 1.4 设置 MaterialApp 1.5 设置 Splash 背景色 1.6 布局 Splash 界面 1.7 总结 2. Splash 圆角图片 2.1 目标 2.2 当前效果图 2.3 蓝湖下载图片 2.4 图片导入项…

在编程Python的时候发生ModuleNotFoundError: No module named distutils报错怎么办

1.先查看Python版本 首先我们先去打开终端就是先widr再输入cmd 然后进去在输入Python -V要注意大小写 我的版本是3.9.7版本但是我使用的PyCharm 是 2021.1.1 x64版本没有办法主动去识别因为这个版太低了你的Python版本很高所以无法识别 2.解决方法 只需要把你的Python现版…

微信公众号【原子与分子模拟】: 熔化温度 + 超导电性 + 电子化合物 + 分子动力学模拟 + 第一性原理计算 + 数据处理程序

往期内容主要涵盖&#xff1a; 熔化温度 超导电性 电子化合物 分子动力学模拟 第一性原理计算 数据处理程序 【1】熔化温度 分子动力学 LAMMPS 相关内容 【文献分享】分子动力学模拟 LAMMPS 熔化温度 晶体缺陷 熔化方法 LAMMPS 文献&#xff1a;金属熔化行为的局域…

vscode ctrl+鼠标左键无法跳转

打开设置&#xff0c;搜索intel…… 将这个智能感知改成default就可以了&#xff0c;我之前是在disable处。 分析了一下&#xff0c;其实跳转功能主要是根据上下文语法分析来实现的&#xff0c;并不是简单得全文匹配&#xff0c;因此需要相关得语法分析工具。 那么为什么默认式…

微软Edge浏览器深度解析:功能、同步、隐私与安全

微软Edge浏览器是微软公司开发的一款网页浏览器,它基于Chromium内核,提供了快速、安全和兼容性良好的网页浏览体验。以下是关于微软Edge浏览器的详细信息和使用指南: 微软Edge浏览器的主要特点: 1. 基于Chromium内核: 渲染引擎:Chromium内核是基于开源项目Blink的,它…

可视化数据科学平台在信贷领域应用系列五:零代码可视化建模

信贷风控模型是金融机构风险管理的核心工具&#xff0c;在信贷风险管理工作中扮演着至关重要的角色。随着信贷市场的环境不断变化&#xff0c;信贷业务的风险日趋复杂化和隐蔽化&#xff0c;开发和应用准确高效的信贷风控模型显得尤为重要。信贷风险控制面临着越来越大的挑战和…

问你为什么选择Kafka,你会怎么回答?

可靠的含义在百度百科的解释是&#xff1a;可以信赖、可以相信、可靠的朋友。那Kafka究竟是不是一个可靠的朋友呢&#xff1f;既然全世界绝大部分高可用系统都有Kafka的支持&#xff0c;Kafka必定有其过人之处&#xff0c;跟着我来分析分析。 另外多提一嘴Kafka在GitHub目前已…

六西格玛培训,带你解锁职场超能力工具!

当提及六西格玛培训的精髓时&#xff0c;我们不得不提到那些强大而实用的工具&#xff0c;它们如同探险者的指南针&#xff0c;引导我们走向卓越。今天&#xff0c;就让我们一起揭开这些神秘工具的面纱&#xff0c;探寻六西格玛背后的智慧。 首先&#xff0c;DMAIC流程是六西格…

cesium 漫游

token记得换成您自己的&#xff01;&#xff01;&#xff01; 申请cesium的token 官网【Cesium: The Platform for 3D Geospatial】 <template><div id"cesiumContatiner"><!-- <div id"mapContainer1"></div> --></di…

员工离职删除自己做的文件违法么?如何杜绝这种现象?

员工离职时删除自己做的文件是否违法&#xff0c;需要视情况而定&#xff1a; 如果删除的是个人自己的文件&#xff1a; 在这种情况下&#xff0c;员工删除的是自己制作的、不涉及公司机密或经营数据的个人文件&#xff0c;通常不会被视为违法行为。 如果删除的是公司的文件…

探索 CSV 模块:Python 中 CSV 数据持久化的最佳实践

&#x1f340; 前言 博客地址&#xff1a; CSDN&#xff1a;https://blog.csdn.net/powerbiubiu &#x1f44b; 简介 本章节介绍使用 CSV 文件来存储数据&#xff0c;CSV 文件是一种常见的数据格式&#xff0c;可以用来存储和交换表格数据。CSV 文件由一系列的行组成&#x…

SQL Developer管理RESTful 服务

RESTful 服务依赖于ORDS&#xff08;Oracle REST Data Services&#xff09;&#xff0c;所以在进行本实验前&#xff0c;请先确认数据库服务器上的ORDS服务已启动&#xff1a; $ systemctl status ords ● ords.service - Oracle REST Data ServicesLoaded: loaded (/etc/sys…

23中设计模式之一— — — —命令模式的详细介绍

命令模式 Command Pattern讲解 概念描述模式结构主要角色模式的UIM类图模式优点模式缺点应用场景实例演示类图代码演示运行结果 概念 命令模式&#xff08;别名&#xff1a;动作&#xff0c;事务&#xff09; 命令模式是一种行为设计模式&#xff0c;将一个请求封装为一个对象…

【qt】项目移植

项目移植 一.前言二.同名问题三.具体操作1.修改文件名2.修改类名3.修改一些不能自动改的名4.修改.ui文件5.删除原来自动生成的ui_xxx.h文件6.修改头文件 四.导入项目五.使用导入的项目六.项目建议 一.前言 终于概率论考完了,有时间了,接着上个项目,我们继续来完成我们的多窗口开…

【Pycharm】功能介绍

1.Code Reformat Code 格式化代码&#xff0c;可以帮助我们去自动调整空格等&#xff0c;根据python语法规范自动调整 2.Settings 1.创建py文件默认填充模版 3.读写py文件编码格式一致性 顶部代码指定的编码方式作用&#xff1a; 可以保证python2/3解释器在读取文件的时候按…

jmeter并发测试

目录 常用的压测工具jmeter安装配置并执行新建测试计划 Test Plan添加线程组练习01&#xff1a;共10个线程&#xff0c;每秒钟启动一个线程&#xff08;需要10秒&#xff09;&#xff0c;每个线程发送两个请求练习02&#xff1a;共10个线程&#xff0c;1秒中内启动完毕&#xf…

kali中安装、卸载程序教程

1、安装教程 ①、使用apt安装 apt update &#xff08;先更新apt&#xff09; apt-get install xxxx(xxx为需要安装的软件名)②、使用dpkg安装 dpkg –i deb的软件包名&#xff08;需要在软件包的目录下使用&#xff0c;不然就要把地址加上&#xff09;二、卸载教程 ①、使…

ViewModel原理分析

认识 ViewModel ViewModel 是一种用来存储和管理UI相关数据的类。 ViewModel 的作用可以从两个方面去理解&#xff1a; UI界面控制器&#xff1a;在最初的MVC模式中&#xff0c;由于 Activity / Fragment 承担的职责过重&#xff0c;因此在后续的 MVP、MVVM 模式中&#xff…

基于JSP技术的人事管理系统

你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;浏览器&#xff08;如360浏览器、谷歌浏览器、QQ浏览器等&#xff…

深度神经网络——什么是扩散模型?

1. 概述 在人工智能的浩瀚领域中&#xff0c;扩散模型正成为技术创新的先锋&#xff0c;它们彻底改变了我们处理复杂问题的方式&#xff0c;特别是在生成式人工智能方面。这些模型基于高斯过程、方差分析、微分方程和序列生成等坚实的数学理论构建。 业界巨头如Nvidia、Google…