Last Updated on : 2023-10-09 09:51:33download
Group devices with the same features and control them all in one go. Both the group and scene can enable control of multiple devices at once, but they have different restrictions on actions. Scenes offer flexible and diverse actions on devices, whereas groups only support actions on features that are common to all devices in the group.
API description
Get the type of the group.
@interface ThingGroupMakerHelper : NSObject
/// Return ThingGroupBizType based on device ID
+ (ThingGroupBizType)groupBizTypeFromDeviceId:(NSString *)devId;
/// Return ThingGroupBizType based on group ID
+ (ThingGroupBizType)groupBizTypeFromGroupId:(NSString *)groupId;
@end
Parameter description
Property | Type | Description |
---|---|---|
devId | NSString | The device ID, by which the type of the group is retrieved. |
groupId | NSString | The group ID, by which the type of the group is retrieved. |
Description of return values
Property | Description |
---|---|
ThingGroupBizType |
|
Example
let groupType = ThingGroupMakerHelper.groupBizType(fromDeviceId: device.devId)
API description
Get the specified group service.
@interface ThingGroupServiceMaker : NSObject
+ (id<ThingGroupServiceProtocol>)groupServiceMakerWithBuildQuery:(NSDictionary *)params;
@end
Parameter description
Property | Type | Description |
---|---|---|
params | NSDictionary |
|
Description of return values
Data | Description |
---|---|
id |
The object of a group service. |
Example
let groupType = ThingGroupMakerHelper.groupBizType(fromDeviceId: device.devId)
var params: [AnyHashable: AnyObject] = [:]
params["devId"] = device.devId! as AnyObject
if (groupType == .bleMesh || groupType == .sigMesh || groupType == .beacon) {
let impl = ThingSmartBizCore.sharedInstance().service(of: ThingBusinessGroupProtocol.self) as? ThingBusinessGroupProtocol
let deviceList = impl?.deviceListForCurrentSpace() ?? []
params["deviceList"] = deviceList as AnyObject
}
self.service = ThingGroupServiceMaker.groupServiceMaker(withBuildQuery: params)
API description
Get the list of devices that match the group type.
- (void)fetchDeviceListWithSuccess:(ThingGroupDevListResult)result failure:(void(^)(NSError *error))failure;
Parameter description
Property | Type | Description |
---|---|---|
result | None. | The success callback. For more information, see ThingSmartGroupDevListModel. |
failure | None. | The failure callback. |
Description of ThingSmartGroupDevListModel
Data | Type | Description |
---|---|---|
devId | NSString | The device ID. |
gwId | NSString | The gateway ID. |
online | BOOL | Indicates whether the device is online. |
iconUrl | NSString | The URL of the device icon. |
productId | NSString | The product ID (PID) of the device. |
checked | BOOL | Indicates whether the device is selected. |
name | NSString | The name of the device. |
nodeId | NSString | The node ID of the device. |
Example
let groupType = ThingGroupMakerHelper.groupBizType(fromDeviceId: device.devId)
var params: [AnyHashable: AnyObject] = [:]
params["devId"] = device.devId! as AnyObject
if (groupType == .bleMesh || groupType == .sigMesh || groupType == .beacon) {
let impl = ThingSmartBizCore.sharedInstance().service(of: ThingBusinessGroupProtocol.self) as? ThingBusinessGroupProtocol
let deviceList = impl?.deviceListForCurrentSpace() ?? []
params["deviceList"] = deviceList as AnyObject
}
self.service = ThingGroupServiceMaker.groupServiceMaker(withBuildQuery: params)
self.service?.fetchDeviceList?(success: { list in
}, failure: { e in
})
API description
Create a group.
- (void)createGroupWithName:(NSString *)name
deviceList:(NSArray <NSString *> *)deviceList
process:(ThingGroupProcess)process
success:(ThingGroupSuccess)result
failure:(ThingGroupResultFailure)failure;
Parameter description
Property | Type | Description |
---|---|---|
name | NSString | The success callback. For more information, see ThingSmartGroupDevListModel. |
deviceList | NSArray <NSString *> | The list of device IDs to be added to the group. |
process | NSDictionary<NSString *,NSNumber *> | The progress. |
result | None. | The success callback with a group ID returned. |
failure | None. | The failure callback with an error code per failed device. |
Example
SVProgressHUD.show()
self.service?.fetchDeviceList?(success: { list in
guard let listIds = list?.compactMap({ return $0.devId }) else {
SVProgressHUD.dismiss()
return
}
self.service?.createGroup?(withName: "My group Name", deviceList: listIds, process: { process in
}, success: { groupId in
SVProgressHUD.dismiss()
return
}, failure: { e in
SVProgressHUD.dismiss()
return
})
}, failure: { e in
SVProgressHUD.dismiss()
return
})
API description
Edit a group.
- (void)updateGroupWithDeviceList:(NSArray <NSString *> *)deviceList
process:(ThingGroupProcess)process
success:(ThingGroupSuccess)result
failure:(ThingGroupResultFailure)failure;
Parameter description
Property | Type | Description |
---|---|---|
deviceList | NSArray <NSString *> | The list of device IDs to be added to the group. |
process | NSDictionary<NSString *,NSNumber *> | The progress. |
result | None. | The success callback with a group ID returned. |
failure | None. | The failure callback with an error code per failed device. |
Example
func editGroup(with group: ThingSmartGroupModel) {
let groupType = ThingGroupMakerHelper.groupBizType(fromDeviceId: group.groupId)
var params: [AnyHashable: AnyObject] = [:]
params["groupId"] = group.groupId! as AnyObject
if (groupType == .bleMesh || groupType == .sigMesh || groupType == .beacon) {
let impl = ThingSmartBizCore.sharedInstance().service(of: ThingBusinessGroupProtocol.self) as? ThingBusinessGroupProtocol
let deviceList = impl?.deviceListForCurrentSpace() ?? []
params["deviceList"] = deviceList as AnyObject
}
self.service = ThingGroupServiceMaker.groupServiceMaker(withBuildQuery: params)
SVProgressHUD.show()
self.service?.fetchDeviceList?(success: { list in
guard let listIds = list?.compactMap({ return $0.devId }) else {
SVProgressHUD.dismiss()
return
}
self.service?.updateGroup?(withDeviceList: listIds, process: { process in
}, success: { groupId in
SVProgressHUD.dismiss()
return
}, failure: { e in
SVProgressHUD.dismiss()
return
})
}, failure: { e in
SVProgressHUD.dismiss()
return
})
}
API description
Delete a group.
- (void)removeGroupWithGroupId:(NSString *)groupId
success:(void (^)(void))success
failure:(void (^)(NSError *error))failure;
Parameter description
Property | Type | Description |
---|---|---|
groupId | NSString | The ID of the group to delete. |
success | None. | The success callback. |
failure | None. | The failure callback. |
Example
func deleteGroup(with group: ThingSmartGroupModel) {
let groupType = ThingGroupMakerHelper.groupBizType(fromDeviceId: group.groupId)
var params: [AnyHashable: AnyObject] = [:]
params["groupId"] = group.groupId! as AnyObject
if (groupType == .bleMesh || groupType == .sigMesh || groupType == .beacon) {
let impl = ThingSmartBizCore.sharedInstance().service(of: ThingBusinessGroupProtocol.self) as? ThingBusinessGroupProtocol
let deviceList = impl?.deviceListForCurrentSpace() ?? []
params["deviceList"] = deviceList as AnyObject
}
self.service = ThingGroupServiceMaker.groupServiceMaker(withBuildQuery: params)
SVProgressHUD.show()
self.service?.removeGroup?(withGroupId: group.groupId, success: {
SVProgressHUD.dismiss()
self.tableView.reloadData()
return
}, failure: { e in
SVProgressHUD.dismiss()
return
})
}
import UIKit
import ThingSmartBizCore
import ThingModuleServices
import SVProgressHUD
import ThingSmartDeviceKit
import ThingDeviceDetailKit
import ThingGroupManagerKit
import ThingGroupHandleSktAPI
class DeviceDetailKitVC: DeviceListBaseVC {
override func handle(index: Int) {
let alert = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
if (self.isGroup) {
if (index >= home.groupList.count) {return}
let group = self.home.groupList[index]
alert.addAction(UIAlertAction(title: "Timer", style: .default, handler: { action in
let vc = DeviceDetailKitTimerVC(bizId: group.groupId, isGroup: true)
self.navigationController?.pushViewController(vc, animated: true)
}))
alert.addAction(UIAlertAction(title: "Edit Group", style: .default, handler: { action in
self.editGroup(with: group)
}))
alert.addAction(UIAlertAction(title: "Delete Group", style: .default, handler: { action in
self.deleteGroup(with: group)
}))
}else{
if (index >= home.deviceList.count) {return}
let device = self.home.deviceList[index]
alert.addAction(UIAlertAction(title: "Device Info", style: .default, handler: { action in
let vc = DeviceDetailKitInfoVC(deviceId: device.devId)
self.navigationController?.pushViewController(vc, animated: true)
}))
alert.addAction(UIAlertAction(title: "Timer", style: .default, handler: { action in
let vc = DeviceDetailKitTimerVC(bizId: device.devId, isGroup: false)
self.navigationController?.pushViewController(vc, animated: true)
}))
alert.addAction(UIAlertAction(title: "Create Group", style: .default, handler: { action in
self.createGroup(with: device)
}))
}
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel))
self.present(alert, animated: true)
}
var service: ThingGroupServiceProtocol?
func createGroup(with device: ThingSmartDeviceModel) {
let groupType = ThingGroupMakerHelper.groupBizType(fromDeviceId: device.devId)
var params: [AnyHashable: AnyObject] = [:]
params["devId"] = device.devId! as AnyObject
if (groupType == .bleMesh || groupType == .sigMesh || groupType == .beacon) {
let impl = ThingSmartBizCore.sharedInstance().service(of: ThingBusinessGroupProtocol.self) as? ThingBusinessGroupProtocol
let deviceList = impl?.deviceListForCurrentSpace() ?? []
params["deviceList"] = deviceList as AnyObject
}
self.service = ThingGroupServiceMaker.groupServiceMaker(withBuildQuery: params)
SVProgressHUD.show()
self.service?.fetchDeviceList?(success: { list in
guard let listIds = list?.compactMap({ return $0.devId }) else {
SVProgressHUD.dismiss()
return
}
self.service?.createGroup?(withName: "My group Name", deviceList: listIds, process: { process in
}, success: { groupId in
SVProgressHUD.dismiss()
return
}, failure: { e in
SVProgressHUD.dismiss()
return
})
}, failure: { e in
SVProgressHUD.dismiss()
return
})
}
func editGroup(with group: ThingSmartGroupModel) {
let groupType = ThingGroupMakerHelper.groupBizType(fromDeviceId: group.groupId)
var params: [AnyHashable: AnyObject] = [:]
params["groupId"] = group.groupId! as AnyObject
if (groupType == .bleMesh || groupType == .sigMesh || groupType == .beacon) {
let impl = ThingSmartBizCore.sharedInstance().service(of: ThingBusinessGroupProtocol.self) as? ThingBusinessGroupProtocol
let deviceList = impl?.deviceListForCurrentSpace() ?? []
params["deviceList"] = deviceList as AnyObject
}
self.service = ThingGroupServiceMaker.groupServiceMaker(withBuildQuery: params)
SVProgressHUD.show()
self.service?.fetchDeviceList?(success: { list in
guard let listIds = list?.compactMap({ return $0.devId }) else {
SVProgressHUD.dismiss()
return
}
self.service?.updateGroup?(withDeviceList: listIds, process: { process in
}, success: { groupId in
SVProgressHUD.dismiss()
return
}, failure: { e in
SVProgressHUD.dismiss()
return
})
}, failure: { e in
SVProgressHUD.dismiss()
return
})
}
func deleteGroup(with group: ThingSmartGroupModel) {
let groupType = ThingGroupMakerHelper.groupBizType(fromDeviceId: group.groupId)
var params: [AnyHashable: AnyObject] = [:]
params["groupId"] = group.groupId! as AnyObject
if (groupType == .bleMesh || groupType == .sigMesh || groupType == .beacon) {
let impl = ThingSmartBizCore.sharedInstance().service(of: ThingBusinessGroupProtocol.self) as? ThingBusinessGroupProtocol
let deviceList = impl?.deviceListForCurrentSpace() ?? []
params["deviceList"] = deviceList as AnyObject
}
self.service = ThingGroupServiceMaker.groupServiceMaker(withBuildQuery: params)
SVProgressHUD.show()
self.service?.removeGroup?(withGroupId: group.groupId, success: {
SVProgressHUD.dismiss()
self.tableView.reloadData()
return
}, failure: { e in
SVProgressHUD.dismiss()
return
})
}
}
Is this page helpful?
YesFeedbackIs this page helpful?
YesFeedback