【问题标题】:sending snmp subtree via mqtt and node-red通过 mqtt 和 node-red 发送 snmp 子树
【发布时间】:2017-12-26 16:59:59
【问题描述】:

我在玩nodered.. 到目前为止,我可以使用 modbus 收集一些数据并通过 mqtt 将其发送给代理。 但出于监控原因,我也想对我的交换机中的一些 snmp 子树执行此操作。 我不能让它工作。我可以使用“snmp-subtree”节点从交换机收集数据。在调试视图中,我可以看到我想要的有效负载。 现在我需要某种函数,从数组中获取每个对象并将其转换为“我的”mqtt 主题和有效负载。

msg : Object
    object
    _msgid: "xyz"
    topic: ""
    payload: array[33]
        [0 … 9]
            0: object
                oid: "1.3.6.1.2.1.2.2.1.10.1"
                value: 1231397597
            1: object
                oid: "1.3.6.1.2.1.2.2.1.10.2"
                value: 0

每个对象都是一个接口。我需要为每个接口发送一条主题为“room/switch/interfaceIn/#”的消息(# 应该是 OID 的最后一个数字) 和作为有效载荷的值。 我真的不知道如何才能让它发挥作用。我想要一个 for 循环(为每个对象做一些魔术并发送一条消息)。 有人有我可以使用的示例吗?

新评论:

我尝试使用在 Google 中找到的示例进行编码。 现在我的函数中有一些工作代码。 我会运行几天来测试一下。

function shootMsg(element, index, array) {
    node.send ({payload: element.value, topic:'test/mult/1/' + index});
}

msg.payload.forEach(shootMsg);

如果我能以任何方式改进,请随时发表评论...我是 Java 新手..我不知道我在做什么 :-)

我有一个新问题要在这里实现我的目标。我认为最好开始一个新话题? (我需要知道是否可以读取之前在节点中分配的IP地址,它不在消息体中。)

问候 丹尼斯

【问题讨论】:

  • 函数节点采用普通的javascript。试一试,如果你遇到困难,用你尝试过的方法编辑问题,有人会帮忙
  • 如果您回答自己的问题,请将其作为答案(并接受),而不是作为对您自己问题的编辑

标签: node-red


【解决方案1】:

我看到您已经有了一个可行的 javascript 解决方案,使用函数节点迭代对象数组并将每个对象作为单独的 msg 发送。至少还有 2 种其他好方法可以完成同样的任务:

  1. 使用 split 节点将有效负载数组分解为 33 个单独的 msg 对象——然后将其连接到 change 节点,该节点将 oid 移动到 msg.topic,并将值移动到 msg.payload

  2. 将整个数组传递给 change 节点,配置为使用此 Jsonata 表达式来构建您需要的 msg 对象的新数组:

    payload.{
      "topic": $reverse($split(oid, "."))[0],
      "payload": value
    }
    

在我需要将一个 JSON 结构重新格式化为另一个的大多数情况下,我倾向于使用第二种技术。

注意:要在 change 节点中使用 Jsonata 表达式,您必须在“类型”下拉菜单中选择 J: 选项,而不是选择 {} 选项来输入 JSON 字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    相关资源
    最近更新 更多