【问题标题】:AWS IoT Core for Lambda event missing dataAWS IoT Core for Lambda 事件缺失数据
【发布时间】:2022-12-11 12:53:00
【问题描述】:

我有一个连接到 AWS IoT Core for Lambda 的 tektelic 智能房间传感器。目的地发布到一个主题。在 MQTT 测试客户端中,我收到一条格式正确的消息:

{
  "WirelessDeviceId": "24e8d6e2-88c8-4057-a60f-66c5f3ef354e",
  "PayloadData": "A2cA4ARoaAD/ASw=",
  "WirelessMetadata": {
    "LoRaWAN": {
      "ADR": true,
      "Bandwidth": 125,
      "ClassB": false,
      "CodeRate": "4/5",
      "DataRate": "3",
      "DevAddr": "019e3fcb",
      "DevEui": "647fda00000089e2",
      "FCnt": 4676,
      "FOptLen": 0,
      "FPort": 10,
      "Frequency": "904700000",
      "Gateways": [
        {
          "GatewayEui": "647fdafffe014abc",
          "Rssi": -92,
          "Snr": 5.800000190734863
        },
        {
          "GatewayEui": "0080000000024245",
          "Rssi": -93,
          "Snr": 7.25
        },
        {
          "GatewayEui": "24e124fffef464da",
          "Rssi": -86,
          "Snr": 4.25
        }
      ],
      "MIC": "eb050f05",
      "MType": "UnconfirmedDataUp",
      "Major": "LoRaWANR1",
      "Modulation": "LORA",
      "PolarizationInversion": false,
      "SpreadingFactor": 7,
      "Timestamp": "2022-12-07T21:46:13Z"
    }
  }
}

当我使用 lambda 订阅主题时:

Rule query statement: SELECT *, topic() AS topic FROM 'lora/#'

我缺少大部分数据:

{
    "Gateways": {
        "Timestamp": "2022-12-07T21:46:13Z",
        "SpreadingFactor": 7,
        "PolarizationInversion": false,
        "Modulation": "LORA",
        "Major": "LoRaWANR1",
        "MType": "UnconfirmedDataUp",
        "MIC": "eb050f05",
        "Snr": 4.25,
        "Rssi": -86,
        "GatewayEui": "24e124fffef464da"
    },
    "Snr": 7.25,
    "Rssi": -93,
    "GatewayEui": "0080000000024245",
    "topic": "lora/tektelic/smart_room"
}

相关代码是:

def handler(event, context):
    print(json.dumps(event))

该事件看起来像大约一半的数据,格式错误且顺序相反。 原始事件中有一个 Gateways[ ],它现在是一个对象,其中包含原始数组中的一些数据,以及数组外的其他数据。

发送消息的设备信息以及我要处理的有效负载丢失。

我正在关注this solution construct pattern,唯一的修改是 lambda 代码和 select 语句。

我尝试将内存从默认的 128M 增加到 1024M,但没有任何更改。

我还在 this construct pattern 之后将原始消息存储在 AWS S-3 中,它与 MQTT 数据匹配。我对其中的 select 语句进行了类似的更改。

关于在哪里寻找问题的想法?

最近的见解是 select 语句:

        iot_topic_rule_props=iot.CfnTopicRuleProps(
            topic_rule_payload=iot.CfnTopicRule.TopicRulePayloadProperty(
                rule_disabled=False,
                description="Processing of DTC messages from Lora Sensors.",
                sql="SELECT topic() AS topic, * FROM 'lora/#'",
                actions=[]
            )
    ),

将 sql 替换为:

sql="SELECT * FROM 'lora/#'",

生成一个格式良好的事件。

将其替换为: sql="SELECT topic() AS topic, * FROM 'lora/#'",

生成相同的格式错误事件,除了 topic 是第一个标签而不是最后一个。 我打算让这个问题保持开放,以回答发生了什么,因为它感觉像是一个错误。如果它只是对 sql 不满意,这应该会产生一个错误。

【问题讨论】:

    标签: aws-lambda aws-iot-core lorawan


    【解决方案1】:

    我认为你不想订阅带有 lambda 的主题? lambda 是一段短暂的代码...... 你看过物联网规则了吗

    您可以使用 sql 语句进行订阅,然后触发 lambda 来处理它。

    https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html

    【讨论】:

    猜你喜欢
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 2020-06-10
    • 2016-10-01
    • 2022-11-16
    • 2020-08-05
    相关资源
    最近更新 更多