新大陆云平台篇

简介: 新大陆云平台篇简介代码分析全部代码


简介



主要功能:温湿度传感器,灯,风扇与网关ZIGBBE自组网,然后网关将数据上传至云平台,上位机程序(android)通过云平台实时获取数据

1:获取温湿度数据

2:控制风扇,灯

3:如果实时获取的温度大于了一定数值自动开启风扇,如果小于一定数组自动开启灯

4:输入的温度大于了一定数值自动开启风扇,如果小于一定数值自动开启灯


代码分析



首先连接云平台,进行登陆。获取访问令牌

ConnectCloud.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                netWorkBusiness.signIn( new SignIn( UserName, PassWord ), new NCallBack<BaseResponseEntity<User>>(getApplicationContext()) {
                    @Override
                    protected void onResponse(BaseResponseEntity<User> response) {
                    }
                    @Override
                    public void onResponse(Call<BaseResponseEntity<User>> call, Response<BaseResponseEntity<User>> response) {
                        BaseResponseEntity<User> body = response.body();
                        if (body != null){
                            if (body.getStatus() == 0){
                                AccessToken = body.getResultObj().getAccessToken();
                                if (AccessToken == null){
                                    Toast.makeText( MainActivity.this,"访问令牌为空",Toast.LENGTH_SHORT ).show();
                                    return;
                                }
                                netWorkBusiness = new NetWorkBusiness( AccessToken, Url);
                            }
                        }
                    }
                } );
            }
        } );

开启子线程,实时获取温度数据,

