如何基于SDK快速开发一款IoTApp控制智能灯泡(Android版)涂鸦物联网足迹

那么如何实现一款智能灯APP呢?首先先了解下智能灯的基础功能

您可以根据实际需求选择需要的选择方案,支持多选,然后根据Podfile和Gradle进行SDK的集成。

点击获取密码,获取SDK的AppKey,AppSecret,安全图片等信息。

在AndroidStudio中新建工程。

build.gradle文件里添加集成准备中下载的dependencies依赖库。

repositories{jcenter()}[!TIP]

点击"下载安全图片"——"安全图片下载"下载安全图片。

在集成准备中点击“下载安全图片”。将下载的安全图片命名为“t_s.bmp”,放置到工程目录的assets文件夹下。

在AndroidManifest.xml文件里配置appkey和appSecret,在配置相应的权限等

混淆配置在proguard-rules.pro文件配置相应混淆配置

用于初始化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,MapdpCodeMap){}@OverridepublicvoidonRemoved(StringdevId){}@OverridepublicvoidonStatusChanged(StringdevId,booleanonline){}@OverridepublicvoidonNetworkStatusChanged(StringdevId,booleanstatus){}@OverridepublicvoidonDevInfoUpdate(StringdevId){}});HashMapdpCodeMap=newHashMap<>();dpCodeMap.put("switch_led",true);//发送标准指令tuyaDevice.publishCommands(dpCodeMap,newIResultCallback(){@OverridepublicvoidonError(Stringcode,Stringerror){Toast.makeText(mContext,"开灯失败",Toast.LENGTH_SHORT).show();}@OverridepublicvoidonSuccess(){Toast.makeText(mContext,"开灯成功",Toast.LENGTH_SHORT).show();}});注意:标准指令使用方法registerDeviceListener注册监听,非标准是registerDevListener

值得注意的是,目前不是所有设备都支持标准指令控制,后文会说明如何判断该设备是否支持标准指令控制。

如果不支持的设备,而又必须使用标准控制,需要联系涂鸦适配。

所有标准指令都可以在涂鸦智能平台查找到:

等等。

有了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为休闲情景;

