通过 REST 发送测量值时出现问题 API

Problems sending measurement values via REST API

我正在尝试在 python 脚本中使用一些 REST API 将数据发送到 IoT 云。

不幸的是,我遇到了以下问题:

使用 print(body) 时两个主体看起来很相似,见下文

有没有人知道如何解决这个问题。 显然,我需要传感器值,而不是固定值。

实施 Joseph 的提示后的补充意见

此代码工作正常 ==> return 代码 202

body='{ \"capabilityAlternateId\": \"SENSOR_001\", \"measures\": [[\"24.0\", \"99.0\"]], \"sensorAlternateId\": \"4711_CR_SENS\" }'
        print (body)

    r = requests.post(url, data=body, headers=headers, cert=('./credentials_0211.crt', './credentials_0211.key'))

正文包含

{ "capabilityAlternateId": "SENSOR_001", "measures": [["24.0", "99.0"]], "sensorAlternateId": "4711_CR_SENS" }

上面的问题是使用固定数字进行测量,我需要来自传感器的数字。

以下选项不起作用,这些选项将包含来自传感器的测量值,这是真实的用例

选项 1 ==> 错误 400

measures = [temp, light]
    body = {
            "capabilityAlternateId" : capability,
            "measures" : [measures],
            "sensorAlternateId" : sensor
        }
    json_body = json.dumps(body)

#body contains

{'capabilityAlternateId': 'SENSOR_001', 'measures': [['24,0', '99,0']], 'sensorAlternateId': '4711_CR_SENS'}

选项 2 ==> 错误 400

body='{ \"capabilityAlternateId\": \"SENSOR_001\", \"measures\": [[\"' + str(temp) + '\", \"' + str(light) + '\"]], \"sensorAlternateId\": \"4711_CR_SENS\" }'
r = requests.post(url, data=body, headers=headers, cert=('./credentials_0211.crt', './credentials_0211.key'))

#body contains

{ "capabilityAlternateId": "SENSOR_001", "measures": [["24.0", "19.16"]], "sensorAlternateId": "4711_CR_SENS" }

非常感谢和最诚挚的问候, 海普罗

像这样连接字符串很容易出错。

我建议首先填充 Python 字典,然后使用 json 模块将其编码为 JSON 字符串。在您的情况下,它可能如下所示:

import json

capability_alternate_id = "SENSOR_001"
sensor_alternate_id = "4711_CR_SENS"
measures = ["24.0", "99.0"]

body = {
        "capabilityAlternateId": capability_alternate_id,
        "measures": [measures],
        "sensorAlternateId": sensor_alternate_id
    }

json_body = json.dumps(body)

在这里,我们为 capability_alternate_id(字符串)、sensor_alternate_id(字符串)和 measures(字符串数组)设置了 Python 变量。然后我们定义一个字典(称为主体),并根据您上面post中定义的格式定义键和值。

json.dumps(body) 获取 Python 对象 body,并将其转换为 JSON(使用称为序列化的过程)。

这比直接编辑字符串更可取——如果您在此处定义正文时搞砸了,Python 将抛出一个您可以调试的错误。当您手动将一个字符串连接在一起时,Python 会将其视为任何其他字符串,因此很难调试错误。