chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何基于App SDK快速地開(kāi)發(fā)一個(gè)IoT App

電子設(shè)計(jì) ? 來(lái)源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2020-12-08 23:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、背景及大綱介紹

在如今物聯(lián)網(wǎng)DCM(Device、Connect、Manage)的大框架下,有一個(gè)應(yīng)用層來(lái)分析和處理數(shù)據(jù),是必備技能。但是,對(duì)于一個(gè)公司來(lái)說(shuō),因?yàn)檠邪l(fā)能力或者研發(fā)時(shí)間的原因,可能很難短期內(nèi)完全自己開(kāi)發(fā)出一個(gè)適用的App來(lái)。寫(xiě)代碼、封裝通用功能、還要考慮其他多種功能,統(tǒng)統(tǒng)都是很耗費(fèi)時(shí)間的事情?,F(xiàn)在很多物聯(lián)網(wǎng)平臺(tái)公司,為了幫助開(kāi)發(fā)者解決此類(lèi)問(wèn)題,也想出了相應(yīng)的解決辦法,提供相應(yīng)的SDK就是其中一種。

今天抽空以基于App SDK完成智能家居App的開(kāi)發(fā)為例。通過(guò)這一篇文章,你就能通過(guò)創(chuàng)建App SDK、集成SDK、創(chuàng)建家庭、設(shè)備配網(wǎng)和設(shè)備控制等步驟,完整地完成一款智能家居App的開(kāi)發(fā)。

先列一下開(kāi)發(fā)大綱:

創(chuàng)建App SDK
集成SDK
注冊(cè)和登錄
創(chuàng)建家庭
設(shè)備配網(wǎng)
設(shè)備控制
我們?cè)賮?lái)簡(jiǎn)單介紹一下Tuya App SDK:

涂鴉智能 App SDK 專(zhuān)為 IoT 移動(dòng) App 開(kāi)發(fā)打造,提供豐富組件和示例代碼,開(kāi)發(fā)者可以快速實(shí)現(xiàn)移動(dòng) App 對(duì)智能設(shè)備的連接、控制以及豐富的智能場(chǎng)景應(yīng)用。

產(chǎn)品的優(yōu)勢(shì)在于:

低門(mén)檻快速集成:快速集成 SDK,提供示例代碼、Demo App、接入案例等,低門(mén)檻輕松上手;
開(kāi)發(fā)組件豐富:組件化開(kāi)發(fā),提供垂直品類(lèi) SDK、UI 業(yè)務(wù)包等功能組件,開(kāi)發(fā)者根據(jù)需求靈活組合;
智能功能全面:全面覆蓋用戶(hù)、設(shè)備、智能場(chǎng)景等多種功能模塊,開(kāi)發(fā)者只需簡(jiǎn)單實(shí)現(xiàn) UI 層代碼;
主流通信協(xié)議兼容:同一 App 中支持添加和使用主流通信協(xié)議產(chǎn)品,輕松實(shí)現(xiàn) All In One – App;
全球數(shù)據(jù)安全保障:雙通道安全加密,五重安全策略,全球數(shù)據(jù)安全合規(guī)認(rèn)證,全面保障用戶(hù)數(shù)據(jù)隱私安全;
全球服務(wù)穩(wěn)定:全球化智能云部署,讓每一個(gè) App 都輕松擁有億級(jí)海量設(shè)備和千萬(wàn)級(jí)用戶(hù)并發(fā)處理能力。
App SDK的技術(shù)架構(gòu)如下:

二、如何基于 App SDK 開(kāi)發(fā)一個(gè) App

準(zhǔn)備就緒,我們來(lái)開(kāi)始開(kāi)發(fā)!

(一)創(chuàng)建App SDK

1. 注冊(cè)開(kāi)發(fā)者賬號(hào)

前往 涂鴉智能開(kāi)發(fā)平臺(tái) 注冊(cè)開(kāi)發(fā)者賬號(hào)、創(chuàng)建產(chǎn)品、創(chuàng)建功能點(diǎn)等,具體流程請(qǐng)參考接入流程

2. 創(chuàng)建SDK應(yīng)用

涂鴉 IoT 平臺(tái)中 “App 工作臺(tái)” 中點(diǎn)擊 “App SDK”,點(diǎn)擊“創(chuàng)建 App”。