THE END
1.聊聊API设计的签名调用方申请App Key 和 App Secret 在生成请求时,首先生成一个nonce无意义的字符串,字符串由调用方决定。App Key + nonce + App Secret 拼接后,进行SHA1加密,将App Key, nonce, 和加密后的串作为请求的一部分附加在请求上。 服务提供方不对nonce是否使用过进行校验。收到请求后,验证签名,验证通过后处理。 https://www.jianshu.com/p/e2f88335b455
2.头条文章后台配置Appkey和Appsecret是什么? AppID:应用的唯一标识 AppKey:公匙(相当于账号) AppSecret:私匙(相当于密码) token:令牌(过期失效) 实际应用: 如果我们自己的App产品想运用第三方(微信等)的能力,例如微信快捷登录,则需要进入自己的第三方平台开发平台,例如https://open.weixin.qq.com/申请账号,然后查看账号的...https://card.weibo.com/article/m/show/id/2313501000014298256984209269
3.获取AppKey和AppSecret企业IT或服务商开发者,调用调用开放接口时首先需要获取access_token,而获取access_token时,需使用appkey和appsecret进行获取access_token。 第一步:成为认证开发者? 具体可查看【如何成为大象开发者】 第二步:创建应用? 进入isv应用列表,点击按钮【创建应用】,进入应用创建栏目。 https://docs.meituan.com/daxiang/server/get_key_secret/
4.AppKey和AppSecretTurboLink获取通讯秘钥(AppKey和AppSecret)? AppKey:Api通讯凭证,用来识别和鉴权调用者的身份。 AppSecret:唯一性请求加密串 ** 点击菜单栏的安全设置,进入 "安全设置"查看 ** AppKey使用? 添加在HTTPS请求的Headers中 $APPKEY即此访问密钥,可以让你通过验证系统并使用我们的后台 API。HTTPS请求头为以下格式。 http://help.branchcn.com/docs/quick-start/appKey
5.如何获取AppKey和AppSecret?问题详述如何获取AppKey和AppSecret?问题解答在移动用户反馈服务的控制台中,选择App列表,点击相应App右侧的图标,打开的界面中有AppKey和AppSecret。https://help.aliyun.com/knowledge_detail/53874.html
6.OPPO开放平台平台在哪里可以查看AppKeyAppSecret和MasterSecret...OPPO开放平台平台在哪里可以查看AppKey、AppSecret和MasterSecret? 1、首先处理完成应用上架; 2、通过审核后,在OPPO推送平台-配置管理-应用配置 页面查看AppKey、AppSecret和MasterSecret。 3、仅开发者帐号(主帐号)可查看。https://www.anzhuoe.cn/article/show/2621
7.APP怎么免费接入MobPushPMTalk5、MobPush 的初始化配置和功能接口。 5.1 配置 AppKey 和 AppSecret 在项目的 Info.plist 中添加 2 个字段:MOBAppKey 和 MOBAppSecret,对应的值是在 mob.com 官方申请的应用的 AppKey 和 AppSecret。 在Info.plist 配置 Privacy – Location When In Use Usage Description 权限以及 App Transport Security Set...https://www.pmtalk.club/active/Mdetail/11629
8.微三云帮助中心2.获取appkey和appsecret 获取商户ID 首先登陆商户账号后台,获取到商户ID,如下图所示。 新增门店 接着点击“商户中心”→“门店管理”→“店家门店”(即新增门店)。 填写门店编码和其他信息,新建完成后将门店编码填写在我们后台达达配送的门店编号处。 商户绑定 登陆开发者账号后台,点击“管理中心”→“账号中心”→...http://wsy025.com/help/helpzhongxin_content.php?help_id=24&id=634
9.飞猪需要了解应用标签审核状态可以在控制台-创建应用页面查看已获得和申请中的应用标签 3、创建应用 已经获取应用标签权限后,可以直接在控制台-创建应用页面中选择申请到权限应用标签创建应用 填写应用名称,完成应用创建。 获取AppKey和AppSecret 进入应用管理,在概览页面的APP证书可以查看App Key和App Secret。同时在该页面可...https://open.alitrip.com/doc2/detail?docType=1&articleId=103232&treeId=49
1.AppKey和AppSecret的关系appkey和appsecret是app唯一的吗AppKey:可以认为是你申请的应用的一个唯一标识 AppSecret:你申请的应用的密钥,主要用于对请求参数签名,和对回调参数验证。不能被别人知道 问题是:我们游戏的AndroidManifest文件中,AppKey和AppSecret是直接写在里面的,别人获得我们的apk文件后,反编译后,会不会直接看到我们的AppSecret?https://blog.csdn.net/lihuapinghust/article/details/21518369
2.API平台都有的AppidAppkeyAppsecret分别是什么意思?这样提供一个appid和对应的秘钥就没办法满足需求。此时就需要引入针对权限进行账号分配,通常使用appkey和appsecret。 以OSS存储为例,在后台管理界面对存储的文件拥有删除的权限,而对于用户端可能只需要读或写的权限就行。那么此时,就可以生成两对appkey和appsecret。一个用于删除,一个用于读写,达到权限的细粒度划分。https://cloud.tencent.com/developer/article/2175637
3.javaappKey与appSecret如何实现鉴权在互联网应用中,安全性是每个开发者都必须重视的一个方面,尤其是在与API或第三方服务的交互中。最常用的鉴权机制之一是基于密钥的鉴权机制,其中appKey(应用密钥)和appSecret(应用密钥的私密部分)常用于身份验证。本文将探讨如何在Java中实现这一机制,并针对一个实例进行详细说明。 https://blog.51cto.com/u_16175442/11810292
4.配置应用从2024 年 6 月 1 日开始,所有新创建的应用服务应用都可以选择生成唯一的默认主机名,命名约定为<app-name>-<random-hash>.<region>.azurewebsites.net。...在默认 Linux 应用服务或自定义 Linux 容器中,需要在应用服务中将应用设置名称(如ApplicationInsights:InstrumentationKey)中的任何嵌套 JSON 密钥结构配置为密钥...https://azure.microsoft.com/zh-cn/documentation/articles/web-sites-configure/
5.如何获取AppKey和AppSecret您好,自建应用可查看AppKey和AppSecret,机器人可查看RobotCode;详情可点击此处参考文档。管理员操作路径如下:1、【开发者后台】-【应用开发】-【钉钉应用】-点击【应用名称】/右侧【...】-【应用详情】-【AppKeyhttps://m.dingtalk.com/qidian/help-detail-1064302267
6.开放api接口平台:appidappkeyappsecret文章目录 一、什么是appid、appkey、appsecret二、云服务AppId或AppKey和AppSecret生成策略三、API接口开发安全性四、基于AccessToken方式实现API设计五、常见问题总结做API接口,为什么access_token要放在Header头里传递? 六、参考 一、什么是appid、appkey、appsecret ...http://www.zzfmdn.com/article/1261697
7....离线推送接口小米开放平台查看小米AppIdAppKey和AppSecret...查看小米开放平台APP应用小米AppId、AppKey和AppSecret。 小米厂商离线推送接口 1. 注册小米开发者账号 如果您已经拥有小米开发者账号,可忽略本节,直接阅读“2. 启用推送”。 如果您没有小米开发者账号,请参照《开发者账号注册流程》,访问小米开放平台完成开发者账号的注册。 https://www.yimenapp.com/kb-yimen/3307/
8.淘客如何重置appkey的secret?TaoKeShow近期发现很多用户对appkey和AppSecret没有足够的安全重视导致出现资金损失,这里说明一下,泄漏可能造成的影响。 appkey和AppSecret 相当于你的另一套联盟的帐号密码, 如果被别人获取, 而且你的这个appkey有创建淘礼金的权限, 那么意味着获取人可以随意使用你玩法钱包里的现金给商品进行充值, 然后进行盗刷。 https://www.taokeshow.com/50628.html
9.详解android在mob平台实现qq登陆和分享Androidapp:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/button" /> </androidx.constraintlayout.widget.ConstraintLayout> 6.配置Activity.java文件 1.记得把MobSDK.init里面的AppKey和AppSecret改为你自己申请你的。 2.qq登录代码 ...https://www.jb51.net/article/209447.htm
10.聚合CPS产品开通APP制作·新零售云商城操作教程·看云3、appkey: APPsecret: 4、必应鸟应用名称 二、聚合CPS插件 包含必应鸟开放平台对接、原生APP管理等功能。 如果您只是使用聚合CPS APP,不使用必应鸟开放平台能力,插件中必应鸟对接相关功能直接忽略即可,可以使用APP 管理功能。 我们提供免账号模式进行使用聚合CPS APP,如果您未购买必应鸟开放平台权限,同样可以使用部分必应鸟...https://www.kancloud.cn/haihongwangluo888/yunshop/2580417
11.通讯录导入使用教程2.1 获取AppKey和AppSecret (1)前往钉钉开发者后台“应用开发-企业内部开发”页面,创建一个企业内部应用(应用名称、应用描述可任意填写)。创建成功后,可以看到该应用被添加到钉钉应用目录中。 (2)点击创建好的应用,在应用详情页点击左侧菜单栏“应用信息”,查看右侧应用凭证下的AppKey和AppSecret。 https://sunlogin.oray.com/news/18743.html
12.ModelArts访问在线服务(APP认证)ModelArts用户指南当使用APP认证,且开启了简易认证模式,API请求既可以选择使用Appkey和AppSecret做签名和校验,也可以选择使用AppCode进行简易认证(ModelArts默认启用简易认证)。推荐使用AppKey/AppSecret认证,其安全性比AppCode认证要高。 AppKey/AppSecret认证:通过AppKey与AppSecret对请求进行加密签名,可标识发送方并防止请求被修改。使用App...https://ecloud.10086.cn/op-help-center/doc/article/77470
13.小程序即时配送配置指南填写配送平台Appkey、Appsecret、Shopno(商家在入驻时配送平台提供的门店编号)。 附:获取配送平台Appkey 和Appsecret 的方式 (1)顺丰同城急送 第1 步:登录顺丰同城开放平台 https://commit-openic.sf-express.com/open/api/docs/index#/homepage 第2 步:点击顶部导航条的“开发者中心” ...https://www.west.cn/faq/listagent.asp?unid=2460