通过 REST 发送测量值时出现问题 API
Problems sending measurement values via REST API
我正在尝试在 python 脚本中使用一些 REST API 将数据发送到 IoT 云。
不幸的是,我遇到了以下问题:
正在向云端发送固定值
body='{ "capabilityAlternateId": "SENSOR_001", "measures": [["24.0", "99.0"]], "sensorAlternateId": "4711_CR_SENS" }'
发送传感器值失败
body='{ "capabilityAlternateId": "SENSOR_001", "measures": [["' + str(temp) + '", "' + str(light) + '"]] , "sensorAlternateId": "4711_CR_SENS" }'
使用 print(body) 时两个主体看起来很相似,见下文
固定值
{ "capabilityAlternateId": "SENSOR_001", "measures": [["24.0", "99.0"]], "sensorAlternateId": "4711_CR_SENS" }
带有传感器值
{ "capabilityAlternateId": "SENSOR_001", "measures": [["24.0", "62.72"]], "sensorAlternateId": "4711_CR_SENS" }
有没有人知道如何解决这个问题。
显然,我需要传感器值,而不是固定值。
实施 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 会将其视为任何其他字符串,因此很难调试错误。
我正在尝试在 python 脚本中使用一些 REST API 将数据发送到 IoT 云。
不幸的是,我遇到了以下问题:
正在向云端发送固定值
body='{ "capabilityAlternateId": "SENSOR_001", "measures": [["24.0", "99.0"]], "sensorAlternateId": "4711_CR_SENS" }'
发送传感器值失败
body='{ "capabilityAlternateId": "SENSOR_001", "measures": [["' + str(temp) + '", "' + str(light) + '"]] , "sensorAlternateId": "4711_CR_SENS" }'
使用 print(body) 时两个主体看起来很相似,见下文
固定值
{ "capabilityAlternateId": "SENSOR_001", "measures": [["24.0", "99.0"]], "sensorAlternateId": "4711_CR_SENS" }
带有传感器值
{ "capabilityAlternateId": "SENSOR_001", "measures": [["24.0", "62.72"]], "sensorAlternateId": "4711_CR_SENS" }
有没有人知道如何解决这个问题。 显然,我需要传感器值,而不是固定值。
实施 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 会将其视为任何其他字符串,因此很难调试错误。