那么如何实现一款智能灯APP呢?首先先了解下智能灯的基础功能
您可以根据实际需求选择需要的选择方案,支持多选,然后根据Podfile和Gradle进行SDK的集成。
点击获取密码,获取SDK的AppKey,AppSecret,安全图片等信息。
在AndroidStudio中新建工程。
build.gradle文件里添加集成准备中下载的dependencies依赖库。
repositories{jcenter()}[!TIP]
点击"下载安全图片"——"安全图片下载"下载安全图片。
在集成准备中点击“下载安全图片”。将下载的安全图片命名为“t_s.bmp”,放置到工程目录的assets文件夹下。
在AndroidManifest.xml文件里配置appkey和appSecret,在配置相应的权限等
用于初始化SDK,请在Application中初始化SDK,确保所有进程都能初始化。
示例代码
publicclassTuyaSmartAppextendsApplication{@OverridepublicvoidonCreate(){super.onCreate();TuyaHomeSdk.init(this);}}appId和appSecret需要配置AndroidManifest.xml文件里,也可以在初始化代码里初始化。
TuyaHomeSdk.init(Applicationapplication,Stringappkey,StringappSerect)注销涂鸦智能云连接在退出应用的时候调用以下接口注销掉。
TuyaHomeSdk.onDestroy();调试开关在debug模式下可以开启SDK的日志开关,查看更多的日志信息,帮助快速定位问题。在release模式下建议关闭日志开关。
//homesdk依赖,注意,必须使用大于等于此版本的SDKimplementation'com.tuya.smart:tuyasmart:3.20.0'//控制SDK依赖implementation'com.tuya.smart:tuyasmart-centralcontrol:1.0.2'需要注意的是,tuyasmart-centralcontrol使用了kotlin编译,需要引入kotlin库确保其正常使用。
kotlin接入
在根目录的build.gradle中引入kotlin插件的依赖:
buildscript{ext.kotlin_version='1.3.72'dependencies{...classpath"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"}}在app的build.gradle中引入kotlin插件和kotlin包:
ITuyaDevicemDevice=TuyaHomeSdk.newDeviceInstance(StringdevId);//监听控制结果mDevice.registerDevListener(newIDevListener(){@OverridepublicvoidonDpUpdate(StringdevId,StringdpStr){}@OverridepublicvoidonRemoved(StringdevId){}@OverridepublicvoidonStatusChanged(StringdevId,booleanonline){}@OverridepublicvoidonNetworkStatusChanged(StringdevId,booleanstatus){}@OverridepublicvoidonDevInfoUpdate(StringdevId){}});mDevice.publishDps("{\"101\":true}",newIResultCallback(){@OverridepublicvoidonError(Stringcode,Stringerror){Toast.makeText(mContext,"开灯失败",Toast.LENGTH_SHORT).show();}@OverridepublicvoidonSuccess(){Toast.makeText(mContext,"开灯成功",Toast.LENGTH_SHORT).show();}});这种方式控制时,会发送dpId,如101、102之类的给设备来控制。其中101就是这个设备定义的开关dpId。
这么做的缺点是,如果另一个设备也有开关功能,但是不是101控制开关,你就需要传入不同的参数来控制。而当n个设备都有开关功能,但是却dpId都不同,就要写非常多的适配逻辑。
为了解决同一个功能定义的id不同的问题,引入了标准指令的概念。
根据产品id判断当前产品是否支持标准指令。
使用标准指令需要判断当前设备是否支持标准指令控制,不支持的设备不可以使用该控制方式,只能使用之前的接口控制。
示例代码:
booleanisStandard=TuyaHomeSdk.getDataInstance().isStandardProduct("your_product_id");其中的productId是产品id,可从DeviceBean中获取。
标准指令就是特定功能的标准编号。如照明类设备的开灯功能,其标准指令一定是"switch_led"。发送控制指令switch_led,一定可以控制照明设备的开关。
在集成了此SDK之后,调用方式变化如下:
ITuyaDevicemDevice=TuyaHomeSdk.newDeviceInstance(StringdevId);//注意:这里方法是registerDeviceListener,注册的Listener是IDeviceListenertuyaDevice.registerDeviceListener(newIDeviceListener(){@OverridepublicvoidonDpUpdate(StringdevId,Map
值得注意的是,目前不是所有设备都支持标准指令控制,后文会说明如何判断该设备是否支持标准指令控制。
如果不支持的设备,而又必须使用标准控制,需要联系涂鸦适配。
所有标准指令都可以在涂鸦智能平台查找到:
等等。
有了tuyaDevice.publishCommands方法和上面的指令,就可以发送标准指令来控制设备。
涂鸦iot平台上有很多品类的iot设备,不同的品类在涂鸦平台上都有固定的编号(category)。
使用category字段可以判断当前设备是什么产品,来展示不同的面板。
此表格包含大多数支持的品类,具体可参见iot平台。
通过产品id获取产品的品类值。
Stringcategory=TuyaHomeSdk.getDataInstance().getStandardProductConfig("your_product_id").category;照明设备控制涂鸦照明设备同时存在v1和v2新旧两种固件,即使使用了标准指令,也需要开发两套控制逻辑。
因此对照明设备功能进行封装,封装了灯具设备的开关、工作模式切换、亮度控制、冷暖控制、彩光控制和四种情景模式的控制。
ITuyaLightDevicelightDevice=newTuyaLightDevice(StringdevId);该对象封装了灯的所有dp点,包括控制指令的下发和上报。
这里提供几个简单的调用示例:
方法说明
/***注册监听*/voidregisterLightListener(ILightListenerlistener);其中,ILightListener回调如下:
publicinterfaceILightListener{/***监听照明设备dp点变化**@paramdataPoint该灯具所有dp点的状态*/voidonDpUpdate(LightDataPointdataPoint);/***设备移除*/voidonRemoved();/***设备上下线*/voidonStatusChanged(booleanonline);/***网络状态*/voidonNetworkStatusChanged(booleanstatus);/***设备信息更新例如name之类的*/voidonDevInfoUpdate();}参数说明
值得说明的是LightDataPoint对象,该对象封装了当前设备所有功能点。当功能点发生变化时,将会回调。每次回调的都会是完整的对象。
以下是该对象参数的具体含义:
publicclassLightDataPoint{/***开关*/publicbooleanpowerSwitch;/***工作模式。*
*MODE_WHITE为白光模式;*MODE_COLOUR为彩光模式;*MODE_SCENE为情景模式;*/publicLightModeworkMode;/***亮度百分比,从0到100*/publicintbrightness;/***色温百分比,从0到100*/publicintcolorTemperature;/***颜色值,HSV色彩空间.*
*其中H为色调,取值范围0-360;*其中S为饱和度,取值范围0-100;*其中V为明度,取值范围0-100;*/publicLightColourDatacolorHSV;/***彩灯情景。**SCENE_GOODNIGHT为晚安情景;*SCENE_WORK为工作情景;*SCENE_READ为阅读情景;*SCENE_CASUAL为休闲情景;*/publicLightScenescene;}获取当前灯的类型灯共分为一路灯(仅有白光)、二路灯(白光+冷暖控制)、三路灯(仅有彩光模式)、四路灯(白光+彩光)、五路灯(白光+彩光+冷暖)。
这5种灯具在功能定义上有所区别,在开发相应的UI和控制时有所区别。
该方法可获取当前灯的类型。
/***获取当前是几路灯**@return{@linkLightType}*/LightTypelightType();其中LightType中定义的类型有:
/***白光灯,dpCode:bright_value*/TYPE_C,/***白光+冷暖,dpCode:bright_value+temp_value*/TYPE_CW,/***RGB,dpCode:colour_data*/TYPE_RGB,/***白光+RGB,dpCode:bright_value+colour_data*/TYPE_RGBC,/***白光+冷暖+RGB,dpCode:bright_value+temp_value+colour_data*/TYPE_RGBCW获取当前设备所有功能的值打开一个设备面板时,需要获取所有功能点值来展示。可通过此接口获取上面提到的LightDataPoint对象。
/***获取灯所有功能点的值*/LightDataPointgetLightDataPoint();开关控制灯的开关
/***开灯or关灯**@paramstatustrueorfalse*@paramresultCallbackcallback*/voidpowerSwitch(booleanstatus,IResultCallbackresultCallback);参数说明
控制工作模式的切换。
/***切换工作模式**@parammode工作模式*@paramresultCallbackcallback*/voidworkMode(LightModemode,IResultCallbackresultCallback);参数说明
调用示例
如切换到彩光模式:
lightDevice.workMode(LightMode.MODE_COLOUR,newIResultCallback(){@OverridepublicvoidonError(Stringcode,Stringerror){Log.i("test_light","workModeonError:"+code+error);}@OverridepublicvoidonSuccess(){Log.i("test_light","workModeonSuccess");}});注意:部分灯具必须切换到对应的工作模式才可以控制,比如控制彩光,必须先切换到彩光模式才可以发颜色的值。
控制亮度
/***亮度控制。**@paramstatus亮度的百分比,取值范围0-100*@paramresultCallbackcallback*/voidbrightness(intstatus,IResultCallbackresultCallback);参数说明
控制灯的冷暖值
/***色温控制**@paramstatus色温的百分比,取值范围0-100*@paramresultCallbackcallback*/voidcolorTemperature(intstatus,IResultCallbackresultCallback);参数说明
控制彩色灯的颜色
/***设置彩灯的颜色**@paramhue色调(范围:0-360)*@paramsaturation饱和度(范围:0-100)*@paramvalue明度(范围:0-100)*@paramresultCallbackcallback*/voidcolorHSV(inthue,intsaturation,intvalue,IResultCallbackresultCallback);情景切换彩灯的情景模式,目前共有四种模式:
LightScene.SCENE_GOODNIGHT为晚安情景;LightScene.SCENE_WORK为工作情景;LightScene.SCENE_READ为阅读情景;LightScene.SCENE_CASUAL为休闲情景;