乐趣区

关于智能家居:智能家居开源平台智汀家庭云架构概述

智汀家庭云,立项于 2021 年,联合国内智能家居各厂商软件特点,研发“智汀家庭云”,并对该生态系统全面开源,为国内首个采纳智能家居零碎全生态开源协定(Apache License, Version 2.0)的软件。

1. 利用场景
智汀家庭云能够离线运行在局域网内,也能够通过绑定到智汀云来获取更弱小的性能。运行在局域网环境时,用户能够通过智汀 APP 发现与治理智汀家庭云,装置插件来对设施进行治理与管制。

用户也能够通过在智汀云下面注册帐号,将智汀家庭云设施关联到云端,而后通过云端直达的形式反对在外网对设施进行管制。

智汀云同时提供设施间接接入云端虚构家庭的性能,不便无智汀家庭云设施的用户应用;智汀云也提供虚构家庭数据迁徙到实体家庭的接口。

对于关联到云端的家庭,智汀云提供云对云接入性能,用户可受权小度,天猫精灵,Google Nest 等智能音箱间接对设施进行管制。

在开发过程中须要留神的是,任何状况下,用户的隐衷都是最重要的,因而需保障只有在用户受权的状况下,第三方才可拜访智汀家庭云;用户也可对第三方的受权进行管制。

2. 架构概述
智汀家庭云运行在 Linux 主机下,通过 Docker 来对其中的服务进行部署与资源隔离。其中局部外围服务容器须要事后配置,并且随系统启动主动运行;而插件(plugin)类服务则是由 SA 调用 docker API 的形式进行治理。
插件启动后会运行一个 gRPC 服务以及一个可选的 HTTP 服务,SA 通过 docker API 监听插件运行状态,通过 gRPC 接口获取插件信息

3. 功能模块
智汀家庭云模块拆分为 internal 与 pkg 两个分组,其中 internal 为与我的项目业务逻辑相关性比拟强功能模块分组;pkg 蕴含与业务关系不大的通用组件。其援用关系如下图所示:

其中比拟重要的业务模块如下:

4. 程序设计的规定参考
· 根底模块应用单例模式实例化,但应防止间接应用全局变量,可应用 entity.DB(), pkg.Log() 的模式做一层封装; 汉模式提早初始化应应用 sync.Once
· 根底模块只依赖其余根底模块,不应波及业务逻辑
· 简略的业务模块(譬如只依赖根底模块),可间接应用单例模式,或者通过容器模块(app,command,server 等)进行实例化
· 依赖其余业务模块,或者两个模块间可能会进行互相调用而导致循环援用的,应用管制反转(依赖注入)技术进行解决,由容器模块进行实例化(请参考 ioc exmaple)
· 利用内防止应用 eventbus 等 pubsub 模型进行模块解耦;如需应用 pubsub,请在 event 包中对事件类型、音讯进行预约义;禁止为了不便而间接应用 Bus.Pub(“my_event”, data) 的模式
· 尽量避免应用 init,应显式地在外层调用相干的 InitXXX() 函数

5. 目录构造
我的项目源码构造参考 Standard Go Project Layout; 代码组织模式参考 Clean Architecture

├── app.yaml 运行时配置文件
├── app.yaml.example 配置文件范例
├── build 打包相干的脚本
│   ├── docker
│   └── docs
├── cmd
│   └── smartassistant 入口命令
├── docs 文档
│   ├── guide
│   ├── images
│   └── tutorial
├── internal
│   ├── api 接口
│   │   ├── area
│   │   ├── brand
│   │   ├── cloud
│   │   ├── device
│   │   ├── location
│   │   ├── middleware
│   │   ├── page
│   │   ├── role
│   │   ├── scene
│   │   ├── scope
│   │   ├── session
│   │   ├── test
│   │   ├── user
│   │   └── utils
│   │   ├── cloud
│   │   └── response
│   ├── cloud
│   ├── config
│   ├── entity
│   ├── plugin
│   │   ├── docker
│   │   └── mocks
│   ├── task
│   ├── types
│   │   └── status
│   ├── utils
│   │   ├── hash
│   │   ├── jwt
│   │   ├── session
│   │   └── url
│   └── websocket
├── pkg 通用组件代码
│   ├── errors
│   ├── proxy
│   ├── rand
│   └── reverseproxy
├── static
├── Makefile make 配置
└── README.md 我的项目介绍文档

退出移动版