# XAI_iOS **Repository Path**: haoyoung/XAI_iOS ## Basic Information - **Project Name**: XAI_iOS - **Description**: XAI - **Primary Language**: Objective-C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-04-22 - **Last Updated**: 2021-02-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # XAI_iOS #### 一、 XAI_iOS 简介 iOS SDK以Framework包形式提供。封装了物联网平台XAI各种数据接口,方便iOS端开发者轻松实现与物联网平台的对接。 #### 二、安装 [下载sdk](https://gitee.com/haoyoung/XAI_iOS/blob/master/XAISDK/XAISDK.zip) 1. 直接导入sdk。需要额外添加 OpenSSL、 CocoaAsyncSocket、FMDB 2. cocoapods ``` 添加 source 'https://gitee.com/haoyoung/XAIPrivate.git' pod install ``` #### 三、使用说明 ``` self.xaiService = [[XAI alloc]initWithHost:kHOST port:kPORT]; self.xaiService.delegate = self; [self.xaiService startWithAccount:kUSER password:kPWD success:^(XAIConnectReturnCode code) { if (code == XAIConnectionAccepted) { NSLog(@"登录成功"); [self.xaiService sendMyDev:0x0000001 verson:0x00010000 sleep:false descritpion:@"bob的手机"]; [self.xaiService sendMyDeviceConnection:true]; [self.xaiService sendMyDeviceName:@"bob"]; [self.xaiService sendMyDevicePower:100]; } } error:^(XAIConnectReturnCode code) { NSLog(@"登录失败"); }]; ``` 注: 详情看demo #### data type ``` typedef enum XAI_PKT_TYPE{ XAI_PKT_TYPE_HELLO = 0, //Hello报文 XAI_PKT_TYPE_DEV = 1, //请求设备信息 XAI_PKT_TYPE_CONTROL = 2, //向设备发送控制命令,命令格式从控制描述表获取 XAI_PKT_TYPE_STATUS = 3, //状态表报文 XAI_PKT_TYPE_IM = 4, //IM报文 XAI_PKT_TYPE_CONFIG = 5, //配置文件报文 XAI_PKT_TYPE_DEBUG = 6, //Debug报文 XAI_PKT_TYPE_ZIGBEE_LINK = 7,//igbee链路信号强度统计报文 XAI_PKT_FLAG_ACK = 0x80, // FLAG最高位为1表示此报文是一个ACK报文 }XAI_PKT_TYPE; typedef enum XAI_DATA_TYPE{ XAI_DATA_TYPE_ASCII_TEXT = 0, //字符串数据 XAI_DATA_TYPE_BIN_IMAGE = 1, // 图片数据 XAI_DATA_TYPE_BIN_FILE = 2, // 文件数据 XAI_DATA_TYPE_BIN_LOCATION = 3, // 位置数据 (经纬度) XAI_DATA_TYPE_ASCII_URL = 4, // URL数据 XAI_DATA_TYPE_BIN_ANGLE = 5, // 角度数据(0-360) XAI_DATA_TYPE_BIN_PERCENT = 6, // 百分比数据(0-100) XAI_DATA_TYPE_BIN_DATE = 7, // 时间数据(毫秒,从1970.1.1) XAI_DATA_TYPE_ASCII_HTML5 = 8, // HTML5格式的数据 XAI_DATA_TYPE_BIN_IR =9, // 红外采集数据 XAI_DATA_TYPE_ASCII_TOPIC = 10, // TOPIC权限数据 XAI_DATA_TYPE_BIN_BOOL = 11, // 布尔数据 XAI_DATA_TYPE_BIN_DIGITAL_SIGN = 12, // 有符号数字 XAI_DATA_TYPE_BIN_DIGITAL_UNSIGN = 13, // 无符号数字 XAI_DATA_TYPE_BIN_APSN = 14, // 设备编号 XAI_DATA_TYPE_BIN_LUID = 15, // 本地唯一编号 XAI_DATA_TYPE_BIN_DELAY = 16, // 延时数据 XAI_DATA_TYPE_BIN_BUTTON = 17, // BUTTON控件 XAI_DATA_TYPE_BIN_PKT = 18, // 通用数据报文 XAI_DATA_TYPE_BIN_LINK_TRIGGER = 19, // 联动条件数据 XAI_DATA_TYPE_BIN_LINK_ACTION = 20, // 联动动作数据 XAI_DATA_TYPE_BIN_PUSH_CONFIG = 21, // 推送 }XAI_DATA_TYPE; ``` ##### XAIDelegate ``` /** 发现设备 @param xai xai @param deviceApsn 设备所属网关编号 @param deviceLuid 设备编号 @param deviceType 设备类型 @param version 设备软件版本 @param description 设备文字描述 */ - (void)deviceDetected:(XAI* __nonnull)xai deviceApsn:(XAITYPEAPSN)deviceApsn deviceLuid:(XAITYPELUID)deviceLuid deviceType:(XAITYPEDEVICETYPE)deviceType version:(XAITYPEVERSION)version description:(NSString* __nullable)description; /** 设备被删除 @param xai xai @param deviceApsn 设备所属网关编号 @param deviceLuid 设备编号 */ - (void)deviceRemoved:(XAI* __nonnull)xai deviceApsn:(XAITYPEAPSN)deviceApsn deviceLuid:(XAITYPELUID)deviceLuid; /** 收到状态消息 @param xai xai @param deviceApsn 消息来源所属网关 @param deviceLuid 消息来源设备编号 @param triggerApsn 导致此状态消息发出的设备所属网关 @param triggerLuid 导致此状态消息发出的设备编号 @param timestamp 此状态改变时的时间(1970-1-1至今的秒数) @param statusID 状态编号 @param datas 状态数据 @param isHistory 是否是历史状态消息 */ - (void)statusMessageRecived:(XAI* __nonnull)xai deviceApsn:(XAITYPEAPSN)deviceApsn deviceLuid:(XAITYPELUID )deviceLuid triggerApsn:(XAITYPEAPSN)triggerApsn triggerLuid:(XAITYPELUID)triggerLuid timestamp:(XAITYPETIME)timestamp statusID:(XAITYPEID)statusID datas: (NSArray*__nullable)datas isHistory:(BOOL)isHistory; /** 收到控制消息 @param xai xai @param deviceApsn 控制命令来源所属网关 @param deviceLuid 控制命令来源设备编号 @param timestamp 此控制命令发出时间(1970-1-1至今的秒数) @param cmdID 命令编号 @param datas 命令数据 */ - (void)CMDMessageRecived:(XAI* __nonnull)xai deviceApsn:(XAITYPEAPSN)deviceApsn deviceLuid:(XAITYPELUID )deviceLuid timestamp:(XAITYPETIME)timestamp cmdID:(XAITYPEID)cmdID datas:(NSArray* __nonnull)datas; /** 收到聊天消息 @param xai xai @param deviceApsn 消息来源所属网关 @param deviceLuid 消息来源设备编号 @param timestamp 此消息发出时间(1970-1-1至今的秒数) @param data 消息数据 */ - (void)IMMessageRecived:(XAI* __nonnull)xai deviceApsn:(XAITYPEAPSN)deviceApsn deviceLuid:(XAITYPELUID )deviceLuid timestamp:(XAITYPETIME)timestamp datas:(NSArray* __nonnull)datas; /** 收到联动 @param xai xai @param linkID 联动编号 @param gatewayApsn 联动所属网关编号 @param linkName 联动名字 @param active 联动状态 启用(1)、暂停(2)、已删除(0)。 @param conditions 联动条件组 @param actions 联动动作组 */ - (void)linkRuleDetected:(XAI* __nonnull)xai linkID:(XAITYPEID)linkID gatewayApsn:(XAITYPEAPSN)gatewayApsn linkName:(NSString*__nonnull)linkName active:(BOOL)active conditions:(NSArray *__nullable)conditions actions:(NSArray *__nullable)actions; /** 联动被删除 @param xai xai @param gatewayApsn 联动所属网关 @param linkID 联动编号 */ - (void)linkRuleRemoved:(XAI* __nonnull)xai gatewayApsn:(XAITYPEAPSN)gatewayApsn linkID:(XAITYPEID)linkID; /** 推送是否激活 @param xai xai @param gatewayApsn 所属网关 @param enable 激活状态 */ - (void)jpushRuleDetected:(XAI*__nonnull)xai gatewayApsn:(XAITYPEAPSN)gatewayApsn registerID: (NSString* __nonnull) registerID configs: (NSArray * __nonnull)configs enable:(BOOL)enable; /** 网关ADMIN被设置 @param xai xai @param apsn 所属网关 @param luid ADMIN的LUID(只可能是手机号) */ - (void)adminDetected:(XAI*__nonnull)xai adminApsn:(XAITYPEAPSN) apsn adminLuid:(XAITYPELUID)luid; /** 搜索局域网内网关 @param xai xai @param pack 网关信息 */ - (void)localGatewayDetected:(XAI*__nonnull)xai pack:(XAIBroadcastPack* __nonnull)pack; ``` ##### XAI方法说明 ``` /** 初始化 @param host 服务器IP @param port 端口号 @return XAI */ - (XAI *__nullable)initWithHost:(NSString* __nonnull)host port:(uint16_t)port; /** 将手机设备编号转换为手机号 @param luid 手机设备编号 @return 手机号 */ + (NSString * __nullable)luidToMobile:(XAITYPELUID)luid; /** 通过手机号生成手机设备的编号 @param mobile 手机号 @return 手机设备编号 */ + (XAITYPELUID)mobileToLuid:(NSString * __nullable)mobile; /** 建立网络连接(登录) @param luid 登录名(设备编号) @param pwd 登录密码 */ /** 建立网络连接(登录) @param account 手机号 @param password 密码 @param completionHandler 成功处理 @param errorHandler 失败处理 */ - (void)startWithAccount:(NSString* __nonnull)account password:(NSString* __nonnull)password success:(XAICompletionHandler _Nullable )completionHandler error:(XAIConnectionErrorHandler _Nullable)errorHandler; /** 服务器是否已连接 @return 连接状态 */ - (BOOL)isConnected; - (XAIConnectStatus)connectStatus; /** 链接注销 */ - (void)close; - (void)disconnectWithCompletionHandler:(XAIDisconnectionHandler _Nullable )completionHandler; - (void)reconnect; /** 检查网络延迟 @return 网络延迟,单位ms */ - (XAITYPETIME)detectNetworkDelayMS; /** 添加设备的指定网关 @param apsn 设备所属网关 @param luid 设备编号 */ - (NSError *__nullable)deviceAdd:(XAITYPEAPSN)apsn Luid:(XAITYPELUID)luid; /** 从指定网关删除设备 @param apsn 设备所属网关 @param luid 设备编号 */ - (NSError *__nullable)deviceRemove:(XAITYPEAPSN)apsn Luid:(XAITYPELUID)luid; /** 在局域网搜索所有网关 @param timeout 搜索时长 ms @return 网关列表 */ - (NSArray*__nullable)gatewayLocalSearch:(XAITYPETIME)timeout; /** 在局域网搜索网关 */ - (void)gatewayAsyncLocalSearch; /** 停止局域网搜索网关 */ - (void)stopGatewayLocalSearch; /** 局域网绑定网关 @param mobilePhone 绑定者的LUID @param gateway_ip 网关IP地址 @param apsn 网关编号 @param name 设置的网关名字 @return error */ - (NSError* __nullable)gatewayLocalBind:(NSString * __nullable)mobilePhone gatewayIP:(NSString * __nullable)gateway_ip gatewayAPSN:(XAITYPEAPSN)apsn name:(NSString *__nullable)name; /** 将当前登录手机号绑定到指定网关 @param apsn 待绑定的网关编号 @return errno */ - (NSError * __nullable)gatewayBind:(XAITYPEAPSN)apsn; /** 将当前登录手机号绑定到指定网关 @param apsn 绑定的网关编号 @param info 绑定信息 @return errno */ - (NSError * __nullable)gatewayBind:(XAITYPEAPSN)apsn info:(NSString*__nullable)info; /** 解除当前登录手机号对网关的绑定 @param apsn 要解除绑定的网关编号 @return errno */ - (NSError * __nullable)gatewayUnbind:(XAITYPEAPSN)apsn; /** 通知云网关将请求设备绑定到目标设备 @param requestApsn 请求方所属网关编号 @param requestLuid 请求方设备编号 @param targetApsn 目标设备所属网关编号 @param targetLuid 目标设备编号 @param flag 访问权限标志 @return errno */ - (NSError* __nullable)bindVerifyWithRequestApsn:(XAITYPEAPSN)requestApsn requestLuid:(XAITYPELUID)requestLuid targetApsn:(XAITYPEAPSN)targetApsn targetLuid:(XAITYPELUID)targetLuid flag:(uint8_t)flag; /** 添加联动到指定网关 @param apsn 待添加到的网关编号 @param name 联动名字 @param conditions 联动条件组 @param actions 联动动作组 @return errno */ - (NSError * __nullable)linkAdd:(XAITYPEAPSN)apsn name:(NSString* __nullable)name conditions:(NSArray* __nullable)conditions actions:(NSArray* __nullable)actions; /** 删除指定网关上的联动 @param apsn 联动所在的网关编号 @param linkdID 联动编号 @return errno */ - (NSError * __nullable)linkRemove:(XAITYPEAPSN)apsn linkdID:(XAITYPEID)linkdID; /** 运行指定网关上的联动 @param apsn 联动所在的网关编号 @param linkdID 联动编号 @return errno */ - (NSError * __nullable)linkRun:(XAITYPEAPSN)apsn linkdID:(XAITYPEID)linkdID; /** 设置指定网关上的联动状态 @param apsn 联动所在的网关编号 @param linkdID 联动编号 @param active 启用还是禁用 @return errno */ - (NSError * __nullable)linkSet:(XAITYPEAPSN)apsn linkdID:(XAITYPEID)linkdID active:(BOOL)active; /** 发送本机设备信息 @param type 设备类型 @param verson 软件版本 @param sleep 是否可以睡眠 @return errno */ - (NSError * __nullable)sendMyDev:(XAITYPEAPSN)type verson:(XAITYPEVERSION)verson sleep:(BOOL)sleep descritpion: (NSString* __nullable)descritpion; /** 发送本机名字 @param name 名字 */ - (NSError * __nullable)sendMyDeviceName:(NSString * __nullable)name; /** 发送本机连接状态信息 @param online 是否在线 */ - (NSError * __nullable)sendMyDeviceConnection:(BOOL)online; /** 发送本机设备电量信息 @param power 电量(0-100) */ - (NSError * __nullable)sendMyDevicePower:(uint8_t)power; /** 发送控制命令到指定用户、设备 @param cmdID 控制命令编号 @param apsn 指定用户所属的网关编号 @param luid 指定用户、设备的设备编号 @param type 数据类型 @param bytes 数据 @param length 数据长度 @return errno */ - (NSError* __nullable)sendCMD:(XAITYPEID)cmdID toApsn:(XAITYPEAPSN)apsn toLuid: (XAITYPELUID)luid dataType:(uint8_t) type bytes:(void* __nullable)bytes length:(uint16_t)length; - (NSError* __nullable)sendCMD:(XAITYPEID)cmdID toApsn:(XAITYPEAPSN)apsn toLuid: (XAITYPELUID)luid datas:(NSArray *_Nullable)datas; - (NSArray *_Nullable)getAuthorityWithApsn:(XAITYPEAPSN)apsn Luid:(XAITYPELUID)luid datas:(NSArray *_Nullable)datas; - (NSArray *_Nullable)setAuthorityWithApsn:(XAITYPEAPSN)apsn Luid:(XAITYPELUID)luid datas:(NSArray *_Nullable)datas; /** 发送聊天消息到指定用户、设备 @param apsn 指定用户所属的网关编号 @param luid 指定用户、设备的设备编号 @param type 数据类型 @param bytes 数据 @param length 数据长度 @return errno */ - (NSError* __nullable)sendIMToApsn:(XAITYPEAPSN)apsn toLuid: (XAITYPELUID)luid dataType:(uint8_t) type bytes:(void* __nullable)bytes length:(uint16_t)length; /** 设置网关是否开启白名单模式 @param apsn 要设置白名单模式的网关编号 @param enable 是否开启白名单 @return errno */ - (NSError *__nullable)setWhiteListEnable:(XAITYPEAPSN)apsn Enable:(BOOL)enable; /** 发送自己设备的状态信息 @param statusID 状态编号 @param type 数据类型 @param bytes 数据 @param length 长度 */ - (NSError* __nullable)sendStatus:(XAITYPEID)statusID dataType:(uint8_t)type bytes:(void* __nullable)bytes length:(uint16_t)length; - (NSError* __nullable)sendMyStatus:(XAITYPEID)statusID datas:(NSArray *_Nullable)datas; /** 获取指定设备的历史消息 @param apsn 指定设备所属网关编号 @param luid 指定设备的设备编号 @return errno */ - (NSError * __nullable)enableHistory:(XAITYPEAPSN) apsn luid:(XAITYPELUID)luid; /** 设置推送标记 @param apsn 推送标志所属网关 @param enable 是否开启推送 @param configs 推送配置数据 @return errno */ - (NSError*__nullable)setPushRule:(XAITYPEAPSN)apsn enable:(BOOL) enable configs:(NSArray * __nullable)configs; /** 发送短信验证信息 @param account 账号 @param success 成功执行Block @param failure 失败执行Block */ - (void)sendAuthMessage:(NSString* __nonnull)account success:(XAISuccessHandler __nullable)success error:(XAIErrorHandler __nullable)failure; /** 注册手机用户 @param account 用户手机号 @param password 用户密码 @param barCode 短信验证码 @param success 成功处理 @param failure 失败处理 */ - (void)registerWithAccount:(NSString* __nonnull)account password:(NSString *__nonnull)password barCode:(NSString *__nonnull)barCode success:(XAISuccessHandler __nullable)success error:(XAIErrorHandler __nullable)failure; /** 重置用户密码 @param account 用户手机号 @param newPwd 新密码 @param barCode 短信验证码 @param success 成功处理 @param failure 失败处理 */ - (void)pwdResetChangeWithAccount:(NSString* __nonnull)account newPwd:(NSString *__nonnull)newPwd barCode:(NSString *__nonnull)barCode success:(XAISuccessHandler __nullable)success error:(XAIErrorHandler __nullable)failure; /** 修改用户密码 @param account 用户手机号 @param oldPwd 旧密码 @param newPwd 新密码 @param success 成功处理 @param failure 失败处理 */ - (void)passwordChangeWithAccount:(NSString* __nonnull)account oldPwd:(NSString *__nonnull)oldPwd newPwd:(NSString *__nonnull)newPwd success:(XAISuccessHandler __nullable)success error:(XAIErrorHandler __nullable)failure; ``` ##### LUID XAILUIDUtil ``` /** * 检查是否是网关设备 * * @param luid 设备编号 * * @return 布尔值 */ + (BOOL)isServerAP:(uint64_t)luid; /** * 检查是否是网关联动设备 * * @param luid 设备编号 * * @return 布尔值 */ + (BOOL)isServerAPLink:(uint64_t)luid; /** * 检查是否是Zigbee协调器设备 * * @param luid 设备编号 * * @return 布尔值 */ + (BOOL)isServerCoor:(uint64_t)luid; /** * 检查LUID编号是否合法 * * @param luid 设备编号 * * @return 布尔值 */ + (BOOL)iSValid:(uint64_t)luid; /** * 检查是否是手机设备 * * @param luid 设备编号 * * @return 布尔值 */ + (BOOL)iSMobile:(uint64_t)luid; /** * 检查是否是以Zigbee设备 * * @param luid 设备编号 * * @return 布尔值 */ + (BOOL)isZigbee:(uint64_t)luid; /** * 检查是否是虚拟设备 * * @param luid 设备编号 * * @return 布尔值 */ + (BOOL)isVirtual:(uint64_t)luid; /** * 检查是否是蓝牙设备 * * @param luid 设备编号 * * @return 布尔值 */ + (BOOL)isBT:(uint64_t)luid; /** * 检查是否是电力载波设备 * * @param luid 设备编号 * * @return 布尔值 */ + (BOOL)isPL:(uint64_t)luid; /** * 检查是否是433/315/LoRA设备 * * @param luid 设备编号 * * @return 布尔值 */ + (BOOL)isRF:(uint64_t)luid; /** * 检查是否是以太网/WIFI设备(具备MAC地址) * * @param luid 设备编号 * * @return 布尔值 */ + (BOOL)isETH:(uint64_t)luid; /** * 检查是否是以太网/WIFI设备(不具备MAC地址) * * @param luid 设备编号 * * @return 布尔值 */ + (BOOL)isETHX:(uint64_t)luid; /** * 检查是否是NB-IoT设备 * * @param luid 设备编号 * * @return 布尔值 */ + (BOOL)isNBIOT:(uint64_t)luid; /** * 检查是否是BRIDGE桥接设备 * * @param luid 设备编号 * * @return 布尔值 */ + (BOOL)isBRIDGE:(uint64_t)luid; /** * 检查是否是终端节点设备(Zigbee设备,蓝牙设备,以太网/WIFI设备,电力载波设备,433/315/LoRA设备,NB-IoT设备) * * @param luid 设备编号 * * @return 布尔值 */ + (BOOL)isNode:(uint64_t)luid; ``` XAI物联网系统交流群:768813308 网站地址:www.xai.net.cn