tencentcloud-sdk-python-iotexplorer 3.1.134__py2.py3-none-any.whl → 3.1.136__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
tencentcloud/__init__.py CHANGED
@@ -14,4 +14,4 @@
14
14
  # limitations under the License.
15
15
 
16
16
 
17
- __version__ = '3.1.134'
17
+ __version__ = '3.1.136'
@@ -239,6 +239,9 @@ INVALIDPARAMETERVALUE_FORWARDREDIRECTDENIED = 'InvalidParameterValue.ForwardRedi
239
239
  # 拉取产品列表失败。
240
240
  INVALIDPARAMETERVALUE_GETPRODUCTSLISTERROR = 'InvalidParameterValue.GetProductsListError'
241
241
 
242
+ # AppKey 无效
243
+ INVALIDPARAMETERVALUE_INVALIDAPPKEY = 'InvalidParameterValue.InvalidAppKey'
244
+
242
245
  # 回调 Token 格式有误
243
246
  INVALIDPARAMETERVALUE_INVALIDCALLBACKTOKEN = 'InvalidParameterValue.InvalidCallbackToken'
244
247
 
@@ -350,6 +353,9 @@ INVALIDPARAMETERVALUE_RULENUMBERBEYONDLIMIT = 'InvalidParameterValue.RuleNumberB
350
353
  # 二进制数据格式只可利用 * 将数据进行转发。
351
354
  INVALIDPARAMETERVALUE_SELECTKEYFROMBINARYPAYLOAD = 'InvalidParameterValue.SelectKeyFromBinaryPayload'
352
355
 
356
+ # 不能将设备分享给自己
357
+ INVALIDPARAMETERVALUE_SHAREDEVICETOSELF = 'InvalidParameterValue.ShareDeviceToSelf'
358
+
353
359
  # 开始时间晚于结束时间。
354
360
  INVALIDPARAMETERVALUE_STARTTIMELATERENDTIME = 'InvalidParameterValue.StartTimeLaterEndTime'
355
361
 
@@ -359,6 +365,9 @@ INVALIDPARAMETERVALUE_TPNSANDROIDVALIDATIONFAILED = 'InvalidParameterValue.TPNSA
359
365
  # TPNSiOSAccessID, TPNSiOSSecretKey, TPNSiOSRegion validation failed。
360
366
  INVALIDPARAMETERVALUE_TPNSIOSVALIDATIONFAILED = 'InvalidParameterValue.TPNSiOSValidationFailed'
361
367
 
368
+ # Topic与replyTopic必须同时设置或同时为空
369
+ INVALIDPARAMETERVALUE_TOPICMISMATCH = 'InvalidParameterValue.TopicMismatch'
370
+
362
371
  # Topic已存在。
363
372
  INVALIDPARAMETERVALUE_TOPICPOLICYALREADYEXIST = 'InvalidParameterValue.TopicPolicyAlreadyExist'
364
373
 
@@ -473,6 +482,9 @@ RESOURCENOTFOUND_DEVICEHASNOFIRMWARE = 'ResourceNotFound.DeviceHasNoFirmware'
473
482
  # 设备未绑定家庭。
474
483
  RESOURCENOTFOUND_DEVICENOTBIND = 'ResourceNotFound.DeviceNotBind'
475
484
 
485
+ # 设备未被任何用户绑定
486
+ RESOURCENOTFOUND_DEVICENOTBOUND = 'ResourceNotFound.DeviceNotBound'
487
+
476
488
  # 设备不存在。
477
489
  RESOURCENOTFOUND_DEVICENOTEXIST = 'ResourceNotFound.DeviceNotExist'
478
490
 
@@ -581,6 +593,9 @@ UNAUTHORIZEDOPERATION_NOPERMISSIONTOPAY = 'UnauthorizedOperation.NoPermissionToP
581
593
  # 项目ACL错误。
582
594
  UNAUTHORIZEDOPERATION_NOPERMISSIONTOPROJECT = 'UnauthorizedOperation.NoPermissionToProject'
583
595
 
