Binding Devices to Cloud Accounts
API for binding devices to accounts is shown in Figure 10.26 and can be found at https://swaggerapis.rainmaker.espressif.com/#/User%20Node%20Association/addRemoveUserNodeMapping.
To bind the device to the account, use the secret key generated in Section 10.5.3, the device ID (node_id
) and the operation
identifier.
PUT /v1/user/nodes/mapping
Content-Type: application/json
Authorization: $accesstoken
{
"node_id": "$node_id",
"secret_key": "$secretKey",
"operation": "add"
}
Binding devices in Android
📝 Source code
For the source code of binding devices in Android, please refer to
book-esp32c3-iot-projects/phone_app/app_android/app/src/main/java/com/espressif/cloudapi/ApiManager.java
.
public void addNode(final String nodeId, String secretKey, final ApiResponseListener listener) {
DeviceOperationRequest req = new DeviceOperationRequest();
req.setNodeId(nodeId);
req.setSecretKey(secretKey);
req.setOperation(AppConstants.KEY_OPERATION_ADD);
apiInterface.addNode(AppConstants.URL_USER_NODE_MAPPING, accessToken, req).enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
//Code Omitted
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
}
});
}
Binding devices in iOS
📝 Source code
For the source code of binding devices in iOS, please refer to
book-esp32c3-iot-projects/phone_app/app_ios/ESPRainMaker/ESPRainMaker/Interface/Provision/SuccessViewController.swift
.
@objc func sendRequestToAddDevice() {
let parameters = ["user_id": User.shared.userInfo.userID,
"node_id": User.shared.currentAssociationInfo!.nodeID,
"secret_key": User.shared.currentAssociationInfo!.uuid,
"operation": "add"]
NetworkManager.shared.addDeviceToUser(parameter: parameters as![String: String]) { requestID, error in
if error ! = nil, self.count > 0 {
self.count = self.count - 1
DispatchQueue.main.asyncAfter(deadline: .now()) {
self.perform(#selector(self.sendRequestToAddDevice), with:nil, afterDelay: 5.0)
}
} else {
if let requestid = requestID {
self.step3Indicator.stopAnimating()
self.step3Image.image = UIImage(named: "checkbox_checked")
self.step3Image.isHidden = false
self.step4ConfirmNodeAssociation(requestID: requestid)
} else {
self.step3FailedWithMessage(message: error?.description ??
"Unrecognized error. Please check your internet.")
}
}
}
}
Once the device is bound to the account, users can initiate the request for remote communication.