WhatieSDK 1.3.0

WhatieSDK 1.3.0

IIDreams 维护。



 
依赖关系
CocoaAsyncSocket>= 0
MQTTClient= 0.8.8
 

WhatieSDK 1.3.0

  • ATI-Wuhan

CocoaPods compatible

WahtieSDK 版本 1.3.0 更新于 2018-11-02

What's new:

2018-11-02:
APIs for Incandescent Light have been published.Please refer to 6 and 7 and 9.2.

History:

2018-08-19:
Rename room of device.Please refer to 6.6.

2018-08-15:
"Unable to update device status" may not be appear if mobile network well.

2018-07-28:
Update some of the information returned.

1.功能概述

WhatieSDK 是 ATI TECHNOLOGY (WUHAN) CO.,LTD. 为第三方快速访问我们的 ATI IoT 云平台而提供的 SDK。使用此 SDK,开发者几乎可以在电源插座和 RGBW 灯泡上完成所有功能点,例如用户注册/登录登出、智能配置、添加/共享/移除设备、设备控制、定时倒计时、定时器等。

注意:为了将 SDK 集成到您的应用中,不需要在云平台上进行任何后端开发。您只需在您的应用端完成所有工作。

2.准备工作

注册一个开发者账户

在 ATI 云平台上注册一个第三方开发者账户,以创建自开发产品、创建功能点等。

注意:我们已经为 SAKAR 注册了一个账户,并将其邮箱发送给了 SAKAR。SAKAR 可以跳过此步骤。

获取appId和secretKey

前往开发平台 - 应用管理 - 创建新应用,以获取用于初始化SDK的& <code>appId</code>和& <code>secretKey</code>(适用于Android和iOS)。

注意:我们已经为SAKAR申请了appId和secretKey,并发邮件给SAKAR。SAKAR可以跳过此步骤。

SDK 示例

SDK 示例是一个完整的APP,包含了注册、登录、分享、反馈、网络配置和设备控制等主要流程和操作。示例代码可以作为第三方开发的良好参考。 下载链接

3.SDK 集成

要求

  • iOS 8 或更高版本
  • Xcode 9 或更高版本

使用CocoaPods进行快速集成(注意:版本8.0或更高版本支持)

在文件& <code>Podfileó中添加以下内容:

platform :ios, '8.0'   
target 'Your_Project_Name' do  
    
    pod 'WhatieSDK',:git => 'https://github.com/ATI-Wuhan/WhatieSDK_iOS.git'  
end

在项目根目录中执行命令& <code>pod install</code>开始集成过程。有关CocoaPods的说明,请参阅& <a href="https://guides.cocoapods.org.cn">CocoaPods 指南</a>

备选方法:使用框架手动安装

您还可以将WhatieSDK作为框架添加到您的项目或工作区。

  1. 下载WhatieSDK.framework
  2. 在Xcode中打开您的项目,然后将WhatieSDK.framework拖放到您的项目中。
  3. 使用#import <WhatieSDK/WhatieSDK.h>在需要WhatieSDK的地方包含它

初始化SDK

您可以将以下代码添加到项目文件PrefixHeader.pch: #import <WhatieSDK/WhatieSDK.h> 打开文件 AppDelegate.m,并在 application:didFinishLaunchingWithOptions: 方法中使用从开发平台获取的 appIdsecretKey 初始化SDK,如下所示

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    //Init WhatieSDK
    [[EHOMESDK shareInstance] startWithAppId:appId secretKey:secretKey];
    
    //your code...
}

现在,所有的准备工作都已经完成。

示例代码规范

除非其他说明,以下示例代码均位于ViewController类的实现文件中。

@interface ViewController : UIViewController



@end



@implementation ViewController



//All example code are located here...



@end

4.用户管理

SDK提供用户管理功能,例如用户注册、用户登录、用户登出、登录密码更新和更改昵称。