596
+ # 无权限分享该设备,仅设备所有者可分享
597
+ UNAUTHORIZEDOPERATION_NOPERMISSIONTOSHAREDEVICE = 'UnauthorizedOperation.NoPermissionToShareDevice'
598
+
584
599
  # 围栏ACL错误。
585
600
  UNAUTHORIZEDOPERATION_NOPERMISSIONTOSTUDIOFENCE = 'UnauthorizedOperation.NoPermissionToStudioFence'
586
601
 
@@ -695,6 +710,9 @@ UNSUPPORTEDOPERATION_PRODUCTHASBINDEDGATEWAYPRODUCT = 'UnsupportedOperation.Prod
695
710
  # 产品已被共享,请先解除共享。
696
711
  UNSUPPORTEDOPERATION_PRODUCTHASSHARED = 'UnsupportedOperation.ProductHasShared'
697
712
 
713
+ # 子产品禁止直接绑定家庭,请走网关绑定
714
+ UNSUPPORTEDOPERATION_PRODUCTISSUBPRODUCT = 'UnsupportedOperation.ProductIsSubProduct'
715
+
698
716
  # 存在重复项目。
699
717
  UNSUPPORTEDOPERATION_PROJECTDUPKEYEXIST = 'UnsupportedOperation.ProjectDupKeyExist'
700
718
 
@@ -724,3 +742,6 @@ UNSUPPORTEDOPERATION_VIDEOINSUFFICIENTLICENSES = 'UnsupportedOperation.VideoInsu
724
742
 
725
743
  # Video平台产品不存在。
726
744
  UNSUPPORTEDOPERATION_VIDEOPRODUCTNOTEXIST = 'UnsupportedOperation.VideoProductNotExist'
745
+
746
+ # 虚拟设备禁止绑定 / 解绑
747
+ UNSUPPORTEDOPERATION_VIRTUALDEVICECANNOTBIND = 'UnsupportedOperation.VirtualDeviceCannotBind'
@@ -258,6 +258,31 @@ class IotexplorerClient(AbstractClient):
258
258
  raise TencentCloudSDKException(type(e).__name__, str(e))
259
259
 
260
260
 
261
+ def BindUserDevice(self, request):
262
+ r"""1. 按 `(IotAppID, OpenID)` 兜底创建 / 复用 app 端用户;
263
+ 2. 按 `(用户, FamilyName)` 兜底创建 / 复用默认家庭;
264
+ 3. 将设备直接绑定到该家庭(已绑同家庭视为成功,并继续异步下发 `bind_device` 消息)。
265
+
266
+ :param request: Request instance for BindUserDevice.
267
+ :type request: :class:`tencentcloud.iotexplorer.v20190423.models.BindUserDeviceRequest`
268
+ :rtype: :class:`tencentcloud.iotexplorer.v20190423.models.BindUserDeviceResponse`
269
+
270
+ """
271
+ try:
272
+ params = request._serialize()
273
+ headers = request.headers
274
+ body = self.call("BindUserDevice", params, headers=headers)
275
+ response = json.loads(body)
276
+ model = models.BindUserDeviceResponse()
277
+ model._deserialize(response["Response"])
278
+ return model
279
+ except Exception as e:
280
+ if isinstance(e, TencentCloudSDKException):
281
+ raise
282
+ else:
283
+ raise TencentCloudSDKException(type(e).__name__, str(e))
284
+
285
+
261
286
  def CallDeviceActionAsync(self, request):