3. 填寫(xiě) App 相關(guān)信息,點(diǎn)擊確認(rèn)。

  • 應(yīng)用名稱(chēng):填寫(xiě)你的 App 名稱(chēng)。
  • iOS 應(yīng)用包名:填寫(xiě)你的 iOS App 包名(建議格式:com.xxxxx.xxxxx)。
  • 安卓應(yīng)用包名:填寫(xiě)你的安卓 App 包名(兩者可以保持一致,也可以不一致)。
  • 渠道標(biāo)識(shí)符:不是必填項(xiàng),如果不填寫(xiě),系統(tǒng)會(huì)根據(jù)包名自動(dòng)生成。

你可以根據(jù)實(shí)際需求選擇需要的選擇方案,支持多選,然后根據(jù) Podfile 和 Gradle 進(jìn)行 SDK 的集成。

點(diǎn)擊獲取密碼,獲取 SDK 的 AppKey,AppSecret,安全圖片等信息。

(二)集成 SDK

1. 使用 CocoaPods 快速集成

請(qǐng)注意:SDK 最低支持系統(tǒng)版本 9.0

在 Podfile 文件中添加以下內(nèi)容:

`platform :ios, '9.0'

 target 'Your_Project_Name' do

    pod "TuyaSmartHomeKit"

end`

然后在項(xiàng)目根目錄下執(zhí)行 pod update 命令進(jìn)行集成。

2. 初始化 SDK

1) 打開(kāi)項(xiàng)目設(shè)置,Target => General,修改 Bundle Identifier 為涂鴉開(kāi)發(fā)者平臺(tái)對(duì)應(yīng)的 iOS 包名

2) 導(dǎo)入安全圖片到工程根目錄,重命名為 t_s.bmp,并加入「項(xiàng)目設(shè)置 => Target => Build Phases => Copy Bundle Resources」中。

3) 在項(xiàng)目的PrefixHeader.pch文件添加以下內(nèi)容:

#import
4) 打開(kāi)AppDelegate.m文件,在[AppDelegate application:didFinishLaunchingWithOptions:]方法中初始化SDK。

接口說(shuō)明

初始化 SDK

- (void)startWithAppKey:(NSString *)appKey secretKey:(NSString *)secretKey;
參數(shù)說(shuō)明

實(shí)例代碼

[[TuyaSmartSDK sharedInstance] startWithAppKey:<#your_app_key#> secretKey:<#your_secret_key#>];

3. 打開(kāi) Debug 模式

在開(kāi)發(fā)的過(guò)程中可以開(kāi)啟 Debug 模式,打印一些日志用于分析問(wèn)題,開(kāi)發(fā)結(jié)束上線后建議關(guān)閉。

`#ifdef DEBUG

    [[TuyaSmartSDK sharedInstance] setDebugMode:YES];

#else

#endif`

(三)注冊(cè)和登錄

涂鴉云支持多種用戶(hù)體系:手機(jī)、郵箱、UID。其中手機(jī)支持驗(yàn)證碼登錄和密碼登錄兩種方式,UID 登錄主要用于已經(jīng)有自己賬號(hào)體系的場(chǎng)景。我們這里采用手機(jī)驗(yàn)證碼注冊(cè)登錄。

在注冊(cè)登錄方法中,需要提供 countryCode 參數(shù)(國(guó)家區(qū)號(hào)),用于就近選擇涂鴉云的可用區(qū)。各個(gè)可用區(qū)的數(shù)據(jù)是相互獨(dú)立的,因此在 中國(guó)大陸(86) 注冊(cè)的賬號(hào),在 美國(guó)(1) 無(wú)法使用(用戶(hù)不存在)。

1. 手機(jī)密碼注冊(cè)

手機(jī)號(hào)密碼注冊(cè)流程分為以下兩步: 獲取手機(jī)驗(yàn)證碼 - 注冊(cè)賬號(hào)

// 發(fā)送驗(yàn)證碼   

[[TuyaSmartUser sharedInstance] sendVerifyCode:@"86" phoneNumber:@"1300****" type:1 success:^{

 [TPDemoProgressUtils showSuccess:@"Verification code sent successfully" toView:nil];

} failure:^(NSError *error) {

  [TPDemoProgressUtils showError:error.localizedDescription];

}];

// 通過(guò)驗(yàn)證碼注冊(cè)賬號(hào)

[[TuyaSmartUser sharedInstance] registerByPhone:@"86" phoneNumber:@"1300****" password:@"***" code:@"code" success:^{

    // 注冊(cè)成功,跳轉(zhuǎn)到首頁(yè)

 [[TYDemoApplicationImpl sharedInstance]    resetRootViewController:[TYDemoTabBarViewController class]];

} failure:^(NSError *error) {

  [TPDemoProgressUtils showError:error.localizedDescription];

}];

2. 判斷是否已經(jīng)登錄

在程序啟動(dòng)后,如果登錄過(guò)了就不需要重復(fù)登錄,session的有效期是45天,直接到設(shè)備列表頁(yè)面。如果沒(méi)有登錄過(guò),就先到登錄頁(yè)進(jìn)行登錄,登錄成功后再跳轉(zhuǎn)到設(shè)備列表頁(yè)。

// 判斷是否已經(jīng)登錄

if ([TuyaSmartUser sharedInstance].isLogin) {

  // 首頁(yè)

 [self resetRootViewController:[TYDemoTabBarViewController class]];

} else {

 // 登錄頁(yè)

 [[TYDemoRouteManager sharedInstance] openRoute:kTYDemoPopLoginVC withParams:nil];

}

3. Session 失效處理

長(zhǎng)期未登錄或者密碼修改后的賬號(hào),在訪問(wèn)服務(wù)端接口的時(shí)候會(huì)返回 Session 過(guò)期的錯(cuò)誤,需要監(jiān)聽(tīng) TuyaSmartUserNotificationUserSessionInvalid 通知,跳轉(zhuǎn)至登錄頁(yè)面重新登錄。

 (void)loadNotification {

  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sessionInvalid) name:TuyaSmartUserNotificationUserSessionInvalid object:nil];

}

