智能家居开源生态—正确的HTTP API 接口规范以及设备类插件实现
一、HTTP API 接口规范
- 接口鉴权
使用smartassistant接口,需将用户凭证smart-assistant-token,放在http请求的header中。格式如下:
"smart-assistant-token":"xxx"
2. 返回标准数据结构
smartassistant接口均返回JSON格式数据,格式如下:
{
"status":0, // 状态码
"reason":"", // 状态码描述
"data":{} // 所有业务数据返回都包含在data对象中
}
3. 错误码列表
二、设备类插件实现
开发前先阅读插件设计概要:插件系统设计技术概要
使用 plugin-sdk(code:/pkg/plugin/sdk) 可以忽略不重要的逻辑,快速实现插件
插件实现
1) 获取sdk
go get github.com/zhiting-tech/smartassistant
2) 定义设备
sdk中提供了预定义的设备模型,使用模型可以方便SA有效进行管理和控制
设备物模型设计如下:
light_bulb灯泡
switch开关
outlet插座
info设备详情
curtain窗帘
package pluginimport ("github.com/zhiting-tech/smartassistant/pkg/plugin/sdk/instance""github.com/zhiting-tech/smartassistant/pkg/plugin/sdk/attribute"
)type Device struct {Light instance.LightBulbInfo0 instance.Info// 根据实际设备功能组合定义
}func NewDevice() *Device {// 定义属性lightBulb := instance.LightBulb{Power: attribute.NewPower(),ColorTemp: instance.NewColorTemp(), // 可选字段需要初始化才能使用Brightness: nil, // 可选字段不初始化则不从接口中显示}// 定义设备基础属性info := instance.Info{Name: attribute.NewName(),Identity: attribute.NewIdentity(),Model: attribute.NewModel(),Manufacturer: attribute.NewManufacturer(),Version: attribute.NewVersion(),}return &Device{Light: lightBulb,Info0: info,}
}
3) 实现设备接口 定义好设备之后,需要为设备实现如下几个方法:
package mainimport ("github.com/zhiting-tech/smartassistant/pkg/plugin/sdk/server"
)type Device interface {Identity() string // 获取设备唯一值Info() server.DeviceInfo // 设备详情Setup() error // 初始化设备属性Update() error // 更新设备所有属性值Close() error // 回收所有资源GetChannel() server.WatchChan // 返回通知channel
}
实现如下:
package pluginimport ("github.com/zhiting-tech/smartassistant/pkg/plugin/sdk/instance""github.com/zhiting-tech/smartassistant/pkg/plugin/sdk/attribute""github.com/zhiting-tech/smartassistant/pkg/plugin/sdk/server"
)type Device struct {Light instance.LightBulbInfo0 instance.Info// 根据实际设备功能组合定义
}func NewDevice() *Device {// 定义属性lightBulb := instance.LightBulb{Power: attribute.NewPower(),ColorTemp: attribute.NewColorTemp(), // 可选字段需要初始化才能使Brightness: nil, // 可选字段不初始化则不从接口中显示}info := instance.Info{Name: attribute.NewName(),Identity: attribute.NewIdentity(),Model: attribute.NewModel(),Manufacturer: attribute.NewManufacturer(),Version: attribute.NewVersion(),}return &Device{Light: lightBulb,Info0: info,}
}func (d *Device) Info() server.DeviceInfo {// 该方法返回设备的主要信息panic("implement me")
}func (d *Device) Setup() error {// 设置设备的属性和相关配置(比如设备id、型号、厂商等,以及设备的属性更新触发函数)panic("implement me")
}func (d *Device) Update() error {// 该方法在获取设备所有属性值时调用,通过调用attribute.SetBool()等方法更新panic("implement me")
}func (d *Device) Close() error {// 自定义退出相关资源的回收panic("implement me")
}func (d *Device) GetChannel() server.WatchChan {// 返回WatchChan频道,用于状态变更推送panic("implement me")
}
4) 初始化和运行
定义好设备和实现方法后,运行插件服务(包括grpc和http服务)
package mainimport ("log""github.com/zhiting-tech/smartassistant/pkg/plugin/sdk/server"sdk "github.com/zhiting-tech/smartassistant/pkg/server/sdk"
)func main() {p := server.NewPluginServer() // 插件服务名go func() {// 发现设备,并将设备添加到manager中d := NewDevice()p.Manager.AddDevice(d)}()err := sdk.Run(p)if err != nil {log.Panicln(err)}
}
这样服务就会运行起来,并通过SA的etcd地址0.0.0.0:2379注册插件服务, SA会通过etcd发现插件服务并且建立通道开始通信并且转发请求和命令。
接着就可以开始了。
智能家居开源生态—正确的HTTP API 接口规范以及设备类插件实现相关推荐
- 带你了解热门智能家居开源项目:智汀家庭云与Home Assistant之插件初步配置
简介 我们在日常使用中,部分智能设备本身支持接入HomeKit,也就是说用户可以通过苹果手机的"家庭"将该设备进行接入.控制.但这种操作存在明显的局限性,安卓手机无法使用,而且无法 ...
- 商业级智能家居开源项目分享
前言 事情是这个样子的, 今天我和往常一样, 在下班之后瞅了几眼我建的几个开源技术交流QQ群, 试图寻找有价值的建设信息. 因为平时工作太忙, 基本上不会去看这些信息, 而且里面很少能获得一些有价值的 ...
- 智能家居开源平台——智汀家庭云(架构概述)
智汀家庭云,立项于2021年,结合国内智能家居各厂商软件特点,研发"智汀家庭云",并对该生态系统全面开源,为国内首个采用智能家居系统全生态开源协议(Apache License, ...
- 快速入门智能家居开源平台——智汀家庭云(一)
引言 智汀家庭云(SmartAssistant),立项于2021年,结合国内智能家居各厂商软件特点,研发"智汀家庭云",并对该生态系统全面开源,为国内首个采用智能家居系统全生态开源 ...
- 基于 ESP8266 的智能家居开源解决方案 【文章结尾有资料】
物联网连接 IoT Connect 是一个建立在 esp8266 之上的开源物联网平台,它允许用户以最有效的方式远程连接和控制他们的家用电器. 该项目主要分为3个主要部分,即硬件.固件和Web UI ...
- 智能家居开源平台——Home Assistant,Domoticz和智汀家庭云
目前,智能家居的产品非常火热,那常见的开源智能家居平台有哪些呢?据小编了解到有几个,择其中三个进行粗略描述--Home Assistant,Domoticz和智汀家庭云. 首先Home Assista ...
- 盘点一下智能家居开源系统及项目——Home Assistant,openHAB
想要实现智能家居生活,自己搞也可以哦,只要你有技术.下面给大家盘点一下智能家居的开源系统及项目整理: 开源智能家居工具 Domoticz是一个轻量级的智能家居系统 ,通过它你可以监测和控制各种设备,包 ...
- 百度投资创维10亿,联手构建智能家居AI生态
作者 | 明明 3月16日,百度与创维共同宣布达成全面战略合作.创维集团子公司深圳酷开网络科技有限公司获得百度公司战略投资10.10亿元,百度持股比例为11%,成为酷开第二大股东.酷开的估值达到95. ...
- 关于智能家居开源平台(如Home Assistant)——智汀家庭云,你需要知道的是
大家好,之前跟大家聊了那么多关于智能家居的话题,本期小编将以我们的视角来跟大家聊一聊.我们是一个创业团队,都是刚刚毕业不久的大学生,我们一开始是做软件为主的,我们自己也有购买了多种设备自己使用,比如小 ...
最新文章
- centos7如何安装samba-client_如何在基本图形模式下最小化全新安装CentOS 7?
- 【剑指offer】面试题31:连续子数组的最大和
- JVM源码分析之javaagent原理完全解读
- 计算机与生命科学专业排名,2019软科世界一流学科排名发布,54个专业TOP10牛校榜单全给你...
- 考勤信息管理系统 需求说明
- 软件工程结对作业01
- thymleaf th:if标签
- 机器学习8-集成学习
- 【sklearn第二十七讲】模型持久性
- Spark取出(Key,Value)型数据中Value值为前n条数据
- 银河麒麟系统查看网络设置命令_银河麒麟配置说明
- 用例图分析---学生成绩管理系统
- Switch离线升级教程【自用】
- PWM波的原理和应用
- 地球轨道计算方法,开普勒三大定律的证明,补充-解析几何之椭圆
- 毕业论文格式|自制word模板 |.domt | word格式模版
- 【nmon】nmon :服务器监控数据采集
- 如何免费下载百度指数数据
- 【冬瓜哥论文】浅析固态介质在存储系统中的应用方式
- 正则表达式给查找到的内容加引号