44 Star 286 Fork 243

OpenHarmony-SIG / knowledge_demo_smart_home

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 8.41 KB
一键复制 编辑 原始数据 按行查看 历史
北洋 提交于 2022-09-19 04:08 . update Server/README.md.

DistScheduleServer

数字管家服务端说明

数字管家整体架构视图

component 模块说明:

  • FA: 数字管家HarmonyOS应用
  • IOT Device: 基于OpenHarmony开发板的智能设备,如台灯,窗帘
  • DistScheduleServer: 数字管家服务端,对FA提供Restful接口,并调用Huawei IOT Cloud管理IOT设备
  • Huawei IOT Cloud: 华为IOT云,用于以mqtt协议,与设备通信。如下发命令,上报状态
  • RabbitMQ:消息队列,用于获取告警信息,通知给手机FA
  • MySql:数据库。保存日程,设备,用户,家庭等信息

如何独立搭建数字管家服务

步骤1.准备部署环境

1.Ubuntu 18.04.4 or 20

2.mysql5.7 (sudo apt install mysql-server) ,请注意不要使用mysql8+,允许外部访问mysql,修改root默认密码或配置新用户(用于服务端mysql配置)

3.openjdk/jdk 1.8 (sudo apt-get install openjdk-8-jdk)

4.RabbitMQ 3.6.10

5.IOT云服务(华为云)

步骤2. 下载代码

git clone git@gitee.com:openharmony-sig/knowledge_demo_smart_home.git

步骤3. 华为IOT云配置

1.使用华为云IOT服务:地址,建议先极速体验

2.新增IOT设备,创建产品(Profile),定义属性,命令,参考profile

3.申请云服务AK,SK以及appId,这些信息是用于连接华为云权限认证的,把他们配置到文件application-local.properties中.参考获取AK/SK

cloud.iot.ak=*****
cloud.iot.sk=*****
cloud.iot.appId=*****

3.创建转发规则,转发设备信息到AMQP(需要转发设备属性,设备命令,设备消息,这样数字管家服务才能从IOT云中监听到这些信息的变化) 配置队列名,队列地址,accessKey,password到配置文件application-xxx.properties中.参考数据转发介绍

注意: 转发规则的数据来源分别选择“设备属性,设备命令,设备消息”,转发目标要选择AMQP推送消息队列,并分别建立不同的消息队列接收消息,分别接受设备属性,设备命令,设备消息的消息。

image-20211230094153015

iot_data_transfer

cloud.iot.amqp.accessKey= #接入凭证,添加转发目标时,点击接入凭证获取
cloud.iot.amqp.password=  #接入凭证密码,添加转发目标时,点击接入凭证获取
cloud.iot.amqp.queueStatusName=  #设备状态队列名称(不是规则名称)
cloud.iot.amqp.queuePropertyName= #设备属性队列名称(不是规则名称)
cloud.iot.amqp.queueMsgName= #设备消息队列名称(不是规则名称)
cloud.iot.amqp.connectionUrl= #AMQP连接地址,点击“总览--》平台接入地址”获取

步骤4. 增加sql文件,在数据库中录入新增设备类型

将上述新增的设备名称,服务ID,产品ID(IOT云界面中,点击“产品”菜单可查看),插入到数据库device_type表中。建议是在distschedule-dao\src\main\resources\db\migration目录中新增SQL,如V2_insertProductType.sql

INSERT INTO device_type (`name`, `name_en`, `service_id`, `product_id`, `category`)
values ('智能风扇', 'fan', 'SmartFan', '6150601d88056b027dd2ca47', 1);

注意: 服务使用flyway管理数据库,启动时将会按照distschedule-dao\src\main\resources\db\migration里V1,V2 sql的顺序初始化数据库

步骤5. 修改配置文件

修改配置文件distschedule-core\src\main\resources\application-local.properties

# mysql数据库配置,需要提前部署和创建distschedule的数据库
# 数据库地址
spring.datasource.url=datasource_url:jdbc:mysql://*****:3306/distschedule?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai 
# 数据库账号
spring.datasource.username=*****
# 数据库密码
spring.datasource.password=****