(void)sessionInvalid {

    NSLog(@"sessionInvalid");

    //跳轉(zhuǎn)至登錄頁(yè)面

    MyLoginViewController *vc = [[MyLoginViewController alloc] init];

    self.window.rootViewController = vc;

  [self.window makeKeyAndVisible];

}

(四) 創(chuàng)建家庭

用戶(hù)登錄成功后需要通過(guò) TuyaSmartHomeManager 去獲取整個(gè)家庭列表的信息,然后初始化其中的一個(gè)家庭TuyaSmartHome,獲取家庭詳情信息,就可以對(duì)家庭中的設(shè)備進(jìn)行操作控制。

1. 家庭列表獲取

在設(shè)備列表頁(yè)面,我們先獲取用戶(hù)下的家庭列表,如果沒(méi)有家庭,我們創(chuàng)建一個(gè)默認(rèn)家庭。因?yàn)樵O(shè)備激活的時(shí)候,需要把設(shè)備添加到家庭里面。

獲取到家庭列表之后,我們就可以初始化一個(gè)家庭,然后從云端獲取家庭的詳情,刷新首頁(yè)的設(shè)備列表。

 (void)initData {



    _homeManager = [[TuyaSmartHomeManager alloc] init];

  _homeManager.delegate = self;



  // 獲取本地的當(dāng)前家庭
  
  NSString *homeId = [[NSUserDefaults standardUserDefaults] objectForKey:kDefaultCurrentHomeId];

 if ([homeId longLongValue] > 0) {

      self.home = [TuyaSmartHome homeWithHomeId:[homeId longLongValue]];

      if (self.home) {

            self.home.delegate = self;

           self.topBarView.leftItem.title = [NSString stringWithFormat:@"%@ ∨", self.home.homeModel.name];

            [TYDemoSmartHomeManager sharedInstance].currentHomeModel = self.home.homeModel;

          // 刷新設(shè)備列表數(shù)據(jù)

           [self reloadDataFromCloud];

       } else {

           // 如果沒(méi)有,獲取第一個(gè)家庭

           [self loadFirstHomeData];

       }

  } else {

      // 如果沒(méi)有,獲取第一個(gè)家庭

       [self loadFirstHomeData];

 }

}

 (void)reloadDataFromCloud {

    WEAKSELF_AT

   [self.refreshControl beginRefreshing];

    // 獲取當(dāng)前家庭的詳情,并刷新列表

 [self.home getHomeDetailWithSuccess:^(TuyaSmartHomeModel *homeModel) {

   

     [weakSelf_AT reloadData];

 } failure:^(NSError *error) {

        if ([error.localizedFailureReason isEqualToString:@"PERMISSION_DENIED"]) {

         [weakSelf_AT loadFirstHomeData];

      }

      [weakSelf_AT.refreshControl endRefreshing];

  }];

}

2. 新增一個(gè)家庭

// add home

- (void)rightBtnAction {

   NSString *homeName = [NSString stringWithFormat:@"Home_%@", @(self.homeManager.homes.count)];

 WEAKSELF_AT

 [self.homeManager addHomeWithName:homeName geoName:@"hangzhou" rooms:@[@"room1"] latitude:0 longitude:0 success:^(long long homeId) {

      [TPDemoProgressUtils showSuccess:@"Add Success" toView:nil];

      // 切換到新增家庭

       TuyaSmartHome *home = [TuyaSmartHome homeWithHomeId:homeId];

     [weakSelf_AT swithCurrentHomeIdWithHomeModel:home.homeModel];

 } failure:^(NSError *error) {

      [TPDemoProgressUtils showError:error.localizedDescription];

  }];

}