并通过runOnUiThread从子线程跳转到主线程,更新UI,下面采用的是lamda写法。

 thread = new Thread( ()->{
            while (true){
                /**while start*/
                try{
                    Thread.sleep( 2000 );
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
                /**获取温度数据开始*/
                netWorkBusiness.getSensors( DeviceID, TmpTag, new NCallBack<BaseResponseEntity<List<SensorInfo>>>(getApplicationContext()) {
                    @Override
                    protected void onResponse(BaseResponseEntity<List<SensorInfo>> response) {
                    }
                    @Override
                    public void onResponse(Call<BaseResponseEntity<List<SensorInfo>>> call, Response<BaseResponseEntity<List<SensorInfo>>> response) {
                        BaseResponseEntity<List<SensorInfo>> body = response.body();
                        if (body != null){
                            if (body.getStatus() == 0){
                                TmpValue = Double.parseDouble( body.getResultObj().get( 0 ).getValue() );
                            }
                        }
                    }
                } );
                /**获取温度数据结束*/
                /**改变温度的值*/
                runOnUiThread( ()->{
                    Tmp.setText( TmpValue+" ℃" );
                } );
                /**改变温度的值*/

打开风扇和灯通过新大陆JAR包中的control方法

/**
     * 发送命令/控制设备
     *
     * @param deviceId 设备ID(必填)
     * @param apiTag   传感标识名(必须但值可为空)
     * @param data     开关类:开=1,关=0,暂停=2
     *                 家居类:调光灯亮度=0~254,RGB灯色度=2~239,窗帘、卷闸门、幕布打开百分比=3%~100%,红外指令=1(on)2(off)
     *                 其它:integer/float/Json/String类型值
     */
 OpenFan.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Fan.startAnimation( Rotate );
            netWorkBusiness.control( DeviceID, FanTag, 1, new NCallBack<BaseResponseEntity>(getApplicationContext()) {
                @Override
                protected void onResponse(BaseResponseEntity response) {
                    Toast.makeText( MainActivity.this,"打开风扇",Toast.LENGTH_SHORT ).show();
                }
            } );
        }
    } );

当硬件风扇选择时,对应的上位机程序风扇动画

 private void InitAnimation(){
        Rotate = AnimationUtils.loadAnimation( MainActivity.this,R.anim.rotate );
        Rotate.setDuration(1000);
        //animation.setRepeatCount(-1); //无限旋转
        Rotate.setRepeatMode(1);
        Rotate.setFillAfter(true);
        CycleInterpolator interpolator = new CycleInterpolator(1);
        Rotate.setInterpolator(interpolator);
    }


全部代码


 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_main );
        InitView();
        GetData();
        InitAnimation();
        InputTmpOk.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String GetEditTextTmpValue = InputTmp.getText().toString();
                int IntTmpValue = Integer.parseInt( GetEditTextTmpValue );
                if (IntTmpValue < 0){
                    Toast.makeText( MainActivity.this,"温度不能小于0",Toast.LENGTH_SHORT ).show();
                    return;
                }
                if (IntTmpValue > 40){
                    Toast.makeText( MainActivity.this,"温度不能大于40",Toast.LENGTH_SHORT ).show();
                    return;
                }
                ControlFan(IntTmpValue);
            }
        } );
        ButtonOpenLamp.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                CloseLamp.setVisibility( View.INVISIBLE );
                OpenLamp.setVisibility( View.VISIBLE );
                netWorkBusiness.control( DeviceID, LightTag, 1, new NCallBack<BaseResponseEntity>(getApplicationContext()) {
                    @Override
                    protected void onResponse(BaseResponseEntity response) {
                      Toast.makeText( MainActivity.this,"开灯",Toast.LENGTH_SHORT ).show();
                    }
                } );
            }
        } );
        ButtonCloseLamp.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                CloseLamp.setVisibility( View.VISIBLE );
                OpenLamp.setVisibility( View.INVISIBLE );
                netWorkBusiness.control( DeviceID, LightTag, 0, new NCallBack<BaseResponseEntity>(getApplicationContext()) {
                    @Override
                    protected void onResponse(BaseResponseEntity response) {
                        Toast.makeText( MainActivity.this,"关灯",Toast.LENGTH_SHORT ).show();
                    }
                } );
            }
        } );
        OpenFan.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Fan.startAnimation( Rotate );
            netWorkBusiness.control( DeviceID, FanTag, 1, new NCallBack<BaseResponseEntity>(getApplicationContext()) {
                @Override
                protected void onResponse(BaseResponseEntity response) {
                    Toast.makeText( MainActivity.this,"打开风扇",Toast.LENGTH_SHORT ).show();
                }
            } );
        }
    } );
        CloseFan.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Fan.clearAnimation();
            netWorkBusiness.control( DeviceID, FanTag, 0, new NCallBack<BaseResponseEntity>(getApplicationContext()) {
                @Override
                protected void onResponse(BaseResponseEntity response) {
                    Toast.makeText( MainActivity.this,"关闭风扇",Toast.LENGTH_SHORT ).show();
                }
            } );
        }
    } );
}
    private void InitView(){
        Tmp = findViewById( R.id.Tmp );
        Hum = findViewById( R.id.Hum );
        InputTmp = findViewById( R.id.InputTmp );
        InputTmpOk = findViewById( R.id.InputOk );
        ConnectCloud = findViewById( R.id.ConnectCloud );
        CloseLamp = findViewById( R.id.LampClose );
        OpenLamp = findViewById( R.id.LampOpen );
        ButtonOpenLamp = findViewById( R.id.ButtonOpenLamp );
        ButtonCloseLamp = findViewById( R.id.ButtonCloseLamp );
        Fan = findViewById( R.id.Fan );
        OpenFan = findViewById( R.id.OpenFan );
        CloseFan= findViewById( R.id.CloseFan );
    }
    private void InitAnimation(){
        Rotate = AnimationUtils.loadAnimation( MainActivity.this,R.anim.rotate );
        Rotate.setDuration(1000);
        //animation.setRepeatCount(-1); //无限旋转
        Rotate.setRepeatMode(1);
        Rotate.setFillAfter(true);
        CycleInterpolator interpolator = new CycleInterpolator(1);
        Rotate.setInterpolator(interpolator);
    }
    private void GetData(){
        /**登陆开始*/
        ConnectCloud.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                netWorkBusiness.signIn( new SignIn( UserName, PassWord ), new NCallBack<BaseResponseEntity<User>>(getApplicationContext()) {
                    @Override
                    protected void onResponse(BaseResponseEntity<User> response) {
                    }
                    @Override
                    public void onResponse(Call<BaseResponseEntity<User>> call, Response<BaseResponseEntity<User>> response) {
                        BaseResponseEntity<User> body = response.body();
                        if (body != null){
                            if (body.getStatus() == 0){
                                AccessToken = body.getResultObj().getAccessToken();
                                if (AccessToken == null){
                                    Toast.makeText( MainActivity.this,"访问令牌为空",Toast.LENGTH_SHORT ).show();
                                    return;
                                }
                                netWorkBusiness = new NetWorkBusiness( AccessToken, Url);
                            }
                        }
                    }
                } );
            }
        } );
                /**登陆结束*/
         thread = new Thread( ()->{
            while (true){
                /**while start*/
                try{
                    Thread.sleep( 2000 );
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
                /**获取温度数据开始*/
                netWorkBusiness.getSensors( DeviceID, TmpTag, new NCallBack<BaseResponseEntity<List<SensorInfo>>>(getApplicationContext()) {
                    @Override
                    protected void onResponse(BaseResponseEntity<List<SensorInfo>> response) {
                    }
                    @Override
                    public void onResponse(Call<BaseResponseEntity<List<SensorInfo>>> call, Response<BaseResponseEntity<List<SensorInfo>>> response) {
                        BaseResponseEntity<List<SensorInfo>> body = response.body();
                        if (body != null){
                            if (body.getStatus() == 0){
                                TmpValue = Double.parseDouble( body.getResultObj().get( 0 ).getValue() );
                            }
                        }
                    }
                } );
                /**获取温度数据结束*/
                /**改变温度的值*/
                runOnUiThread( ()->{
                    Tmp.setText( TmpValue+" ℃" );
                } );
                /**改变温度的值*/
                /**获取湿度数据开始*/
                netWorkBusiness.getSensors( DeviceID, HumTag, new NCallBack<BaseResponseEntity<List<SensorInfo>>>(getApplicationContext()) {
                    @Override
                    protected void onResponse(BaseResponseEntity<List<SensorInfo>> response) {
                    }
                    @Override
                    public void onResponse(Call<BaseResponseEntity<List<SensorInfo>>> call, Response<BaseResponseEntity<List<SensorInfo>>> response) {
                        BaseResponseEntity<List<SensorInfo>> entity = response.body();
                        if (entity != null){
                            if (entity.getStatus() == 0){
                                HumValue = Double.parseDouble( entity.getResultObj().get( 0 ).getValue() );
                            }
                        }
                    }
                } );
                /**获取湿度数据结束*/
                /**改变湿度的值*/
                runOnUiThread( ()->{
                    Hum.setText( HumValue+" RH" );
                } );
                /**改变湿度的值*/
                /**while end*/
            }
        } );
        thread.start();
    }
    /**如果大于规定温度,开启风扇*/
    private void ControlFan(int GetTmpValue){
        if (GetTmpValue > MaxTmpValue){
            netWorkBusiness.control( DeviceID, LightTag, 1, new NCallBack<BaseResponseEntity>(getApplicationContext()) {
                @Override
                protected void onResponse(BaseResponseEntity response) {
                }
                @Override
                public void onResponse(Call<BaseResponseEntity> call, Response<BaseResponseEntity> response) {
                    Toast.makeText( MainActivity.this,"风扇已经开启",Toast.LENGTH_SHORT ).show();
                }
            } );
        }else if (GetTmpValue< MInTmpValue){
            netWorkBusiness.control( DeviceID, LightTag, 0, new NCallBack<BaseResponseEntity>(getApplicationContext()) {
                @Override
                protected void onResponse(BaseResponseEntity response) {
                }
                @Override
                public void onResponse(Call<BaseResponseEntity> call, Response<BaseResponseEntity> response) {
                    Toast.makeText( MainActivity.this,"风扇已经关闭",Toast.LENGTH_SHORT ).show();
                }
            } );
        }
    }



