我对如何在ORION中定义实体有一些疑问 .
该实体将用于包含来自智能手机的GPS,加速度计,罗盘和陀螺仪传感器数据,以供特定用户使用 . 整个概念被定义为用户会话 . 我还想在会话“开始”和“结束”时发布 .
考虑到专门针对加速度计,罗盘和陀螺仪传感器的高容量,我不希望每次发生时都发送此传感器信息,但是说,可能一旦会话结束并且所有数据都已在智能手机中收集 . 因此,我将属性更多地视为值列表而不是离散值 . 因此,把这样的东西:
{
"contextElements": [
{
"type": "UserSession",
"isPattern": "false",
"id": "",
"attributes": [
{
"name": "user_id",
"type": "string",
"value": "none"
},
{
"name": "app_id",
"type": "string",
"value": "none"
},
{
"name": "status",
"type": "string",
"value": "none"
},
{
"name": "x_accelerometer",
"type": "float",
"value": "0.0"
},
{
"name": "y_accelerometer",
"type": "float",
"value": "0.0"
},
{
"name": "z_accelerometer",
"type": "float",
"value": "0.0"
},
{
"name": "gps_latitude",
"type": "float",
"value": "0.0"
},
{
"name": "gps_longitude",
"type": "float",
"value": "0.0"
},
{
"name": "gps_altitude",
"type": "float",
"value": "0.0"
},
{
"name": "gps_accuracy",
"type": "float",
"value": "0.0"
},
{
"name": "gps_heading",
"type": "float",
"value": "0.0"
},
{
"name": "gps_speed",
"type": "float",
"value": "0.0"
},
{
"name": "compass",
"type": "float",
"value": "0.0"
},
{
"name": "gyroscope",
"type": "float",
"value": "0.0"
}
]
}
],
"updateAction": "APPEND"
}
不确定这是否是正确的方法 . 我不想每秒钟甚至更少地杀死智能手机发送数据的电池,所以我可能每分钟都这样做,所以我需要一个代表传感器数据的每个属性的值列表 . 我是对的还是我以错误的方式接近这个?
最后,我想在另一个应用程序中订阅这些属性,并根据值创建警报进行一些推理,所以我也可能也需要一个警报实体 .
谢谢!
1 回答
Orion API非常灵活,可以为您提供多种功能:
在单个请求中创建/更新给定实体的所有属性
在单个请求中创建/更新给定实体的attributres的子集 . 例如,如果您的实体有100个属性,但您只想更新其中的2个(保持其他98个未触及),您可以这样做 .
在同一请求中的多个实体中创建/更新atributtes(全部或子集) . 例如,您可以在同一请求中更新属于实体E1的属性A和B以及属于实体E2的属性C和D.
如果您想在客户端节省电池,那么最后一个选项可能是最合适的 . 例如,您可以在客户端中保存缓冲区,并且实体的更改会发生变化,并且每分钟刷新缓冲区,发送一个updateContext请求以及所有累积的更改 .