OneM2M,IOTKETI Mobius RETRIEVE Group Member ContentInstances

OneM2M, IOTKETI Mobius RETRIEVE Group Member ContentInstances

在我的示例架构中;我有一个 IN-Mobius 和一个 ADN-AE-Thyme (nCube Thyme)。

首先;我创建了一个名为 "ae_test_02" 的 AE,我可以通过 Postman 获取此资源。

这一步之后;我 运行 ADN-AE-Thyme,thyme.js,它创建了一个名为 "thyme_01" 的容器,我也可以通过 Postman 获取这个资源。

同样在该步骤中,thyme.js 将 containerInstances 添加到 "thyme_01" 容器中。然后,我可以通过 Postman

获取带有“/la”参数的最新 containerInstance

至此,问题开始了。我创建了一个组资源,在创建时我尝试了几个解决方案,但总是失败。我试过 "mid" 属性;

{ "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
}

问题是,我一条一条地尝试了这些中间路径,但从来没有奏效。当我尝试通过 Postman 获取最新的 containerInstances 时,我使用这个 URL 结果是 "resource does not exist (get_target_url)"

IN-Mobius中的容器和contentInstances,我向IN-Mobius请求。通过使用这些信息,我应该如何实现组 "mid" 属性;对于通过组资源获取 containerInstances ?


第一次编辑。

嗨,安德烈亚斯。

第一个问题,我可以正确获取资源。在这一点上,我的目标是获取容器中的 containerInstance,它是其中的一个成员 (mid)。

第二;现在我明白了,资源中没有现有资源,好吧。正如您所说,我想将请求传递给资源的所有成员(容器)。为此,我将使用 https://localhost:7579/Mobius/grp_test_100520_08/fopt,但它给出了一个错误 "ERR_INVALID_ARG_TYPE"。我知道,至少有一个中间结构是正确的,但哪个是正确的?

对于较小的问题,我已经在 mid 属性中多次知道资源,因为我不知道哪个是正确的寻址方案?

另外,创建资源时,资源应该在ae资源(/Mobius/ae_test_02/grp_name)或Mobius(/Mobius/grp_name)

资源可以直接在 IN-Mobius 中还是应该在 MN-Rosemary 中? fanOutPoint 是否仅由 MN 或什至 IN 等外部资源使用,fopt 使用?


第二次编辑。

"thyme"来自nCube Thyme(https://github.com/IoTKETI/nCube-Thyme-Nodejs),它创建一个容器然后随机创建ContainerInstances。

资源树的样子;

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

我在 >> Mobius >> grp_test_100520_08(正在使用的 GROUP 资源)中也有一个资源

我试过了;

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

在这个请求中,fopt.js报错"callback is not a function"。

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

在此请求中,fopt.js 给出相同的 "callback is not a function",但在不同的行中。

我想我的 fopt.js 文件是旧的,然后我检查了 mobius github 页面并获取了那个文件,但是它没有解决这个问题。

我的资源也是这样的;

我的fopt.js文件也是这样;

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


更新 3.

"cnm"属性问题是这样的;创建资源时,CSE 会根据成员大小自动分配 "cnm" 属性。但是,CSE 不会在 UPDATE (PUT) 请求中进行此处理。从这一点开始,我将创建资源,而不是更新它们。

正如您提到的,我向组的资源发送请求,但出现 "callback is not a function" 错误。为了解决这个问题,我下载并安装了整个发行版。 (https://github.com/IoTKETI/Mobius) 之后,我将再次执行相同的过程以了解 fopt.js 文件的行为。结果没有改变,它给出了同样的错误。

我打算在 Mobius github 页面中解释整个情况并创建一个问题。希望他们能尽快回复。

我认为你的例子有两个问题。

第一个问题是对 的请求。您需要区分对 资源本身的请求和对 成员的请求。

资源本身没有子资源 。这就是您收到错误消息的原因。如果要将请求传递给 资源的所有成员,则需要将虚拟子资源 作为目标。在您的情况下,请求应以 URI https://localhost:7579/Mobius/grp_text_100520/fopt 为目标。由于您已经拥有 资源作为成员,因此您不需要将 /la 部分添加到请求中。但是,我建议只将 资源添加到组中,并使用目标 URI https://localhost:7579/Mobius/grp_text_100520/fopt/la 检索每个容器的最新

第二个(较小的)问题是,根据我从您的示例代码中得到的信息,您多次将相同的资源添加到组中,但只是使用了不同的寻址方案。请注意,CSE 在创建或更新 mid 属性时必须删除重复的资源。

问题更新后编辑

不是很清楚你的资源树长什么样。所以,也许您应该只从一个资源引用开始,然后从那里继续。 mid 属性中的有效 ID 是结构化的(基本上是 rn 属性的路径)或非结构化 ID(ri的)。 CSE 应过滤不正确的 ID,因此您应该在 CREATE 请求的结果正文中获得正确的 ID 集。

顺便说一句,"thyme" 是从哪里来的?这仅在标签中,不构成ID。

关于 资源:通常所有请求都针对 资源,但请求虚拟 资源转发给 al 组成员。如果在 mid 中引用的资源是可访问的,则转发请求并收集结果并将其作为原始请求结果主体的一部分。

您还需要注意并注意资源类型:只向群组成员发送有效请求。

更新 2

资源的 mid 属性中的 ID 来看,CSE 似乎验证了目标(尽管 cnm(当前会员数)明显不对,好像是CSE的错误。

因此,您应该能够向组的 资源发送请求,如上所述。

对于 CSE 运行时错误,您或许应该联系 Mobius 开发人员。但我的猜测是您也许应该下载并安装整个发行版,而不仅仅是一个文件。

对于未来的任何人;谁在处理这个问题。

问题很简单;在 app.js 中有 4 个函数调用 (fopt.check)。在 app.js 文件中调用函数时,存在 5 个参数,另一方面,在函数中获取这些参数时只需要 4 个参数。因此,body_obj 始终变为“未定义”,然后它永远不会到达“Container”或“ContainerInstance”源。最近,KETI 收到了 Mobius Github 页面 (https://github.com/IoTKETI/Mobius/commit/950182b725d5ffc0552119c5c705062958db285f) 的新提交以解决此问题。它解决了这个问题,除非你使用 use_secure == 'disable'。如果你尝试使用 use_secure == 'enable' 你应该添加一个 if 语句来检查 use_secure 并添加导入 HTTPS 模块。

另外,在创建资源时,定义“mid”属性不是很清楚。就目前而言,如果您想获得(最新)资源;您应该为该组的所有成员添加“/la”。这是 KETI 在 Github 第 5 页上推荐的。 (https://github.com/IoTKETI/Mobius/issues/5#issuecomment-625076540)

最后,谢谢 Andreas Kraft;你的帮助非常有用。