概述:基于翻译当前版本为2017-9-24, github地址:leshan, LwM2M是基于Coap上的协议

1、Home篇:

Eclipse Leshan 用java语言实现了OMA Lightweight M2M(轻量级物联网,简写LwM2M)协议服务器和客户端的项目。

它不是单一服务器和客户端,它是java库集合,致力帮助任务开发他们自己LwM2M服务器和客户端。该项目也提供一个客户端,服务器和(bootstrap)引导服务器示例,它作为测试LeshanAPI的一个例子。

这个wiki包含所有关于Leshan官方文档, 只是目前还是不完善,但是我们会继续完善它!

在开始使用Leshan之前,我们强烈建议readme文件和OMA Lightweight M2M 规范。

2、Getting started(开始尝试)

如果你还没有看过readme和运行我们demo,强烈建议您首先做这两件事。

现在您已经准备好了,选择你要做什么:

  • 我想要开发自己LWM2M服务器
  • 我想要开发自己LWM2M客户端
  • 我想要开发自己引导服务器:这个现在还没有指导,但是你可以去看看我们已经写的引导服务器,它在leshan-bsserver-demo下leshanBootstrapServerDemo

2.1、开发自己LWM2M服务器

这里你将会明白如何利用Leshan创建自己LWM2M服务器

获取Leshan

为了开发你自己服务器,你需要使用leshan-server-cf模块。获取最新版本

使用maven

<dependencies><dependency><groupId>org.eclipse.leshan</groupId><artifactId>leshan-server-cf</artifactId><version><!-- 使用最新版本 --></version>                  </dependency><!-- add any slf4j backend, here we use one of the smallest one: slf4j-simple ,添加一个日志jar --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.10</version><scope>runtime</scope></dependency>
</dependencies>

创建一个简单服务器

你需要使用Leshan构建器去创建服务器。

LeshanServerBuilder builder = new LeshanServerBuilder();
// add this line if you are using leshan 1.0.0-M4 because of
// https://github.com/eclipse/leshan/issues/392
// builder.setSecurityStore(new InMemorySecurityStore()); (这就是当你使用版1.0.0-M4版需要取消这行注释)
LeshanServer server = builder.build();
server.start();

如果你执行这段代码,你应该可以看到如下日志

[...] INFO ... - LWM2M server started at coap://0.0.0.0/0.0.0.0:5683 coaps://0.0.0.0/0.0.0.0:5684

你可以尝试使用leshan写的客户端(leshan-client-demo)去连接这个服务器:

wget https://hudson.eclipse.org/leshan/job/leshan/lastSuccessfulBuild/artifact/leshan-client-demo.jar   //获取客户端demo
java -jar ./leshan-client-demo.jar  //运行客户端

你可以看你客户端成功注册到你的服务器上:

... INFO ... - Trying to register to coap://localhost:5683 ...
... INFO ... - Registered with location '/rd/SfDZcGn8p7'.

现在在设备离开和连上时打印日志

server.getRegistrationService().addListener(new RegistrationListener() {public void registered(Registration registration, Registration previousReg,Collection<Observation> previousObsersations) {System.out.println("new device: " + registration.getEndpoint());}public void updated(RegistrationUpdate update, Registration updatedReg, Registration previousReg) {System.out.println("device is still here: " + updatedReg.getEndpoint());}public void unregistered(Registration registration, Collection<Observation> observations, boolean expired,Registration newReg) {System.out.println("device left: " + registration.getEndpoint());}
});

现在让我们尝试用已经注册设备发送一个请求

public void registered(Registration registration, Registration previousReg,Collection<Observation> previousObsersations) {System.out.println("new device: " + registration.getEndpoint());try {ReadResponse response = server.send(registration, new ReadRequest(3,0,13));if (response.isSuccess()) {System.out.println("Device time:" + ((LwM2mResource)response.getContent()).getValue());}else {System.out.println("Failed to read:" + response.getCode() + " " + response.getErrorMessage());}} catch (InterruptedException e) {e.printStackTrace();}
}

扩展学习

你可以去看一下我们写的服务器demo代码:leshan-server-demo文件下LeshanServerDemo项目

2.1、开发自己LWM2M客户端

这里你将会看到如何利用leshan创建自己LwM2M客户端

获取Leshan

为了开发你自己客户端,你需要使用leshan-client-cf模块。获取最新版本

使用maven

