> 文档中心 > (二) 搭建数字管家服务器

(二) 搭建数字管家服务器


(二) 搭建数字管家服务器

1. mysql卸载

# 删除mysql的数据文件sudo rm /var/lib/mysql/ -R# 删除mysql的配置文件sudo rm /etc/mysql/ -R# 自动卸载mysql(包括server和client)sudo apt-get autoremove mysql* --purgesudo apt-get remove apparmor# 然后在终端中查看MySQL的依赖项dpkg --list|grep mysql

2. mysql5.7安装

# mysql5.7.33安装包下载wget https://downloads.mysql.com/archives/get/p/23/file/mysql-server_5.7.33-1ubuntu18.04_amd64.deb-bundle.tar# 新建目录mkdir mysql5.7.33mv mysql-server_5.7.33-1ubuntu18.04_amd64.deb-bundle.tar mysql5.7.33/cd mysql5.7.33# 解压缩tar -xvf mysql-server_5.7.33-1ubuntu18.04_amd64.deb-bundle.tar# 删除2个测试相关的包sudo rm -f mysql-testsuite_5.7.33-1ubuntu18.04_amd64.debsudo rm -f mysql-community-test_5.7.33-1ubuntu18.04_amd64.deb# 安装包libtinfo5sudo apt-get install libtinfo5sudo apt-get install libmecab2# 利用dpkg进行安装sudo dpkg -i mysql-*.deb# 查看mysql版本mysql -V# 登录sudo mysql# 修改用户密码,创建用户ALTER USER 'root'@'localhost' IDENTIFIED BY 'AndrewYy-chan1';CREATE USER 'dimp'@'%' IDENTIFIED BY 'AndrewYy-chan1';# 设置授权账户grant all on *.* to root@'%' identified by 'AndrewYy-chan1' with grant option;flush privileges;exit# 修改配置文件sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf# 在配置文件中添加以下代码character_set_server=utf8#注释bind-address=127.0.0.1#bind-address=127.0.0.1# 重启mysql服务service mysql restart# 登录mysqlmysql -u root -p

3. openjdk/jdk 1.8安装

sudo apt-get install openjdk-8-jdk

4. RabbitMQ 3.6.10安装

# 安装Erlangsudo apt-get updatesudo apt-get install erlang erlang-nox# 安装RabbitMq# 添加rabbitmq的仓库列表配置文件echo 'deb http://www.rabbitmq.com/debian/ testing main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list# 加入rabbitmq signing keywget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -# 安装RabbitMqsudo apt-get updatesudo apt-get install rabbitmq-server# 启用web管理插件sudo rabbitmq-plugins enable rabbitmq_management# 重启rabbitmq服务sudo systemctl restart rabbitmq-server# 新增一个用户sudo rabbitmqctl add_user root root# 为root用户设置权限所有权限sudo rabbitmqctl set_permissions -p / root ".*" ".*" ".*"# 设置root用户为管理员角色sudo rabbitmqctl set_user_tags root administrator# 访问网址http://localhost:15672(http://andrewyychan.cn:15672)

5. Maven安装

# 安装mavensudo apt install maven# 检测setting.xml所在位置mvn -X# Maven home: /usr/share/maven# 打开setting.xml文件进行编辑sudo nano /usr/share/maven/conf/settings.xml# 更换本地仓库<localRepository>/home/yy/maven/repository</localRepository># 添加远程仓库<mirror>    <id>nexus-aliyun</id>    <mirrorOf>*</mirrorOf>    <name>Nexus aliyun</name>  <url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>

6. 下载数字管家源码

git clone git@gitee.com:openharmony-sig/knowledge_demo_smart_home.gitgit clone https://gitee.com/openharmony-sig/knowledge_demo_smart_home.git --depth=1

7. 华为云IoT

1. 申请华为云AK/SK

  1. 华为云网址:https://www.huaweicloud.com/
  2. 点击控制台——>我的凭证——>访问密钥——>新增访问密钥,得到ak和sk
  3. 点击设备接入——>资源空间,获取APPID
  4. 点击产品,创建产品

2. 产品创建

  1. 填写产品信息

    在这里插入图片描述

  2. 点击规则——>数据转发——>创建规则

    规则名称 资源空间 数据来源 触发事件 转发目标
    设备消息上报 所有资源空间 设备消息 设备消息上报 AMQP推送消息队列
    设备状态上报 所有资源空间 设备状态 设备状态变更 AMQP推送消息队列
    设备属性接收 所有资源空间 设备属性 设备属性上报 AMQP推送消息队列
  3. 配置AMQP:点击IoTDA实例——>基础版详情——>AMQPS预置接入凭证,获得accesse_key和access_code.