3. 家庭列表信息變化回調(diào)

實(shí)現(xiàn) TuyaSmartHomeManagerDelegate 代理協(xié)議后,可以在家庭列表更變的回調(diào)中進(jìn)行處理。

#pragma mark - TuyaSmartHomeManagerDelegate

// 添加一個(gè)家庭   

- (void)homeManager:(TuyaSmartHomeManager *)manager didAddHome:(TuyaSmartHomeModel *)home {

   NSLog(@"Add a home %@", home.name);

}

// 刪除一個(gè)家庭

 (void)homeManager:(TuyaSmartHomeManager *)manager didRemoveHome:(long long)homeId {

 // 如果刪除的家庭是當(dāng)前家庭,當(dāng)前家庭切換到另外一個(gè)

 if ([TYDemoSmartHomeManager sharedInstance].currentHomeModel.homeId == homeId) {

       [self loadFirstHomeData];

    }

}

// MQTT連接成功

- (void)serviceConnectedSuccess {

   // 去云端獲取當(dāng)前家庭的詳情,然后去刷新 UI

  [self reloadDataFromCloud];

}

4. 單個(gè)家庭信息變化的回調(diào)

實(shí)現(xiàn) TuyaSmartHomeDelegate 代理協(xié)議后,可以在單個(gè)家庭信息更變的回調(diào)中進(jìn)行處理。

#pragma mark - TuyaSmartHomeDelegate

// 家庭的信息更新,例如name

- (void)homeDidUpdateInfo:(TuyaSmartHome *)home {

    [self.tableView reloadData];

}

// 添加一個(gè)房間

- (void)home:(TuyaSmartHome *)home didAddRoom:(TuyaSmartRoomModel *)room {

 [self.tableView reloadData];

}

// 刪除一個(gè)房間

- (void)home:(TuyaSmartHome *)home didRemoveRoom:(long long)roomId {

  [self.tableView reloadData];

}

// 我收到的共享設(shè)備列表變化

- (void)homeDidUpdateSharedInfo:(TuyaSmartHome *)home {

  [self.tableView reloadData];

}

// 房間信息變更,例如name

- (void)home:(TuyaSmartHome *)home roomInfoUpdate:(TuyaSmartRoomModel *)room {

  [self.tableView reloadData];

}

// 房間與設(shè)備,群組的關(guān)系變化

- (void)home:(TuyaSmartHome *)home roomRelationUpdate:(TuyaSmartRoomModel *)room {

 [self.tableView reloadData];

}

// 添加設(shè)備

- (void)home:(TuyaSmartHome *)home didAddDeivice:(TuyaSmartDeviceModel *)device {

 [self.tableView reloadData];

}

// 刪除設(shè)備

- (void)home:(TuyaSmartHome *)home didRemoveDeivice:(NSString *)devId {

   [self.tableView reloadData];

}

// 設(shè)備信息更新,例如name

- (void)home:(TuyaSmartHome *)home deviceInfoUpdate:(TuyaSmartDeviceModel *)device {

  [self.tableView reloadData];

}

// 設(shè)備dp數(shù)據(jù)更新

- (void)home:(TuyaSmartHome *)home device:(TuyaSmartDeviceModel *)device dpsUpdate:(NSDictionary *)dps {

  [self.tableView reloadData];

}

// 添加群組

- (void)home:(TuyaSmartHome *)home didAddGroup:(TuyaSmartGroupModel *)group {

   [self.tableView reloadData];

}

// 群組dp數(shù)據(jù)更新

- (void)home:(TuyaSmartHome *)home group:(TuyaSmartGroupModel *)group dpsUpdate:(NSDictionary *)dps {

    [self.tableView reloadData];

}

// 刪除群組

- (void)home:(TuyaSmartHome *)home didRemoveGroup:(NSString *)groupId {

   [self.tableView reloadData];

}

// 群組信息更新,例如name

- (void)home:(TuyaSmartHome *)home groupInfoUpdate:(TuyaSmartGroupModel *)group {

 [self.tableView reloadData];

}

(五) 設(shè)備配網(wǎng)

設(shè)備配網(wǎng)是指設(shè)備在云端進(jìn)行激活注冊(cè)。