# 华为IOT云配置,参考上面的介绍,申请IOT云的AK,SK,APPID
cloud.iot.ak=*****
cloud.iot.sk=*****
cloud.iot.appId=*****

# IOT云配置,参考上面的介绍,配置并获取华为IOT云的数据转发队列
cloud.iot.amqp.accessKey= #接入凭证,添加转发目标时,点击接入凭证获取
cloud.iot.amqp.password=  #接入凭证密码,添加转发目标时,点击接入凭证获取
cloud.iot.amqp.queueStatusName=  #设备状态队列名称(不是规则名称)
cloud.iot.amqp.queuePropertyName= #设备属性队列名称(不是规则名称)
cloud.iot.amqp.queueMsgName= #设备消息队列名称(不是规则名称)
cloud.iot.amqp.connectionUrl=amqps://*****.iot-amqps.cn-north-4.myhuaweicloud.com:5671?amqp.vhost=default&amqp.idleTimeout=8000&amqp.saslMechanisms=PLAIN #AMQP连接地址,点击“总览--》平台接入地址”获取



# rabbitmq消息队列,用于手机监听告警信息
spring.rabbitmq.host=*****    # rabbitmq地址
spring.rabbitmq.port=*****    # rabbitmq端口
spring.rabbitmq.username=*****  # rabbitmq用户名
spring.rabbitmq.password=*****   # rabbitmq密码
spring.rabbitmq.exchange.deviceproperty=deviceproperty_exchange # 消息exchange,可不改。如修改的话,FA侧也需要修改

步骤6.编译

编译环境:

  1. jdk8
  2. maven 3.6.3

进入目录,编译springboot jar包

cd knowledge_demo_smart_home/Server
mvn clean package -Dmaven.test.skip=true  

可执行的jar包在knowledge_demo_smart_home/Server/distschedule-core/target/distschedule-core-1.0.0-SNAPSHOT.jar`

步骤7. 服务启动

指定profile运行,建议使用local,才会加载前面的application-local.properties的配置文件。如果profile为xxx,则会加载application-xxx.properties的配置文件

也可通过环境变量指定所激活local profile

export SPRING_PROFILES_ACTIVE=local # 激活local
java -jar /opt/distschedule-core-1.0.0-SNAPSHOT.jar --spring.profiles.active=local

默认端口8080,启动后如后台无异常,可用浏览器访问http://127.0.0.1:8080/distschedule-api/swagger-ui/index.html ,验证服务是否已正常启动。 IP和端口需要替换成自己的。

步骤8:配置服务开机自启动

ubuntu18.04服务自启动,参考文档点击

其中:/etc/rc.local文件

#!/bin/bash
 
nohup java -jar /opt/distschedule-core-1.0.0-SNAPSHOT.jar --spring.profiles.active=local> /clouddragonData/log/distschedule/server.log 2>&1 &

步骤9:手机FA侧,配置使用自己的数字管家服务和rabbitmq服务

参考FA侧说明

工程结构

- distschedule--core       # 入口模块,包含main和controller
- distschedule-service     # 服务模块
- distschedule-dao         # 数据库模块

接口描述

服务集成Swagger3.0,部署以后使用swagger.html查看接口,即http://127.0.0.1:8080/distschedule-api/swagger-ui/index.html 包括如下接口:

  • 家庭接口
  • 日程接口
  • 用户接口
  • 设备接口
  • 设备类型接口 interface

数据库设计

datbase

使用flyway自动创建数据库,数据库表放在: distschedule-dao\src\main\resources\db\migration 目录下

使用Docker容器部署

详见Dockerfile,docker-compose.yml

  1. 参考前面描述,修改配置文件application-local.properties。
  2. 插入新的设备类型,V2_insertProductType.sql
  3. 编译,构建容器镜像,使用docker-compose启动,即可同时启动mysql,rabbitmq以及数字管家服务, 命令如下
mvn clean package
docker build -t distschedule .
docker-compose up

开发者分享

请点击这里

1
https://gitee.com/openharmony-sig/knowledge_demo_smart_home.git
git@gitee.com:openharmony-sig/knowledge_demo_smart_home.git
openharmony-sig
knowledge_demo_smart_home
knowledge_demo_smart_home
master

搜索帮助