<dependencies><dependency><groupId>org.eclipse.leshan</groupId><artifactId>leshan-client-cf</artifactId><version><!-- 使用最新版本 --></version>                  </dependency><!-- add any slf4j backend, here we use one of the smallest one: slf4j-simple --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.10</version><scope>runtime</scope></dependency>
</dependencies>

创建一个简单客户端

你需要使用Leshan构建器创建客户端

String endpoint = "..." ; // 选择一个端点名称
LeshanClientBuilder builder = new LeshanClientBuilder(endpoint);
LeshanClient client = builder.build();
client.start();

如果你执行这段代码(需要网络权限),你应该可以看到如下日志:

[...] INFO ... - Leshan client[endpoint:myClient] started at coap://0.0.0.0/0.0.0.0:46535 coaps://0.0.0.0/0.0.0.0:36490
[...] INFO ... - Trying to register to coap://leshan.eclipse.org:5683 ...
[...] INFO ... - Registered with location '/rd/w50JjnP76l'.
[...] INFO ... - Next registration update in 270.0s...

这意味着你可以在leshan 沙箱中成功注册你客户端。你可以在web界面查看到你的设备,你可以测试它(读或写设备对象)

创建你自己的对象

在默认情况下Leshan客户端是通过托管对象(ObjectsInitializer)创建(Security,Server和Device)。

// create objects  创建对象
ObjectsInitializer initializer = new ObjectsInitializer();
initializer.setInstancesForObject(LwM2mId.SECURITY, Security.noSec("coap://leshan.eclipse.org:5683", 12345));
initializer.setInstancesForObject(LwM2mId.SERVER, new Server(12345, 5 * 60, BindingMode.U, false));
initializer.setInstancesForObject(LwM2mId.DEVICE, new Device("Eclipse Leshan", "model12345", "12345", "U"));// add it to the client  添加到客户端
builder.setObjects(initializer.create(LwM2mId.SECURITY,LwM2mId.SERVER, LwM2mId.DEVICE));

我们只提供三个对象的简单实现。你将需要自己实现LwM2M对象。

为了实现你自己LwM2M对象,你需要创建一个类,你需要实现LwM2mInstanceEnabler或BaseInstanceEnabler.

public class ConnectivityStatistics extends BaseInstanceEnabler {@Overridepublic ReadResponse read(int resourceid) {switch (resourceid) {case 0:return ReadResponse.success(resourceid, getSmsTxCounter());}return ReadResponse.notFound();}@Overridepublic WriteResponse write(int resourceid, LwM2mResource value) {switch (resourceid) {case 15: setCollectionPeriod((Long) value.getValue());return WriteResponse.success();}return WriteResponse.notFound();}@Overridepublic ExecuteResponse execute(int resourceid, String params) {switch (resourceid) {case 12: start();return ExecuteResponse.success();}return ExecuteResponse.notFound();}

现在我们将它添加到你客户端:

ObjectsInitializer initializer = new ObjectsInitializer();
initializer.setInstancesForObject(LwM2mId.SECURITY, Security.noSec("coap://leshan.eclipse.org:5683", 12345));
initializer.setInstancesForObject(LwM2mId.SERVER, new Server(12345, 5 * 60, BindingMode.U, false));
initializer.setInstancesForObject(LwM2mId.DEVICE, new Device("Eclipse Leshan", "model12345", "12345", "U"));
initializer.setInstancesForObject(7, new ConnectivityStatistics());// add it to the client
// DO NOT FORGET TO ASK TO CREATE THE NEW OBJECT "7"
builder.setObjects(initializer.create(7, LwM2mId.SECURITY,LwM2mId.SERVER, LwM2mId.DEVICE));

扩展学习

你可以去看一下我们写的客户端demo代码:leshan-client-demo文件下LeshanClientDemo项目

参考:https://github.com/eclipse/leshan/wiki

leshan基于OMALightweight M2M(LwM2M)协议的Java实现(入门)相关推荐

  1. 【IoT】基于NB-IoT的LWM2M协议浅析

    LWM2M 协议是 OMA 组织制定的轻量化的 M2M 协议,主要面向基于蜂窝的窄带物联网(Narrow Band Internet of Things, NB-IoT)场景下物联网应用,聚焦于低功耗 ...

  2. 基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互

    基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互 一.前言 1.Java服务端程序代码的项目名为TcpSocketServerOfJava,包名为com.exam ...