注意

  1. 关于用户管理程序的其他所有信息对SDK都不是必须的。
  2. 用户电子邮件和密码的密文也将存储在我们的云平台上。
  3. 集成SDK到您的APP无需在云端的任何后端开发。

所有用户相关功能都可以在EHOMEUserModel类(单例)中找到。

4.1 用户注册

注意:以下示例代码是注册方法的成功调用。注册后,用户会自动登录,无需再调用登录方法。

电子邮件注册

电子邮件注册过程中不需要验证码。用户可以直接使用电子邮件注册账户。

-(void)registerByEmail{
    
    [[EHOMEUserModel shareInstance] registerByEmail:@"your_email" password:@"your_password" success:^(id responseObject) {
        NSLog(@"register success");            
    } failure:^(NSError *error) {
        NSLog(@"register failed");
    }];
}

4.2 用户登录

调用成功后,用户的会话将由SDK本地存储。下次启动应用时,用户将默认登录,无需进行更多登录操作。

电子邮件登录

-(void)loginByEmail{
    
    [[EHOMEUserModel shareInstance] loginByEmail:@"your_email" password:@"your_password" success:^(id responseObject) {
        NSLog(@"login success = %@", responseObject);
    } failure:^(NSError *error) {
        NSLog(@"login failed = %@", error);
    }];
}

4.3 用户密码重置

使用电子邮件地址重置密码

如果您忘记密码,可以通过包含两个步骤的电子邮件地址重置您的密码:

  • 将验证码发送到邮箱
-(void)sendVerifyCodeByEmail{
    [[EHOMEUserModel shareInstance] sendVerifyCodeByEmail:@"your_email" success:^(id responseObject) {
        NSLog(@"Verify Code sent success. res = %@", responseObject);            
    } failure:^(NSError *error) {
        NSLog(@"Verify Code sent filed. error = %@", error);
    }];
}
  • 然后使用收到的验证码重置密码
-(void)resetPasswordByEmail {
    [[EHOMEUserModel shareInstance] resetPasswordByEmail:@"your_email" newPassword:@"your_password" code:@"verify_code" success:^(id responseObject) {
        NSLog(@"Reset password success. res = %@", responseObject);
    } failure:^(NSError *error) {
        NSLog(@"Reset password failed. error = %@", error);
    }];
}

4.4 使用旧密码重置密码

如果您只想更新密码,可以使用电子邮件地址和旧密码来重置密码

-(void)resetPasswordByOldPassword{
    [[EHOMEUserModel shareInstance] resetPasswordByOldPassword:@"your_old_password" newPassword: @"your_new_password" email:@"your_email" success:^(id responseObject) {
        NSLog(@"Reset Password Success = %@", responseObject);
    } failure:^(NSError *error) {
        NSLog(@"Reset Password Failed = %@", error);
    }];
}

4.5 更新用户设备列表

使用 [[EHOMEUserModel shareInstance] syncDeviceWithCloud…] 方法可以更新用户的当前设备列表 deviceArray

每个 deviceArray 都是 <EHOMEDeviceModel * > 类型。设备属性可以在 EHOMEDeviceModel.h 中找到。

-(void)reloadDeviceList{
    [[EHOMEUserModel shareInstance] syncDeviceWithCloud:^(id responseObject) {
        NSLog(@"Get my devices successful : %@", responseObject);
        NSLog(@"deviceArray : %@", [EHOMEUserModel shareInstance].deviceArray);
    } failure:^(NSError *error) {
        NSLog(@"Get my devices failed : %@", error);
    }];
}

4.6 处理设备列表更改

监听 EHOMEUserNotificationDeviceArrayChanged 通知,以便在设备列表数据 [EHOMEUserModel shareInstance].deviceArray 发生任何更改时接收通知。

//register notice EHOMEUserNotificationDeviceArrayChanged

-(void)viewDidLoad{
    //Register Notice
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadData) name: EHOMEUserNotificationDeviceArrayChanged object:nil];
}



-(void)reloadData{
    
    //Refresh UI here

}