262
287
  r"""提供给用户异步调用设备行为的能力
263
288
 
@@ -304,6 +329,63 @@ class IotexplorerClient(AbstractClient):
304
329
  raise TencentCloudSDKException(type(e).__name__, str(e))
305
330
 
306
331
 
332
+ def CallDeviceRRPCSync(self, request):
333
+ r"""平台向设备发起一次同步 RRPC(Reverse RPC)调用——下行下发请求,同步阻塞等待设备回包,超时未回则返回 Timeout。
334
+
335
+ 适用场景:
336
+
337
+ 默认模式:使用平台保留 topic $iotrrpc/down 和 $iotrrpc/up。
338
+ 自定义模式:业务自带下行 topic;Reply topic 可选 —— 不传时平台仅依赖 clientToken 关联上行 ack。
339
+
340
+
341
+
342
+ ## 设备侧实现指引
343
+
344
+ ### 默认模式
345
+
346
+ 1. 订阅 `$iotrrpc/down/{ProductId}/{DeviceName}/+`;
347
+ 2. 收到下行后,从 topic 末段解析 `{mid}`;
348
+ 3. 向 `$iotrrpc/up/{ProductId}/{DeviceName}/{mid}` 发送回包,**payload 任意字节**(推荐 JSON)。
349
+
350
+ ### 自定义模式
351
+
352
+ 1. 订阅业务 `Topic`;
353
+ 2. 解析 payload JSON,**保留 `clientToken` 字段**;
354
+ 3. 处理业务后,构造 envelope JSON:
355
+
356
+ ```json
357
+ {
358
+ "method": "rrpc_sync_reply",
359
+ "clientToken": "<原样回填>",
360
+ "payload": "<base64 of 业务字节>"
361
+ }
362
+ ```
363
+
364
+ 4. publish 到与平台 `ReplyTopic` 通配符匹配的具体 topic(推荐使用与下行同 topic)。
365
+
366
+ > ⚠️ `clientToken` **必填且必须原样回填**,否则平台无法关联,调用方将收到 `Status=Timeout`。
367
+ > ⚠️ `method` 必须为 `rrpc_sync_reply`,否则会直接 skip。
368
+
369
+ :param request: Request instance for CallDeviceRRPCSync.
370
+ :type request: :class:`tencentcloud.iotexplorer.v20190423.models.CallDeviceRRPCSyncRequest`
371
+ :rtype: :class:`tencentcloud.iotexplorer.v20190423.models.CallDeviceRRPCSyncResponse`
372
+
373
+ """
374
+ try:
375
+ params = request._serialize()
376
+ headers = request.headers
377
+ body = self.call("CallDeviceRRPCSync", params, headers=headers)
378
+ response = json.loads(body)
379
+ model = models.CallDeviceRRPCSyncResponse()
380
+ model._deserialize(response["Response"])
381
+ return model
382
+ except Exception as e:
383
+ if isinstance(e, TencentCloudSDKException):
384
+ raise
385
+ else:
386
+ raise TencentCloudSDKException(type(e).__name__, str(e))
387
+
388
+
307
389
  def ChangeP2PRoute(self, request):
308
390
  r"""p2p路线切换(此接口目前处于内测接口,可以联系申请加白 )
309
391
 
@@ -5117,6 +5199,58 @@ class IotexplorerClient(AbstractClient):
5117
5199
  raise TencentCloudSDKException(type(e).__name__, str(e))
5118
5200
 
5119
5201
 