1. 相關(guān)類(lèi)

2. EZ 配網(wǎng)

這里主要介紹下 EZ 模式開(kāi)發(fā),又稱(chēng)快連模式(SmartConfig)。

- (void)addDeviceWithEZMode {



    // 獲取token

    WEAKSELF_AT

    id impl =       [[TYDemoConfiguration sharedInstance] serviceOfProtocol:@protocol(TYDemoDeviceListModuleProtocol)];

    long long homeId = [impl currentHomeId];

    [[TuyaSmartActivator sharedInstance]    getTokenWithHomeId:homeId success:^(NSString *token) {

        // 開(kāi)始配網(wǎng)

        [weakSelf_AT commitEZModeActionWithToken:token];

    } failure:^(NSError *error) {

   

        info = [NSString stringWithFormat:@"%@: token fetch     failed, error message is    %@",NSStringFromSelector(_cmd),error.localizedDescription];

        [weakSelf_AT appendConsoleLog:info];

    }];

}

// 開(kāi)始配網(wǎng)

- (void)commitEZModeActionWithToken:(NSString *)token {

    [TuyaSmartActivator sharedInstance].delegate = self;

    [[TuyaSmartActivator sharedInstance]    startConfigWiFi:TYActivatorModeEZ ssid:self.ssidField.text  password:self.passwordField.text token:token timeout:timeout];

}

#pragma mark - TuyaSmartActivatorDelegate

- (void)activator:(TuyaSmartActivator *)activator didReceiveDevice:(TuyaSmartDeviceModel *)deviceModel error:(NSError *)error {



    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(countDown) object:nil];

    timeout = timeLeft;

    [self hideProgressView];



    NSString *info = [NSString stringWithFormat:@"%@:   Finished!", NSStringFromSelector(_cmd)];

    [self appendConsoleLog:info];

    if (error) {

         // 配網(wǎng)失敗

        info = [NSString stringWithFormat:@"%@: Error-%@!", NSStringFromSelector(_cmd), error.localizedDescription];

        [self appendConsoleLog:info];

    } else {

        // 配網(wǎng)成功

        info = [NSString stringWithFormat:@"%@: Success-You've added device %@ successfully!", NSStringFromSelector(_cmd), deviceModel.name];

        [self appendConsoleLog:info];

    }

}

智能設(shè)備配網(wǎng)成功后就有了聯(lián)網(wǎng)能力,就可以進(jìn)行遠(yuǎn)程控制了。

(六)設(shè)備控制

設(shè)備激活后,就可以進(jìn)行智能設(shè)備的控制,然后監(jiān)聽(tīng)設(shè)備控制變化的回調(diào)。

1. 相關(guān)類(lèi)

在進(jìn)行設(shè)備控制之前,我們先了解下設(shè)備功能點(diǎn)的概念。

2. 設(shè)備功能點(diǎn)

功能點(diǎn)是對(duì)產(chǎn)品功能的抽象表示,是具體智能設(shè)備功能的抽象,用于描述產(chǎn)品功能及其參數(shù)。

? 功能點(diǎn) ID:功能點(diǎn)的編碼。設(shè)備與云端的功能數(shù)據(jù)通過(guò)功能點(diǎn) ID 進(jìn)行傳輸。

? 功能點(diǎn)名稱(chēng):自定義的功能名稱(chēng)。

? 標(biāo)識(shí)名:功能點(diǎn) Code 值,用于 App 顯示功能名稱(chēng)的多語(yǔ)言管理。支持字母、數(shù)字和下劃線,以字母開(kāi)頭。

? 數(shù)據(jù)類(lèi)型:

? 數(shù)據(jù)傳輸類(lèi)型:

 |-可下發(fā)可上報(bào):指令數(shù)據(jù)可以發(fā)送給設(shè)備,設(shè)備數(shù)據(jù)可以傳輸給云端。

 |- 只上報(bào):數(shù)據(jù)只支持從設(shè)備傳輸給云端。

 |- 只下發(fā):數(shù)據(jù)只支持從云端發(fā)送給設(shè)備。

TuyaSmartDeviceModel 類(lèi)的 dps 屬性(NSDictionary 類(lèi)型)定義了當(dāng)前設(shè)備的狀態(tài),稱(chēng)作數(shù)據(jù)點(diǎn)(DP 點(diǎn))或功能點(diǎn)

dps 字典里的每個(gè) key 對(duì)應(yīng)一個(gè)功能點(diǎn)的 dpId,value 對(duì)應(yīng)一個(gè)功能點(diǎn)的 dpValue,dpValue 為該功能點(diǎn)的值

