cmdList, JdbaseCallback callback);
366 |
367 | void getSceneBind(JdSmartScene jdSmartScene, JdbaseCallback callback);
368 |
369 | void getAllDevices(JdbaseCallback callback);
370 |
371 | void getAllDeviceType(JdbaseCallback callback);
372 |
373 | void getDeviceDetail(String deviceID, JdbaseCallback callback);
374 |
375 | JdSmartDevices getDevicesByType(int type);
376 |
377 | void controlDevice(JdSmartCtrlCmd jdSmartCtrlCmd, JdbaseCallback callback);
378 |
379 | void controlScene(JdSmartScene jdSmartScene, JdbaseCallback callback);
380 |
381 | void getSensorRecord(String deviceid, int pageIndex, int pageSize, JdbaseCallback callback);
382 |
383 | void registerDeviceChange(JdbaseCallback callback);
384 |
385 | String getLoginState()
386 | }
387 | ```
388 |
389 | ### void init(Context context)
390 |
391 | 当程序运行后,将调用init,可将初始化代码搜索主机,第二次登陆主机(第一次成功登陆,并保存用户名,再次开机后登陆)的代码写此处
392 | 当成功登陆主机后,为了减少网络延时,建议立即获取设备列表
393 |
394 | ``` java
395 | /**
396 | * 初始化部分,当程序运行后,将调用
397 | *
398 | * @param context android上下文
399 | */
400 | void init(Context context);
401 | ```
402 |
403 | ### JdSmartHostInfo getHostInfo()
404 |
405 | 返回一个JdSmartHostInfo,表示主机支持的功能
406 | mJdSmartHostInfo = new JdSmartHostInfo();
407 | mJdSmartHostInfo.setSupportLogin(false); //是否支持用户登陆认证,如果支持则写true, 否则false
408 | mJdSmartHostInfo.setLoginPrompt(“Login”);//登陆提示信息,如果支持登陆,则生效。建议写品牌名
409 | mJdSmartHostInfo.setEnableSceneEdit(true);//默认为true
410 | //如果设为false, 则只支持获取场景名,和执行场景,仅需实现getScenes和controlScene两个接口
411 | //如果设为true, 则支持场景所有功能,包括场景编辑,执行,场景绑定编辑,需要实现所有场景相关接口
412 | mJdSmartHostInfo.setVersion(1);//version不设置,默认是0;
413 | //设为1表示支持在进入房间管理页前显示登录状态页(如果已登录成功,会跳过登录状态页,直接进入房间管理页)
414 | mJdSmartHostInfo.setLoginType(JdSmartLoginConstant.LOGIN_TYPE_ACCOUNT);//设置登录类型
415 | ~~mJdSmartHostInfo.setFilterVoiceMode(JdSmartConstant.FILTER_VOICE_MODE_NONE);//默认为true~~
416 | ~~//如果设为FILTER_VOICE_MODE_NONE, 则用户不能自己处理语音,setVoiceText()接口将接收不到任何信息~~
417 | ~~//如果设为FILTER_VOICE_MODE_CONTROL, 则用户仅能处理控制设备的语音,setVoiceText()接口将接收到控制设备的文本~~
418 | ~~//如果设为FILTER_VOICE_MODE_ALL, 则用户能处理所有语音,setVoiceText()接口将接收所有信息~~
419 |
420 | ``` java
421 | /**
422 | * 获取主机信息,需要配置JdSmartHostInfo类
423 | *
424 | * @return JdSmartHostInfo 返回主机信息
425 | */
426 | JdSmartHostInfo getHostInfo();
427 | ```
428 |
429 | ### void login(String name, String pwd, JdbaseCallback callback)
430 |
431 | 支持登陆,则需要用户实现,否则直接返回成功,callback.onResult(JdbaseContant.RESULT\_SUCCESS, “success”, "");
432 |
433 | ``` java
434 | /**
435 | * 用户认证登陆
436 | *
437 | * 例如|
438 | * 成功 callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
439 | * 失败 callback.onResult(JdbaseContant.RESULT_FAIL, "fail", "");
440 | *
441 | * @param name 用户名
442 | * @param pwd 密码
443 | * @param callback 回调登陆结果
444 | */
445 | void login(String name, String pwd, JdbaseCallback callback);
446 | ```
447 |
448 | ### JdSmartAccount getAccount()
449 |
450 | 返回JdSmartAccount信息
451 | 如果不支持登陆,则JdSmartAccount.name 应该设为““
452 | 如果未登陆,则JdSmartAccount.name 应该设为””,否则设为当前登陆的用户名,代表已登陆
453 |
454 | ``` java
455 | /**
456 | * 获得已登陆的账户信息
457 | *
458 | * @return 如果未登陆,则JdSmartAccount.name 应该设为"",否则设为当前登陆的用户名,代表已登陆
459 | */
460 | JdSmartAccount getAccount();
461 | ```
462 |
463 |
464 | ### private void setLoginState(int state, String msg)
465 |
466 | 设置当前登录状态
467 |
468 |
469 | ### void logout(JdbaseCallback callback)
470 |
471 | 支持登陆,则需要用户实现,否则直接返回成功,callback.onResult(JdbaseContant.RESULT\_SUCCESS, “success”, "");
472 |
473 | ``` java
474 |
475 | /**
476 | * 退出登陆
477 | *
478 | *例如|
479 | * 成功 callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
480 | * 失败 callback.onResult(JdbaseContant.RESULT_FAIL, "fail", "");
481 | *
482 | * @param callback 回调退出信息
483 | *
484 | */
485 | void logout(JdbaseCallback callback);
486 | ```
487 |
488 | ### void searchAndBindHost(boolean isSearch, JdbaseCallback callback)
489 |
490 | 一般不用实现,请不要改动
491 | 支持搜索主机时,实现此接口,如果不支持,直接返回成功,callback.onResult(JdbaseContant.RESULT\_SUCCESS, “success”, "");
492 |
493 | ``` java
494 | /**
495 | * 搜索,并绑定主机网关
496 | *
497 | *例如|
498 | * callback.onResult(JdbaseContant.RESULT_SUCCESS, "网关信息", "");
499 | *
500 | * @param isSearch 是否动态搜索
501 | * @param callback 回调搜索结果
502 | */
503 | void searchAndBindHost(boolean isSearch, JdbaseCallback callback);
504 | ```
505 |
506 | ### void unbindHost(JdbaseCallback callback)
507 |
508 | 从主机网关解除所有设备与场景,这是危险操作,建议不实现,callback.onResult(JdbaseContant.RESULT\_SUCCESS, “success”, "");
509 |
510 | ``` java
511 | /**
512 | * 从主机网关解除所有设备与场景,危险操作
513 | *
514 | * 例如|
515 | * callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
516 | *
517 | * @param callback 回调结果
518 | */
519 | void unbindHost(JdbaseCallback callback);
520 | ```
521 |
522 | ### public void selectFamily(String familyID, JdbaseCallback callback)
523 |
524 | 选择家庭,以显示该家庭下的所有设备
525 |
526 |
527 | ### void getScenes(JdbaseCallback callback)
528 |
529 | 获取所有场景信息,场景信息通过json字符串返回。
530 |
531 | ``` java
532 | /**
533 | * 获取所有场景
534 | *
535 | * 例如|
536 | * JdSmartScenes jss = new JdSmartScenes();
537 | * for(Scenexxxx s| list){
538 | * JdSmartScene js = new JdSmartScene();
539 | * js.setSceneNo(s.getNo());
540 | * js.setSceneId(s.getId()+"");
541 | * js.setSceneName(s.getName());
542 | * js.setVendor(xxxxx);
543 | * jss.addScene(js);
544 | * }
545 | * callback.onResult(JdbaseContant.RESULT_SUCCESS, JSON.toJSONString(jss), "");
546 | *
547 | * @param callback 回调结果
548 | *
549 | */
550 | void getScenes(JdbaseCallback callback);
551 | ```
552 |
553 | ### void createScene(JdSmartScene jdsmartScene, JdbaseCallback callback)
554 |
555 | 创建一个场景,传入的仅是一个jdsmartScene,里面包含新场景名。
556 | 实现时,注意检查是否存在相同的场景名。
557 |
558 | ``` java
559 | /**
560 | * 创建场景
561 | *
562 | * 例如|
563 | * JdSmartScene js = new JdSmartScene();
564 | * js.setSceneName("xxx"); //与传入的场景名一致
565 | * js.setSceneNO(xxxxId() + "");
566 | * callback.onResult(JdbaseContant.RESULT_SUCCESS, JSON.toJSONString(js), "");
567 | *
568 | * @param jdsmartScene 创建的场景, 根据场景的名字screneName创建
569 | * @param callback 回调创建结果
570 | */
571 | void createScene(JdSmartScene jdsmartScene, JdbaseCallback callback);
572 | ```
573 |
574 | ### void deleteScene(JdSmartScene jdsmartScene, JdbaseCallback callback)
575 |
576 | 根据场景号或场景名删除一个场景
577 |
578 | ``` java
579 | /**
580 | * 删除场景
581 | *
582 | * 例如|
583 | * callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
584 | * callback.onResult(JdbaseContant.RESULT_FAIL, "fail", "");
585 | *
586 | * @param jdsmartScene 删除的场景, 需要根据jdsmartScene.getSceneNo()删除场景
587 | * @param callback 回调删除结果
588 | */
589 | void deleteScene(JdSmartScene jdsmartScene, JdbaseCallback callback);
590 | ```
591 |
592 | ### void updateScene(JdSmartScene jdsmartScene, JdbaseCallback callback)
593 |
594 | 更改场景名字
595 |
596 | ``` java
597 | /**
598 | * 修改场景
599 | *
600 | * 例如|
601 | * callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
602 | * callback.onResult(JdbaseContant.RESULT_FAIL, "fail", "");
603 | *
604 | * @param jdsmartScene 修改的场景, 需要根据jdsmartScene.getSceneNo()删除场景
605 | * @param callback 回调修改的结果
606 | */
607 | void updateScene(JdSmartScene jdsmartScene, JdbaseCallback callback);
608 | ```
609 |
610 | ### void createSceneBind(List cmds, JdbaseCallback callback)
611 |
612 | 创建一个场景绑定。 “场景绑定”是一个名词,表示一些设备与某个场景结合在一起。
613 | JdSmartCtrlCmd 表示一个设备的指令操作,就是将这些设备的指令操作与场景结合在一起。
614 |
615 | ``` java
616 | /**
617 | * 创建场景绑定
618 | *
619 | * 例如|
620 | * callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
621 | * callback.onResult(JdbaseContant.RESULT_FAIL, "fail", "");
622 | *
623 | * @param cmds 绑定到场景的命令列表
624 | * @param callback 回调绑定结果
625 | */
626 | void createSceneBind(List cmds, JdbaseCallback callback);
627 | ```
628 |
629 | ### void deleteSceneBind(List cmds, JdbaseCallback callback)
630 |
631 | 删除场景绑定
632 |
633 | ``` java
634 | /**
635 | * 删除场景绑定
636 | *
637 | * 例如|
638 | * callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
639 | * callback.onResult(JdbaseContant.RESULT_FAIL, "fail", "");
640 | *
641 | * @param cmds 删除的场景的命令列表
642 | * @param callback 回调删除结果
643 | */
644 | void deleteSceneBind(List cmds, JdbaseCallback callback);
645 | ```
646 |
647 | ### void updateSceneBind(List cmds, JdbaseCallback callback)
648 |
649 | 修改场景绑定
650 |
651 | ``` java
652 | /**
653 | * 修改场景绑定
654 | *
655 | * 例如:
656 | * callback.onResult(JdbaseContant.RESULT_FAIL, "fail", "");
657 | * callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
658 | *
659 | * @param cmds 修改的场景的命令列表
660 | * @param callback 回调删除结果
661 | */
662 | void updateSceneBind(List cmds, JdbaseCallback callback);
663 | ```
664 |
665 | ### void getSceneBind(JdSmartScene jdsmartScene, JdbaseCallback callback)
666 |
667 | 获得场景的所有场景绑定信息
668 |
669 | ``` java
670 | /**
671 | * 获取场景绑定
672 | *
673 | * 例如|
674 | * JdSmartDevices jds = new JdSmartDevices();
675 | * JdSmartDevice device1 = new JdSmartDevice();
676 | * JdSmartDevice device2 = new JdSmartDevice();
677 | * jds.addDevice(device1);
678 | * jds.addDevice(device2);
679 | * callback.onResult(JdbaseContant.RESULT_SUCCESS, JSON.toJSONString(jds), "");
680 | *
681 | * @param jdsmartScene 场景
682 | * @param callback 回调结果
683 | */
684 | void getSceneBind(JdSmartScene jdsmartScene, JdbaseCallback callback);
685 | ```
686 |
687 | ### void getAllDevices(JdbaseCallback callback)
688 |
689 | 获取所有设备
690 |
691 | ``` java
692 |
693 | /**
694 | * 获取所有设备列表
695 | *
696 | * 例如|
697 | * JdSmartDevices jds = new JdSmartDevices();
698 | * JdSmartDevice device1 = new JdSmartDevice();
699 | * JdSmartDevice device2 = new JdSmartDevice();
700 | * jds.addDevice(device1);
701 | * jds.addDevice(device2);
702 | * callback.onResult(JdbaseContant.RESULT_SUCCESS, JSON.toJSONString(jds), "");
703 | *
704 | * @param callback 回调结果
705 | */
706 | void getAllDevices(JdbaseCallback callback);
707 | ```
708 |
709 | ### void getAllDeviceType(JdbaseCallback callback)
710 |
711 | 获得所有的设备类型值,注意是所有在线的设备类型值
712 |
713 | ``` java
714 | /**
715 | * 得到所有的设备类型值
716 | *
717 | * 例如|
718 | * List result = new ArrayList();
719 | * JdSmartDevice device1 = new JdSmartDevice();
720 | * JdSmartDevice device2 = new JdSmartDevice();
721 | * result.add(device1.getDeviceType());
722 | * result.add(device2.getDeviceType());
723 | * callback.onResult(JdbaseContant.RESULT_SUCCESS, JSON.toJSONString(result), "");
724 | *
725 | * @param callback 回调类型列表
726 | */
727 | void getAllDeviceType(JdbaseCallback callback);
728 | ```
729 |
730 | ### JdSmartDevices getDevicesByType(int deviceType)
731 |
732 | 获取同类型的所有设备
733 |
734 | ``` java
735 | /**
736 | * 获取同类型的所有设备
737 | * @param deviceType 设备类型值, 来自于JdSmartDevice.getDeviceType()
738 | * @return JdSmartDevices 直接返回相同类型所有设备
739 | */
740 | JdSmartDevices getDevicesByType(int deviceType);
741 | ```
742 |
743 | ### void getDeviceDetail(String deviceID, JdbaseCallback callback)
744 |
745 | 获取某个指定devId的设备
746 |
747 | ``` java
748 | /**
749 | * 获取某个指定devId的设备
750 | *
751 | * 例如|
752 | * callback.onResult(JdSmartConstant.RESULT_SUCCESS, JSON.toJSONString(jdSmartDevice), "")
753 | *
754 | * @param deviceID 设备的devId, 或者 JdSmartDevice的json字符串
755 | * @param callback 回调结果
756 | */
757 | void getDeviceDetail(String deviceID, JdbaseCallback callback);
758 | ```
759 |
760 | ### void controlDevice(JdSmartCtrlCmd cmd, JdbaseCallback callback)
761 |
762 | 控制设备,cmd里order表示要执行的操作指令, value1, value2, value3, value4表示命令参数
763 |
764 | ``` java
765 | /**
766 | * 控制设备
767 | *
768 | * 例如|
769 | * callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
770 | * callback.onResult(JdbaseContant.RESULT_FAIL, "fail", "");
771 | *
772 | * @param cmd 设备命令
773 | * @param callback 回调控制结果
774 | */
775 | void controlDevice(JdSmartCtrlCmd cmd, JdbaseCallback callback);
776 | ```
777 |
778 | ### void controlScene(JdSmartScene jdsmartScene, JdbaseCallback callback)
779 |
780 | 控制场景
781 |
782 | ``` java
783 | /**
784 | * 控制场景
785 | *
786 | * 例如:
787 | * callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
788 | * callback.onResult(JdbaseContant.RESULT_FAIL, "fail", "");
789 | *
790 | * @param jdsmartScene 场景
791 | * @param callback 负责回调新的设备信息给上层
792 | */
793 | void controlScene(JdSmartScene jdsmartScene, JdbaseCallback callback);
794 | ```
795 |
796 | ### void getSensorRecord(String deviceid, int pageIndex, int pageSize, JdbaseCallback callback)
797 |
798 | 获取感应器记录的内容,因为内容可能很多,所以根据页索引,页大小返回数据
799 |
800 | ``` java
801 | /**
802 | * 获取感应器记录的内容
803 | *
804 | * 例如:
805 | * List result = new ArrayList();
806 | * JdSmartSensorRecord record1 = new JdSmartSensorRecord();
807 | * JdSmartSensorRecord record2 = new JdSmartSensorRecord();
808 | * result.add(record1);
809 | * result.add(record2);
810 | * callback.onResult(JdbaseContant.RESULT_SUCCESS, JSON.toJSONString(result), "");
811 | *
812 | * @param deviceid 设备ID
813 | * @param pageIndex 页码,从1开始
814 | * @param pageSize 每页的数量
815 | * @param callback 回调信息给上层
816 | */
817 | void getSensorRecord(String deviceid, int pageIndex, int pageSize, JdbaseCallback callback);
818 | ```
819 |
820 | ### void registerDeviceChange(JdbaseCallback callback)
821 |
822 | 当设备信息有变化时,通过callback上传设备信息
823 |
824 | ``` java
825 | /**
826 | * 当设备信息有变化时,应该调用回调
827 | *
828 | * 例如|
829 | * callback.onResult(JdSmartConstant.ACTION_REPORT_DEVICE_STATUS, JSON.toJSONString(jdSmartDevice), "")
830 | *
831 | * @param callback 负责回调新的设备信息给上层
832 | */
833 | void registerDeviceChange(JdbaseCallback callback);
834 | ```
835 |
836 |
837 |
838 | ## 设备命令与设备状态说明
839 |
840 | ### 设备命令
841 | 开关类型设备(灯,开关,插座,电视,机顶盒,机械手)
842 |
843 | | 操作 | order | value1| value2 | value3 | value4 | groupData |
844 | | :----: | :----: | :----: | :----: | :----: | :----: | :----: |
845 | | 打开 | ON | | | | | |
846 | | 关闭 | OFF | | | | | |
847 |
848 | 调光灯
849 |
850 | | 操作 | order | value1| value2 | value3 | value4 | groupData |
851 | | :----: | :----: | :----: | :----: | :----: | :----: | :----: |
852 | | 打开 | ON | | | | | |
853 | | 关闭 | OFF | | | | | |
854 | | 移动 | MOVE_TO_LEVEL | |亮度值,最高值255 || | |
855 |
856 |
857 | 调色灯(RGB灯,色温CW灯, RGB+CW灯)
858 |
859 | | 操作 | order | value1| value2 | value3 | value4 | groupData |
860 | | :----: | :----: | :----: | :----: | :----: | :----: | :----: |
861 | | 打开 | ON | | | | | |
862 | | 关闭 | OFF | | | | | |
863 | | 闪光变色模式 | SET | COLOR_LAMP_MODE_FLASH | | | | |
864 | | RGB模式 | SET | COLOR_LAMP_MODE_RGB | rgb颜色值 | 亮度值 | 饱和度值 | |
865 | | CW模式 | SET | COLOR_LAMP_MODE_CW | cw色温值 | 亮度值 | | |
866 |
867 | 风扇
868 |
869 | | 操作 | order | value1| value2 | value3 | value4 | groupData |
870 | | :----: | :----: | :----: | :----: | :----: | :----: | :----: |
871 | | 打开 | OPEN | | | | | |
872 | | 关闭 | CLOSE | | | | | |
873 | | 开始摇头 | SET | FAN_START_PIVOT | | | | |
874 | | 停止摇头 | SET | FAN_STOP_PIVOT | | | | |
875 |
876 | 新风/热水器/投影仪
877 |
878 | | 操作 | order | value1| value2 | value3 | value4 | groupData |
879 | | :----: | :----: | :----: | :----: | :----: | :----: | :----: |
880 | | 打开 | OPEN | | | | | |
881 | | 关闭 | CLOSE | | | | | |
882 |
883 |
884 | 多功能控制盒/无进度窗帘/开窗器
885 |
886 | | 操作 | order | value1| value2 | value3 | value4 | groupData |
887 | | :----: | :----: | :----: | :----: | :----: | :----: | :----: |
888 | | 打开 | OPEN | | | | | |
889 | | 关闭 | CLOSE | | | | | |
890 | | 暂停 | STOP | | | | | |
891 |
892 | 有开关和一个进度属性的设备(有进度窗帘,温控器等)
893 |
894 | | 操作 | order | value1| value2 | value3 | value4 | groupData |
895 | | :----: | :----: | :----: | :----: | :----: | :----: | :----: |
896 | | 打开 | OPEN | | | | | |
897 | | 关闭 | CLOSE | | | | | |
898 | | 移动 | MOVE_TO_LEVEL| 移动比例,例如10, 表示移动10% | | | | |
899 | | 停止移动| STOP | | | | | |
900 |
901 | 警报设备
902 |
903 | | 操作 | order | value1| value2 | value3 | value4 | groupData |
904 | | :----: | :----: | :----: | :----: | :----: | :----: | :----: |
905 | | 关闭警报 | MUTE | | | | | |
906 |
907 | 猫眼和摄像头
908 | 当打开猫眼设备时,会发送intent, action为"com.judian.action.goto.cat.camera"
909 | 当打开摄像头设备时,会发送intent, action为"com.judian.action.goto.camera"
910 | 并且都带有扩展参数"camera_id" 包含设备的id信息
911 |
912 | | 操作 | order | value1| value2 | value3 | value4 | groupData |
913 | | :----: | :----: | :----: | :----: | :----: | :----: | :----: |
914 | | 打开 | ON | | | | | |
915 | | 关闭 | OFF | | | | | |
916 |
917 | 扫地机器人
918 |
919 |
920 | | 操作 | order | value1| value2 | value3 | value4 | groupData |
921 | | :----: | :----: | :----: | :----: | :----: | :----: | :----: |
922 | | 打开 | OPEN | | | | | |
923 | | 关闭 | CLOSE | | | | | |
924 | | 清扫模式|SET|SWEEPER_MACHINE_SWEEPER_MODE | | | | |
925 | | 自动模式|SET|SWEEPER_MACHINE_AUTO_MODE|||||
926 | | 强力模式|SET|SWEEPER_MACHINE_FORCE_MODE|| | | |
927 | | 静音模式|SET|SWEEPER_MACHINE_MUTE_MODE | | | | |
928 | | 标准模式|SET|SWEEPER_MACHINE_NORMAL_MODE | | | | |
929 | | 回充模式|SET|SWEEPER_MACHINE_CHARGE_MODE | | | ||
930 |
931 | 空气净化器
932 |
933 |
934 | | 操作 | order | value1| value2 | value3 | value4 | groupData |
935 | | :----: | :----: | :----: | :----: | :----: | :----: | :----: |
936 | | 打开 | OPEN | | | | | |
937 | | 关闭 | CLOSE | | | | | |
938 | | 自动模式|SET|AIRPURIFIER_ORDER_MODE_AUTO|||||
939 | | 手动模式|SET|AIRPURIFIER_ORDER_MODE_MANUAL|| | | |
940 | | 休眠模式|SET|AIRPURIFIER_ORDER_MODE_SLEEP | | | | |
941 | | 设为高风|SET|AIRPURIFIER_ORDER_WIND_HIGHT | | | | |
942 | | 设为中风|SET|AIRPURIFIER_ORDER_WIND_MID | | | ||
943 | | 设为低风|SET|AIRPURIFIER_ORDER_WIND_LOW | | | | |
944 |
945 | 地暖
946 |
947 | | 操作 | order | value1| value2 | value3 | value4 | groupData |
948 | | :----: | :----: | :----: | :----: | :----: | :----: | :----: |
949 | | 打开 | OPEN | | | | | |
950 | | 关闭 | CLOSE | | | | | |
951 | | 移动 | MOVE_TO_LEVEL| 温度值 | | | | |
952 | | 自动模式|SET|FLOOR_HEATING_ORDER_MODE_AUTO|||||
953 | | 手动模式|SET|FLOOR_HEATING_ORDER_MODE_MANUAL|| | | |
954 | | 休眠模式|SET|FLOOR_HEATING_ORDER_MODE_SLEEP | | | | |
955 |
956 |
957 | 智能晾衣架
958 |
959 |
960 | | 操作 | order | value1| value2 | value3 | value4 | groupData |
961 | | :----: | :----: | :----: | :----: | :----: | :----: | :----: |
962 | | 打开 | OPEN | | | | | |
963 | | 关闭 | CLOSE|| | | | |
964 | | 上升|SET|CLOTHES_HANGER_ORDER_MOVE_UP |||||
965 | | 停止|SET|CLOTHES_HANGER_ORDER_MOVE_STOP|||||
966 | | 下降|SET|CLOTHES_HANGER_ORDER_MOVE_DOWN |||||
967 | | 开灯|SET|CLOTHES_HANGER_ORDER_LIGHT_ON || | ||
968 | | 关灯|SET| CLOTHES_HANGER_ORDER_LIGHT_OFF ||| | |
969 | | 烘干开|SET| CLOTHES_HANGER_ORDER_HEAT_ON |||| |
970 | | 烘干关|SET| CLOTHES_HANGER_ORDER_HEAT_OFF| || ||
971 | | 风干开|SET| CLOTHES_HANGER_ORDER_WIND_ON| || ||
972 | | 风干关|SET| CLOTHES_HANGER_ORDER_WIND_OFF| || ||
973 | | 消毒开|SET| CLOTHES_HANGER_ORDER_DESINFECTION_ON ||| ||
974 | | 消毒关|SET| CLOTHES_HANGER_ORDER_DESINFECTION_OFF||| ||
975 |
976 | 空调设备
977 |
978 |
979 | | 操作 | order | value1| value2 | value3 | value4 | groupData |
980 | | :----: | :----: | :----: | :----: | :----: | :----: | :----: |
981 | | 打开 | OPEN | | | | | |
982 | | 关闭 | CLOSE | | | | | |
983 | | 调整温度|MOVE_TO_LEVEL| 温度值,例如26,
表示调置为26度| | | | |
984 | | 切换到指定工作模式|SET|AIRCONDITION_
MODE_TYPE|工作模式值,例如,
AIRCONDITION_
MODE_COOL||||
985 | | 切换到指定风速模式|SET|AIRCONDITION_
WIND_RATE_TYPE |风速模式,例如,
AIRCONDITION_
WIND_RATE
_MIDDLE| | | |
986 | | 切换到指定扫风模式|SET|AIRCONDITION_
WIND_DIRECTION
_TYPE |扫风模式,例如,
AIRCONDITION_WIND
_DIRECTION_
LEFT_RIGHT| | | |
987 | | 直接切换到下一个工作模式| NEXT | AIRCONDITION_
MODE_TYPE | | | | |
988 | | 直接切换到下一个风速模式| NEXT | AIRCONDITION_
WIND_RATE_TYPE | | | | |
989 | | 直接切换到下一个扫风模式| NEXT | AIRCONDITION_
WIND_DIRECTION
_TYPE | | | ||
990 |
991 |
992 | ### 设备状态
993 | 开关类型设备(灯,开关,插座,电视,机顶盒,新风,热水器,投影仪)
994 |
995 | | value1| value2| value3| value4| groupData|
996 | |:----:| :----:|:----:|:----: |:----: |
997 | |0: 表示打开
-1:表示关闭|||||
998 |
999 | 风扇
1000 |
1001 | | value1| value2| value3| value4| groupData|
1002 | |:----:| :----:|:----:|:----: |:----: |
1003 | |0: 表示打开
-1:表示关闭|填写开始摇头/停止摇头||||
1004 |
1005 | 调光灯
1006 |
1007 | | value1| value2| value3| value4| groupData|
1008 | |:----:| :----:|:----:|:----: |:----: |
1009 | |0: 表示打开
-1:表示关闭|填写亮度值,最高值255||||
1010 |
1011 | 调色灯(RGB灯,色温CW灯, RGB+CW灯)
1012 |
1013 | | value1| value2| value3| value4| groupData|
1014 | |:----:| :----:|:----:|:----: |:---- |
1015 | | 填写0表示打开
填写-1表示关闭 |||| json 字符串,依据不同模式类型,键值各不相同。
JSONObject jobj = new JSONObject()
jobj.put(JdSmartDeviceOrder.COLOR_LAMP_MODE,JdSmartDeviceOrder.COLOR_LAMP_MODE_RGB)//RGB模式
jobj.put(JdSmartDeviceOrder.COLOR_LAMP_RGB_VALUE, "#0a0b0c")//颜色值为#0a0b0c
jobj.put(JdSmartDeviceOrder.COLOR_LAMP_RGB_BRIGHT, "250") //亮度为250
jobj.put(JdSmartDeviceOrder.COLOR_LAMP_RGB_SATURATION, "10") //饱和度为10
JSONObject jobj = new JSONObject()
jobj.put(JdSmartDeviceOrder.COLOR_LAMP_MODE,JdSmartDeviceOrder.COLOR_LAMP_MODE_CW)//cw模式
jobj.put(JdSmartDeviceOrder.COLOR_LAMP_CW_VALUE, "50")//色值为50
jobj.put(JdSmartDeviceOrder.COLOR_LAMP_CW_BRIGHT, "250") //亮度为250
JSONObject jobj = new JSONObject()
jobj.put(JdSmartDeviceOrder.COLOR_LAMP_MODE,JdSmartDeviceOrder.COLOR_LAMP_MODE_FLASH)//闪光自动变色模式|
1016 |
1017 | 多功能控制盒/无进度窗帘
1018 |
1019 | | value1| value2| value3| value4| groupData|
1020 | |:----:| :----:|:----:|:----: |:----: |
1021 | |当前移动位置(只有0和100两个进度值)
0:表示关闭,100:表示打开,
50或其它值表示中途暂停 |||||
1022 |
1023 |
1024 | 有开关和一个进度属性的设备(有进度窗帘,有进度开窗器等)
1025 |
1026 | | value1| value2| value3| value4| groupData|
1027 | |:----:| :----:|:----:|:----: |:----: |
1028 | |当前移动位置(0~100)
例如填写10, 表示移动10%, 0表示关闭,100表示打开|||||
1029 |
1030 |
1031 | 门磁、窗磁、水浸
1032 |
1033 | | value1| value2| value3| value4| groupData|
1034 | |:----:| :----:|:----:|:----: |:----: |
1035 | | 填写0表示关闭,不需要报警
填写1表示打开,需要报警||填写0表示低电量
填写1表示正常电量 | 填写电量值|
1036 |
1037 | 烟感
1038 |
1039 | | value1| value2| value3| value4| groupData|
1040 | |:----:| :----:|:----:|:----: |:----: |
1041 | | 填写0表示不报警
填写1表示报警 | | 填写0表示低电量
填写1表示正常电量 | 填写电量值 |
1042 |
1043 | 人体红外
1044 |
1045 | | value1| value2| value3| value4| groupData|
1046 | |:----:| :----:|:----:|:----: |:----: |
1047 | |填写0表示没有报警
填写1表示检测到入侵,需要报警 |填写1表示入侵的人一直存在
填写0表示没有检测到入侵持续存在|填写0表示低电量
填写1表示正常电量| 填写电量值 |
1048 |
1049 | 温度或湿度传感器
1050 |
1051 | | value1| value2| value3| value4| groupData|
1052 | |:----:| :----:|:----:|:----: |:----: |
1053 | |填写温度,乘以100值| 填写湿度值,乘以100 | |填写电量值(-1表示此设备不是电池供电的设备) |
1054 |
1055 | 照度
1056 |
1057 | | value1| value2| value3| value4| groupData|
1058 | |:----:| :----:|:----:|:----: |:----: |
1059 | |填写传感器上报的测量值MeasuredValue ||| 填写电量值 |
1060 |
1061 |
1062 | 扫地机器人
1063 |
1064 | | value1| value2| value3| value4| groupData|
1065 | |:----:| :----:|:----:|:----: |:---- |
1066 | | 填写0表示打开
填写-1表示关闭 |||| json 字符串,键值分别为工作状态值
JSONObject jobj = new JSONObject()
//工作于清扫模式
jobj.put(JdSmartDeviceOrder.SWEEPER_MACHINE_STATUS, JdSmartDeviceOrder.SWEEPER_MACHINE_SWEEPER_MODE)
|
1067 |
1068 | 空气净化器
1069 |
1070 | | value1| value2| value3| value4| groupData|
1071 | |:----:| :----:|:----:|:----: |:---- |
1072 | | 填写0表示打开
填写-1表示关闭 |||| json 字符串,键值分别为工作模式,风速等级,PM25,温度,湿度,空气质量等级
JSONObject jobj = new JSONObject()
//工作模式
jobj.put(JdSmartDeviceOrder.AIRPURIFIER_STATUS_MODE, JdSmartDeviceOrder.AIRPURIFIER_ORDER_MODE_AUTO)
//自动工作模式
jobj.put(JdSmartDeviceOrder.AIRPURIFIER_STATUS_WIND,
JdSmartDeviceOrder.AIRPURIFIER_ORDER_WIND_MID)
//中风
jobj.put(JdSmartDeviceOrder.AIRPURIFIER_STATUS_PM25,"50")
//PM2.5 50
jobj.put(JdSmartDeviceOrder.AIRPURIFIER_STATUS_TEMP, "26")
//温度26度
jobj.put(JdSmartDeviceOrder.AIRPURIFIER_STATUS_HUMIDITY,"60")//湿度60
jobj.put(JdSmartDeviceOrder.AIRPURIFIER_STATUS_AQI,"一级(优)")//空气质量等级 |
1073 |
1074 | 地暖
1075 |
1076 | | value1| value2| value3| value4| groupData|
1077 | |:----:| :----:|:----:|:----: |:---- |
1078 | | 填写0表示打开
填写-1表示关闭 |||| json 字符串,键值分别为工作模式,当前温度
JSONObject jobj = new JSONObject()
jobj.put(JdSmartDeviceOrder.FLOOR_HEATING_STATUS_MODE, JdSmartDeviceOrder.FLOOR_HEATING_ORDER_MODE_AUTO) //工作于自动模式
jobj.put(JdSmartDeviceOrder.FLOOR_HEATING_STATUS_TEMP, "26")//当前温度26
|
1079 |
1080 | 智能晾衣架
1081 |
1082 | | value1| value2| value3| value4| groupData|
1083 | |:----:| :----:|:----:|:----: |:---- |
1084 | | 填写0表示打开
填写-1表示关闭 |||| json 字符串,键值分别为移动状态,消毒状态,烘干状态,灯状态,风状态
JSONObject jobj = new JSONObject()
//移动状态
jobj.put(JdSmartDeviceOrder.CLOTHES_HANGER_STATUS_MOVE, JdSmartDeviceOrder.CLOTHES_HANGER_ORDER_MOVE_STOP)
//消毒状态
jobj.put(JdSmartDeviceOrder.CLOTHES_HANGER_STATUS_DESINFECTION,
JdSmartDeviceOrder.CLOTHES_HANGER_ORDER_DESINFECTION_OFF)
//烘干状态
jobj.put(JdSmartDeviceOrder.CLOTHES_HANGER_STATUS_HEAT,
JdSmartDeviceOrder.CLOTHES_HANGER_ORDER_HEAT_OFF)
//灯状态
jobj.put(JdSmartDeviceOrder.CLOTHES_HANGER_STATUS_LIGHT,
JdSmartDeviceOrder.CLOTHES_HANGER_ORDER_LIGHT_OFF)
//风状态
jobj.put(JdSmartDeviceOrder.CLOTHES_HANGER_STATUS_WIND,
JdSmartDeviceOrder.CLOTHES_HANGER_ORDER_WIND_OFF)|
1085 |
1086 | 空调设备
1087 |
1088 | | value1| value2| value3| value4| groupData|
1089 | |:----:| :----:|:----:|:----: |:---- |
1090 | | 填写0表示打开
填写-1表示关闭 |||| json 字符串,键值分别为温度,空调模式,风速,风向
JSONObject jobj = new JSONObject()
//空调温度
jobj.put(JdSmartDeviceOrder.TEMPERATURE, "26")
//空调模式
jobj.put(JdSmartDeviceOrder.AIRCONDITION_MODE_TYPE,
JdSmartDeviceOrder.AIRCONDITION_MODE_COOL)
//空调风速
jobj.put(JdSmartDeviceOrder.AIRCONDITION_WIND_RATE_TYPE,
JdSmartDeviceOrder.AIRCONDITION_WIND_RATE_AUTO)
//空调风向
jobj.put(JdSmartDeviceOrder.AIRCONDITION_WIND_DIRECTION_TYPE,
JdSmartDeviceOrder.AIRCONDITION_WIND_DIRECTION__UP_DOWN)|
1091 |
1092 |
1093 | ### 普通灯,开关,插座
1094 |
1095 | 命令
1096 |
1097 | ``` java
1098 | cmd.setOrder(JdSmartDeviceOrder.ON), value1不用设置
1099 | ```
1100 |
1101 | 状态:
1102 |
1103 | ``` java
1104 | cmd.value1("0") //表示状态是开
1105 | ```
1106 |
1107 | ### 风扇
1108 |
1109 | 命令
1110 |
1111 | ``` java
1112 | cmd.setOrder(JdSmartDeviceOrder.OPEN) //OPEN开,CLOSE关
1113 | ```
1114 |
1115 | ``` java
1116 | cmd.setOrder(JdSmartDeviceOrder.SET) //设置开始摇头FAN_START_PIVOT或停止摇头FAN_STOP_PIVOT
1117 | cmd.setValue2("FAN_START_PIVOT")
1118 | ```
1119 |
1120 | 状态
1121 |
1122 | ``` java
1123 | cmd.value1("0") // value1表示开关状态 "0"表示状态打开,否则为关闭状态
1124 | cmd.value2("FAN_START_PIVOT") // value2表示是否摇头
1125 | ```
1126 |
1127 | ### 调光灯
1128 |
1129 | 命令
1130 |
1131 | ``` java
1132 | cmd.setOrder(JdSmartDeviceOrder.ON) //ON开,OFF关
1133 | ```
1134 |
1135 | ``` java
1136 | cmd.setOrder(JdSmartDeviceOrder.MOVE_TO_LEVEL) //亮度比例
1137 | cmd.setValue2("30") //最高亮度255
1138 | ```
1139 |
1140 | 状态
1141 |
1142 | ``` java
1143 | cmd.value1("0") // value1表示开关状态 "0"表示状态打开,否则为关闭状态
1144 | cmd.value2("30") // value2表示亮度,最高亮度255
1145 | ```
1146 |
1147 | ### 窗帘/开窗器/温控器
1148 |
1149 | 命令
1150 |
1151 | ``` java
1152 | cmd.setOrder(JdSmartDeviceOrder.OPEN) //OPEN开,CLOSE关, STOP暂停移动
1153 | ```
1154 |
1155 | ``` java
1156 | cmd.setOrder(JdSmartDeviceOrder.MOVE_TO_LEVEL) //移动比例
1157 | cmd.setValue1("30") //百分比为30%
1158 | ```
1159 |
1160 | 状态
1161 |
1162 | ``` java
1163 | cmd.value1("10") //表示状态是10%,如果是100,则设备是全开状态
1164 | ```
1165 |
1166 | ### 空调
1167 |
1168 | 命令
1169 |
1170 | - 打开空调
1171 |
1172 | ``` java
1173 | cmd.setOrder(JdSmartDeviceOrder.OPEN)
1174 | ```
1175 |
1176 | - 切换空调到下一个工作模式
1177 |
1178 | ``` java
1179 | cmd.setOrder(JdSmartDeviceOrder.NEXT)
1180 | cmd.setValue1(JdSmartDeviceOrder.AIRCONDITION_MODE_TYPE)
1181 | ```
1182 |
1183 | - 设置制冷模式
1184 |
1185 | ``` java
1186 | cmd.setOrder(JdSmartDeviceOrder.SET)
1187 | cmd.setValue1(JdSmartDeviceOrder.AIRCONDITION_MODE_TYPE)
1188 | cmd.setVvalue2(JdSmartDeviceOrder.AIRCONDITION_MODE_COOL)
1189 | ```
1190 |
1191 | - 设置中风
1192 |
1193 | ``` java
1194 | cmd.setOrder(JdSmartDeviceOrder.SET)
1195 | cmd.setValue1(JdSmartDeviceOrder.AIRCONDITION_WIND_RATE_TYPE)
1196 | cmd.setValue2(JdSmartDeviceOrder.AIRCONDITION_WIND_RATE_MIDDLE)
1197 | ```
1198 |
1199 | - 设置温度26度
1200 |
1201 | ``` java
1202 | cmd.setOrder(JdSmartDeviceOrder.MOVE_TO_LEVEL)
1203 | cmd.setValue1("26")
1204 | ```
1205 |
1206 | 状态
1207 |
1208 | ``` java
1209 | JSONObject jobj = new JSONObject();
1210 | jobj.put(JdSmartDeviceOrder.AIRCONDITION_MODE_TYPE, JdSmartDeviceOrder.AIRCONDITION_MODE_COOL);
1211 | jobj.put(JdSmartDeviceOrder.AIRCONDITION_WIND_RATE_TYPE, JdSmartDeviceOrder.AIRCONDITION_WIND_RATE_LOW);
1212 | jobj.put(JdSmartDeviceOrder.AIRCONDITION_WIND_DIRECTION_TYPE, JdSmartDeviceOrder.AIRCONDITION_WIND_DIRECTION_LEFT_RIGHT);
1213 | jobj.put(JdSmartDeviceOrder.TEMPERATURE, "28");
1214 | cmd.setGroupData(jobj.toJSONString());
1215 | ```
1216 |
1217 | ### Sensor传感器
1218 |
1219 | 命令
1220 |
1221 | - 关闭正在发声的警报
1222 |
1223 | ``` java
1224 | cmd.setOrder(JdSmartDeviceOrder.MUTE)
1225 | ```
1226 |
1227 | 状态
1228 |
1229 |
1230 | | 类别 | 参数 | 描述 |
1231 | |-----------|-----------|-----------|
1232 | |门磁、窗磁、水浸 | value1 | 填写0表示关闭,不需要报警,填写1表示打开,需要报警
1233 | | |value3 | 填写0表示低电量,填写1表示正常电量
1234 | | |value4| 填写电量值
1235 | |烟感/可燃气体 |value1| 填写0表示不报警,填写1表示报警
1236 | | |value3| 填写0表示低电量,填写1表示正常电量
1237 | | |value4| 填写电量值
1238 | |人体红外/SOS |value1| 填写0表示没有报警,填写1表示检测到入侵,需要报警
1239 | | |value2| 填写1表示入侵的人一直存在,填写0表示没有检测到入侵持续存在
1240 | | |value3| 填写0表示低电量,填写1表示正常电量;
1241 | | |value4 |填写电量值
1242 | |温度传感器 |value1| 填写温度值 ,例如正常温度值是26.331, 需要写成2633.1(乘以100)
1243 | | |value4| 填写电量值(-1表示此设备不是电池供电的设备)
1244 | |湿度传感器 |value1| 填写湿度值 ,例如正常湿度值是30.212, 需要写成3021.2(乘以100)
1245 | | |value4| 填写电量值(-1表示此设备不是电池供电的设备)
1246 | |温湿度传感器 |value1| 填写温度值 ,例如正常温度值是26.331, 需要写成2633.1(乘以100)
1247 | | |value2| 填写湿度值 ,例如正常湿度值是30.212, 需要写成3021.2(乘以100)
1248 | | |value4| 填写电量值(-1表示此设备不是电池供电的设备)
1249 | |照度 |value1| 填写传感器上报的测量值Measured value
1250 | | |value4| 填写电量值
1251 | |PM2.5 / 二氧化碳 |value1| 当前测量值
1252 | |一氧化碳 |value1| 填写0表示关闭,不需要报警,填写1表示打开,需要报警
1253 |
1254 |
1255 | ## 流程图
1256 |
1257 | 
1258 | 
1259 |
1260 |
1261 |
1262 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | # 一、背景音乐主机控制智能家居
3 | 
4 | ### [Smart sdk 智能家居控制](JdSmartOpenSdk.md)
5 | 安卓sdk开发包, 运行于Android背景音乐主机端,方便对接局域网和云端网关
6 |
7 | ### [对接协议](./files/protocolDocument.pdf)
8 | 网络对接协议实现智能家居网关对接,控制智能家居
9 |
10 | ### Smart 485、udp、tcp
11 | 1. [485、udp、tcp控制智能家居内置于Android系统中, 通过界面配置智能设备与场景指令](./files/485CtrlDev.pdf)
12 | 2. [485、udp、tcp实现场景音乐播控](./files/485CtrlSceneMusic.pdf)
13 | 3. [485、udp、tcp实现播放语音](./files/485PlayTTS.pdf)
14 |
15 |
16 | # 二、控制背景音乐主机
17 | 
18 | ### JMV sdk([Jd_music_and_voice sdk](JdMusicAndVoiceSdk.md))
19 | 运行于背景音主机端,语音语义处理,音乐控制, 485控制(请到网盘下载)
20 |
21 | ### JdPlay sdk([JdPlay安卓移动端接入](JdPlayOpenSdkAndroid.md)、 [JdPlay苹果移动端接入](./files/JdPlayOpenSdkIOS.pdf))
22 | 运行于Android手机端和苹果手机端,开放音乐资源及控制
23 |
24 | ### [JdPlaySS协议(原JSSS)](JdPlaySS.md)
25 | 使用网络协议控制背景音主机,支持局域网发现和控制背景音主机,开放音乐资源及控制,主要用于Linux/RTOS的网关
26 |
27 | ### [485协议及UDP协议](./JdRS485.md)
28 | 通过传统485总线或UDP控制背景音乐主机,开放音乐资源及控制
29 |
30 | # 三、 Android开发
31 | ### [Android开发注意要点](AndroidReadme.md)
32 |
33 |
35 |
36 |
44 |
82 |
83 |
--------------------------------------------------------------------------------
/files/485CtrlBackMusicSysWithAIS.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/szjd/docs/690e08a8eca469869234b547c39dea8dc87edc95/files/485CtrlBackMusicSysWithAIS.pdf
--------------------------------------------------------------------------------
/files/485CtrlBackMusicSysWithHES.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/szjd/docs/690e08a8eca469869234b547c39dea8dc87edc95/files/485CtrlBackMusicSysWithHES.pdf
--------------------------------------------------------------------------------
/files/485CtrlDev.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/szjd/docs/690e08a8eca469869234b547c39dea8dc87edc95/files/485CtrlDev.pdf
--------------------------------------------------------------------------------
/files/485CtrlSceneMusic.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/szjd/docs/690e08a8eca469869234b547c39dea8dc87edc95/files/485CtrlSceneMusic.pdf
--------------------------------------------------------------------------------
/files/485ExampleCode.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/szjd/docs/690e08a8eca469869234b547c39dea8dc87edc95/files/485ExampleCode.xlsx
--------------------------------------------------------------------------------
/files/485PlayTTS.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/szjd/docs/690e08a8eca469869234b547c39dea8dc87edc95/files/485PlayTTS.pdf
--------------------------------------------------------------------------------
/files/JdPlayOpenSdkIOS.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/szjd/docs/690e08a8eca469869234b547c39dea8dc87edc95/files/JdPlayOpenSdkIOS.pdf
--------------------------------------------------------------------------------
/files/protocolDocument.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/szjd/docs/690e08a8eca469869234b547c39dea8dc87edc95/files/protocolDocument.pdf
--------------------------------------------------------------------------------
/pic/PuTTY_11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/szjd/docs/690e08a8eca469869234b547c39dea8dc87edc95/pic/PuTTY_11.png
--------------------------------------------------------------------------------
/pic/PuTTY_22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/szjd/docs/690e08a8eca469869234b547c39dea8dc87edc95/pic/PuTTY_22.png
--------------------------------------------------------------------------------
/pic/dockTree1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/szjd/docs/690e08a8eca469869234b547c39dea8dc87edc95/pic/dockTree1.png
--------------------------------------------------------------------------------
/pic/dockTree2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/szjd/docs/690e08a8eca469869234b547c39dea8dc87edc95/pic/dockTree2.png
--------------------------------------------------------------------------------
/pic/ios1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/szjd/docs/690e08a8eca469869234b547c39dea8dc87edc95/pic/ios1.png
--------------------------------------------------------------------------------
/pic/smart-home.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/szjd/docs/690e08a8eca469869234b547c39dea8dc87edc95/pic/smart-home.jpg
--------------------------------------------------------------------------------
/pic/smarthome_a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/szjd/docs/690e08a8eca469869234b547c39dea8dc87edc95/pic/smarthome_a.png
--------------------------------------------------------------------------------
/pic/smarthome_b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/szjd/docs/690e08a8eca469869234b547c39dea8dc87edc95/pic/smarthome_b.png
--------------------------------------------------------------------------------
/pic/smarthome_c.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/szjd/docs/690e08a8eca469869234b547c39dea8dc87edc95/pic/smarthome_c.png
--------------------------------------------------------------------------------
/pic/sound.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/szjd/docs/690e08a8eca469869234b547c39dea8dc87edc95/pic/sound.jpg
--------------------------------------------------------------------------------