  3. JAVA初学者如何实现基于UDP和TCP协议的网络编程

    首先,我们需要先了解UDP协议.TCP协议的概念: 一.UDP协议:用户数据报协议,是一种无连接协议 二.TCP协议:文件传输协议,是一种面向连接的协议 他们都位于TCP/IP模型中的传输层,为整个网 ...

  4. java实现mqtt服务端_基于Swoole使用MQTT协议连接阿里云物联网平台设备实现消息订阅

    阿里云物联网平台为设备提供安全可靠的连接通信能力,支撑设备数据采集上云,我们这里认为阿里云物联网平台是 MQTT 服务端,那么我们自己的设备作为客户端,应该如何实现消息订阅? 阿里云没有提供 PHP ...

  5. docker创建EMQX,在EMQX上开启lwm2m协议插件,并测试与lwm2m客户端进行通讯

    1.docker创建EMQX docker run -d --name emqx --restart=always --net host emqx/emqx 2.访问EMQX后台管理界面 http:/ ...

  6. 移远BC20模组使用LwM2M协议接入华为IoT平台(NB-IoT专栏—进阶篇2)

    目录 1.背景 2.部署华为云 3.华为云与BC20模组进行数据收发实验 1.背景 最近在做一个智慧路灯项目,构思使用STM32结合NB-IoT模组实现数据上传和联动控制,并且可以使用GPS模块上传路 ...

  7. Android平台基于asmack实现XMPP协议中的PubSub机制

    Android平台基于asmack实现XMPP协议中的PubSub机制 本文主要介绍,在Android平台上基于asmack包,实现的PubSub机制,在PubSub中最重要的概念是节点Node,几乎 ...

  8. 微信小程序连接物联网(三):微信小程序远程遥控宿舍开门 基于NodeMCU通过MQTT协议连接阿里云物联网平台

    索引 这是用微信小程序遥控开门的系列文章,具体微信小程序连接物联网的代码在第三章提及. 微信小程序连接物联网(一):初始化ESP8266 NodeMCU 微信小程序连接物联网(二):NodeMCU L ...

  9. LWM2M协议报文怎么解析

    LWM2M (Lightweight M2M) 协议是一种用于 M2M (Machine to Machine) 通信的协议,常用于 IoT (Internet of Things) 设备之间的通信. ...

最新文章

  1. 管理Exchange服务器
  2. js java socket_js使用WebSocket,java使用WebSocket
  3. 构建根文件系统(2)Busybox init 进程
  4. 上午绿茶下午菊花茶晚上枸杞
  5. php 生成缩略图保存,PHP批量生成图片缩略图的方法
  6. 【专栏精选】实战:使用LeanCloud上传玩家分数,实现排行榜
  7. 【李宏毅2020 ML/DL】P10 Classification_1 | 简单的例子告诉你使用 wx+b 以及 Sigmoid 作为激活函数的合理性
  8. 【问链财经-区块链基础知识系列】 第十六课 区块链将变革教育产业,未来有六大应用方向
  9. 【拆机】小米路由器4
  10. c语言课程设计作业医院挂号系统,【c语言课程设计】医院门诊系统
  11. java 文件流 乱码_Java IO流之中文乱码
  12. python毕业论文参考文献格式范例_毕业论文参考文献规范格式及例子
  13. android jni介绍
  14. Python 唤起QQ对话框 QQ客服效果
  15. 无人驾驶一 协方差矩阵的几何意义
  16. 选择第K大元素(快排、快选以及k-选取比较)
  17. 某鱼最近卖的很火蓝色版微信去水印小程序源码+接口
  18. Vue中添加背景图片
  19. 巧用R语言挖掘谁是全网最受欢迎和最高产武侠作者
  20. 怎样给pdf添加水印,给pdf添加水印的两个方法

热门文章

  1. dds:publish
  2. 为什么技术开发者应该读一读《浪潮之巅》
  3. echarts中国地图(百度地图)
  4. 深信服 华为路由器 ipsce对接
  5. 不同方式实现IP访问限制
  6. 复杂性应业务抽象本质——系统化多维度思考(如何让抽象更上一层楼)
  7. python里的jh是啥意思_JH是什么意思啊
  8. 英语单词学习-词根词缀记忆思维导图
  9. EN 12101-8:2011烟雾和热量控制系统防烟挡板—CE认证
  10. 阿里云盾(云安全)是什么?有什么作用?