# 智能保险柜 ## 一、 简介 智能保险柜实时监测保险柜中振动传感器,当有振动产生时及时向用户发出警报。在连接网络后,配合数字管家应用,用户可以远程接收智能保险柜的报警信息。后续可扩展摄像头等设备,实现对危险及时报警,及时处理,守护家中财产安全。 #### 1.交互流程 ![](./resource/1.png) 如上图所示,智能保险柜整体方案框架可以分为:智能保险柜设备、数字管家应用、云平台三部分。智能保险柜设备端按照MQTT协议与华为IOT物联网平台进行通信。当智能保险柜检测到振动时,设备端上报数据至云平台最终同步到数字管家进行报警,并将报警信息也上报至云平台最终同步到数字管家;当用户发现为误报时关闭报警,命令数据先发送至云平台,再由云平台下发至设备侧。关于智能设备接入华为云IoT平台的详细细节可以参考 [连接IOT云平台指南](../iot_huawei/README.md) 。智能设备同数字管家应用之间的设备模型定义可以参考[profile](../../../profile/智能保险柜profile定义.md) 。 #### 2.实物简介 我们使用润和Pegasus智能家居开发底板+SW-18010P振动模块来模拟感智能保险柜设备。 通过检测GPIO输入获取振动感应; ##### SW-18010P振动模块 ![](./resource/2.png) ##### 润和Pegasus智能家居开发板底板 ![](./resource/3.png) ##### 连接图 将SW-18010P的GND连接开发板的GND,VCC连接开发板的V3.3,DO连接开发板的A9。 ![](./resource/4.png) #### 3.实物操作体验 ![](./resource/6.gif) ###### OLED屏负责显示当前网络状况,有三种状况: 1. WIFI_CONNECT_ING(等待配网,未连入WIFI); 2. WIFI_CONNECT_OK(已经连入WIFI,等待自动连入华为云端); 3. IOT_CONNECT_OK(已经连入华为云端)。 ###### 重新配网操作: 按键2组合reset按键执行配网操作,具体操作如下: 1. 按下按键2,保持按键2被按下,执行以下第2步; 2. 按下reset按键,保持1秒; 3. 先松开reset按键后等待设备重启,待OLEN显示WIFI_CONNECT_ING后再松开按键2; 4. 等待手机数字管家保险柜设备为离线状态; 5. 通过NFC模块实现设备碰一碰快速配网。 ## 二、快速上手 #### 1、硬件准备 SW-18010P振动模块 润和Pegasus智能家居套件 预装HarmonyOS手机一台。 #### 2、获取源码及Ubuntu编译环境准备 开发基础环境由windows 工作台和Linux 编译服务器组成。windows 工作台可以通过samba 服务或ssh 方式访问Linux编译服务器。其中windows 工作台用来烧录和代码编辑,Linux编译服务器用来编译OpenHarmony代码,为了简化步骤,Linux编译服务器推荐安装Ubuntu20.04。 [操作文档](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.0-LTS/zh-cn/device-dev/quick-start/quickstart-lite-env-setup-linux.md) #### 3、Hi3861开发环境准备 在Linux编译服务器上搭建好基础开发环境后,需要安装OpenHarmony 编译Hi3861 平台特有的开发环境。 [操作文档](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.0-LTS/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861-setting.md) #### 4、源码下载&编译准备 ##### 1.码云工具下载 ``` cd ~/ curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ./repo sudo cp repo /usr/local/bin/repo chmod a+x /usr/local/bin/repo pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple requests ``` ##### 2.代码下载 本智能保险柜demo适配OpenHarmony-3.0-LTS与OpenHarmony-3.1-Beta。 ###### 1) OpenHarmony代码下载 ``` mkdir ~/OpenHarmony cd ~/OpenHarmony ``` OpenHarmony-3.0-LTS下载: ``` repo init -u git@gitee.com:openharmony/manifest.git -b OpenHarmony-3.0-LTS --no-repo-verify repo sync -c repo forall -c 'git lfs pull' ``` OpenHarmony-3.1-Beta下载: ``` repo init -u git@gitee.com:openharmony/manifest.git -b OpenHarmony-3.1-Beta --no-repo-verify repo sync -c repo forall -c 'git lfs pull' ``` ###### 2) 设备侧代码下载 具体仓库地址:https://gitee.com/openharmony-sig/knowledge_demo_smart_home/ 直接下载仓库对应zip 包文件并放到 ~/目录 ###### 3) 编译前准备 拷贝teamX ``` cd ~/ unzip knowledge_demo_smart_home-master.zip cp -raf knowledge_demo_smart_home-master/dev/team_x ~/OpenHarmony/vendor ``` 拷贝智能保险柜相应代码,iot云连接三方库代码、无感配网相关库文件(libHwKeystoreSDK.a),libHwKeystoreSDK.a文件与无感配网相关,缺少无法编译通过。 ``` cd ~/ cp -raf knowledge_demo_smart_home-master/dev/team_x/smart_safe/libs/libHwKeystoreSDK.a OpenHarmony/vendor/team_x/common/iot_wifi/libs/ cp -raf knowledge_demo_smart_home-master/dev/third_party/iot_link OpenHarmony/third_party/ ``` 适配平台系统的config.json。 ``` cd ~/OpenHarmony/vendor/team_x/smart_safe 如果使用的是OpenHarmony-3.0-LTS版本 cp config.json_3_0_LTS config.json 如果使用的是OpenHarmony-3.1-Beta版本 cp config.json_3.1-Beta config.json cd ~/OpenHarmony ``` 后续修改操作在OpenHarmony-3.0-LTS版本源码下,OpenHarmony-3.1-Beta版本类似只是行号不同。 地址vendor/team_x/common/iot_wifi/BUILD.gn。将libs/libHwKeystoreSDK.a加入到编译中。 ``` 添加17行 14 config_file = [ 15 "libs/libnetcfgdevicesdk.a", 16 "libs/libhilinkadapter_3861.a", 17 "libs/libHwKeystoreSDK.a" 18 ] ``` 地址:device/hisilicon/hispark_pegasus/sdk_liteos/build/config/usr_config.mk。打开I2C与PWM开关。 ``` 33 CONFIG_I2C_SUPPORT=y 40 CONFIG_PWM_SUPPORT=y ``` 地址:device/hisilicon/hispark_pegasus/hi3861_adapter/hals/communication/wifi_lite/wifiservice/source/wifi_hotspot.c。与无感配网功能相冲突,须屏蔽。 ``` EnableHotspot函数中屏蔽如下字段 139 //if (SetHotspotIpConfig() != WIFI_SUCCESS) { 140 // return ERROR_WIFI_UNKNOWN; 141 //} ``` 地址:device/hisilicon/hispark_pegasus/hi3861_adapter/hals/communication/wifi_lite/wifiservice/source/wifi_device.c。与无感配网功能相冲突,须屏蔽。 ``` DispatchConnectEvent函数下 屏蔽StaSetWifiNetConfig相关代码行 239 //StaSetWifiNetConfig(HI_WIFI_EVT_CONNECTED); 260 //StaSetWifiNetConfig(HI_WIFI_EVT_DISCONNECTED); ``` 地址:device/hisilicon/hispark_pegasus/sdk_liteos/BUILD.gn。将smart_safe中的demo加入编译配置 ``` 在deps中添下如下27行 23 deps = [ 24 ":sdk", 25 "//base/security/deviceauth/frameworks/deviceauth_lite:hichainsdk", 26 "//build/lite:ohos", 27 "//build/lite:product", 28 ] ``` 地址:base/security/huks/interfaces/innerkits/huks_lite/BUILD.gn ``` 屏蔽164行 161 sources = huks_sources 162 sources += huks_storage_source 163 sources += huks_access_sources 164 #sources += [ "hks_tmp_client.c" ] ``` 如果使用 整合并修改完成后的目录结构如下图: ![5](./resource/7.png) #### 5、编译&烧录 编译命令: ``` hb set // 如果是第一次编译,Input code path 命令行中键入"./" 指定OpenHarmony工程编译根目录后 回车。 ``` 如下图所示,选择智能保险柜 ![](./resource/5.png) ``` hb build // 如果需要全量编译,可以添加-f 选项 ``` 详细的代码编译及固件烧录步骤,请参考 [编译和烧录指南](../build_and_burn/README.md) #### 6、设备配网 1) 在设备上电前需准备好安装了数字管家应用的HarmonyOS手机,详情见[数字管家应用开发](../../../FA/DistSchedule/README_zh.md), 并在设置中开启手机的NFC功能; 2) 写设备NFC标签,详细操作见设备[NFC标签指导文档](../NFC_label_definition/README.md),其中设备模型定义为[profile](../../../profile/智能保险柜profile定义.md) 。 3) 烧录完成后,上电。开发者在观察开发板上状态LED灯以8Hz的频率闪烁时,将手机上半部靠近开发板NFC标签处; 4) 无需任何操作手机将自动拉起数字管家应用并进入配网状态,配网过程中无需输入热点账号密码。 具体无感配网相关流程参考 [无感配网指南](../net_config/README.md) ![](./resource/8.gif) #### 7、操作体验 ###### 1.设备控制 配网完成后,数字管家应用会自动进入智能保险柜控制页面,通过控制页面可以关闭告警。 ###### 2.告警提示 当检测到保险柜有振动时,会通知数字管家应用告警,并且告警消息还会推送同一家庭账号的所有成员。 ![](./resource/6.gif)