2

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

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

ae_test_02

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

百里香_01

同样在该步骤中,thyme.js 将 containerInstances 添加到“thyme_01”容器中。然后,我可以通过 Postman 获取带有“/la”参数的最新 containerInstance

拉

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

{ "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,它是 that 中的成员(中间)。

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


第二次编辑。

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

资源树看起来像;

Mobius >> ae_test_02 (AE 资源) >> thyme_01 (它从 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 给出了一个错误“回调不是函数”。

错误1

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

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

错误2

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

我的资源也是这样的;

grp

我的 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 页面中解释整个情况并创建一个问题。我希望他们会尽快回复。

4

2 回答 2

0

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

问题很简单;在 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;你的帮助非常有用。

于 2020-05-13T08:31:52.293 回答
0

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

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

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

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

问题更新后编辑

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

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

关于 <fanOutPoint> 资源:通常所有请求都将针对<Group>资源,但对虚拟<fanOuPoint>资源的请求将转发给该组的所有成员。如果mid 中引用的资源可访问,则转发请求并收集结果,并作为原始请求的结果正文的一部分。

您还需要小心并考虑资源类型:仅向组成员发送有效请求。

更新 2

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

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

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

于 2020-05-10T16:21:44.153 回答