Last Updated on : 2024-06-27 10:21:02download
When the app is launched, if the device has been bound with a home and is online, the app can receive calls from the doorbell by listening for MQTT messages. The app can answer, hang up, or decline doorbell calls over MQTT. The Smart Camera SDK encapsulates this process to help you integrate with the doorbell service at a low cost more easily.
When the doorbell rings, the Smart Camera SDK will notify the app through a doorbell call listener. The app can then answer, hang up, or decline doorbell calls.
When MQTT disconnects, for example when the app quits or is running in the background, users can be notified of doorbell calls through push notifications. However, when users tap the push notification, the Smart Camera SDK cannot detect such call events. To address this issue, when users tap on a doorbell call push notification, manually include the call in the Smart Camera SDK management scope. See Process doorbell calls sent from other sources for details.
To enable video streaming on the doorbell call screen, the live streaming API methods need to be integrated.
The doorbell product (type
is ac_doorbell
) uses the solution mentioned above. However, not all doorbell devices operate on the same call logic as mentioned above.
Using a doorbell with image (type
is doorbell
) as an example, the app receives notifications for the doorbell call via MQTT. Actions like answering, hanging up, and declining are all performed through DP. You can register doorbell call listener to monitor calls. Use device control methods to answer, hang up, and decline a doorbell call.
If lock devices manage answering, hanging up, and declining doorbell calls through DPs, the doorbell service encapsulation in the Smart Camera SDK is inapplicable.
Example
Objective-C:
ThingSmartDoorBellManager *manager = [ThingSmartDoorBellManager sharedInstance];
Swift:
let manager = ThingSmartDoorBellManager.sharedInstance()
Doorbell calls are encapsulated by the model class ThingSmartDoorBellCallModel
. This class is used to store information about doorbell calls and maintain the doorbell call status. Each doorbell ring event has its own ThingSmartDoorBellCallModel
model, identified by a unique messageId
.
Parameter | Description |
---|---|
type | The type of doorbell call. Valid values:
|
devId | The device ID. |
messageId | The unique identifier of the doorbell call message. |
time | The Unix timestamp when the doorbell call is triggered, in seconds. |
answeredBySelf | Indicates whether the device owner has answered the doorbell call. |
answeredByOther | Indicates whether another member has answered the doorbell call. |
canceled | Indicates whether the doorbell call was canceled. |
To get the status of a doorbell call, use the model ThingSmartDoorBellCallModel
to return the target instance of ThingSmartDoorBellCallModel
.
API description
- (ThingSmartDoorBellCallModel *)callModelWithMessageId:(NSString *)messageId;
Parameters
Parameter | Description |
---|---|
messageId | The unique identifier of the doorbell call message. |
The app process must be active before the listener can work as expected. If the app process runs in the background or is terminated, the listener will not work.
API description
- (void)addObserver:(id<ThingSmartDoorBellObserver>)observer;
Parameters
Parameter | Description |
---|---|
ThingSmartDoorBellObserver | The doorbell call listener. |
ThingSmartDoorBellObserver
The doorbell call listener involves the callbacks throughout the life cycle of doorbell calls. The following table describes these callbacks.
API name | Parameter list | Return value | Description |
---|---|---|---|
didReceivedFromDevice | ThingSmartDoorBellCallModel, ThingSmartDeviceModel | void | The doorbell call event from the device is received. |
doorBellCallDidHangUp | ThingSmartDoorBellCallModel | void | The doorbell call was hung up on the device. |
doorBellCallDidAnsweredByOther | ThingSmartDoorBellCallModel | void | Another member has answered the doorbell call. The service layer determines whether to automatically cancel or hold the call.
|
doorBellCallDidAnswered | ThingSmartDoorBellCallModel | void | The doorbell call was answered. |
doorBellCallDidCanceled | ThingSmartDoorBellCallModel, BOOL | void | The doorbell call was canceled. The parameter isTimeOut indicates whether the call is automatically canceled due to timeout or manually canceled on the device. |
doorBellCallDidRefuse | ThingSmartDoorBellCallModel | void | The doorbell call was declined. |
When the doorbell call event didReceivedFromDevice
from the device is received, we recommend that you save the object ThingSmartDoorBellCallModel
or the doorbell call identifier messageId
. Either will be required in the API request to answer, hang up, or decline a call.
Example
Objective-C:
@interface CameraDoorbellManager ()<ThingSmartDoorBellObserver>
@property (nonatomic, copy) NSString *messageId;
@end
@implementation CameraDoorbellManager
- (void)doorBellCall:(ThingSmartDoorBellCallModel *)callModel didReceivedFromDevice:(ThingSmartDeviceModel *)deviceModel {
self.messageId = callModel.messageId;
}
- (void)doorBellCallDidRefuse:(ThingSmartDoorBellCallModel *)callModel {
}
- (void)doorBellCallDidHangUp:(ThingSmartDoorBellCallModel *)callModel {
}
- (void)doorBellCallDidAnsweredByOther:(ThingSmartDoorBellCallModel *)callModel {
}
- (void)doorBellCallDidAnswered:(ThingSmartDoorBellCallModel *)callModel {
}
- (void)doorBellCallDidCanceled:(ThingSmartDoorBellCallModel *)callModel timeOut:(BOOL)isTimeOut {
}
@end
Swift:
class DoorbellManager: NSObject {
let manager = ThingSmartDoorBellManager.sharedInstance()
var messageId:String = ""
}
extension DoorbellManager:ThingSmartDoorBellObserver {
func doorBellCall(_ callModel: ThingSmartDoorBellCallModel!, didReceivedFromDevice deviceModel: ThingSmartDeviceModel!) {
messageId = callModel.messageId
}
func doorBellCallDidRefuse(_ callModel: ThingSmartDoorBellCallModel!) {
}
func doorBellCallDidHangUp(_ callModel: ThingSmartDoorBellCallModel!) {
}
func doorBellCallDidAnswered(byOther callModel: ThingSmartDoorBellCallModel!) {
}
func doorBellCallDidCanceled(_ callModel: ThingSmartDoorBellCallModel!, timeOut isTimeOut: Bool) {
}
}
Remove a doorbell call listener if it is not required.
API description
- (void)removeObserver:(id<ThingSmartDoorBellObserver>)observer;
Example
Objective-C:
[[ThingSmartDoorBellManager sharedInstance] removeObserver:self];
Swift:
ThingSmartDoorBellManager.sharedInstance()?.remove(self)
Specify whether to automatically ignore subsequent calls from a specific doorbell when users are already on a call from another doorbell.
Property description
@property (nonatomic, assign) BOOL ignoreWhenCalling;
Property | Description |
---|---|
ignoreWhenCalling |
YES . |
Set the timeout for doorbell calls. If a doorbell call is not answered within the specified period, the callback doorBellCallDidCanceled
will be invoked to send a notification and end the call.
Property description
@property (nonatomic, assign) NSInteger doorbellRingTimeOut;
Property | Description |
---|---|
doorbellRingTimeOut | The timeout for doorbell calls, in seconds, defaulting to 25 . |
It is recommended to set the call timeout for a specific doorbell.
Set the timeout for doorbell calls by device ID. If a doorbell call is not answered within the specified period, the callback doorBellCallDidCanceled
will be invoked to send a notification and end the call.
Property description
@property (nonatomic, weak) id<ThingSmartDoorBellConfigDataSource> doorBellConfigDataSource;
Parameters
Parameter | Description |
---|---|
ThingSmartDoorBellConfigDataSource | The data source for the doorbell settings. |
ThingSmartDoorBellConfigDataSource
The data source for the doorbell settings is shown below.
API name | Parameter list | Return value | Description |
---|---|---|---|
doorbellRingTimeOut | NSInteger, NSString * | NSInteger | Set the timeout for doorbell calls by device ID. |
Answer a doorbell call when it rings. The call may fail if it was answered, canceled, or for other reasons. In case of failure, the reason is returned as an error message. For more information, see Error codes.
API description
- (ThingDoorBellError)answerDoorBellCall:(NSString *)messageId;
Example
Objective-C:
[[ThingSmartDoorBellManager sharedInstance] answerDoorBellCall:self.messageId];
Swift:
ThingSmartDoorBellManager.sharedInstance()?.answerDoorBellCall(messageId)
Decline a doorbell call when it rings.
API description
- (void)refuseDoorBellCall:(NSString *)messageId;
Example
Objective-C:
[[ThingSmartDoorBellManager sharedInstance] refuseDoorBellCall:self.messageId];
Swift:
ThingSmartDoorBellManager.sharedInstance()?.refuseDoorBellCall(messageId)
Hang up a doorbell call after it is received. The call might fail to be hung up if it goes unanswered or for other reasons. In case of failure, the reason is returned as an error message. For more information, see Error codes.
API description
- (ThingDoorBellError)hangupDoorBellCall:(NSString *)messageId;
Example
Objective-C:
[[ThingSmartDoorBellManager sharedInstance] hangupDoorBellCall:self.messageId];
Swift:
ThingSmartDoorBellManager.sharedInstance()?.hangupDoorBellCall(messageId)
Handle the doorbell call received via push notification instead of MQTT. Generate a doorbell call model based on the passed parameters to implement operations such as answering, hanging up, or declining the call.
API description
- (void)generateCall:(NSDictionary *)params;
Parameters
Parameter | Description |
---|---|
params | The call message data. See Demo for the push message details. |
Description of key-value pairs in params
key | value |
---|---|
devId | The device ID. |
cid | The nodeId of the device. |
edata | The message ID. |
eType | The type of the received call message. |
time | The timestamp of the received call message. |
Example
For more information, see Demo.
For more information, see SDK Error Codes.
Enum value | Error code | Description |
---|---|---|
ThingDoorBellError_NoError | 0 | The operation is successful without errors. |
ThingDoorBellError_CallFailed | -2300 | Failed to process the call. Possible reason:
|
ThingDoorBellError_AnsweredByOther | -2301 | The doorbell call is being answered by another user. |
ThingDoorBellError_DidCanceled | -2302 | The doorbell call was canceled on the device. |
ThingDoorBellError_TimeOut | -2303 | The doorbell call timed out. |
ThingDoorBellError_AnsweredBySelf | -2304 | The doorbell call was answered. |
ThingDoorBellError_NotAnswered | -2305 | The doorbell call was hung up, without being answered. |
ThingDoorBellError_NotSupport | -2306 | The device type such as doorbell is not supported. |
To implement the features of the low-power doorbell, you must download the default resource file resources.zip, decompress it, and then add the resources to your project. You can also add a custom audio file with the default file name.
Is this page helpful?
YesFeedbackIs this page helpful?
YesFeedback