iotonem2mmobius

OneM2M, IOTKETI Mobius RETRIEVE Group Member ContentInstances


In my example architecture; I have an IN-Mobius and a ADN-AE-Thyme (nCube Thyme).

First of all; i created a AE which is called "ae_test_02", i can GET this resource via Postman.

ae_test_02

After this step; i run ADN-AE-Thyme, thyme.js, and it created a container which is called "thyme_01", and also i can GET this resource via Postman.

thyme_01

Also in that step, thyme.js add containerInstances into the "thyme_01" container. Then, i can get that latest containerInstance with "/la" parameter via Postman

la

In this point, the problem has began. I create a group resource, while creating i tried couple solutions, always fail. I tried in "mid" attribute;

{ "m2m:grp": {
    "rn": "grp_test_100520_08",
    "mt": 3,
    "mid": ["3-20200505012920476/la", 
            "Mobius/3-20200505012920476/la",
            "Mobius/thyme_01/la",
            "Mobius/ae_test_02/3-20200505012920476/la",
            "Mobius/ae_test_02/thyme_01/la",
            "ae_test_02/thyme_01/la",
            "ae_test_02/3-20200505012920476/la"],
    "mnm": 10
}

group create

The problem is that, i tried these mid paths one by one, but never works. When i try to get latest containerInstances via Postman, i use this URL and the results is "resource does not exist (get_target_url)"

group retrive

The containers and contentInstances in the IN-Mobius, and i requested to the IN-Mobius. By using these informations how should i implement group "mid" attribute; for the get containerInstances via group resources ?


First Edit.

Hi Andreas.

For the first issue, i can get resource correctly. In this point my aim is GET containerInstance in the container, which is a member (mid) in that .

Second; now I understand, there is not existing resource in resource, okay. As you mentined, i want to pass a request to all member (containers) of a resource. For this purpose, i will use https://localhost:7579/Mobius/grp_test_100520_08/fopt, but it gives an error "ERR_INVALID_ARG_TYPE". I know that, at least one mid structure is correct, but which one is the correct ?

For the smaller issue, i already know that resouce multiple times in the mid attribute, because i did not know which one is the correct adressing scheme ?

Also, while creating a resource, the resource should be in the ae resource (/Mobius/ae_test_02/grp_name) or in the Mobius (/Mobius/grp_name)

resources can be in directly in IN-Mobius or should in MN-Rosemary? Is fanOutPoint only using by external resource like MN or even IN, fopt using ?


Second Edit.

The "thyme" comes from nCube Thyme (https://github.com/IoTKETI/nCube-Thyme-Nodejs), it creates a container and then randomly create ContainerInstances.

The resource tree looks like;

Mobius >> ae_test_02 (AE resource) >> thyme_01 (Container It created from nCube Thyme https://github.com/IoTKETI/nCube-Thyme-Nodejs) >> ContainerInstances

I have also a resource in >> Mobius >> grp_test_100520_08 (GROUP resource which is uses)

I tried;

{ "m2m:grp": { "mid": ["Mobius/ae_test_02/thyme_01"], "mnm": 5 } }

In this request, fopt.js gives an error "callback is not a function".

err1

{ "m2m:grp": { "mid": ["ae_test_02/thyme_01"], "mnm": 5 } }

In this request, fopt.js gives same "callback is not a function", but in different line.

err2

I guess my fopt.js file is old, then i checked mobius github page and get that file, however it not solve this.

Also my resource look like this;

grp

Also my fopt.js file is same as this;

https://github.com/IoTKETI/Mobius/blob/master/mobius/fopt.js


UPDATE 3.

The "cnm" attribute problem is this; while creating a resouce, CSE will automaticly assign "cnm" attribute according to member size. However, CSE will not this process in UPDATE (PUT) request. From this point, i will create resources, not UPDATE them.

As you mentioned, i send requests to the group's resource, but it gives the "callback is not a function" error. To solve this problem, i downloaded and installed the whole distribution. (https://github.com/IoTKETI/Mobius) After that, i will do same processes again for understand the fopt.js file behaviour. The result wasn't changed, it gives the same error.

I planning to explain whole situation and create an issue, in Mobius github page. I hope they will response soon.


Solution

  • for anyone in the future; who is dealing with this problem.

    The problem is simply is that; in the app.js there is 4 function call (fopt.check). While calling the function in the app.js file, there are 5 parameter exists, on the other hand, while getting these arguments in the function it takes only 4 arguments. For this reason, body_obj always becomes "undefined" then it will never reach the "Container" or "ContainerInstance" source. Lately, KETI was sent a new commit to the Mobius Github page (https://github.com/IoTKETI/Mobius/commit/950182b725d5ffc0552119c5c705062958db285f) to solve this problem. It solves this problem unless you are using use_secure == 'disable'. If you try to use use_secure == 'enable' you should add an if statement to check use_secure and add import HTTPS module.

    Also, while creating resource, defining the "mid" attribute is not very clear. Just for now, if you want to reach (latest) source; you should add "/la" for all members of the group. This is recommended by KETI on Github page issue 5. (https://github.com/IoTKETI/Mobius/issues/5#issuecomment-625076540)

    And lastly, thank you Andreas Kraft; your help was very useful.