viam-sdk 0.25.2__py3-none-linux_armv7l.whl → 0.62.0__py3-none-linux_armv7l.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.
- viam/app/_logs.py +3 -6
- viam/app/app_client.py +606 -262
- viam/app/billing_client.py +60 -18
- viam/app/data_client.py +1086 -315
- viam/app/ml_training_client.py +51 -48
- viam/app/provisioning_client.py +3 -5
- viam/app/viam_client.py +105 -11
- viam/components/arm/__init__.py +1 -25
- viam/components/arm/arm.py +21 -22
- viam/components/arm/client.py +27 -30
- viam/components/arm/service.py +3 -3
- viam/components/audio_in/__init__.py +24 -0
- viam/components/audio_in/audio_in.py +74 -0
- viam/components/audio_in/client.py +76 -0
- viam/components/audio_in/service.py +83 -0
- viam/components/audio_input/__init__.py +1 -1
- viam/components/audio_input/audio_input.py +4 -3
- viam/components/audio_input/client.py +19 -8
- viam/components/audio_input/service.py +10 -0
- viam/components/audio_out/__init__.py +21 -0
- viam/components/audio_out/audio_out.py +72 -0
- viam/components/audio_out/client.py +67 -0
- viam/components/audio_out/service.py +63 -0
- viam/components/base/__init__.py +2 -10
- viam/components/base/base.py +20 -20
- viam/components/base/client.py +27 -30
- viam/components/board/__init__.py +2 -25
- viam/components/board/board.py +39 -77
- viam/components/board/client.py +39 -73
- viam/components/button/__init__.py +10 -0
- viam/components/button/button.py +41 -0
- viam/components/button/client.py +52 -0
- viam/components/button/service.py +46 -0
- viam/components/camera/__init__.py +1 -1
- viam/components/camera/camera.py +31 -22
- viam/components/camera/client.py +30 -20
- viam/components/camera/service.py +14 -12
- viam/components/component_base.py +10 -7
- viam/components/encoder/__init__.py +1 -1
- viam/components/encoder/client.py +15 -16
- viam/components/encoder/encoder.py +9 -9
- viam/components/gantry/__init__.py +1 -13
- viam/components/gantry/client.py +41 -28
- viam/components/gantry/gantry.py +48 -17
- viam/components/gantry/service.py +21 -5
- viam/components/generic/__init__.py +1 -1
- viam/components/generic/client.py +11 -7
- viam/components/generic/generic.py +3 -3
- viam/components/gripper/__init__.py +3 -12
- viam/components/gripper/client.py +43 -20
- viam/components/gripper/gripper.py +87 -12
- viam/components/gripper/service.py +32 -3
- viam/components/input/__init__.py +1 -14
- viam/components/input/client.py +22 -23
- viam/components/input/input.py +18 -12
- viam/components/motor/__init__.py +1 -21
- viam/components/motor/client.py +36 -42
- viam/components/motor/motor.py +24 -24
- viam/components/movement_sensor/__init__.py +1 -1
- viam/components/movement_sensor/client.py +33 -40
- viam/components/movement_sensor/movement_sensor.py +12 -12
- viam/components/pose_tracker/__init__.py +1 -1
- viam/components/pose_tracker/client.py +9 -8
- viam/components/pose_tracker/pose_tracker.py +2 -2
- viam/components/power_sensor/__init__.py +1 -1
- viam/components/power_sensor/client.py +15 -18
- viam/components/power_sensor/power_sensor.py +12 -12
- viam/components/sensor/__init__.py +1 -1
- viam/components/sensor/client.py +9 -8
- viam/components/sensor/sensor.py +5 -5
- viam/components/servo/__init__.py +1 -13
- viam/components/servo/client.py +18 -18
- viam/components/servo/servo.py +12 -12
- viam/components/switch/__init__.py +10 -0
- viam/components/switch/client.py +83 -0
- viam/components/switch/service.py +72 -0
- viam/components/switch/switch.py +95 -0
- viam/gen/app/agent/v1/agent_pb2.py +40 -29
- viam/gen/app/agent/v1/agent_pb2.pyi +73 -11
- viam/gen/app/cloudslam/v1/cloud_slam_pb2.py +45 -42
- viam/gen/app/data/v1/data_grpc.py +98 -2
- viam/gen/app/data/v1/data_pb2.py +238 -119
- viam/gen/app/data/v1/data_pb2.pyi +804 -34
- viam/gen/app/datapipelines/v1/data_pipelines_grpc.py +84 -0
- viam/gen/app/datapipelines/v1/data_pipelines_pb2.py +57 -0
- viam/gen/app/datapipelines/v1/data_pipelines_pb2.pyi +387 -0
- viam/gen/app/dataset/v1/dataset_grpc.py +10 -2
- viam/gen/app/dataset/v1/dataset_pb2.py +38 -31
- viam/gen/app/dataset/v1/dataset_pb2.pyi +36 -1
- viam/gen/app/datasync/v1/data_sync_grpc.py +1 -1
- viam/gen/app/datasync/v1/data_sync_pb2.py +61 -51
- viam/gen/app/datasync/v1/data_sync_pb2.pyi +52 -12
- viam/gen/app/mlinference/__init__.py +0 -0
- viam/gen/app/mlinference/v1/__init__.py +0 -0
- viam/gen/app/mlinference/v1/ml_inference_grpc.py +28 -0
- viam/gen/app/mlinference/v1/ml_inference_pb2.py +23 -0
- viam/gen/app/mlinference/v1/ml_inference_pb2.pyi +63 -0
- viam/gen/app/mltraining/v1/ml_training_grpc.py +18 -2
- viam/gen/app/mltraining/v1/ml_training_pb2.py +134 -101
- viam/gen/app/mltraining/v1/ml_training_pb2.pyi +193 -7
- viam/gen/app/packages/v1/packages_pb2.py +43 -40
- viam/gen/app/v1/app_grpc.py +290 -2
- viam/gen/app/v1/app_pb2.py +670 -453
- viam/gen/app/v1/app_pb2.pyi +3133 -947
- viam/gen/app/v1/billing_grpc.py +34 -2
- viam/gen/app/v1/billing_pb2.py +94 -35
- viam/gen/app/v1/billing_pb2.pyi +314 -61
- viam/gen/app/v1/end_user_pb2.py +50 -29
- viam/gen/app/v1/robot_pb2.py +120 -111
- viam/gen/app/v1/robot_pb2.pyi +137 -15
- viam/gen/common/v1/common_pb2.py +86 -66
- viam/gen/common/v1/common_pb2.pyi +184 -8
- viam/gen/component/arm/v1/arm_grpc.py +18 -2
- viam/gen/component/arm/v1/arm_pb2.py +68 -55
- viam/gen/component/arm/v1/arm_pb2.pyi +73 -3
- viam/gen/component/audioin/__init__.py +0 -0
- viam/gen/component/audioin/v1/__init__.py +0 -0
- viam/gen/component/audioin/v1/audioin_grpc.py +54 -0
- viam/gen/component/audioin/v1/audioin_pb2.py +34 -0
- viam/gen/component/audioin/v1/audioin_pb2.pyi +94 -0
- viam/gen/component/audioinput/v1/audioinput_pb2.py +35 -32
- viam/gen/component/audioout/__init__.py +0 -0
- viam/gen/component/audioout/v1/__init__.py +0 -0
- viam/gen/component/audioout/v1/audioout_grpc.py +54 -0
- viam/gen/component/audioout/v1/audioout_pb2.py +32 -0
- viam/gen/component/audioout/v1/audioout_pb2.pyi +47 -0
- viam/gen/component/base/v1/base_pb2.py +57 -54
- viam/gen/component/board/v1/board_pb2.py +93 -90
- viam/gen/component/button/__init__.py +0 -0
- viam/gen/component/button/v1/__init__.py +0 -0
- viam/gen/component/button/v1/button_grpc.py +38 -0
- viam/gen/component/button/v1/button_pb2.py +28 -0
- viam/gen/component/button/v1/button_pb2.pyi +39 -0
- viam/gen/component/camera/v1/camera_pb2.py +58 -55
- viam/gen/component/camera/v1/camera_pb2.pyi +31 -7
- viam/gen/component/encoder/v1/encoder_pb2.py +35 -32
- viam/gen/component/gantry/v1/gantry_grpc.py +9 -1
- viam/gen/component/gantry/v1/gantry_pb2.py +56 -51
- viam/gen/component/generic/v1/generic_pb2.py +15 -12
- viam/gen/component/gripper/v1/gripper_grpc.py +18 -2
- viam/gen/component/gripper/v1/gripper_pb2.py +48 -37
- viam/gen/component/gripper/v1/gripper_pb2.pyi +43 -1
- viam/gen/component/inputcontroller/v1/input_controller_pb2.py +45 -42
- viam/gen/component/motor/v1/motor_pb2.py +77 -74
- viam/gen/component/movementsensor/v1/movementsensor_pb2.py +69 -66
- viam/gen/component/posetracker/v1/pose_tracker_pb2.py +25 -22
- viam/gen/component/powersensor/v1/powersensor_pb2.py +33 -30
- viam/gen/component/sensor/v1/sensor_pb2.py +17 -14
- viam/gen/component/servo/v1/servo_pb2.py +41 -38
- viam/gen/component/switch/__init__.py +0 -0
- viam/gen/component/switch/v1/__init__.py +0 -0
- viam/gen/component/switch/v1/switch_grpc.py +54 -0
- viam/gen/component/switch/v1/switch_pb2.py +40 -0
- viam/gen/component/switch/v1/switch_pb2.pyi +116 -0
- viam/gen/component/testecho/v1/testecho_pb2.py +29 -26
- viam/gen/module/v1/module_pb2.py +36 -33
- viam/gen/module/v1/module_pb2.pyi +7 -2
- viam/gen/proto/rpc/examples/echo/v1/echo_pb2.py +26 -23
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.py +23 -20
- viam/gen/proto/rpc/v1/auth_pb2.py +27 -24
- viam/gen/proto/rpc/webrtc/v1/grpc_pb2.py +35 -32
- viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py +62 -57
- viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi +18 -4
- viam/gen/provisioning/v1/provisioning_grpc.py +10 -2
- viam/gen/provisioning/v1/provisioning_pb2.py +38 -31
- viam/gen/provisioning/v1/provisioning_pb2.pyi +20 -2
- viam/gen/robot/v1/robot_grpc.py +61 -29
- viam/gen/robot/v1/robot_pb2.py +186 -155
- viam/gen/robot/v1/robot_pb2.pyi +278 -59
- viam/gen/service/datamanager/v1/data_manager_grpc.py +11 -2
- viam/gen/service/datamanager/v1/data_manager_pb2.py +27 -17
- viam/gen/service/datamanager/v1/data_manager_pb2.pyi +47 -1
- viam/gen/service/discovery/__init__.py +0 -0
- viam/gen/service/discovery/v1/__init__.py +0 -0
- viam/gen/service/discovery/v1/discovery_grpc.py +39 -0
- viam/gen/service/discovery/v1/discovery_pb2.py +29 -0
- viam/gen/service/discovery/v1/discovery_pb2.pyi +51 -0
- viam/gen/service/generic/v1/generic_pb2.py +13 -10
- viam/gen/service/mlmodel/v1/mlmodel_pb2.py +75 -72
- viam/gen/service/motion/v1/motion_pb2.py +118 -85
- viam/gen/service/motion/v1/motion_pb2.pyi +130 -68
- viam/gen/service/navigation/v1/navigation_pb2.py +75 -72
- viam/gen/service/sensors/v1/sensors_pb2.py +59 -56
- viam/gen/service/shell/v1/shell_pb2.py +35 -32
- viam/gen/service/slam/v1/slam_pb2.py +43 -40
- viam/gen/service/slam/v1/slam_pb2.pyi +1 -1
- viam/gen/service/video/__init__.py +0 -0
- viam/gen/service/video/v1/__init__.py +0 -0
- viam/gen/service/video/v1/video_grpc.py +39 -0
- viam/gen/service/video/v1/video_pb2.py +29 -0
- viam/gen/service/video/v1/video_pb2.pyi +72 -0
- viam/gen/service/vision/v1/vision_pb2.py +60 -57
- viam/gen/service/vision/v1/vision_pb2.pyi +28 -3
- viam/gen/service/worldstatestore/__init__.py +0 -0
- viam/gen/service/worldstatestore/v1/__init__.py +0 -0
- viam/gen/service/worldstatestore/v1/world_state_store_grpc.py +55 -0
- viam/gen/service/worldstatestore/v1/world_state_store_pb2.py +39 -0
- viam/gen/service/worldstatestore/v1/world_state_store_pb2.pyi +171 -0
- viam/gen/stream/v1/stream_grpc.py +17 -1
- viam/gen/stream/v1/stream_pb2.py +34 -21
- viam/gen/stream/v1/stream_pb2.pyi +79 -1
- viam/gen/tagger/v1/tagger_pb2.py +9 -8
- viam/logging.py +77 -18
- viam/media/audio.py +28 -0
- viam/media/utils/pil/__init__.py +7 -3
- viam/media/video.py +80 -17
- viam/module/module.py +111 -38
- viam/module/resource_data_consumer.py +41 -0
- viam/module/service.py +9 -1
- viam/module/types.py +2 -4
- viam/proto/app/__init__.py +199 -0
- viam/proto/app/agent/__init__.py +5 -2
- viam/proto/app/billing.py +31 -4
- viam/proto/app/cloudslam/__init__.py +1 -0
- viam/proto/app/data/__init__.py +63 -0
- viam/proto/app/datapipelines/__init__.py +56 -0
- viam/proto/app/dataset/__init__.py +5 -0
- viam/proto/app/datasync/__init__.py +3 -0
- viam/proto/app/end_user.py +1 -0
- viam/proto/app/mlinference/__init__.py +15 -0
- viam/proto/app/mltraining/__init__.py +13 -0
- viam/proto/app/packages/__init__.py +1 -0
- viam/proto/app/robot.py +7 -0
- viam/proto/common/__init__.py +15 -0
- viam/proto/component/arm/__init__.py +7 -0
- viam/proto/component/audioin/__init__.py +16 -0
- viam/proto/component/audioinput/__init__.py +1 -0
- viam/proto/component/audioout/__init__.py +15 -0
- viam/proto/component/base/__init__.py +1 -0
- viam/proto/component/board/__init__.py +1 -0
- viam/proto/component/button/__init__.py +15 -0
- viam/proto/component/camera/__init__.py +1 -0
- viam/proto/component/encoder/__init__.py +1 -0
- viam/proto/component/gantry/__init__.py +1 -0
- viam/proto/component/generic/__init__.py +1 -0
- viam/proto/component/gripper/__init__.py +5 -0
- viam/proto/component/inputcontroller/__init__.py +1 -0
- viam/proto/component/motor/__init__.py +1 -0
- viam/proto/component/movementsensor/__init__.py +1 -0
- viam/proto/component/posetracker/__init__.py +1 -0
- viam/proto/component/powersensor/__init__.py +1 -0
- viam/proto/component/sensor/__init__.py +1 -0
- viam/proto/component/servo/__init__.py +1 -0
- viam/proto/component/switch/__init__.py +26 -0
- viam/proto/component/testecho/__init__.py +1 -0
- viam/proto/module/__init__.py +1 -0
- viam/proto/provisioning/__init__.py +5 -0
- viam/proto/robot/__init__.py +29 -8
- viam/proto/rpc/auth.py +1 -0
- viam/proto/rpc/examples/echo/__init__.py +1 -0
- viam/proto/rpc/examples/echoresource/__init__.py +1 -0
- viam/proto/rpc/webrtc/grpc.py +1 -0
- viam/proto/rpc/webrtc/signaling.py +3 -0
- viam/proto/service/datamanager/__init__.py +9 -1
- viam/proto/service/discovery/__init__.py +15 -0
- viam/proto/service/generic/__init__.py +1 -0
- viam/proto/service/mlmodel/__init__.py +1 -0
- viam/proto/service/motion/__init__.py +3 -0
- viam/proto/service/navigation/__init__.py +1 -0
- viam/proto/service/sensors/__init__.py +1 -0
- viam/proto/service/shell/__init__.py +1 -0
- viam/proto/service/slam/__init__.py +1 -0
- viam/proto/service/video/__init__.py +15 -0
- viam/proto/service/vision/__init__.py +1 -0
- viam/proto/service/worldstatestore/__init__.py +32 -0
- viam/proto/stream/__init__.py +11 -0
- viam/py.typed +0 -0
- viam/resource/base.py +12 -8
- viam/resource/easy_resource.py +24 -13
- viam/resource/manager.py +6 -5
- viam/resource/registry.py +39 -51
- viam/resource/rpc_client_base.py +33 -1
- viam/resource/types.py +13 -14
- viam/robot/client.py +190 -122
- viam/robot/service.py +2 -50
- viam/rpc/dial.py +54 -4
- viam/rpc/libviam_rust_utils.so +0 -0
- viam/rpc/server.py +25 -11
- viam/rpc/types.py +2 -4
- viam/services/discovery/__init__.py +12 -0
- viam/services/discovery/client.py +55 -0
- viam/services/discovery/discovery.py +52 -0
- viam/services/discovery/service.py +43 -0
- viam/services/generic/__init__.py +1 -1
- viam/services/generic/client.py +8 -5
- viam/services/generic/generic.py +2 -2
- viam/services/mlmodel/__init__.py +1 -1
- viam/services/mlmodel/client.py +17 -7
- viam/services/mlmodel/mlmodel.py +23 -12
- viam/services/mlmodel/service.py +5 -2
- viam/services/mlmodel/utils.py +11 -1
- viam/services/motion/__init__.py +2 -2
- viam/services/motion/client.py +32 -32
- viam/services/motion/motion.py +66 -62
- viam/services/navigation/__init__.py +1 -1
- viam/services/navigation/client.py +30 -20
- viam/services/navigation/navigation.py +23 -23
- viam/services/service_base.py +13 -9
- viam/services/service_client_base.py +3 -3
- viam/services/slam/__init__.py +1 -1
- viam/services/slam/client.py +15 -10
- viam/services/slam/slam.py +11 -11
- viam/services/vision/__init__.py +1 -1
- viam/services/vision/client.py +31 -24
- viam/services/vision/service.py +8 -8
- viam/services/vision/vision.py +36 -53
- viam/services/worldstatestore/__init__.py +18 -0
- viam/services/worldstatestore/client.py +94 -0
- viam/services/worldstatestore/service.py +55 -0
- viam/services/worldstatestore/worldstatestore.py +90 -0
- viam/sessions_client.py +115 -46
- viam/streams.py +3 -6
- viam/utils.py +44 -14
- viam/version_metadata.py +4 -0
- {viam_sdk-0.25.2.dist-info → viam_sdk-0.62.0.dist-info}/METADATA +27 -28
- viam_sdk-0.62.0.dist-info/RECORD +514 -0
- {viam_sdk-0.25.2.dist-info → viam_sdk-0.62.0.dist-info}/WHEEL +1 -1
- viam/gen/proto/rpc/examples/fileupload/v1/fileupload_grpc.py +0 -27
- viam/gen/proto/rpc/examples/fileupload/v1/fileupload_pb2.py +0 -18
- viam/gen/proto/rpc/examples/fileupload/v1/fileupload_pb2.pyi +0 -45
- viam/proto/rpc/examples/fileupload/__init__.py +0 -18
- viam/services/sensors/__init__.py +0 -5
- viam/services/sensors/client.py +0 -65
- viam_sdk-0.25.2.dist-info/LICENSE +0 -202
- viam_sdk-0.25.2.dist-info/RECORD +0 -442
- /viam/gen/{proto/rpc/examples/fileupload → app/datapipelines}/__init__.py +0 -0
- /viam/gen/{proto/rpc/examples/fileupload → app/datapipelines}/v1/__init__.py +0 -0
- /LICENSE → /viam_sdk-0.62.0.dist-info/licenses/LICENSE +0 -0
|
@@ -26,12 +26,11 @@ class PoseTrackerClient(PoseTracker, ReconfigurableResourceRPCClientBase):
|
|
|
26
26
|
*,
|
|
27
27
|
extra: Optional[Mapping[str, Any]] = None,
|
|
28
28
|
timeout: Optional[float] = None,
|
|
29
|
-
**
|
|
29
|
+
**kwargs,
|
|
30
30
|
) -> Dict[str, PoseInFrame]:
|
|
31
|
-
|
|
32
|
-
extra = {}
|
|
31
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
33
32
|
request = GetPosesRequest(name=self.name, body_names=body_names, extra=dict_to_struct(extra))
|
|
34
|
-
response: GetPosesResponse = await self.client.GetPoses(request, timeout=timeout)
|
|
33
|
+
response: GetPosesResponse = await self.client.GetPoses(request, timeout=timeout, metadata=md)
|
|
35
34
|
return {key: response.body_poses[key] for key in response.body_poses.keys()}
|
|
36
35
|
|
|
37
36
|
async def do_command(
|
|
@@ -39,11 +38,13 @@ class PoseTrackerClient(PoseTracker, ReconfigurableResourceRPCClientBase):
|
|
|
39
38
|
command: Mapping[str, ValueTypes],
|
|
40
39
|
*,
|
|
41
40
|
timeout: Optional[float] = None,
|
|
42
|
-
**
|
|
41
|
+
**kwargs,
|
|
43
42
|
) -> Mapping[str, ValueTypes]:
|
|
43
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
44
44
|
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
45
|
-
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
|
|
45
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
46
46
|
return struct_to_dict(response.result)
|
|
47
47
|
|
|
48
|
-
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> List[Geometry]:
|
|
49
|
-
|
|
48
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
|
|
49
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
50
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|
|
@@ -2,7 +2,7 @@ import abc
|
|
|
2
2
|
from typing import Any, Dict, Final, List, Mapping, Optional
|
|
3
3
|
|
|
4
4
|
from viam.proto.common import PoseInFrame
|
|
5
|
-
from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
5
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
6
6
|
|
|
7
7
|
from ..component_base import ComponentBase
|
|
8
8
|
|
|
@@ -16,7 +16,7 @@ class PoseTracker(ComponentBase):
|
|
|
16
16
|
overridden, it must call the ``super().__init__()`` function.
|
|
17
17
|
"""
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
20
20
|
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "pose_tracker"
|
|
21
21
|
)
|
|
22
22
|
|
|
@@ -30,12 +30,11 @@ class PowerSensorClient(PowerSensor, ReconfigurableResourceRPCClientBase):
|
|
|
30
30
|
*,
|
|
31
31
|
extra: Optional[Dict[str, Any]] = None,
|
|
32
32
|
timeout: Optional[float] = None,
|
|
33
|
-
**
|
|
33
|
+
**kwargs,
|
|
34
34
|
) -> Tuple[float, bool]:
|
|
35
|
-
|
|
36
|
-
extra = {}
|
|
35
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
37
36
|
request = GetVoltageRequest(name=self.name, extra=dict_to_struct(extra))
|
|
38
|
-
response: GetVoltageResponse = await self.client.GetVoltage(request, timeout=timeout)
|
|
37
|
+
response: GetVoltageResponse = await self.client.GetVoltage(request, timeout=timeout, metadata=md)
|
|
39
38
|
return response.volts, response.is_ac
|
|
40
39
|
|
|
41
40
|
async def get_current(
|
|
@@ -43,12 +42,11 @@ class PowerSensorClient(PowerSensor, ReconfigurableResourceRPCClientBase):
|
|
|
43
42
|
*,
|
|
44
43
|
extra: Optional[Dict[str, Any]] = None,
|
|
45
44
|
timeout: Optional[float] = None,
|
|
46
|
-
**
|
|
45
|
+
**kwargs,
|
|
47
46
|
) -> Tuple[float, bool]:
|
|
48
|
-
|
|
49
|
-
extra = {}
|
|
47
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
50
48
|
request = GetCurrentRequest(name=self.name, extra=dict_to_struct(extra))
|
|
51
|
-
response: GetCurrentResponse = await self.client.GetCurrent(request, timeout=timeout)
|
|
49
|
+
response: GetCurrentResponse = await self.client.GetCurrent(request, timeout=timeout, metadata=md)
|
|
52
50
|
return response.amperes, response.is_ac
|
|
53
51
|
|
|
54
52
|
async def get_power(
|
|
@@ -56,12 +54,11 @@ class PowerSensorClient(PowerSensor, ReconfigurableResourceRPCClientBase):
|
|
|
56
54
|
*,
|
|
57
55
|
extra: Optional[Dict[str, Any]] = None,
|
|
58
56
|
timeout: Optional[float] = None,
|
|
59
|
-
**
|
|
57
|
+
**kwargs,
|
|
60
58
|
) -> float:
|
|
61
|
-
|
|
62
|
-
extra = {}
|
|
59
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
63
60
|
request = GetPowerRequest(name=self.name, extra=dict_to_struct(extra))
|
|
64
|
-
response: GetPowerResponse = await self.client.GetPower(request, timeout=timeout)
|
|
61
|
+
response: GetPowerResponse = await self.client.GetPower(request, timeout=timeout, metadata=md)
|
|
65
62
|
return response.watts
|
|
66
63
|
|
|
67
64
|
async def get_readings(
|
|
@@ -69,12 +66,11 @@ class PowerSensorClient(PowerSensor, ReconfigurableResourceRPCClientBase):
|
|
|
69
66
|
*,
|
|
70
67
|
extra: Optional[Dict[str, Any]] = None,
|
|
71
68
|
timeout: Optional[float] = None,
|
|
72
|
-
**
|
|
69
|
+
**kwargs,
|
|
73
70
|
) -> Mapping[str, SensorReading]:
|
|
74
|
-
|
|
75
|
-
extra = {}
|
|
71
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
76
72
|
request = GetReadingsRequest(name=self.name, extra=dict_to_struct(extra))
|
|
77
|
-
response: GetReadingsResponse = await self.client.GetReadings(request, timeout=timeout)
|
|
73
|
+
response: GetReadingsResponse = await self.client.GetReadings(request, timeout=timeout, metadata=md)
|
|
78
74
|
return sensor_readings_value_to_native(response.readings)
|
|
79
75
|
|
|
80
76
|
async def do_command(
|
|
@@ -82,8 +78,9 @@ class PowerSensorClient(PowerSensor, ReconfigurableResourceRPCClientBase):
|
|
|
82
78
|
command: Mapping[str, ValueTypes],
|
|
83
79
|
*,
|
|
84
80
|
timeout: Optional[float] = None,
|
|
85
|
-
**
|
|
81
|
+
**kwargs,
|
|
86
82
|
) -> Mapping[str, ValueTypes]:
|
|
83
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
87
84
|
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
88
|
-
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
|
|
85
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
89
86
|
return struct_to_dict(response.result)
|
|
@@ -2,7 +2,7 @@ import abc
|
|
|
2
2
|
from typing import Any, Dict, Final, Mapping, Optional, Tuple
|
|
3
3
|
|
|
4
4
|
from viam.components.component_base import ComponentBase
|
|
5
|
-
from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
5
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
6
6
|
from viam.utils import SensorReading
|
|
7
7
|
|
|
8
8
|
|
|
@@ -16,10 +16,10 @@ class PowerSensor(ComponentBase):
|
|
|
16
16
|
|
|
17
17
|
from viam.components.power_sensor import PowerSensor
|
|
18
18
|
|
|
19
|
-
For more information, see `Power Sensor component <https://docs.viam.com/components/power-sensor/>`_.
|
|
19
|
+
For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/>`_.
|
|
20
20
|
"""
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
23
23
|
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "power_sensor"
|
|
24
24
|
)
|
|
25
25
|
|
|
@@ -29,7 +29,7 @@ class PowerSensor(ComponentBase):
|
|
|
29
29
|
|
|
30
30
|
::
|
|
31
31
|
|
|
32
|
-
my_power_sensor = PowerSensor.from_robot(robot=
|
|
32
|
+
my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
|
|
33
33
|
|
|
34
34
|
# Get the voltage reading from the power sensor
|
|
35
35
|
voltage, is_ac = await my_power_sensor.get_voltage()
|
|
@@ -39,7 +39,7 @@ class PowerSensor(ComponentBase):
|
|
|
39
39
|
Tuple[float, bool]: A float representing the voltage reading in V. A bool indicating whether the voltage is AC (`true`) or DC
|
|
40
40
|
(`false`).
|
|
41
41
|
|
|
42
|
-
For more information, see `Power Sensor component <https://docs.viam.com/components/power-sensor
|
|
42
|
+
For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/#getvoltage>`_.
|
|
43
43
|
"""
|
|
44
44
|
...
|
|
45
45
|
|
|
@@ -49,7 +49,7 @@ class PowerSensor(ComponentBase):
|
|
|
49
49
|
|
|
50
50
|
::
|
|
51
51
|
|
|
52
|
-
my_power_sensor = PowerSensor.from_robot(robot=
|
|
52
|
+
my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
|
|
53
53
|
|
|
54
54
|
# Get the current reading from the power sensor
|
|
55
55
|
current, is_ac = await my_power_sensor.get_current()
|
|
@@ -59,7 +59,7 @@ class PowerSensor(ComponentBase):
|
|
|
59
59
|
Tuple[float, bool]: A tuple which includes a float representing the current reading in amps, and a bool indicating whether the
|
|
60
60
|
current is AC (`true`) or DC (`false`).
|
|
61
61
|
|
|
62
|
-
For more information, see `Power Sensor component <https://docs.viam.com/components/power-sensor
|
|
62
|
+
For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/#getcurrent>`_.
|
|
63
63
|
"""
|
|
64
64
|
...
|
|
65
65
|
|
|
@@ -69,7 +69,7 @@ class PowerSensor(ComponentBase):
|
|
|
69
69
|
|
|
70
70
|
::
|
|
71
71
|
|
|
72
|
-
my_power_sensor = PowerSensor.from_robot(robot=
|
|
72
|
+
my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
|
|
73
73
|
|
|
74
74
|
# Get the power reading from the power sensor
|
|
75
75
|
power = await my_power_sensor.get_power()
|
|
@@ -78,7 +78,7 @@ class PowerSensor(ComponentBase):
|
|
|
78
78
|
Returns:
|
|
79
79
|
float: The power reading in watts.
|
|
80
80
|
|
|
81
|
-
For more information, see `Power Sensor component <https://docs.viam.com/components/power-sensor
|
|
81
|
+
For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/#getpower>`_.
|
|
82
82
|
"""
|
|
83
83
|
...
|
|
84
84
|
|
|
@@ -90,15 +90,15 @@ class PowerSensor(ComponentBase):
|
|
|
90
90
|
|
|
91
91
|
::
|
|
92
92
|
|
|
93
|
-
my_power_sensor = PowerSensor.from_robot(robot=
|
|
93
|
+
my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
|
|
94
94
|
|
|
95
95
|
# Get the readings provided by the sensor.
|
|
96
96
|
readings = await my_power_sensor.get_readings()
|
|
97
97
|
|
|
98
98
|
Returns:
|
|
99
99
|
Mapping[str, Any]: The readings for the PowerSensor. Can be of any type. Includes voltage in volts (float), current in
|
|
100
|
-
|
|
100
|
+
amperes (float), is_ac (bool), and power in watts (float).
|
|
101
101
|
|
|
102
|
-
For more information, see `Power Sensor component <https://docs.viam.com/components/power-sensor
|
|
102
|
+
For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/#getreadings>`_.
|
|
103
103
|
"""
|
|
104
104
|
...
|
viam/components/sensor/client.py
CHANGED
|
@@ -25,12 +25,11 @@ class SensorClient(Sensor, ReconfigurableResourceRPCClientBase):
|
|
|
25
25
|
*,
|
|
26
26
|
extra: Optional[Mapping[str, Any]] = None,
|
|
27
27
|
timeout: Optional[float] = None,
|
|
28
|
-
**
|
|
28
|
+
**kwargs,
|
|
29
29
|
) -> Mapping[str, SensorReading]:
|
|
30
|
-
|
|
31
|
-
extra = {}
|
|
30
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
32
31
|
request = GetReadingsRequest(name=self.name, extra=dict_to_struct(extra))
|
|
33
|
-
response: GetReadingsResponse = await self.client.GetReadings(request, timeout=timeout)
|
|
32
|
+
response: GetReadingsResponse = await self.client.GetReadings(request, timeout=timeout, metadata=md)
|
|
34
33
|
return sensor_readings_value_to_native(response.readings)
|
|
35
34
|
|
|
36
35
|
async def do_command(
|
|
@@ -38,11 +37,13 @@ class SensorClient(Sensor, ReconfigurableResourceRPCClientBase):
|
|
|
38
37
|
command: Mapping[str, ValueTypes],
|
|
39
38
|
*,
|
|
40
39
|
timeout: Optional[float] = None,
|
|
41
|
-
**
|
|
40
|
+
**kwargs,
|
|
42
41
|
) -> Mapping[str, ValueTypes]:
|
|
42
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
43
43
|
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
44
|
-
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
|
|
44
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
45
45
|
return struct_to_dict(response.result)
|
|
46
46
|
|
|
47
|
-
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> List[Geometry]:
|
|
48
|
-
|
|
47
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
|
|
48
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
49
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|
viam/components/sensor/sensor.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import abc
|
|
2
2
|
from typing import Any, Final, Mapping, Optional
|
|
3
3
|
|
|
4
|
-
from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
4
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
5
5
|
from viam.utils import SensorReading
|
|
6
6
|
|
|
7
7
|
from ..component_base import ComponentBase
|
|
@@ -19,10 +19,10 @@ class Sensor(ComponentBase):
|
|
|
19
19
|
|
|
20
20
|
from viam.components.sensor import Sensor
|
|
21
21
|
|
|
22
|
-
For more information, see `Sensor component <https://docs.viam.com/components/sensor/>`_.
|
|
22
|
+
For more information, see `Sensor component <https://docs.viam.com/dev/reference/apis/components/sensor/>`_.
|
|
23
23
|
"""
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
26
26
|
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "sensor"
|
|
27
27
|
)
|
|
28
28
|
|
|
@@ -35,7 +35,7 @@ class Sensor(ComponentBase):
|
|
|
35
35
|
|
|
36
36
|
::
|
|
37
37
|
|
|
38
|
-
my_sensor = Sensor.from_robot(robot=
|
|
38
|
+
my_sensor = Sensor.from_robot(robot=machine, name='my_sensor')
|
|
39
39
|
|
|
40
40
|
# Get the readings provided by the sensor.
|
|
41
41
|
readings = await my_sensor.get_readings()
|
|
@@ -43,6 +43,6 @@ class Sensor(ComponentBase):
|
|
|
43
43
|
Returns:
|
|
44
44
|
Mapping[str, Any]: The measurements. Can be of any type.
|
|
45
45
|
|
|
46
|
-
For more information, see `Sensor component <https://docs.viam.com/components/sensor
|
|
46
|
+
For more information, see `Sensor component <https://docs.viam.com/dev/reference/apis/components/sensor/#getreadings>`_.
|
|
47
47
|
"""
|
|
48
48
|
...
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
import asyncio
|
|
2
|
-
|
|
3
|
-
from viam.proto.component.servo import Status as ServoStatus
|
|
4
|
-
from viam.proto.robot import Status
|
|
5
1
|
from viam.resource.registry import Registry, ResourceRegistration
|
|
6
|
-
from viam.utils import message_to_struct
|
|
7
2
|
|
|
8
3
|
from .client import ServoClient
|
|
9
4
|
from .service import ServoRPCService
|
|
@@ -13,11 +8,4 @@ __all__ = [
|
|
|
13
8
|
"Servo",
|
|
14
9
|
]
|
|
15
10
|
|
|
16
|
-
|
|
17
|
-
async def create_status(component: Servo) -> Status:
|
|
18
|
-
(position_deg, is_moving) = await asyncio.gather(component.get_position(), component.is_moving())
|
|
19
|
-
s = ServoStatus(position_deg=position_deg, is_moving=is_moving)
|
|
20
|
-
return Status(name=Servo.get_resource_name(component.name), status=message_to_struct(s))
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
Registry.register_subtype(ResourceRegistration(Servo, ServoRPCService, lambda name, channel: ServoClient(name, channel), create_status))
|
|
11
|
+
Registry.register_api(ResourceRegistration(Servo, ServoRPCService, lambda name, channel: ServoClient(name, channel)))
|
viam/components/servo/client.py
CHANGED
|
@@ -33,12 +33,11 @@ class ServoClient(Servo, ReconfigurableResourceRPCClientBase):
|
|
|
33
33
|
*,
|
|
34
34
|
extra: Optional[Mapping[str, Any]] = None,
|
|
35
35
|
timeout: Optional[float] = None,
|
|
36
|
-
**
|
|
36
|
+
**kwargs,
|
|
37
37
|
) -> int:
|
|
38
|
-
|
|
39
|
-
extra = {}
|
|
38
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
40
39
|
request = GetPositionRequest(name=self.name, extra=dict_to_struct(extra))
|
|
41
|
-
response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout)
|
|
40
|
+
response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout, metadata=md)
|
|
42
41
|
return response.position_deg
|
|
43
42
|
|
|
44
43
|
async def move(
|
|
@@ -47,28 +46,27 @@ class ServoClient(Servo, ReconfigurableResourceRPCClientBase):
|
|
|
47
46
|
*,
|
|
48
47
|
extra: Optional[Mapping[str, Any]] = None,
|
|
49
48
|
timeout: Optional[float] = None,
|
|
50
|
-
**
|
|
49
|
+
**kwargs,
|
|
51
50
|
):
|
|
52
|
-
|
|
53
|
-
extra = {}
|
|
51
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
54
52
|
request = MoveRequest(name=self.name, angle_deg=angle, extra=dict_to_struct(extra))
|
|
55
|
-
await self.client.Move(request, timeout=timeout)
|
|
53
|
+
await self.client.Move(request, timeout=timeout, metadata=md)
|
|
56
54
|
|
|
57
55
|
async def stop(
|
|
58
56
|
self,
|
|
59
57
|
*,
|
|
60
58
|
extra: Optional[Mapping[str, Any]] = None,
|
|
61
59
|
timeout: Optional[float] = None,
|
|
62
|
-
**
|
|
60
|
+
**kwargs,
|
|
63
61
|
):
|
|
64
|
-
|
|
65
|
-
extra = {}
|
|
62
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
66
63
|
request = StopRequest(name=self.name, extra=dict_to_struct(extra))
|
|
67
|
-
await self.client.Stop(request, timeout=timeout)
|
|
64
|
+
await self.client.Stop(request, timeout=timeout, metadata=md)
|
|
68
65
|
|
|
69
|
-
async def is_moving(self, *, timeout: Optional[float] = None) -> bool:
|
|
66
|
+
async def is_moving(self, *, timeout: Optional[float] = None, **kwargs) -> bool:
|
|
67
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
70
68
|
request = IsMovingRequest(name=self.name)
|
|
71
|
-
response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout)
|
|
69
|
+
response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout, metadata=md)
|
|
72
70
|
return response.is_moving
|
|
73
71
|
|
|
74
72
|
async def do_command(
|
|
@@ -76,11 +74,13 @@ class ServoClient(Servo, ReconfigurableResourceRPCClientBase):
|
|
|
76
74
|
command: Mapping[str, ValueTypes],
|
|
77
75
|
*,
|
|
78
76
|
timeout: Optional[float] = None,
|
|
79
|
-
**
|
|
77
|
+
**kwargs,
|
|
80
78
|
) -> Mapping[str, ValueTypes]:
|
|
79
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
81
80
|
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
82
|
-
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
|
|
81
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
83
82
|
return struct_to_dict(response.result)
|
|
84
83
|
|
|
85
|
-
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> List[Geometry]:
|
|
86
|
-
|
|
84
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
|
|
85
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
86
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|
viam/components/servo/servo.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import abc
|
|
2
2
|
from typing import Any, Final, Mapping, Optional
|
|
3
3
|
|
|
4
|
-
from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
4
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
5
5
|
|
|
6
6
|
from ..component_base import ComponentBase
|
|
7
7
|
|
|
@@ -18,10 +18,10 @@ class Servo(ComponentBase):
|
|
|
18
18
|
|
|
19
19
|
from viam.components.servo import Servo
|
|
20
20
|
|
|
21
|
-
For more information, see `Servo component <https://docs.viam.com/components/servo/>`_.
|
|
21
|
+
For more information, see `Servo component <https://docs.viam.com/dev/reference/apis/components/servo/>`_.
|
|
22
22
|
"""
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
25
25
|
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "servo"
|
|
26
26
|
)
|
|
27
27
|
|
|
@@ -32,7 +32,7 @@ class Servo(ComponentBase):
|
|
|
32
32
|
|
|
33
33
|
::
|
|
34
34
|
|
|
35
|
-
my_servo = Servo.from_robot(robot=
|
|
35
|
+
my_servo = Servo.from_robot(robot=machine, name="my_servo")
|
|
36
36
|
|
|
37
37
|
# Move the servo from its origin to the desired angle of 10 degrees.
|
|
38
38
|
await my_servo.move(10)
|
|
@@ -43,7 +43,7 @@ class Servo(ComponentBase):
|
|
|
43
43
|
Args:
|
|
44
44
|
angle (int): The desired angle of the servo in degrees.
|
|
45
45
|
|
|
46
|
-
For more information, see `Servo component <https://docs.viam.com/components/servo
|
|
46
|
+
For more information, see `Servo component <https://docs.viam.com/dev/reference/apis/components/servo/#move>`_.
|
|
47
47
|
"""
|
|
48
48
|
...
|
|
49
49
|
|
|
@@ -54,7 +54,7 @@ class Servo(ComponentBase):
|
|
|
54
54
|
|
|
55
55
|
::
|
|
56
56
|
|
|
57
|
-
my_servo = Servo.from_robot(robot=
|
|
57
|
+
my_servo = Servo.from_robot(robot=machine, name="my_servo")
|
|
58
58
|
|
|
59
59
|
# Move the servo from its origin to the desired angle of 10 degrees.
|
|
60
60
|
await my_servo.move(10)
|
|
@@ -71,7 +71,7 @@ class Servo(ComponentBase):
|
|
|
71
71
|
Returns:
|
|
72
72
|
int: The current angle of the servo in degrees.
|
|
73
73
|
|
|
74
|
-
For more information, see `Servo component <https://docs.viam.com/components/servo
|
|
74
|
+
For more information, see `Servo component <https://docs.viam.com/dev/reference/apis/components/servo/#getposition>`_.
|
|
75
75
|
"""
|
|
76
76
|
...
|
|
77
77
|
|
|
@@ -82,7 +82,7 @@ class Servo(ComponentBase):
|
|
|
82
82
|
|
|
83
83
|
::
|
|
84
84
|
|
|
85
|
-
my_servo = Servo.from_robot(robot=
|
|
85
|
+
my_servo = Servo.from_robot(robot=machine, name="my_servo")
|
|
86
86
|
|
|
87
87
|
# Move the servo from its origin to the desired angle of 10 degrees.
|
|
88
88
|
await my_servo.move(10)
|
|
@@ -90,7 +90,7 @@ class Servo(ComponentBase):
|
|
|
90
90
|
# Stop the servo. It is assumed that the servo stops moving immediately.
|
|
91
91
|
await my_servo.stop()
|
|
92
92
|
|
|
93
|
-
For more information, see `Servo component <https://docs.viam.com/components/servo
|
|
93
|
+
For more information, see `Servo component <https://docs.viam.com/dev/reference/apis/components/servo/#stop>`_.
|
|
94
94
|
"""
|
|
95
95
|
...
|
|
96
96
|
|
|
@@ -101,14 +101,14 @@ class Servo(ComponentBase):
|
|
|
101
101
|
|
|
102
102
|
::
|
|
103
103
|
|
|
104
|
-
my_servo = Servo.from_robot(robot=
|
|
104
|
+
my_servo = Servo.from_robot(robot=machine, name="my_servo")
|
|
105
105
|
|
|
106
|
-
print(my_servo.is_moving())
|
|
106
|
+
print(await my_servo.is_moving())
|
|
107
107
|
|
|
108
108
|
|
|
109
109
|
Returns:
|
|
110
110
|
bool: Whether the servo is moving.
|
|
111
111
|
|
|
112
|
-
For more information, see `Servo component <https://docs.viam.com/components/servo
|
|
112
|
+
For more information, see `Servo component <https://docs.viam.com/dev/reference/apis/components/servo/#ismoving>`_.
|
|
113
113
|
"""
|
|
114
114
|
...
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import viam.gen.component.switch.v1.switch_pb2
|
|
2
|
+
from viam.resource.registry import Registry, ResourceRegistration
|
|
3
|
+
|
|
4
|
+
from .client import SwitchClient
|
|
5
|
+
from .service import SwitchRPCService
|
|
6
|
+
from .switch import Switch
|
|
7
|
+
|
|
8
|
+
__all__ = ["Switch"]
|
|
9
|
+
|
|
10
|
+
Registry.register_api(ResourceRegistration(Switch, SwitchRPCService, lambda name, channel: SwitchClient(name, channel)))
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
from typing import Any, Mapping, Optional
|
|
2
|
+
|
|
3
|
+
from grpclib.client import Channel
|
|
4
|
+
|
|
5
|
+
from viam.gen.component.switch.v1.switch_pb2 import (
|
|
6
|
+
GetNumberOfPositionsRequest,
|
|
7
|
+
GetNumberOfPositionsResponse,
|
|
8
|
+
GetPositionRequest,
|
|
9
|
+
GetPositionResponse,
|
|
10
|
+
SetPositionRequest,
|
|
11
|
+
)
|
|
12
|
+
from viam.proto.common import (
|
|
13
|
+
DoCommandRequest,
|
|
14
|
+
DoCommandResponse,
|
|
15
|
+
)
|
|
16
|
+
from viam.proto.component.switch import SwitchServiceStub
|
|
17
|
+
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
18
|
+
from viam.utils import (
|
|
19
|
+
ValueTypes,
|
|
20
|
+
dict_to_struct,
|
|
21
|
+
struct_to_dict,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
from .switch import Switch
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class SwitchClient(Switch, ReconfigurableResourceRPCClientBase):
|
|
28
|
+
"""
|
|
29
|
+
gRPC client for Switch component
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
def __init__(self, name: str, channel: Channel):
|
|
33
|
+
self.channel = channel
|
|
34
|
+
self.client = SwitchServiceStub(channel)
|
|
35
|
+
super().__init__(name)
|
|
36
|
+
|
|
37
|
+
async def get_position(
|
|
38
|
+
self,
|
|
39
|
+
*,
|
|
40
|
+
extra: Optional[Mapping[str, Any]] = None,
|
|
41
|
+
timeout: Optional[float] = None,
|
|
42
|
+
**kwargs,
|
|
43
|
+
) -> int:
|
|
44
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
45
|
+
request = GetPositionRequest(name=self.name, extra=dict_to_struct(extra))
|
|
46
|
+
response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout, metadata=md)
|
|
47
|
+
return response.position
|
|
48
|
+
|
|
49
|
+
async def set_position(
|
|
50
|
+
self,
|
|
51
|
+
position: int,
|
|
52
|
+
*,
|
|
53
|
+
extra: Optional[Mapping[str, Any]] = None,
|
|
54
|
+
timeout: Optional[float] = None,
|
|
55
|
+
**kwargs,
|
|
56
|
+
) -> None:
|
|
57
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
58
|
+
request = SetPositionRequest(name=self.name, position=position, extra=dict_to_struct(extra))
|
|
59
|
+
await self.client.SetPosition(request, timeout=timeout, metadata=md)
|
|
60
|
+
|
|
61
|
+
async def get_number_of_positions(
|
|
62
|
+
self,
|
|
63
|
+
*,
|
|
64
|
+
extra: Optional[Mapping[str, Any]] = None,
|
|
65
|
+
timeout: Optional[float] = None,
|
|
66
|
+
**kwargs,
|
|
67
|
+
) -> int:
|
|
68
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
69
|
+
request = GetNumberOfPositionsRequest(name=self.name, extra=dict_to_struct(extra))
|
|
70
|
+
response: GetNumberOfPositionsResponse = await self.client.GetNumberOfPositions(request, timeout=timeout, metadata=md)
|
|
71
|
+
return response.number_of_positions
|
|
72
|
+
|
|
73
|
+
async def do_command(
|
|
74
|
+
self,
|
|
75
|
+
command: Mapping[str, ValueTypes],
|
|
76
|
+
*,
|
|
77
|
+
timeout: Optional[float] = None,
|
|
78
|
+
**kwargs,
|
|
79
|
+
) -> Mapping[str, ValueTypes]:
|
|
80
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
81
|
+
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
82
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
83
|
+
return struct_to_dict(response.result)
|