5202
+ def RevokeBindUserDevice(self, request):
5203
+ r"""1. 按 `(IotAppID, OpenID)` 只读定位用户(不存在视为已解绑,幂等成功);
5204
+ 2. 按 `(用户, FamilyName)` 只读定位家庭(不存在视为已解绑,幂等成功);
5205
+ 3. 解除设备与该家庭的绑定关系,异步下发 `delete_device` 消息;解绑路径不校验设备存在性,允许设备已删除时清理残留绑定关系。
5206
+
5207
+ :param request: Request instance for RevokeBindUserDevice.
5208
+ :type request: :class:`tencentcloud.iotexplorer.v20190423.models.RevokeBindUserDeviceRequest`
5209
+ :rtype: :class:`tencentcloud.iotexplorer.v20190423.models.RevokeBindUserDeviceResponse`
5210
+
5211
+ """
5212
+ try:
5213
+ params = request._serialize()
5214
+ headers = request.headers
5215
+ body = self.call("RevokeBindUserDevice", params, headers=headers)
5216
+ response = json.loads(body)
5217
+ model = models.RevokeBindUserDeviceResponse()
5218
+ model._deserialize(response["Response"])
5219
+ return model
5220
+ except Exception as e:
5221
+ if isinstance(e, TencentCloudSDKException):
5222
+ raise
5223
+ else:
5224
+ raise TencentCloudSDKException(type(e).__name__, str(e))
5225
+
5226
+
5227
+ def RevokeShareDeviceFromUser(self, request):
5228
+ r"""Owner 取消对指定用户的设备分享:
5229
+ 1. 校验产品 ACL / 子产品禁止 / 设备真实存在;
5230
+ 2. 只读定位 Owner(必须已存在),并校验 Owner 持有该设备;
5231
+ 3. 只读定位被取消分享用户(不存在视为已取消,幂等成功);
5232
+ 4. 删除分享关系记录(不存在视为已取消,幂等成功)。
5233
+
5234
+ :param request: Request instance for RevokeShareDeviceFromUser.
5235
+ :type request: :class:`tencentcloud.iotexplorer.v20190423.models.RevokeShareDeviceFromUserRequest`
5236
+ :rtype: :class:`tencentcloud.iotexplorer.v20190423.models.RevokeShareDeviceFromUserResponse`
5237
+
5238
+ """
5239
+ try:
5240
+ params = request._serialize()
5241
+ headers = request.headers
5242
+ body = self.call("RevokeShareDeviceFromUser", params, headers=headers)
5243
+ response = json.loads(body)
5244
+ model = models.RevokeShareDeviceFromUserResponse()
5245
+ model._deserialize(response["Response"])
5246
+ return model
5247
+ except Exception as e:
5248
+ if isinstance(e, TencentCloudSDKException):
5249
+ raise
5250
+ else:
5251
+ raise TencentCloudSDKException(type(e).__name__, str(e))
5252
+
5253
+
5120
5254
  def SearchPositionSpace(self, request):
5121
5255
  r"""搜索位置空间
5122
5256
 
@@ -5186,6 +5320,33 @@ class IotexplorerClient(AbstractClient):
5186
5320
  raise TencentCloudSDKException(type(e).__name__, str(e))
5187
5321
 
5188
5322
 
5323
+ def ShareDeviceToUser(self, request):
5324
+ r"""Owner 将其名下的设备分享给指定 App 用户:
5325
+ 1. 校验产品 ACL / 子产品禁止 / 设备真实存在;
5326
+ 2. 只读定位 Owner(必须已存在),并校验 Owner 确实持有该设备;
5327
+ 3. 兜底创建被分享用户(已存在则复用,昵称不覆盖);
5328
+ 4. 写入分享关系(重复分享幂等成功,不修改原 CreateTime)。
5329
+
5330
+ :param request: Request instance for ShareDeviceToUser.
5331
+ :type request: :class:`tencentcloud.iotexplorer.v20190423.models.ShareDeviceToUserRequest`
5332
+ :rtype: :class:`tencentcloud.iotexplorer.v20190423.models.ShareDeviceToUserResponse`
5333
+
5334
+ """
5335
+ try:
5336
+ params = request._serialize()
5337
+ headers = request.headers
5338
+ body = self.call("ShareDeviceToUser", params, headers=headers)
5339
+ response = json.loads(body)
5340
+ model = models.ShareDeviceToUserResponse()
5341
+ model._deserialize(response["Response"])
5342
+ return model
5343
+ except Exception as e:
5344
+ if isinstance(e, TencentCloudSDKException):
5345
+ raise
5346
+ else:
5347
+ raise TencentCloudSDKException(type(e).__name__, str(e))
5348
+
5349
+
5189
5350
  def TerminateTWeSeeSubscription(self, request):
5190
5351
  r"""退订 TWeSee 预付费订阅
5191
5352
 
@@ -207,6 +207,26 @@ class IotexplorerClient(AbstractClient):
207
207
 
208
208
  return await self.call_and_deserialize(**kwargs)
209
209
 
