智汀家庭云-开发指南Golang: 插件模块
插件模块
- 当前所说的插件仅指
设备类插件
,插件为SA提供额外的设备发现和控制功能; - 插件通过实现定义的grpc接口,以grpc服务的形式运行,提供接口给SA调用
- 插件同时需要http服务提供h5页面及静态文件
1. SA中插件的工作流程
1.1 插件部署流程
- 插件开发者将开发好的插件服务编译成docker镜像提供给SA
- SA根据插件的镜像地址判断本地是否已经拉取或更新
- 用户安装插件后,SA根据镜像运行起容器,插件往注册中心注册服务
- SA通过服务发现发现新的插件服务
1.2 插件使用流程
- 用户在界面上发现设备时对所有插件服务调用Discover接口,插件根据实现的接口返回所发现的设备
- 用户添加设备并标记设备对应的插件
- 用户请求设备的H5地址,进去插件自定义页面
- 通过交互发起自定义指令给SA,SA将指令转发给对应的插件服务
2. 接口
文件http服务 sdk提供了方便的方法进行静态文件挂载和自定义api接口实现
grpc服务, 通过实现protobuf定义的grpc接口来实现插件服务:
注:grpc接口是通用的定义,SDK对接口实现了封装,开发者使用SDK时不需要关心,仅需要实现设备类型即可。
3. sdk
为了方便开发者快速开发插件以及统一接口,我们提供sdk规范了接口以及预定义了设备模型,以下为sdk实现功能:
- 插件服务注册
- http服务
- grpc服务以及接口封装(包括设备属性获取、属性设置、消息通知等)
- 预定义模型
4. 设备模型设计
云对云接入时,需要对第三方云的命令进行解析,并通过SA对插件发起命令。
这就要求插件实现的命令必须要有统一的规范和标准,这样第三方就可以通过这个标准来控制SA的所有支持的设备。
同时也能方便SA更好的通过统一的接口以及命令来管理设备。
4.1 模型设计
SDK预定义设备类型以及属性,开发者通过引入设备类型实现相关功能。
SDK通过反射获取设备的所有属性,将属性与命令做好对应关系,这样可以使得无论设备是什么形态,都能有统一的接口以及命令进行控制。
4.1.1 插件模型定义
字段解释
- instance 实例
- attribute 属性
- val_type 值类型
- val 值
val_type
对于int型,属性可设置最小和最大值
模型
- light_bulb 灯
attribute | description | val_type | required |
---|---|---|---|
power | 开关 | string | true |
- switch 开关
attribute | description | val_type | required |
---|---|---|---|
power | 开关 | string | true |
- outlet 插座
attribute | description | val_type | required |
---|---|---|---|
power | 开关 | string | true |
- info 设备详情
attribute | description | val_type | required |
---|---|---|---|
identity | id | string | true |
model | 型号 | string | true |
manufacturer | 厂商 | string | true |
version | 版本 | string | true |
name | 名字 | string | false |
4.2 模型示例
操作某个属性时,根据属性的tag对命令中的值进行解析和校验 模型例子如下:

5. 示例项目
智汀家庭云-开发指南Golang: 插件模块的更多相关文章
- 智汀家庭云-开发指南Golang:设备插件开发
设备插件模块 开发前先阅读插件设计概要:智汀家庭云-开发指南Golang: 插件模块 使用 plugin-sdk 可以忽略不重要的逻辑,快速实现插件 插件实现 获取sdk go get github. ...
- 智汀家庭云-开发指南Golang:设备场景
场景是指通过SA实现设备联动.例如,自动检测今天的天气情况,今天无雨,定时智能音箱播放浇花提醒,并且播报今天的天气情况. 根据自身需求,把多种控制并发的事情编辑成一个场景,并命名,可以通过场景控制很多 ...
- 智汀家庭云-开发指南Golang:设备模块
1.品牌 品牌指的是智能设备的品牌,SA通过插件的形式对该品牌下的设备进行发现控制.理论上来说一个品牌对应一个插件服务.您可以通过项目 根目录下的品牌查看SA支持的品牌.关于插件服务的详细信息可以参考 ...
- 微信小程序云开发指南
一.初识云开发 官方文档 小程序·云开发是微信团队联合腾讯云推出的专业的小程序开发服务. 开发者可以使用云开发快速开发小程序.小游戏.公众号网页等,并且原生打通微信开放能力. 开发者无需搭建服务器,可 ...
- 12-《Node.js开发指南》-核心模块
全局对象 Node.js中的全局对象是global 所有全局变量(除了global本身以外)都是global对象的属性 最根本的作用为全局变量的宿主 全局变量 //满足以下条件的是全局变量 a.在最外 ...
- 开发指南专题五:JEECG微云高速开发平台代码生成器
开发指南专题五:JEECG微云高速开发平台代码生成器 1.1. Maven开发环境搭建 在搭建jeecg的maven开发环境之前,须要先配置好本机的maven环境,并在eclipse中安装好m2ecl ...
- 开发指南专题二:JEECG微云高速开发平台JEECG框架初探
开发指南专题二:JEECG微云高速开发平台JEECG框架初探 2.JEECG框架初探 2.1演示系统 打开浏览器输入JEECG演示环境界址:http://demo.jeecg.org:8090/能够看 ...
- 智捷公开课马上开始了-欢迎大家一起讨论学习-第一系列读《Swift开发指南(修订版) 》看Swift视频教程
引用: 智捷课堂携手51CTO学院.图灵教育联合举办iOS线上培训就业班系列体验公开课. 分享移动开发.移动设计方向最新,最热,最抢眼技术热点以及设计经验.我们每周将最少举办一次公开课,同时会提前安排 ...
- 开发指南专题八:JEECG微云高速开发平台数据字典
开发指南专题八:JEECG微云高速开发平台数据字典的使用 1.标签中使用数据字典 数据字典为系统中可能用到的字典类型数据提供了使用的便利性和可维护性.下面拉框标签<t:dictSele ...
随机推荐
- 07.SpringMVC之静态资源
如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截"/",拦截了所有的请求,同时对 ...
- HDFS Shell基本操作
1.目录操作 hdfs dfs [命令] [命令] 等价于 hadoop fs [] [] 1 ./bin/hdfs dfs -mkdir -p /user ...
- Promise.resolve( data)与Promise.reject( data )
Promise.resolve( data)与Promise.reject( data ) 常用来生成已经决议失败或成功的promise实例: 1.Promise.reject(data)不管传递的是 ...
- 一个简单的 aiax请求例子
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...
- C# - 习题04_分析代码写出结果i1、i2、c.i、str、c.str
时间:2017-08-23 整理:byzqy 题目:分析如下代码,写出程序输出结果. 文件:Class1.cs using System; namespace Interview3 { class C ...
- vue 点击复制当前网址
template 部分 <div class="NewNoticeDetails-ctrlButton" @click="copy()"> ...
- canal数据同步
前面提到数据库缓存不一致的几种解决方案,但是在不同的场景下各有利弊,而今天我们使用的canal进行缓存与数据同步的方案是最好的,但是也有一个缺点,就是相对前面几种解决方案会引入阿里巴巴的canal组件 ...
- 不写注释的程序员-Models
Models 不写注释的程序员-Models # This is an auto-generated Django model module. # You'll have to do the foll ...
- zt:我使用过的Linux命令之ar - 创建静态库.a文件
我使用过的Linux命令之ar - 创建静态库.a文件 本文链接:http://codingstandards.iteye.com/blog/1142358 (转载请注明出处) 用途说明 创建静 ...
- Wpf读写Xaml文件
前言 本文主要介绍Wpf读写Xaml文件. 读写实现 首先我们使用XamlWriter将Wpf的对象转换为Xaml字符串,代码如下: var btn = sender as Button; strin ...