用于crowsnest api和插件系统的高级语言
crowsnest-capabilities的Python项目详细描述
#crowsnest功能
*我遇到了99个问题,而命名就是全部问题。*
这个存储库是crowsnest api和
插件系统的高级语言的定义所在。这提供了对所有操作和事件的定义,所有这些操作和事件都是在yaml中完成的(可以在下面解释的`/crowsnest_capabilities/definitions/`;架构中找到)。
这里提供的定义不是设备本身,而是设备的构建块。
设备是一个集合。在这里定义的操作和事件中。
每个条目都包含用于在数据流经
系统时对其进行清理和验证的清理帮助器函数。
作为示例,让我们检查打开设备的通用操作,
`action.generic.power.set`:
``python
>;从Crowsnest_能力导入能力
>;>;power-set=capabilities['action.generic.power.set']
````
此操作的架构为
``yaml
action.generic.power.set:
输入:
值:
-开
-关
输出:{}
异步生成的事件:event.generic.power.changed
```
因此,我们知道输入的有效值是"on"和"off"("python"中的"true"和"false")。
输入用"clean_input()"进行验证和清理:
``python
>;电源设置。清除输入({'value':true})
{'value':true}
>;
>;删除无关项
>;>电源设置。清除输入({'value':false,'foo':'bar})
{'value':false}
>;
>;错误值引发验证错误
>;power_set.clean_input({'value':10})
validationerror:`value`必须是[true,false]
````
`.clean_output()`中的一个,`action`和`event`工作方式相同。
capabilities.group('event.generic.power')
[<;event:event.generic.power.changed>;,<;event:event.generic.power.restarted>;]
>;>;允许任意点数
>;>;capabilities.group('event.generic')\6个events
>;>;capabilities.group('event')。#所有事件
>;>;capabilities.group();所有条目
>;>;>;伪前缀返回空列表
>;>;capabilities.group('asdf')
[]
````
键入>;<;类>;<;属性>;<;交互>;`)对于实现它的每个设备,在语义上应该是相同的。
-示例:
-`action.camera.still.capture`-从相机中捕获静止图像
-`action.microwave.power\u level.set`-设置磁控管的功率级别
-` action.generic.power.set`-打开和关闭设备的主电源`-当磁传感器的值改变时触发(当触发时,设备插件可以使用阈值进行配置)
-`event.generic.boolean.changed`-当两级开关改变状态时触发
-应执行操作和事件(或最终调用的任何操作和事件)明显不同的
-但是,它们应该是相关的,并且能够彼此交互(例如,请求设备的某个操作,导致异步处理成为"事件")
-它们应该很容易在语义上相互关联
-动作和事件应该是规范的它足够简单,不会使它们的使用复杂化,但也足够简单,可以重用。"当我们看到它的时候,我们就会知道它了。"
-输入和输出应该定义得很好,而不是过于复杂的对象。
改编自`/crowsnest_capabilities/definitions/generic.yml`.
``yaml
action.generic.power.get:;定义是type.class.attribute.action
输入:{}此操作没有输入
输出:
值:{output dict有一个名为"value"的条目
有效值:
-on;"value"的有效值为"on"和"off"
-off
异步生成的事件:event.generic.power.changed
这将生成名为event.generic.power.changed的事件#无输出异步生成的事件:event.generic.power.changed
event.generic.power.changed:
输出:与链接到此值的"action.generic.power.get"具有相同的输出-on"value"字段使用有效的"u"值,简写为
-off
```
级别项必须是格式"<;type>;<;class>;<;attribute>;<;interaction>;"的唯一4点分隔名称,例如"action.generic.power.set`
-`action`项必须是具有以下键的字典:
-`inputs`:发送到描述要执行的操作的设备
-`outputs`:数据通过架构(见下文)作为响应发送
-`async_generated_event`:如果异步处理,此操作将转换为事件的完全限定名,例如"event.generic.power.changed`
-`event`实体必须是具有以下键的字典:
-`outputs`:data pass through schema(见下文)由描述发生了什么的设备发送
-"data pass through schema"(用于通过crowsnest)是一个
键字典,其中每个键都是数据项的名称。例如,如果要发送
`{value:10}`,则"value"是定义为整数字段的项的名称。
-每个数据项都是一个字典,可以定义以下任何一种:
-`type`:数据字段类型之一:`//str`,`//num`,`//int`,`//bool`,或`//bytes`
-`valid\u values`:允许值的列表
-`required`:布尔值,指定字段是否需要有效;默认值为'yes`
-`default`:默认值(如果未提供);表示'required:no`
-虽然不严格必修的,强烈建议您提供"type"或"valid\u values"
,除非您能够充分说明为什么需要完整的泛型。
-对于简单的情况,有几个快捷方式:
-您可以直接提供"type"值作为数据的值条目。
这意味着
条目:
type://str
和
entry://str
是等价的。
-您可以直接提供一个"有效值"列表作为数据条目的值。
这意味着
条目:
有效的_值:
-红色
-绿色
-蓝色
和
条目:
-红色
-绿色
-蓝色
等同。
-`有效的'u值'必须与类型完全匹配,而'type'条目通常会尝试将
强制为正确的类型。例如,
-`//bool`将把`"foo"`和`1`强制为` true`;``,`0`和`null`强制为` false`
-`yes`和`no`的有效值将要求布尔值(无协同)
分叉并创建一个请求。请务必遵守
指南,因为我们要求严格遵守"拉"请求。所有新提交的
将在接受之前接受审查;这些定义旨在为所有CrowsNet设备提供一致的体验。
欢迎提出意见、评论和建议!
*我遇到了99个问题,而命名就是全部问题。*
这个存储库是crowsnest api和
插件系统的高级语言的定义所在。这提供了对所有操作和事件的定义,所有这些操作和事件都是在yaml中完成的(可以在下面解释的`/crowsnest_capabilities/definitions/`;架构中找到)。
这里提供的定义不是设备本身,而是设备的构建块。
设备是一个集合。在这里定义的操作和事件中。
每个条目都包含用于在数据流经
系统时对其进行清理和验证的清理帮助器函数。
作为示例,让我们检查打开设备的通用操作,
`action.generic.power.set`:
``python
>;从Crowsnest_能力导入能力
>;>;power-set=capabilities['action.generic.power.set']
````
此操作的架构为
``yaml
action.generic.power.set:
输入:
值:
-开
-关
输出:{}
异步生成的事件:event.generic.power.changed
```
因此,我们知道输入的有效值是"on"和"off"("python"中的"true"和"false")。
输入用"clean_input()"进行验证和清理:
``python
>;电源设置。清除输入({'value':true})
{'value':true}
>;
>;删除无关项
>;>电源设置。清除输入({'value':false,'foo':'bar})
{'value':false}
>;
>;错误值引发验证错误
>;power_set.clean_input({'value':10})
validationerror:`value`必须是[true,false]
````
`.clean_output()`中的一个,`action`和`event`工作方式相同。
capabilities.group('event.generic.power')
[<;event:event.generic.power.changed>;,<;event:event.generic.power.restarted>;]
>;>;允许任意点数
>;>;capabilities.group('event.generic')\6个events
>;>;capabilities.group('event')。#所有事件
>;>;capabilities.group();所有条目
>;>;>;伪前缀返回空列表
>;>;capabilities.group('asdf')
[]
````
键入>;<;类>;<;属性>;<;交互>;`)对于实现它的每个设备,在语义上应该是相同的。
-示例:
-`action.camera.still.capture`-从相机中捕获静止图像
-`action.microwave.power\u level.set`-设置磁控管的功率级别
-` action.generic.power.set`-打开和关闭设备的主电源`-当磁传感器的值改变时触发(当触发时,设备插件可以使用阈值进行配置)
-`event.generic.boolean.changed`-当两级开关改变状态时触发
-应执行操作和事件(或最终调用的任何操作和事件)明显不同的
-但是,它们应该是相关的,并且能够彼此交互(例如,请求设备的某个操作,导致异步处理成为"事件")
-它们应该很容易在语义上相互关联
-动作和事件应该是规范的它足够简单,不会使它们的使用复杂化,但也足够简单,可以重用。"当我们看到它的时候,我们就会知道它了。"
-输入和输出应该定义得很好,而不是过于复杂的对象。
改编自`/crowsnest_capabilities/definitions/generic.yml`.
``yaml
action.generic.power.get:;定义是type.class.attribute.action
输入:{}此操作没有输入
输出:
值:{output dict有一个名为"value"的条目
有效值:
-on;"value"的有效值为"on"和"off"
-off
异步生成的事件:event.generic.power.changed
这将生成名为event.generic.power.changed的事件#无输出异步生成的事件:event.generic.power.changed
event.generic.power.changed:
输出:与链接到此值的"action.generic.power.get"具有相同的输出-on"value"字段使用有效的"u"值,简写为
-off
```
级别项必须是格式"<;type>;<;class>;<;attribute>;<;interaction>;"的唯一4点分隔名称,例如"action.generic.power.set`
-`action`项必须是具有以下键的字典:
-`inputs`:发送到描述要执行的操作的设备
-`outputs`:数据通过架构(见下文)作为响应发送
-`async_generated_event`:如果异步处理,此操作将转换为事件的完全限定名,例如"event.generic.power.changed`
-`event`实体必须是具有以下键的字典:
-`outputs`:data pass through schema(见下文)由描述发生了什么的设备发送
-"data pass through schema"(用于通过crowsnest)是一个
键字典,其中每个键都是数据项的名称。例如,如果要发送
`{value:10}`,则"value"是定义为整数字段的项的名称。
-每个数据项都是一个字典,可以定义以下任何一种:
-`type`:数据字段类型之一:`//str`,`//num`,`//int`,`//bool`,或`//bytes`
-`valid\u values`:允许值的列表
-`required`:布尔值,指定字段是否需要有效;默认值为'yes`
-`default`:默认值(如果未提供);表示'required:no`
-虽然不严格必修的,强烈建议您提供"type"或"valid\u values"
,除非您能够充分说明为什么需要完整的泛型。
-对于简单的情况,有几个快捷方式:
-您可以直接提供"type"值作为数据的值条目。
这意味着
条目:
type://str
和
entry://str
是等价的。
-您可以直接提供一个"有效值"列表作为数据条目的值。
这意味着
条目:
有效的_值:
-红色
-绿色
-蓝色
和
条目:
-红色
-绿色
-蓝色
等同。
-`有效的'u值'必须与类型完全匹配,而'type'条目通常会尝试将
强制为正确的类型。例如,
-`//bool`将把`"foo"`和`1`强制为` true`;``,`0`和`null`强制为` false`
-`yes`和`no`的有效值将要求布尔值(无协同)
分叉并创建一个请求。请务必遵守
指南,因为我们要求严格遵守"拉"请求。所有新提交的
将在接受之前接受审查;这些定义旨在为所有CrowsNet设备提供一致的体验。
欢迎提出意见、评论和建议!