İbrahim Uğur ABA
İbrahim Uğur ABA

Reputation: 150

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.

Upvotes: 2

Views: 495

Answers (2)

İbrahim Uğur ABA
İbrahim Uğur ABA

Reputation: 150

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.

Upvotes: 0

Andreas Kraft
Andreas Kraft

Reputation: 3843

I think there are two issues with your example.

The first issue is with the request to the <Group>. You need to distinguish between requests to the <Group> resource itself and requests to the members of the <Grou>.

There is no child resource <la> of the <Group> resource itself. This is why you receive an error message. If you want to pass a request to all members of a <Group> resource then you need to target the virtual child resource <fopt>. In your case the request should target URI https://localhost:7579/Mobius/grp_text_100520/fopt. Since you already have the <la> resources as members you won't need to add the /la part to the request. However, I would recommend to only add the <Container> resources to the group and use the target URI https://localhost:7579/Mobius/grp_text_100520/fopt/la to retrieve the latest <ContentInstances> of each container.

The second (smaller) issue is that from what I can get from your example code that you add the same resource multiple times to the group, but only with different addressing schemes. Please be aware that the CSE must removes duplicate resources when creating or updating the mid attribute.

Edit after question update

It is not very clear what your resource tree looks like. So, perhaps you should start with only one resource references and continue from there. Valid ID's in the mid attribute are either structured (basically the path of the rn attributes) or unstructured ID's (the ri's). The CSE should filter the incorrect ID, so you should get the correct set of ID's in the result body of the CREATE request.

btw, where does "thyme" come from? This is only in a label, which does not form an ID.

Regarding the <fanOutPoint> resource: Normally all request would be targeted to the <Group> resource, but requests to the virtual <fanOuPoint> resource are forwarded to al the members of the group. If a resource referenced in mid is accessible then the request is forwarded and the result is collected and is part of the result body of the original request.

You also need to be careful and regard the resource types: only send valid requests to the group's members.

Update 2

From the IDs in the mid attribute of the <Group> resource it looks like that the CSE validated the targets (though the cnm (current number of members) is obviously wrong, which seems to be an error of the CSE).

So, you should be able to send requests to the group's <fopt> resource as discussed above.

For the CSE runtime error you should perhaps contact the Mobius developers. But my guess is that you perhaps should download and install the whole distribution, not only a single file.

Upvotes: 0

Related Questions