-(void)dealloc{

    [[NSNotificationCenter defaultCenter] removeObserver:self];

}

4.7 更新用户接收到的共享设备列表

使用 [[EHOMEUserModel shareInstance] syncSharedDeviceWithCloud…] 方法可以更新用户的当前共享设备列表 sharedDeviceArray

-(void)reloadSharedDeviceList{
    [[EHOMEUserModel shareInstance] syncSharedDeviceWithCloud:^(id responseObject) {
        NSLog(@"Get shared devices successful : %@", responseObject);
        NSLog(@"sharedDeviceArray : %@", [EHOMEUserModel shareInstance].sharedDeviceArray);
    } failure:^(NSError *error) {
        NSLog(@"Get shared devices failed : %@", error);
    }];
}

4.8 处理用户接收到的共享设备列表更改

监听 EHOMEUserNotificationSharedDeviceArrayChanged 通知,以便在设备列表数据 [EHOMEUserModel shareInstance].sharedDeviceArray 发生任何更改时接收通知。

//register notice EHOMEUserNotificationSharedDeviceArrayChanged

-(void)viewDidLoad{
    //Register Notice
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadData) name: EHOMEUserNotificationSharedDeviceArrayChanged object:nil];
}



-(void)reloadData{

    //Refresh UI here
}



-(void)dealloc{
    
    [[NSNotificationCenter defaultCenter] removeObserver:self];

}

4.9 更新昵称

用户可以通过更新昵称的方式更改用户名,具体方法如下

-(void)updateNickname:(NSString *)nickname{
    
    [[EHOMEUserModel shareInstance] updateNickname:@"your_nickname" success:^(id responseObject) {
        NSLog(@"update nickname success. res = %@", responseObject);                
    } failure:^(NSError *error) {
        NSLog(@"update nickname failed. error = %@", error);
    }];
}

4.10 登出

用户可以通过以下方法登出应用程序

-(void)loginOut{
    [[EHOMEUserModel shareInstance] loginOut:^(id responseObject) {
        NSLog(@"logOut success = %@", responseObject);
    } failure:^(NSError *error) {
        NSLog(@"logOut failed = %@", error);
    }];
}

5. SmartConfig和设备初始化

5.1 SmartConfig

设备使用EHOMESmartConfig单例函数执行网络配置,如下所示

-(void)smartConfig{
    [[EHOMESmartConfig shareInstance] startSmartConfigWithSsid:@"your_ssid" bssid:@"your_bssid" password:@"your_wifi_password" success:^(id responseObject) {
        NSLog(@"Smart config success = %@", responseObject);

        NSInteger protocol = [[responseObject objectForKey:@"protocol"] integerValue];
        //if protocol == 9,it’s your device;else,the device is other’s,you can get the eamil
        if (protocol == 9) {
            //success
        }else{
            //the device is other's
            NSString *email = [[responseObject objectForKey:@"data"] objectForKey:@"email"];
        }
    } failure:^(NSError *error) {
        NSLog(@"Smart config failed = %@", error);
    }];
}

停止SmartConfig

启动SmartConfig后,应用程序将连续广播WiFi网络信息(直到SmartConfig成功或超时)。要取消操作,应调用[[EHOMESmartConfig shareInstance] stopSmartConfig]方法。

-(void)stopSmartConfigAction{
    
    [[EHOMESmartConfig shareInstance] stopSmartConfig];
}

5.2 设备初始化

完成SmartConfig过程后,设备应使用devId和设备名称进行初始化。

-(void)getStarted{
    [[EHOMESmartConfig shareInstance] getStartedWithDevId:@"your_device_devId" deviceName:@"your_deviceName" success:^(id responseObject) {
        NSLog(@"GET STARTED Success = %@", responseObject);
    } failure:^(NSError *error) {
        NSLog(@"GET STARTED Failed = %@", error);
    }];
}  

6. 设备控制

6.1 开关设备

您可以通过以下方法打开/关闭设备:

-(void)updateDeviceStatus:(BOOL)status{
    [self.device updateDeviceStatus:@"your_status" success:^(id responseObject) {
        NSLog(@"update device status success. res = %@", responseObject);
    } failure:^(NSError *error) {
        NSLog(@"update device status failed. error = %@", error);
    }];
}

6.2 重命名设备

可以通过以下方式重命名设备名称:

-(void)updateDeviceName:(NSString *)deviceName{
    [self.device updateDeviceName:@"your_deviceName" success:^(id responseObject) {
        NSLog(@"update device name success. res = %@", responseObject);            
    } failure:^(NSError *error) {
        NSLog(@"update device name failed. error = %@", error);
    }];
}

6.3 删除设备

如果您不需要该设备,不论是自己使用的还是他人分享给您的,都可以删除。如果删除的是自己的设备,设备会被重置到网络待连接状态。

-(void)removeDevice{
    [self.device removeDevice:^(id responseObject) {
        NSLog(@"remove device success = %@", responseObject);
    } failure:^(NSError *error) {
        NSLog(@"remove device failed = %@", error);
    }];
}

6.4 通过电子邮件分享设备

您可以通过以下方式将设备分享给朋友:

-(void)shareDeviceByEmail{
    [self.device shareDeviceByEmail:@"your_friend_email" success:^(id responseObject) {
        NSLog(@"share device success. res = %@", responseObject);
    } failure:^(NSError *error) {
        NSLog(@"share device failed. error = %@", error);
    }];
}

6.5 删除共享

请参阅第6.3 删除设备。

6.6 重命名设备房间

-(void)updateDeviceRoomName{
    [self.device updateRoomName:@"your_room_name" success:^(id responseObject) {
        //update room name success
    } failure:^(NSError *error) {
        //update room name failed
    }];
}

7. 计时器

重要提示: 循环:@“0000000”,每一位,0:关闭,1:开启,代表从左到右:星期日 星期六 星期五 星期四 星期三 星期二 星期一

7.1 添加计时器

设置计时器在特定时间操作设备。当计时器时间到达时,您的设备操作将生效。
@param loops
@param finishTime : 用户设置的特定时间,例如:@"18:57"
@param status : 当计时器到达时设备的预期状态

-(void)addTimer{
    [self.device addTimerWithLoops:@"your_loops" time:@"your_time" status:@"your_status" tag:@"your_tag" success:^(id responseObject) {
        NSLog(@"add timer success, response = %@", responseObject);
    } failure:^(NSError *error) {
        NSLog(@"add timer failed, error = %@", error);
    }];
}

7.2 更新计时器

您可以通过以下方式更新/修改指定的计时器。

-(void)updateTimer{
    [self.timer updateTimerWithLoops:@"your_loops" time:@"your_time" status:@"your_status" tag:@"your_tag" success:^(id responseObject) {
        NSLog(@"update timer success, response = %@", responseObject);
    } failure:^(NSError *error) {
        NSLog(@"update timer failed, error = %@", error);
    }];
}

7.3 更新计时器状态

使用以下方法更新指定设备下特定计时器的状态,即,0:关闭,1:开启

-(void)updateTimerStatus:(BOOL)status{
    [self.timer updateTimerStatus:@"your_timerStatus" success:^(id responseObject) {
        NSLog(@"update timer status success.response = %@", responseObject);        
    } failure:^(NSError *error) {
        NSLog(@"update timer status failed.error = %@", error);
    }];
}

7.4 删除计时器

通过以下方式删除指定设备下的指定计时器。

- (void)removeTimer {
    
    [self.timer removeTimer:^(id responseObject) {
        NSLog(@"remove timer success.response = %@", responseObject);
    } failure:^(NSError *error) {
        NSLog(@"remove timer failed.error = %@", error);
    }];
}

7.5 获取所有计时器

通过以下方式获取指定设备下的所有计时器。

- (void)getAllTimers{
    [self.device getAllTimers:^(id responseObject) {
        NSLog(@"get all timers success,timers = %@", responseObject);
    } failure:^(NSError *error) {
        NSLog(@"get all timers failed,error = %@", error);
    }];
}

8. 时间倒计时

可以为特定设备创建时间倒计时。

8.1 添加时间倒计时

设备上的操作将在时间倒计时结束后生效。
@param status : 倒计时结束时设备的状态
@param duration : 时间倒计时的持续时间。单位为秒,例如10seconds;如果为10分钟,值是600。

-(void)addTimingCountdown{
    [self.device addTimingCountdownWithDuration:"your_duration" status:"your_status" success:^(id responseObject) {
        NSLog(@"add timing countdown success. res = %@", responseObject);
        int duration = [[responseObject objectForKey:@"duration"] intValue];
    } failure:^(NSError *error) {            
        NSLog(@"add timing countdown failed. error = %@", error);
    }];
}

8.2 获取时间倒计时

在特定设备下获取时间倒计时,然后,您可以在APP中显示其值。

-(void)getTimingCountdown{
    [self.device getTimingCountdown:^(id responseObject) {
        NSLog(@"get timing countdown success. res = %@", responseObject);
        EHOMETimer *timer = responseObject;
    } failure:^(NSError *error) {
        NSLog(@"get timing countdown failed. error = %@", error);
    }];
}  

8.3 更新时间倒计时

一旦更新了时间倒计时,它将成为一个新的倒计时。请参阅8.1 添加时间倒计时。

9. 灯泡

9.1 开/关

请参阅第6.1节中的设备开/关操作。

9.2 白炽灯泡

您可以通过以下方法更改特定灯的光亮度:

-(void)brightnessSliderValueChange:(UISlider *)slider{
    
    NSLog(@"brightness slider value = %f", slider.value);

    
    [self.device updateIncandescentLightBrightness:(int)slider.value success:^(id responseObject) {
        
    } failure:^(NSError *error) {
        
    }];    
}

9.3 RGB灯泡

9.3.1 更新RGB灯泡颜色

您可以通过以下方法更新特定RGB灯泡的颜色:

-(void)updateRGBLightColor{
    
        NSString *rgb = [NSString stringWithFormat:@"%d_%d_%d", r, g, b];


        [self.device updateRGBLightColorWithRGB:rgb success:^(id responseObject) {
            
        } failure:^(NSError *error) {
            
        }];
}

9.3.2 更新RGB灯泡光亮度

您可以通过以下方法更新特定RGB灯泡的光亮度:

-(void)rgbBrightnessSliderValueChange:(UISlider *)slider{
    
    NSLog(@"rgb brightness slider value = %f", slider.value);
    
    [self.device updateRGBLightBrightness:(int)slider.value success:^(id responseObject) {
        
    } failure:^(NSError *error) {
        
    }];
}

9.4 流水灯

9.4.1 更新流水灯颜色

您可以通过以下方法更新特定流水灯的颜色:

-(void)updateStreamLightColor{

    [self.device updateStreamLightColorWithRGB1:@"your_rgb_color_1" RGB2:@"your_rgb_color_2" RGB3:@"your_rgb_color_3" RGB4:@"your_rgb_color_4" success:^(id responseObject) {
        
    } failure:^(NSError *error) {
        
    }];

}

9.4.2 更新流灯持续时间

您可以通过以下方法更新特定流灯的时间持续时间

-(void)updateStreamLightDuration{

    
    [self.device updateStreamLightDuration:(int)@"your_duration" success:^(id responseObject) {
        
    } failure:^(NSError *error) {
        
    }];

}

9.4.3 更新流灯亮度

您可以通过以下方法更新特定流灯的亮度

-(void)updateStreamLightBrightness{

    [self.device updateStreamLightBrightness:(int)@"your_brightness" success:^(id responseObject) {
        
    } failure:^(NSError *error) {
        
    }];
}

欢迎联系我们

许可证

WhatieSDK使用MIT许可证。