210
+ async def BindUserDevice(
211
+ self,
212
+ request: models.BindUserDeviceRequest,
213
+ opts: Dict = None,
214
+ ) -> models.BindUserDeviceResponse:
215
+ """
216
+ 1. 按 `(IotAppID, OpenID)` 兜底创建 / 复用 app 端用户;
217
+ 2. 按 `(用户, FamilyName)` 兜底创建 / 复用默认家庭;
218
+ 3. 将设备直接绑定到该家庭(已绑同家庭视为成功,并继续异步下发 `bind_device` 消息)。
219
+ """
220
+
221
+ kwargs = {}
222
+ kwargs["action"] = "BindUserDevice"
223
+ kwargs["params"] = request._serialize()
224
+ kwargs["resp_cls"] = models.BindUserDeviceResponse
225
+ kwargs["headers"] = request.headers
226
+ kwargs["opts"] = opts or {}
227
+
228
+ return await self.call_and_deserialize(**kwargs)
229
+
210
230
  async def CallDeviceActionAsync(
211
231
  self,
212
232
  request: models.CallDeviceActionAsyncRequest,
@@ -243,6 +263,58 @@ class IotexplorerClient(AbstractClient):
243
263
 
244
264
  return await self.call_and_deserialize(**kwargs)
245
265
 
266
+ async def CallDeviceRRPCSync(
267
+ self,
268
+ request: models.CallDeviceRRPCSyncRequest,
269
+ opts: Dict = None,
270
+ ) -> models.CallDeviceRRPCSyncResponse:
271
+ """
272
+ 平台向设备发起一次同步 RRPC(Reverse RPC)调用——下行下发请求,同步阻塞等待设备回包,超时未回则返回 Timeout。
273
+
274
+ 适用场景:
275
+
276
+ 默认模式:使用平台保留 topic $iotrrpc/down 和 $iotrrpc/up。
277
+ 自定义模式:业务自带下行 topic;Reply topic 可选 —— 不传时平台仅依赖 clientToken 关联上行 ack。
278
+
279
+
280
+
281
+ ## 设备侧实现指引
282
+
283
+ ### 默认模式
284
+
285
+ 1. 订阅 `$iotrrpc/down/{ProductId}/{DeviceName}/+`;
286
+ 2. 收到下行后,从 topic 末段解析 `{mid}`;
287
+ 3. 向 `$iotrrpc/up/{ProductId}/{DeviceName}/{mid}` 发送回包,**payload 任意字节**(推荐 JSON)。
288
+
289
+ ### 自定义模式
290
+
291
+ 1. 订阅业务 `Topic`;
292
+ 2. 解析 payload JSON,**保留 `clientToken` 字段**;
293
+ 3. 处理业务后,构造 envelope JSON:
294
+
295
+ ```json
296
+ {
297
+ "method": "rrpc_sync_reply",
298
+ "clientToken": "<原样回填>",
299
+ "payload": "<base64 of 业务字节>"
300
+ }
301
+ ```
302
+
303
+ 4. publish 到与平台 `ReplyTopic` 通配符匹配的具体 topic(推荐使用与下行同 topic)。
304
+
305
+ > ⚠️ `clientToken` **必填且必须原样回填**,否则平台无法关联,调用方将收到 `Status=Timeout`。
306
+ > ⚠️ `method` 必须为 `rrpc_sync_reply`,否则会直接 skip。
307
+ """
308
+
309
+ kwargs = {}
310
+ kwargs["action"] = "CallDeviceRRPCSync"
311
+ kwargs["params"] = request._serialize()
312
+ kwargs["resp_cls"] = models.CallDeviceRRPCSyncResponse
313
+ kwargs["headers"] = request.headers
314
+ kwargs["opts"] = opts or {}
315
+
316
+ return await self.call_and_deserialize(**kwargs)
317
+
246
318
  async def ChangeP2PRoute(
247
319
  self,
248
320
  request: models.ChangeP2PRouteRequest,
@@ -4011,6 +4083,48 @@ class IotexplorerClient(AbstractClient):
4011
4083
 
4012
4084
  return await self.call_and_deserialize(**kwargs)
4013
4085
 
4086
+ async def RevokeBindUserDevice(
4087
+ self,
4088
+ request: models.RevokeBindUserDeviceRequest,
4089
+ opts: Dict = None,
4090
+ ) -> models.RevokeBindUserDeviceResponse:
4091
+ """
4092
+ 1. 按 `(IotAppID, OpenID)` 只读定位用户(不存在视为已解绑,幂等成功);
4093
+ 2. 按 `(用户, FamilyName)` 只读定位家庭(不存在视为已解绑,幂等成功);
4094
+ 3. 解除设备与该家庭的绑定关系,异步下发 `delete_device` 消息;解绑路径不校验设备存在性,允许设备已删除时清理残留绑定关系。
4095
+ """
4096
+
4097
+ kwargs = {}
4098
+ kwargs["action"] = "RevokeBindUserDevice"
4099
+ kwargs["params"] = request._serialize()
4100
+ kwargs["resp_cls"] = models.RevokeBindUserDeviceResponse
4101
+ kwargs["headers"] = request.headers
4102
+ kwargs["opts"] = opts or {}
4103
+
4104
+ return await self.call_and_deserialize(**kwargs)
4105
+
4106
+ async def RevokeShareDeviceFromUser(
4107
+ self,
4108
+ request: models.RevokeShareDeviceFromUserRequest,
4109
+ opts: Dict = None,
4110
+ ) -> models.RevokeShareDeviceFromUserResponse:
4111
+ """
4112
+ Owner 取消对指定用户的设备分享:
4113
+ 1. 校验产品 ACL / 子产品禁止 / 设备真实存在;
4114
+ 2. 只读定位 Owner(必须已存在),并校验 Owner 持有该设备;
4115
+ 3. 只读定位被取消分享用户(不存在视为已取消,幂等成功);
4116
+ 4. 删除分享关系记录(不存在视为已取消,幂等成功)。
4117
+ """
4118
+
4119
+ kwargs = {}
4120
+ kwargs["action"] = "RevokeShareDeviceFromUser"
4121
+ kwargs["params"] = request._serialize()
4122
+ kwargs["resp_cls"] = models.RevokeShareDeviceFromUserResponse
4123
+ kwargs["headers"] = request.headers
4124
+ kwargs["opts"] = opts or {}
4125
+
4126
+ return await self.call_and_deserialize(**kwargs)
4127
+
4014
4128
  async def SearchPositionSpace(
4015
4129
  self,
4016
4130
  request: models.SearchPositionSpaceRequest,
@@ -4065,6 +4179,28 @@ class IotexplorerClient(AbstractClient):
4065
4179
 
4066
4180
  return await self.call_and_deserialize(**kwargs)
4067
4181
 
4182
+ async def ShareDeviceToUser(
4183
+ self,
4184
+ request: models.ShareDeviceToUserRequest,
4185
+ opts: Dict = None,
4186
+ ) -> models.ShareDeviceToUserResponse:
4187
+ """
4188
+ Owner 将其名下的设备分享给指定 App 用户:
4189
+ 1. 校验产品 ACL / 子产品禁止 / 设备真实存在;
4190
+ 2. 只读定位 Owner(必须已存在),并校验 Owner 确实持有该设备;
4191
+ 3. 兜底创建被分享用户(已存在则复用,昵称不覆盖);
4192
+ 4. 写入分享关系(重复分享幂等成功,不修改原 CreateTime)。
4193
+ """
4194
+
4195
+ kwargs = {}
4196
+ kwargs["action"] = "ShareDeviceToUser"
4197
+ kwargs["params"] = request._serialize()
4198
+ kwargs["resp_cls"] = models.ShareDeviceToUserResponse
4199
+ kwargs["headers"] = request.headers
4200
+ kwargs["opts"] = opts or {}
4201
+
4202
+ return await self.call_and_deserialize(**kwargs)
4203
+
4068
4204
  async def TerminateTWeSeeSubscription(
4069
4205
  self,
4070
4206
  request: models.TerminateTWeSeeSubscriptionRequest,