Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[leshan-dev] LeshanClient howTo add multiple LwM2M Objects

Hello,
 
I have a question about how to add multiple lwm2m Objects to a Lesahan Client so that the server could read the Object from the Client.
 
In the class ObjectsInitializer the method createNodeEnabler(ObjectModel objectModel) which is called from the mehtod  create(int... objectId) only add a new Objectinstance if the Object ist  specified  as single and not aas multiple.
 
protected ObjectEnabler createNodeEnabler(ObjectModel objectModel) {
        final Map<Integer, LwM2mInstanceEnabler> instances = new HashMap<Integer, LwM2mInstanceEnabler>();
        if (!objectModel.multiple) {
            LwM2mInstanceEnabler newInstance = createInstance(objectModel);
            if (newInstance != null) {
                instances.put(0, newInstance);
                return new ObjectEnabler(objectModel.id, objectModel, instances, getClassFor(objectModel));
            }
        }
        return new ObjectEnabler(objectModel.id, objectModel, instances, getClassFor(objectModel));
    }
       
       
The Example Client adds new Object in this way:
 
        // Initialize object list
      final ObjectsInitializer initializer = new ObjectsInitializer( model );
 
      initializer.setClassForObject( 3, Device.class );
      initializer.setInstanceForObject( 6, locationInstance );
      final List<ObjectEnabler> enablers = initializer.createMandatory();
 
      enablers.addAll( initializer.create( 6 ) );
 
      // Create client
      final InetSocketAddress clientAddress = new InetSocketAddress( localHostName, localPort );
      final InetSocketAddress serverAddress = new InetSocketAddress( serverHostName, serverPort );
 
      final LeshanClient client = new LeshanClient( clientAddress, serverAddress, new ArrayList<LwM2mObjectEnabler>(
         enablers ) );
 
      // Start the client
      client.start();
       
 
So I created a new Object an added it in the same way:
 
 
  public static class MyObject extends BaseInstanceEnabler {
 
      public MyObject() {
         System.out.println( "create MyObject" );
      }
 
      @Override
      public ValueResponse read( final int resourceid ) {
         System.out.println( "Read on MyObject Resource " + resourceid );
         switch( resourceid ) {
            case 0:
               return new ValueResponse( ResponseCode.CONTENT, new LwM2mResource( resourceid,
                  Value.newBooleanValue( getResource0() ) ) );
 
            case 1:
               return new ValueResponse( ResponseCode.CONTENT, new LwM2mResource( resourceid,
                  Value.newIntegerValue( getResource1() ) ) );
                                 
            case 2:
               return new ValueResponse( ResponseCode.CONTENT, new LwM2mResource( resourceid,
                  Value.newStringValue( getResource2() ) ) );
                                 
            case 3:
               return new ValueResponse( ResponseCode.CONTENT, new LwM2mResource( resourceid,
                  Value.newStringValue( getResource3() ) ) );
                                 
            case 4:
               return new ValueResponse( ResponseCode.CONTENT, new LwM2mResource( resourceid,
                  Value.newStringValue( getResource4() ) ) );
 
            default:
               return super.read( resourceid );
         }
      }
 
And in the Clientexample:
 
initializer.setInstanceForObject( 10245, new MyObject());
enablers.addAll( initializer.create( 6 , 10245 ) );
 
Of course I have added the description for this Object in the oma-objects-spec.json.
In the Json the instancetype is described as multiple.
 
A new multiple Object could not be added this way. The Instance could not be added because of
if (!objectModel.multiple) {
...
}
 
How could i add a instances for multiple Objects?
 
Thanks and Regards
 
Ingo
 

Back to the top