產(chǎn)品功能點(diǎn)定義參見(jiàn)涂鴉開(kāi)發(fā)者平臺(tái)的產(chǎn)品功能,如下圖所示:

發(fā)送控制指令按照以下格式:

{"":""}

根據(jù)后臺(tái)該產(chǎn)品的功能點(diǎn)定義,如下:

示例代碼

- (void)publishDps {

    // self.device = [TuyaSmartDevice   deviceWithDeviceId:@"your_device_id"];

    // self.device.delegate = self;

    NSDictionary *dps;

    //設(shè)置dpId為1的布爾型功能點(diǎn)示例 作用:開(kāi)關(guān)打開(kāi)

    dps = @{@"1": @(YES)};

    //設(shè)置dpId為4的字符串型功能點(diǎn)示例 作用:設(shè)置RGB顏色為ff5500

    dps = @{@"4": @"ff5500"};

    //設(shè)置dpId為5的枚舉型功能點(diǎn)示例 作用:設(shè)置檔位為2檔

    dps = @{@"5": @"2"};

    //設(shè)置dpId為6的數(shù)值型功能點(diǎn)示例 作用:設(shè)置溫度為20°

    dps = @{@"6": @(20)};

    //設(shè)置dpId為15的透?jìng)餍?byte數(shù)組)功能點(diǎn)示例 作用:透?jìng)?a href="http://www.brongaenegriffin.com/tags/紅外/" target="_blank">紅外數(shù)據(jù)為1122

    dps = @{@"15": @"1122"};

    //多個(gè)功能合并發(fā)送

    dps = @{@"1": @(YES), @"4": @(ff5500)};

    [self.device publishDps:dps success:^{

        NSLog(@"publishDps success");

        //下發(fā)成功,狀態(tài)上報(bào)通過(guò) deviceDpsUpdate方法 回調(diào)

    } failure:^(NSError *error) {

        NSLog(@"publishDps failure: %@", error);

    }];

}

注意事項(xiàng)

? 控制命令的發(fā)送需要特別注意數(shù)據(jù)類(lèi)型

比如功能點(diǎn)的數(shù)據(jù)類(lèi)型是數(shù)值型(value),那控制命令發(fā)送的應(yīng)該是 @{@"2": @(25)} 而不是 @{@"2": @"25"}

? 透?jìng)黝?lèi)型傳輸?shù)?byte 數(shù)組是字符串格式(16 進(jìn)制字符串)、字母需小寫(xiě)并且必須是偶數(shù)位

比如正確的格式是: @{@"1": @"011f"} 而不是 @{@"1": @"11f"}

功能點(diǎn)更多概念參見(jiàn)快速入門(mén)-功能點(diǎn)相關(guān)概念

3. 設(shè)備初始化和設(shè)備變化代理監(jiān)聽(tīng)

需要通過(guò) TuyaSmartHome 初始化一個(gè) home 實(shí)例,然后調(diào)用接口 getHomeDetailWithSuccess:failure: 獲取家庭的詳情,同步過(guò)家庭的詳情后,初始化設(shè)備才能成功。錯(cuò)誤的設(shè)備 id 可能會(huì)導(dǎo)致初始化失敗,此時(shí)設(shè)備的實(shí)例返回 nil。

- (void)publishDps {

    self.device = [TuyaSmartDevice  deviceWithDeviceId:@"your_device_id"];

    self.device.delegate = self;

    [self.device publishDps:@{@"1" : @{YES}} success:^{

        NSLog(@"publishDps success");

        //下發(fā)成功,狀態(tài)上報(bào)通過(guò) deviceDpsUpdate方法 回調(diào)

    } failure:^(NSError *error) {

        NSLog(@"publishDps failure: %@", error);

    }];

}

#pragma mark - TuyaSmartDeviceDelegate

/// dp數(shù)據(jù)更新

- (void)device:(TuyaSmartDevice *)device dpsUpdate:(NSDictionary *)dps {

    [self.tableView reloadData];

}

/// 設(shè)備信息更新

- (void)deviceInfoUpdate:(TuyaSmartDevice *)device {


}   

/// 設(shè)備被移除

- (void)deviceRemoved:(TuyaSmartDevice *)device {


}

三、總結(jié)

我們已經(jīng)完成了一個(gè) IoT App 對(duì)智能硬件設(shè)備的激活入網(wǎng),設(shè)備控制等主要環(huán)節(jié),通過(guò)上述的流程說(shuō)明,相信你已經(jīng)可以基于App SDK完成一個(gè)智能家居App的開(kāi)發(fā),感興趣就去試試吧,有問(wèn)題可以評(píng)論或者私聊!