8. 修改源码文件

  1. 在knowledge_demo_smart_home\Server\distschedule-dao\src\main\resources\db\migration目录中新增SQL,如V2_insertProductType.sql

    # 将新增的设备名称,服务ID,产品ID(IOT云界面中,点击“产品”菜单可查看),插入到数据库device_type表中INSERT INTO device_type (`name`, `name_en`, `service_id`, `product_id`, `category`)values ('智能风扇', 'Fan', 'SmartFan', '62511e8f2d0897328703a093', 1);
  2. 修改配置文件knowledge_demo_smart_home\Server\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,APPIDcloud.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侧也需要修改
    # mysql数据库配置,需要提前部署和创建distschedule的数据库# 数据库地址spring.datasource.url=jdbc:mysql://andrewyychan.cn:3306/distschedule?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai # 数据库账号spring.datasource.username=root# 数据库密码spring.datasource.password=AndrewYy-chan1# 华为IOT云配置,参考上面的介绍,申请IOT云的AK,SK,APPIDcloud.iot.ak=CBKGWM9HDK7JSIF4OFTGcloud.iot.sk=7g0iehyUtRYmBcgiF9uZjVXs2NdCNKGe4bOYadlGcloud.iot.appId=249c89b43a9f46ca8ec4b9cf52e736cf# IOT云配置,参考上面的介绍,配置并获取华为IOT云的数据转发队列cloud.iot.amqp.accessKey=01giD1n9 #接入凭证,添加转发目标时,点击接入凭证获取cloud.iot.amqp.password=OeW8DuZMZrKy4UnkbWj6jZxL1D5doQU9  #接入凭证密码,添加转发目标时,点击接入凭证获取cloud.iot.amqp.queueStatusName=DefaultQueue  #设备状态队列名称(不是规则名称)cloud.iot.amqp.queuePropertyName=DefaultQueue #设备属性队列名称(不是规则名称)cloud.iot.amqp.queueMsgName=DefaultQueue #设备消息队列名称(不是规则名称)cloud.iot.amqp.connectionUrl=amqps://a161bde384.iot-amqps.cn-north-4.myhuaweicloud.com.iot-amqps.cn-north-4.myhuaweicloud.com:5671?amqp.vhost=default&amqp.idleTimeout=8000&amqp.saslMechanisms=PLAIN #AMQP连接地址,点击“总览--》平台接入地址”获取# rabbitmq消息队列,用于手机监听告警信息spring.rabbitmq.host=andrewyychan.cn    # rabbitmq地址spring.rabbitmq.port=15672    # rabbitmq端口spring.rabbitmq.username=root  # rabbitmq用户名spring.rabbitmq.password=root   # rabbitmq密码spring.rabbitmq.exchange.deviceproperty=deviceproperty_exchange # 消息exchange,可不改。如修改的话,FA侧也需要修改

9. 编译运行

# 编译cd knowledge_demo_smart_home/Servermvn clean package -Dmaven.test.skip=true  # 运行sudo java -jar /home/ubuntu/project/knowledge/knowledge_demo_smart_home/Server/distschedule-core/target/distschedule-core-1.0.0-SNAPSHOT.jar --spring.profiles.active=local# jar包位置:knowledge_demo_smart_home/Server/distschedule-core/target/distschedule-core-1.0.0-SNAPSHOT.jar# 访问链接http://127.0.0.1:8080/distschedule-api/swagger-ui/index.html(http://andrewyychan.cn:8080/distschedule-api/swagger-ui/index.html)

10. 服务自启动

# 建立rc-local.service文件sudo nano /etc/systemd/system/rc-local.service# 将下列内容复制进rc-local.service文件[Unit]Description=/etc/rc.local CompatibilityConditionPathExists=/etc/rc.local [Service]Type=forkingExecStart=/etc/rc.local startTimeoutSec=0StandardOutput=ttyRemainAfterExit=yesSysVStartPriority=99 [Install]WantedBy=multi-user.target# 创建文件rc.localsudo nano /etc/rc.local# 将下列内容复制进rc.local文件#!/bin/bashsudo nohup java -jar /home/ubuntu/project/knowledge/knowledge_demo_smart_home/Server/distschedule-core/target/distschedule-core-1.0.0-SNAPSHOT.jar --spring.profiles.active=local> /home/ubuntu/project/distschedule/server.log 2>&1 &# 给rc.local加上权限sudo chmod +x /etc/rc.local# 启用服务sudo systemctl enable rc-local# 启动服务并检查状态sudo systemctl start rc-local.servicesudo systemctl status rc-local.service# 重启并检查test.log文件cat /home/ubuntu/project/distschedule/server.log

11. 数据库设计

在这里插入图片描述

12、数据管家FA接入新服务端

1. 修改 OKHttpUtilsRx2

将SERVER_URL变量修改为自己的服务端api地址

// src/main/java/com/example/distschedule/rx2/OKHttpUtilsRx2.java// 后端服务器地址    private static final String SERVER_URL = "http://andrewyychan.cn:8080/distschedule-api/";

2. 修改 DeviceStateListener

将RABBITMQ数据修改为自己的

// src/main/java/com/example/distschedule/listener/DeviceStateListener.javaprivate static final String DEVICEPROPERTY_EXCHANGE = "deviceproperty_exchange";//监听队列名称    private static final String RABBITMQ_HOST = "andrewyychan.cn";    private static final int RABBITMQ_PORT = 15672;    private static final String RABBITMQ_USER = "root";    private static final String RABBITMQ_CODE = "root";    private static DeviceStateListener instance;

3. 修改 DeviceData

将data put的key值修改为自己的productID

// src/main/java/com/example/distschedule/database/DeviceData.java// 电风扇 data.put("62511e8f2d0897328703a093", new DeviceDataBean(DeviceControlAbility.ACTION_FAN,  ResourceTable.Media_icon_fraction_fan_online, ResourceTable.Media_icon_fraction_fan_offline,  command -> CommandUtil.parseFanCommand(command)));

组词