智能语音垃圾桶——数字管家.md 7.4 KB

智能语音垃圾桶——数字管家

一、 控制页xml的布局

控制页对我们来说至关重要,是软件实现功能的第一步,我们需要对xml文件有一定的熟悉程度,此次项目中,我们需要写四个垃圾桶的控制布局。在resources->base->layout新建xxx.xml文件

该布局分为三段式:最上面为导航栏布局,中间布局是Dustbin的logo,下方布局是四个垃圾桶的控制部分

页面代码展示:

【点击跳转】

效果图如下:

Dustbin_control_page

二、 数字管家服务器更改

1、创建iot云产品

IoT 是指将装置、机器、产品和设备连接到云并配置为收集和安全地传输数据,我们以华为IoT为例

【点击跳转】

2、创建服务器

【点击跳转】

3、让数字管家接入服务器

(1)在DeviceStateListener.java中修改下列信息:

change_DeviceStateListener

(2)在OKHttpUtilRx2.java文件中修改成自己的服务器IP:

change_OKHttpUtilRx2

三、 控制功能的编写

​ 接下来就是控制页业务逻辑的编写,在slice目录下新建 DustbinAbilitySlice.java文件(可自定义),我们设想对于开关的图片点击来对垃圾桶发送指令,首先我们需要在slice页面中的onstart()方法中使用findComponentById来找到图像、文本组件,(以可回收垃圾桶为例)将图像组件赋值给Recyclables变量,将文本组件值赋给currentDustbinRValue,开关图像用于点亮图标SwitchImg_R,

1、定义全局变量Recyclables和SwitchImg_R、currentDustbinRValue
private Image SwitchImg_R;
private Text currentDustbinRValue;
Image Recyclables;
2、在onStart()里面写找到按钮方法

​ 因为我们使用的是接口,所以需要重写onclick()方法,此时我们的括号里可以写上this,表示点击该图片时,调用本方法。

Recyclables = (Image) findComponentById(ResourceTable.Id_dustbin_Recyclables_image_switch);////找到可回收开关组件
Recyclables.setClickedListener(this);//绑定单击事件
3、在initComponents()中添加以下代码
SwitchImg_R = (Image) findComponentById(ResourceTable.Id_dustbin_Recyclables_image_switch);//可回收开关图像
currentDustbinRValue = (Text) findComponentById(ResourceTable.Id_dustbin_current_valueR);//可回收容量文本
4、在CommandUtil.java中添加发送到华为iot云命令

​ 以下服务名和命令可参考Dustbin的profile文件

    public static Command Dustbin_OpenRecyclables_Command(boolean isOn) {
        JSONObject params = new JSONObject();
        if (isOn) {
            params.put("OpenRecyclables", "ON");

        } else {
            params.put("OpenRecyclables", "OFF");
        }
        return new Command("Open_R",
                "SmartDustbin_DATA", JSONObject.toJSONString(params));
    }
5、添加更新容量代码

​ 如需要进入控制页更新,可在onStart()中调用initDeviceState()

      private void initDeviceState() {
         KLog.i("[220207x01]initDevice");
         OKHttpUtilsRx2.INSTANCE.getApi().getDeviceInfo(deviceId, PreferencesUtil.getUserId(getContext()))
                 .compose(OKHttpUtilsRx2.INSTANCE.ioMain())
                 .subscribe(new OKHttpUtilsRx2.SubjectImpl<RespondBase<DeviceResult>>() {
                     @Override
                     public void onNext(RespondBase<DeviceResult> deviceInfo) {
                         KLog.i(deviceInfo);
                         if(deviceInfo.isSuccess()){
                             KLog.i("isSuccess");
                         }
                         if (deviceInfo.isSuccess() && deviceInfo.getResult().isOnline()) {
                             // 更新状态
                             String property = deviceInfo.getResult().getProperty();

                             KLog.i(property);

                             String value_RC = DeviceStateUtil.getKeyValue(property, "Recyclables_Capacity");
                             String value_UC = DeviceStateUtil.getKeyValue(property, "Unrecyclable_Capacity");
                             String value_KC = DeviceStateUtil.getKeyValue(property, "KitchenGarbage_Capacity");
                             String value_OC = DeviceStateUtil.getKeyValue(property, "OtherRubbish_Capacity");
                             if (value_RC.equals("100")||value_UC.equals("100")||value_KC.equals("100")||value_OC.equals("100")) {
                                 // 告警页面
                                 KLog.i("Alert Dustbin");
                                 isAlertDustbinON = true;
                                 goToAlert();
                             }
                             currentDustbinRValue.setText(String.format("%s", value_RC));
                             currentDustbinUValue.setText(String.format("%s", value_UC));
                             currentDustbinKValue.setText(String.format("%s", value_KC));
                             currentDustbinOValue.setText(String.format("%s", value_OC));

                         } else {
                             initDustbinState();
                         }
                     }

                     @Override
                     public void onError(Throwable throwable) {
                         initDustbinState();
                     }
                 });
     }//初始化垃圾桶状态
6、点击开关发送命令
  private void Recyclables(Component component) {
        isONR = !isONR;
        if (isONR) { ;
            SwitchImg_R.setPixelMap(ResourceTable.Media_icon_switch_on);
        } else {
            SwitchImg_R.setPixelMap(ResourceTable.Media_icon_switch_off);
        }
        // 发送命令
        if (!isSetCommand) {
            sendCommand(CommandUtil.Dustbin_OpenRecyclables_Command(isONR));
        }//Recyclables
    }
7、NFC配网打开自定义控制页
(1)在DeviceControlAbility()添加Dusbtin控制页面信息
public static final String ACTION_DUSTBIN = "action.dustbin";
addActionRoute(ACTION_DUSTBIN, DustbinAbilitySlice.class.getName()); //智能语音垃圾桶
(2)应用配置文件config.json中注册信息

add_action.dustbin

完成以上步骤,我们就完成了数字管家的功能代码编写。