传感器对象库

sensorobjectlibrar的Python项目详细描述


保留所有权利。


条件列表和以下免责声明。

*以二进制形式重新分发必须复制上述版权声明,
此条件列表和文档中的以下免责声明
和/或随分发提供的其他材料。


*无论是SOL的名称还是其
贡献者的名称,都不能用于认可或推广从
本软件衍生的产品未经事先书面许可。


本软件由版权所有人和贡献者"按原样"提供,以及任何明示或暗示的保证,包括但不限于,不接受对适销性和特定用途适用性的暗示保证。在任何情况下,版权持有人或贡献者均不对任何直接、间接、附带、特殊、惩戒性或后果性损害(包括但不限于购买替代品或服务;使用、数据或利润损失)承担责任;(或业务中断)但是,根据任何责任理论,无论是在合同中,严格责任,
或因使用本软件而产生的侵权行为(包括疏忽或其他)。即使已告知此类损坏的可能性。

[构建状态](https://travis-ci.org/realms-team/sol.svg?branch=master)"(https://travis-ci.org/realms-team/sol)[![构建状态](https://travis-ci.org/realms-team/sol.svg?分支=开发](https://travis-ci.org/realms-team/sol)
[![代码运行状况](https://landscape.io/github/realms-team/sol/master/landscape.svg?style=flat)(https://landscape.io/github/realms-team/sol/master)[![代码运行状况](https://landscape.io/github/realms-team/sol/develop/landscape.svg?style=flat)"(https://landscape.io/github/realms-team/sol/develop)


此repo包含一组用于操作传感器对象的库。

创建对象
*`t`:创建对象时的时间戳
*`t`:对象类型,数字
*`l`:值的长度
*`v`:对象值,一个不透明的字节字符串

我们将此格式称为mttlv格式。它是众所周知的"类型长度值"(TLV)格式的一个泛化。

http://realms sol.readthedocs.io

每一组对象都可以用[binary](binary representation)、[json](json representation)或[http](http representation)格式表示。

*将数据写入文件

每组对象由以下字段组成:

````
sol header objects list
```

一些规则:
*所有多字节值都被编码为"big endian"(也称为"网络顺序")
*在二进制文件中保存对象时,每个对象都必须是fram使用HDLC。





《0 1 2 3 4 5 6 7


《0 1 2 3 4 5 6 7
++-++-++-++-++-++-+



-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-
`
`
`
`
` `
` ` `
` ` ` ` ` `
` ` ` v`:对象的版本:
*只有值"b00"是在本文件中定义。前两位的其他值是保留的,可以在本文档的后续版本中定义。
*`t`:mttlv对象的类型:
*`0`:单个mttlv对象
*`1`:多mttlv对象(mtntlv)这意味着时间戳旁边的第一个字节是n:数字对象
*`m`:mac地址编码:
*`0`:不存在mac地址
*`1`:存在8字节mac地址
*`s`:时间戳编码
*`0`:时间戳是UTC(1秒粒度)中的4字节Linux纪元
*`1`:时间戳被省略,并从SmartMesh IP头中的时间戳字段中恢复
*`y`:类型编码
*`0`:1字节类型字段
*`1`:2字节类型字段
*`l`:长度编码
*`b00`:使用已知值。无长度字段存在
*`b01`:1字节长度字段存在
*`b10`:2字节长度字段存在
*`b11`:elided。长度从数据包或hdlc帧的长度中恢复。


对象列表结构可能会有所不同。

*如果t标志为"0",则消息将具有以下结构:
````````` sol header` mt` tlv```
*如果t标志为"1",则消息将具有以下结构:
```||溶胶头mt n tlv tlv…```

发送一个2字节的温度传感器读数,过去是这样的:

*`[1b]`sol header
*`v`=`00`(版本0)
*`t`=`0`(mttlv对象类型)
*`m`=`0`(没有mac地址)
*`s`=`0`(epoch)
*` y`=`0`(1字节类型)
*`l`=`b00`(已知值,无长度字段)
*`[--]`mac:_-elided掴br/>*`[4b]`timestamp:`0x…….`
*`[1b]`type=`b…`(temperature)
*`[--``length:_-elided掴br/>*`[2b]`value:`0x….`

总共8字节。

**示例2**。发送单个2字节温度传感器读数,刚才拍摄:

*`[1b]`sol header
*`v`=`00`(版本0)
*`t`=`0`(mttlv对象类型)
*`m`=`0`(没有mac地址)
*`s`=`1`(省略)
*`y`=`0`(1字节类型)
*`l`=`b00`(众所周知的价值,无长度字段)
*`[3b]`传感器读数1
*`[--]`MAC:*`[--]`时间戳:*`[1b]`类型=`B..`(温度)
*`[--]`长度:*`[2b]`值:`0x..`

4字节。



**示例3**。从3个已知长度的不同传感器发送3个传感器读数,过去同时采集:

*`[1b]`sol header
*`v`=`00`(版本0)
*`t`=`1`(mttlv对象类型)
*`m`=`0`(没有mac地址)
*` s`=`0`(epoch)
*`y`=`0`(1字节类型)
*`l`=`b00`(已知值,无长度字段)
*`[-]`mac:_-elided
*`[4b]`时间戳:`0x…….`
*`[1b]`对象数=3
*`[3b]`传感器读数1
*`[--]`mac:\
*`[--]`timestamp:_elided庘br/>*`[1b]`type=`b..`(temperature)
*`[--]`length:_elided庘br/>*`[2b]`value:`0x….`
*`[3b]`传感器读数2
*`[--`mac:_elided庘br/>*`[--`timestamp:_elided庘br/>*`[1b]`type=`b..`(rh)
*`[--]`长度:_elided`[br/>*`[2b]`值:`0x….`
*`[3b]`传感器读数3
*`[--]`mac:_elided`[br/>*`[--]`时间戳:_elided`[br/>*`[1b]`type=`b..`(太阳能)
*`[--`长度:_省略的"br/>*`[2b]`值:`0x….`


总计:15字节。



比一包好。因此,驱动设计选择允许:
*简单解析
*可恢复文件,以防部分文件损坏。


因此,当保存到二进制文件时,以下规则适用:
*不允许传感器对象链接(除非在Neomote SD卡级别)
*每个传感器对象都必须使用HDLC帧([rfc1662](https://tools.ietf.org/html/rfc1662))进行帧设置
*长度字段必须省略,开始头中的"l"位设置为"b11"



\json表示

*当对象存储在数据库中时
*当操作对象时

在这些示例中,我们使用了干净的缩进以便于阅读。一个有效的实现应该在一行上表示整个json字符串。

以下是传感器对象的json表示的一般格式:

```
{
"mac":"00-17-0d-00-00-12-34-56",
"timestamp":12345678890,
"type":39,
"value":{
"temperature":0x0a33,
},
}
````

*"mac"
*与上面的示例完全相同,小写十六进制字节(每字节正好2个字符),用"-"分隔。
*"timestamp"
*一个整数,表示epoch
*"type"
*一个整数,根据上面的注册表
*"value"
*一个值字典




{
"v":0,
"o":[
新的Icagim1hyi6Icag,
Icagiciwmc0xny0wzc0w,

1niisdqogicaidgltzw,
]
}
````

*`v`:表示的版本。此规范中仅定义了版本"0"。不应使用其他值。本文档的未来修订版可能会定义更多版本。
*`o`:表示的数组。每个表示都是一个字符串,表示一个或多个传感器对象的二进制表示。
*字符串必须是恰好一个传感器对象二进制表示的编码[base64](https://en.wikipedia.org/wiki/base64)。



关键字:无线、传感器、网络
平台:未知
描述内容类型:文本/标记

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
无法在Netbeans 8.2 JDK8u231中创建java Maven项目(Web应用程序)   java如何以设定的时间间隔生成随机数?   java从socket和inputStream的慢速读取   spring SCORM:Java中基于Web的SCORM播放器   Java将函数传递给方法   java绑定通用服务及其实现和子类型   java如何在运行时从选择列表框中动态选择选项?爪哇硒   java Selenium WebDriver什么是“Selenium客户端和WebDriver语言绑定”   elasticsearch需要elasticsearch高级Java客户端更新ByQueryRequest API帮助   JAVA哈希表查找最大值   WSDL操作中的java soapAction属性为空   java访问封闭类或父类方法的一般方法   eclipse在java中运行带有SeleneTestCase的ANT。lang.NoClassDefFoundError   java Hazelcast不会在节点启动时填充ReplicatedMap   如何在Java中从excel中读取特定行?   html JAVA将本地时间(GMT+8)转换为UTC时间   java将自定义端点添加到Spring数据REST存储库中,并以大摇大摆的方式显示   java计算未来位置