???????四、參考

IoT App SDK 簡(jiǎn)介

Tuya Home SDK

Demo 鏈接

審核編輯:符乾江

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 語(yǔ)音識(shí)別
    +關(guān)注

    關(guān)注

    39

    文章

    1782

    瀏覽量

    114250
  • 人工智能
    +關(guān)注

    關(guān)注

    1807

    文章

    49029

    瀏覽量

    249636
  • IOT
    IOT
    +關(guān)注

    關(guān)注

    187

    文章

    4305

    瀏覽量

    201911
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    HarmonyOS 代碼工坊的指尖開(kāi)發(fā),讓 APP 開(kāi)發(fā)所見(jiàn)即所得

    過(guò)去,移動(dòng)端 APP開(kāi)發(fā),往往是開(kāi)發(fā)者在桌面仿真界面上的場(chǎng)“隔空演練”。 雖然市面上已經(jīng)有些簡(jiǎn)化
    的頭像 發(fā)表于 06-24 12:08 ?176次閱讀
    HarmonyOS 代碼工坊的指尖<b class='flag-5'>開(kāi)發(fā)</b>,讓 <b class='flag-5'>APP</b> <b class='flag-5'>開(kāi)發(fā)</b>所見(jiàn)即所得

    使用DevEcoStudio 開(kāi)發(fā)、編譯鴻蒙 NEXT_APP 以及使用中文插件

    # 使用DevEcoStudio 開(kāi)發(fā)、編譯鴻蒙 NEXT_APP 以及使用中文插件 #鴻蒙開(kāi)發(fā)工具 #DevEco Studio ## 1. 概述 DevEco Studio 是華為提供
    發(fā)表于 06-11 17:18

    app和deviceConfig的切換介紹

    app和deviceConfig的切換 為了便于開(kāi)發(fā)者維護(hù)應(yīng)用級(jí)別的屬性配置,Stage模型將config.json中的app和deviceConfig標(biāo)簽提取到了app.json5
    發(fā)表于 06-05 06:42

    定時(shí)模塊app_timer用法及常見(jiàn)問(wèn)題—nRF5 SDK模塊系列二

    app_timer是大家經(jīng)常用到的個(gè)庫(kù),app_timer的功能就是定時(shí),也就是說(shuō),你在某時(shí)刻啟動(dòng)
    的頭像 發(fā)表于 05-12 16:13 ?253次閱讀
    定時(shí)模塊<b class='flag-5'>app</b>_timer用法及常見(jiàn)問(wèn)題—nRF5 <b class='flag-5'>SDK</b>模塊系列二

    Meshtastic APP使用介紹

    meshtastic APP使用介紹
    的頭像 發(fā)表于 03-05 09:59 ?752次閱讀
    Meshtastic <b class='flag-5'>APP</b>使用介紹

    秒驗(yàn):重構(gòu)APP用戶(hù)體驗(yàn)與運(yùn)營(yíng)效率

    漏斗。而基于運(yùn)營(yíng)商網(wǎng)關(guān)的“秒驗(yàn)證”技術(shù)(如秒驗(yàn)鍵登錄),通過(guò)免輸入、無(wú)感知的驗(yàn)證方式,正在成為APP企業(yè)提升用戶(hù)體驗(yàn)、優(yōu)化運(yùn)營(yíng)效率的核心工具。數(shù)據(jù)顯示,采用該技術(shù)的APP注冊(cè)轉(zhuǎn)化率
    的頭像 發(fā)表于 02-28 10:40 ?395次閱讀

    如何快速創(chuàng)建用戶(hù)自定義Board和App工程

    概述自HPM_SDKv1.7.0發(fā)布開(kāi)始,在HPM_ENV中新增了user_template文件夾,以方便用戶(hù)快速創(chuàng)建自定義的Board和App工程。user_template是用戶(hù)模板工程,用戶(hù)
    的頭像 發(fā)表于 02-08 13:38 ?524次閱讀
    如何<b class='flag-5'>快速</b>創(chuàng)建用戶(hù)自定義Board和<b class='flag-5'>App</b>工程

    基于迅為RK3568開(kāi)發(fā)板全國(guó)產(chǎn)平臺(tái),快速實(shí)現(xiàn)APP開(kāi)機(jī)自啟動(dòng)技術(shù)分享

    基于迅為RK3568開(kāi)發(fā)板全國(guó)產(chǎn)平臺(tái),快速實(shí)現(xiàn)APP開(kāi)機(jī)自啟動(dòng)技術(shù)分享
    的頭像 發(fā)表于 11-21 13:58 ?963次閱讀
    基于迅為RK3568<b class='flag-5'>開(kāi)發(fā)</b>板全國(guó)產(chǎn)平臺(tái),<b class='flag-5'>快速</b>實(shí)現(xiàn)<b class='flag-5'>APP</b>開(kāi)機(jī)自啟動(dòng)技術(shù)分享

    工業(yè)APP與智能制造

    1 工業(yè) APP 與智能制造 工業(yè)軟件是我國(guó)智能制造的重要基礎(chǔ)和核心支撐, 工業(yè)APP 是智能制造和工業(yè)互聯(lián)網(wǎng)時(shí)代的新型工業(yè)軟件。根據(jù)《工業(yè)APP白皮書(shū)(2020)》定義: 工業(yè) APP
    的頭像 發(fā)表于 11-08 10:19 ?672次閱讀

    安卓APP開(kāi)發(fā)中,如何使用加密芯片?

    加密芯片是種專(zhuān)門(mén)設(shè)計(jì)用于保護(hù)信息安全的硬件設(shè)備,它通過(guò)內(nèi)置的加密算法對(duì)數(shù)據(jù)進(jìn)行加密和解密,以防止敏感數(shù)據(jù)被竊取或篡改。如下圖HD-RK3568-IOT工控板,搭載ATSHA204A加密芯片,常用于有安全防護(hù)要求的工商業(yè)場(chǎng)景,下文將為大家介紹安卓
    的頭像 發(fā)表于 10-31 17:43 ?1002次閱讀
    安卓<b class='flag-5'>APP</b><b class='flag-5'>開(kāi)發(fā)</b>中,如何使用加密芯片?

    蘋(píng)果正開(kāi)發(fā)App Store相似的新游戲應(yīng)用程序

    10月23日訊,據(jù)最新媒體報(bào)道,蘋(píng)果正加大對(duì)游戲領(lǐng)域的投入,并著手開(kāi)發(fā)款與App Store相似的新游戲應(yīng)用程序。   這款新應(yīng)用將整合App Store與Game Cente
    的頭像 發(fā)表于 10-23 13:40 ?784次閱讀

    機(jī)智云智家APP的設(shè)備掃描與綁定限制

    在使用機(jī)智云的智家APP時(shí),用戶(hù)可能會(huì)遇到無(wú)法掃描和綁定設(shè)備的問(wèn)題。這現(xiàn)象的根本原因在于智家APP的使用限制和付費(fèi)策略。Q智家APP的功能概述是什么?智家
    的頭像 發(fā)表于 09-22 08:02 ?591次閱讀
    機(jī)智云智家<b class='flag-5'>APP</b>的設(shè)備掃描與綁定限制

    單片機(jī)WiFi模塊怎樣連接手機(jī)APP

    連接 :將WiFi模塊與單片機(jī)物理連接。 編程單片機(jī) :編寫(xiě)代碼使單片機(jī)能通過(guò)WiFi模塊與互聯(lián)網(wǎng)通信。 創(chuàng)建服務(wù)器 :在單片機(jī)上創(chuàng)建個(gè)小型服務(wù)器,以便手機(jī)APP可以與之通信。 開(kāi)發(fā)
    的頭像 發(fā)表于 09-10 15:31 ?3628次閱讀

    Gokit二次開(kāi)發(fā):云端快速APP生成

    Gokit是機(jī)智云(GizWits)推出的物聯(lián)網(wǎng)智能硬件開(kāi)發(fā)套件,目的是幫助傳統(tǒng)硬件快速接入互聯(lián)網(wǎng)。完成入網(wǎng)之后,數(shù)據(jù)可以在產(chǎn)品與云端、制造商與用戶(hù)之間互聯(lián)互通,實(shí)現(xiàn)智能互聯(lián)。本文內(nèi)容為Gokit
    的頭像 發(fā)表于 08-30 12:15 ?672次閱讀
    Gokit二次<b class='flag-5'>開(kāi)發(fā)</b>:云端<b class='flag-5'>快速</b><b class='flag-5'>APP</b>生成

    如何向Buildroot內(nèi)添加外部APP

    Linux項(xiàng)目開(kāi)發(fā),如何在BuildRoot框架內(nèi)添加外部APP呢?本文以quect-CM撥號(hào)軟件為例,做開(kāi)發(fā)演示。
    的頭像 發(fā)表于 07-22 17:48 ?684次閱讀
    如何向Buildroot內(nèi)添加外部<b class='flag-5'>APP</b>