【问题标题】:OneM2M, IOTKETI Mobius RETRIEVE Group Member ContentInstancesOneM2M、IOTKETI Mobius 检索组成员内容实例
【发布时间】:2020-05-10 09:41:01
【问题描述】:

在我的示例架构中;我有一个 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,结果是“资源不存在(get_target_url)”

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


第一次编辑。

你好安德烈亚斯。

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

第二;现在我明白了,资源中没有现有资源,好吧。正如您所提到的,我想将请求传递给资源的所有成员(容器)。为此,我将使用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)使用,选择使用?


第二次编辑。

“百里香”来自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": { “中”:[“莫比乌斯/ae_test_02/thyme_01”], “嗯”:5 } }

在这个请求中,fopt.js 给出了一个错误“回调不是函数”。

{ "m2m:grp": { “中”:[“ae_test_02/thyme_01”], “嗯”:5 } }

在这个请求中,fopt.js 给出了相同的“回调不是函数”,但在不同的行。

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

我的资源也是这样的;

我的 fopt.js 文件也和这个一样;

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


更新 3。

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

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

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

【问题讨论】:

    标签: iot onem2m mobius


    【解决方案1】:

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

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

    资源本身没有子资源。这就是您收到错误消息的原因。如果要将请求传递给 资源的所有成员,则需要以虚拟子资源 为目标。在您的情况下,请求应针对 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's)。 CSE 应该过滤不正确的 ID,因此您应该在 CREATE 请求的结果正文中获得正确的 ID 集。

    顺便说一句,“百里香”从何而来?这只是在标签中,不会形成 ID。

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

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

    更新 2

    资源的 mid 属性中的 ID 看来,CSE 验证了目标(尽管 cnm(当前成员数)是显然是错误的,这似乎是 CSE 的错误)。

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

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

    【讨论】:

    • 嗨 Andreas,我编辑了我的问题。评论部分字符不够。
    【解决方案2】:

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

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

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

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

    【讨论】: