1. Detection alarm
Tuya smart camera usually has the ability of detecting alarm. There are two main types of alarm detection, sound detection and motion detection. When the device detects a sound or object moving, it sends a warning message, and if your App is integrated with push, it will also receive a push notification. Integrate push refer to Integrate push.
The alarm message usually comes with a screenshot of the current video.
Direct-powered doorbell equipment, has ability to provide video messages. When someone rings the doorbell, the device can upload a video message, which is also picked up by an alarm message with a six-second encrypted video.
1.1. Message list
Class
Class | Description |
---|---|
TuyaSmartCameraMessage | Camera detection alarm event message management |
1.1.1. Initialize
Before getting the list of messages, you need to initialize the message manager with the device id and time zone.
Declaration
Initilize message manager.
- (instancetype)initWithDeviceId:(NSString *)devId timeZone:(NSTimeZone *)timeZone;
Parameters
Parameter | Description |
---|---|
devId | Deivce id of camera |
timeZone | Time zone, default is [NSTimeZone systemTimeZone] |
1.1.2. Message calendar
You can use the SDK to look up the date of the alarm message in a certain year and a certain month, so that it can be displayed visually on the calendar.
Declaration
Gets the date on which the message was logged.
- (void)messageDaysForYear:(NSInteger)year
month:(NSInteger)month
success:(void (^)(NSArray<NSString *> *result))success
failure:(void (^)(NSError *error))failure;
Parameters
Parameter | Description |
---|---|
year | Year,ex: 2020 |
month | Month, ex: 2 |
success | Success callback, return the days of the month which has messages |
failure | Failure callback, error indicates an error message |
The
result
is an array, elements is string. ex: ["01", "11", "30"].
1.1.3. Message type
There are many types of detection alarm messages according to the trigger mode, some of which can be divided into a large category. The SDK provides a list to get the default categories for sorting the query alarm messages.
Declaration
Get the list of message categories.
- (void)getMessageSchemes:(void (^)(NSArray<TuyaSmartCameraMessageSchemeModel *> *result))success
failure:(void (^)(NSError *error))failure;
Parameters
Parameter | Description |
---|---|
success | Success callback, return message category models |
failure | Failure callback, error indicates an error message |
TuyaSmartCameraMessageSchemeModel
Field | Type | Description |
---|---|---|
describe | NSString | Message category description |
msgCodes | NSArray | Message types that the message category contains |
When getting a list of messages, the value of the
msgCodes
attribute of the message category can be passed in to get all types of alarm messages that this category contains.
The message type represents the trigger form of the alarm message, which is reflected in the code as the msgCode
attribute of the alarm message data model.
Message Type
Type | Description |
---|---|
ipc_motion | Motion detecting |
ipc_doorbell | Doorbell ring |
ipc_dev_link | Devices linkage |
ipc_passby | Someone passby |
ipc_linger | Someone linger |
ipc_leave_msg | Doorbell message |
ipc_connected | Doorbell ring has answered |
ipc_unconnected | Doorbell not answered |
ipc_refuse | Doorbell resisted |
ipc_human | Human detection |
ipc_cat | Pet detection |
ipc_car | Car detection |
ipc_baby_cry | Baby cry |
ipc_bang | Abnormal sound |
ipc_face | Face detection |
ipc_antibreak | Forced demolition alarm |
ipc_low_battery | Low power alarm |
Depending on the device's capabilities, the types of messages that can be triggered can vary.
1.1.4. Message list
Declaration
Get message list.
- (void)messagesWithMessageCodes:(NSArray *)msgCodes
Offset:(NSInteger)offset
limit:(NSInteger)limit
startTime:(NSInteger)startTime
endTime:(NSInteger)endTime
success:(void (^)(NSArray<TuyaSmartCameraMessageModel *> *result))success
failure:(void (^)(NSError *error))failure;
Parameters
Parameter | Description |
---|---|
msgCodes | Array of message types, pass nil to get all types of messages |
offset | Offset, 0 means starting with the first alarm message |
limit | Page size with a maximum of 200 |
startTime | Gets messages that is reported no earlier than startTime |
endTime | Gets messages that is reported no later than endTime |
success | Success callback, return message data models array |
failure | Failure callback, error indicates an error message |
Declaration
Batch delete alarm message.
- (void)removeMessagesWithMessageIds:(NSArray *)msgIds
success:(void (^)(void))success
failure:(void (^)(NSError *))failure;
Parameters
Parameter | Description |
---|---|
msgIds | Message ids to be deleted |
success | Success callback |
failure | Failure callback, error indicates an error message |
TuyaSmartCameraMessageModel
Field | Type | Description |
---|---|---|
dateTime | NSString | Formatted string of date |
msgTypeContent | NSString | Message type description |
attachPic | NSString | Url of picture attachment |
attachVideos | NSArray | Urls of video attachments |
msgSrcId | NSString | Deivice id of which report the message |
msgContent | NSString | Message content |
msgTitle | NSString | Message title |
msgId | NSString | Message id |
msgCode | NSString | Message type |
time | NSInteger | Unix timestamp of message report time |
Depending on the message type, there may be different attachments. The attachPic
property gets the url of the image attachment, and the attachVideos
property gets the urls of the video attachments. Normally, this property has only one element.
1.2. Video message
The video attachment in the video message is the encrypted video, which needs to be played through the interface provided by TuyaSmartCloudManager
. the string element in attachVideos
is component by url + "@" + encrypt key, like "url@key", When playing a video, need to pass in both the video url and the encrypt key.
Declaration
Play video of message.
- (int)playVideoMessageWithUrl:(NSString *)url
startTime:(int)nStartTime
encryptKey:(NSString *)encryptKey
onResponse:(void (^)(int errCode))callback
onFinish:(void (^)(int errCode))finihedCallBack;
Parameters
Parameter | Description |
---|---|
url | Video url |
nStartTime | Second to start play |
encryptKey | Encrypt key |
callback | Result callback, errCode is 0 indicates success |
finishedCallBack | Finished callback |
Declaration
Pause playing.
- (int)pausePlayVideoMessage;
Declaration
Resume playing.
- (int)resumePlayVideoMessage;
Declaration
Stop playing.
- (int)stopPlayVideoMessage;
Return
Type | Description |
---|---|
int | Error code, indicating the reason for the failure, 0 indicates succeed |
The playback of the video message is similar to the playback of the cloud video. When the video frame is received, there will be a video frame data delegate callback.
- (void)cloudManager:(TuyaSmartCloudManager *)cloudManager
didReceivedFrame:(CMSampleBufferRef)frameBuffer
videoFrameInfo:(TuyaSmartVideoFrameInfo)frameInfo;
The following two attributes in the structure TuyaSmartVideoFrameInfo
describe the total length and progress of the video in milliseconds.
- nDuration : video length
- nProgress : progress of current video
The video sound switch, like cloud video, use the following interface:
- (void)enableMute:(BOOL)mute success:(void(^)(void))success failure:(void (^)(NSError * error))failure;
1.2.1. Alarm message and playback
There is no direct correlation between the alarm message and the record videos in memory card, the only correlation is that in the memory card event recording mode, the trigger reason and time point of the alarm message and record video are the same.
The alarm message is saved in the Tuya cloud, and the video recording of the memory card is saved in the camera's memory card, and the video in the memory card may be overwritten when the capacity is insufficient. The switch recorded by the memory card is not related to the switch that detects the alarm, so even in the mode of recording the memory card event, the alarm message and the video recording in the memory card are not one-to-one.
However, if there is a video recording at the time when the alarm message occurs, the SDK does not provide an interface for such correlation search. The developer can establish the correlation by searching whether there is a corresponding video recording in the video clip of the memory card on the same day by the trigger time of the alarm message.
Example
ObjC
- (void)enableDetect {
if ([self.dpManager isSupportDP:TuyaSmartCameraMotionDetectDPName]) {
bool motionDetectOn = [[self.dpManager valueForDP:TuyaSmartCameraMotionDetectDPName] tysdk_toBool];
if (!motionDetectOn) {
[self.dpManager setValue:@(YES)
forDP:TuyaSmartCameraMotionDetectDPName
success:^(id result) {
// Enable motion detection successfully
} failure:^(NSError *error) {
// Network error
}];
}
[self.dpManager setValue:TuyaSmartCameraMotionHigh
forDP:TuyaSmartCameraMotionSensitivityDPName
success:^(id result) {
// Successfully set the motion detection sensitivity to high sensitivity
} failure:^(NSError *error) {
// Network error
}];
}
}
- (void)viewDidLoad {
[super viewDidLoad];
self.cameraMessage = [[TuyaSmartCameraMessage alloc] initWithDeviceId:self.devId timeZone:[NSTimeZone defaultTimeZone]];
[self.cameraMessage getMessageSchemes:^(NSArray<TuyaSmartCameraMessageSchemeModel *> *result) {
// Message category models
self.schemeModels = result;
// Get messages of the first category
[self reloadMessageListWithScheme:result.firstObject];
} failure:^(NSError *error) {
// Network error
}];
}
- (void)reloadMessageListWithScheme:(TuyaSmartCameraMessageSchemeModel *)schemeModel {
NSDateFormatter *formatter = [NSDateFormatter new];
formatter.dateFormat = @"yyyy-MM-dd";
NSDate *date = [formatter dateFromString:@"2020-02-17"];
// Get the top 20 alarm messages from zero on February 17, 2020 to the present
[self.cameraMessage messagesWithMessageCodes:schemeModel.msgCodes Offset:0 limit:20 startTime:[date timeIntervalSince1970] endTime:[[NSDate new] timeIntervalSince1970] success:^(NSArray<TuyaSmartCameraMessageModel *> *result) {
self.messageModelList = result;
} failure:^(NSError *error) {
// Network error
}];
}
Swift
func enableDectect() {
guard self.dpManager.isSupportDP(.motionDetectDPName) else {
return;
}
if let isMontionDetectOn = self.dpManager.value(forDP: .motionDetectDPName) as? Bool, !isMontionDetectOn {
self.dpManager.setValue(true, forDP: .motionDetectDPName, success: { _ in
// Enable motion detection successfully
}) { _ in
// Network error
}
}
self.dpManager.setValue(TuyaSmartCameraMotion.high, forDP: .motionSensitivityDPName, success: { _ in
// Successfully set the motion detection sensitivity to high sensitivity
}) { _ in
// Network error
}
}
override func viewDidLoad() {
super.viewDidLoad()
self.cameraMessage = TuyaSmartCameraMessage(deviceId: self.devId, timeZone: NSTimeZone.default)
self.cameraMessage.getSchemes({ result in
// Get messages of the first category
self.schemeModels = result
if let schemeModel = result?.first {
reloadMessage(schemeModel: schemeModel)
}
}) { _ in
// Network error
}
}
func reloadMessage(schemeModel: TuyaSmartCameraMessageSchemeModel) {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
let date = formatter.date(from: "2020-02-17")
// Get the top 20 alarm messages from zero on February 17, 2020 to the present
self.cameraMessage.messages(withMessageCodes: schemeModel.msgCodes, offset: 0, limit: 20, startTime: Int(date!.timeIntervalSince1970), endTime: Int(Date().timeIntervalSince1970), success: { result in
self.messageModelList = result;
}) { _ in
// Network error
}
}