相关文章
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【4月更文挑战第9天】本文对比了Python三大Web框架Django、Flask和Pyramid。Django功能全面,适合快速开发,但学习曲线较陡;Flask轻量灵活,易于入门,但默认配置简单,需自行添加功能;Pyramid兼顾灵活性和可扩展性,适合不同规模项目,但社区及资源相对较少。选择框架应考虑项目需求和开发者偏好。
889 0
|
存储 Linux 数据安全/隐私保护
AccessData AD1镜像格式完全剖析
流行的数字取证工具FTK Imager创造了一种逻辑镜像格式,在取证界广泛使用,但鲜少有人对其格式进行研究。
1764 4
AccessData AD1镜像格式完全剖析
|
安全 网络安全 SDN
网络安全中的蜜罐技术与威胁诱捕:主动防御的新篇章
【7月更文挑战第6天】随着网络安全威胁的日益严峻,蜜罐技术与威胁诱捕技术作为主动防御的重要手段,正逐步成为网络安全领域的新宠。通过不断的技术创新和实践应用,我们有理由相信,在未来的网络安全战争中,蜜罐与威胁诱捕技术将发挥越来越重要的作用,为我们的网络安全保驾护航。
1115 6
|
机器学习/深度学习 存储 算法
提升数据中心能效的智能温控策略
【4月更文挑战第17天】 在数据中心的运营管理中,能效优化是一项持续的挑战。随着能源成本的不断上升和对环境影响的日益关注,开发智能且高效的温控系统显得尤为重要。本文提出了一种基于机器学习算法的智能温控策略,该策略通过实时监测数据中心的环境参数并动态调整冷却设备的工作状态,旨在降低能耗并保证系统的稳定运行。通过与传统温控方法进行比较,结果表明,智能温控策略能够有效减少能源消耗并提高整体效率。
|
机器学习/深度学习 传感器 算法
基于深度学习的图像识别技术在无人机导航中的应用
【2月更文挑战第28天】 在现代科技快速发展的背景下,无人机(UAV)技术已成为军事和民用领域中的一项关键技术。其自主导航能力的提升对于执行复杂任务至关重要。本文主要探讨了利用深度学习模型优化无人机的图像识别能力,进而提高其在未知环境下的导航精度与可靠性。通过对比实验分析,验证了所提出方法的有效性,并对未来的研究方向进行了展望。
|
数据可视化 Docker Python
yolo5 onnx2rknn 瑞芯微香橙派 rk3588
本人博客 自转多平台发布
729 2
|
Android开发
Unrecognized Android Studio (or Android Support plugin for IntelliJ IDEA) version ‘202.7660.26.42.74
Unrecognized Android Studio (or Android Support plugin for IntelliJ IDEA) version ‘202.7660.26.42.74
660 0
Unrecognized Android Studio (or Android Support plugin for IntelliJ IDEA) version ‘202.7660.26.42.74
|
存储 机器学习/深度学习 弹性计算
阿里云GPU云服务器常见问题及官方资料解答汇总
阿里云基于EGS平台推出了GPU云服务器,在提供GPU加速能力的同时,保留了与普通ECS实例一致的使用体验。您在创建ECS实例时,选择企业级异构计算规格即可。下面是阿里云GPU云服务器的一些常见问题及官方资料解答汇总,以供大家参考和了解阿里云GPU云服务器。
1685 0
阿里云GPU云服务器常见问题及官方资料解答汇总