概述:基于翻译当前版本为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 {

    @Override
    public ReadResponse read(int resourceid) {
        switch (resourceid) {
        case 0:
            return ReadResponse.success(resourceid, getSmsTxCounter());
        }
        return ReadResponse.notFound();
    }

    @Override
    public WriteResponse write(int resourceid, LwM2mResource value) {
        switch (resourceid) {
        case 15: 
            setCollectionPeriod((Long) value.getValue());
            return WriteResponse.success();
        }
        return WriteResponse.notFound();
    }

    @Override
    public 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

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