viam-sdk 0.45.2__py3-none-win_amd64.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.
Potentially problematic release.
This version of viam-sdk might be problematic. Click here for more details.
- viam/__init__.py +71 -0
- viam/app/__init__.py +0 -0
- viam/app/_logs.py +34 -0
- viam/app/app_client.py +2525 -0
- viam/app/billing_client.py +143 -0
- viam/app/data_client.py +1715 -0
- viam/app/ml_training_client.py +251 -0
- viam/app/provisioning_client.py +95 -0
- viam/app/viam_client.py +260 -0
- viam/components/__init__.py +0 -0
- viam/components/arm/__init__.py +16 -0
- viam/components/arm/arm.py +223 -0
- viam/components/arm/client.py +124 -0
- viam/components/arm/service.py +123 -0
- viam/components/audio_input/__init__.py +18 -0
- viam/components/audio_input/audio_input.py +81 -0
- viam/components/audio_input/client.py +70 -0
- viam/components/audio_input/service.py +114 -0
- viam/components/base/__init__.py +13 -0
- viam/components/base/base.py +260 -0
- viam/components/base/client.py +153 -0
- viam/components/base/service.py +138 -0
- viam/components/board/__init__.py +9 -0
- viam/components/board/board.py +414 -0
- viam/components/board/client.py +241 -0
- viam/components/board/service.py +223 -0
- 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 +22 -0
- viam/components/camera/camera.py +138 -0
- viam/components/camera/client.py +98 -0
- viam/components/camera/service.py +105 -0
- viam/components/component_base.py +65 -0
- viam/components/encoder/__init__.py +18 -0
- viam/components/encoder/client.py +83 -0
- viam/components/encoder/encoder.py +118 -0
- viam/components/encoder/service.py +72 -0
- viam/components/gantry/__init__.py +11 -0
- viam/components/gantry/client.py +115 -0
- viam/components/gantry/gantry.py +156 -0
- viam/components/gantry/service.py +113 -0
- viam/components/generic/__init__.py +18 -0
- viam/components/generic/client.py +62 -0
- viam/components/generic/generic.py +76 -0
- viam/components/generic/service.py +40 -0
- viam/components/gripper/__init__.py +11 -0
- viam/components/gripper/client.py +85 -0
- viam/components/gripper/gripper.py +114 -0
- viam/components/gripper/service.py +81 -0
- viam/components/input/__init__.py +15 -0
- viam/components/input/client.py +194 -0
- viam/components/input/input.py +297 -0
- viam/components/input/service.py +175 -0
- viam/components/motor/__init__.py +11 -0
- viam/components/motor/client.py +168 -0
- viam/components/motor/motor.py +301 -0
- viam/components/motor/service.py +150 -0
- viam/components/movement_sensor/__init__.py +21 -0
- viam/components/movement_sensor/client.py +161 -0
- viam/components/movement_sensor/movement_sensor.py +253 -0
- viam/components/movement_sensor/service.py +146 -0
- viam/components/pose_tracker/__init__.py +17 -0
- viam/components/pose_tracker/client.py +50 -0
- viam/components/pose_tracker/pose_tracker.py +40 -0
- viam/components/pose_tracker/service.py +45 -0
- viam/components/power_sensor/__init__.py +17 -0
- viam/components/power_sensor/client.py +86 -0
- viam/components/power_sensor/power_sensor.py +104 -0
- viam/components/power_sensor/service.py +72 -0
- viam/components/sensor/__init__.py +18 -0
- viam/components/sensor/client.py +49 -0
- viam/components/sensor/sensor.py +48 -0
- viam/components/sensor/service.py +51 -0
- viam/components/servo/__init__.py +11 -0
- viam/components/servo/client.py +86 -0
- viam/components/servo/service.py +80 -0
- viam/components/servo/servo.py +114 -0
- 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/errors.py +105 -0
- viam/gen/__init__.py +0 -0
- viam/gen/app/__init__.py +0 -0
- viam/gen/app/agent/__init__.py +0 -0
- viam/gen/app/agent/v1/__init__.py +0 -0
- viam/gen/app/agent/v1/agent_grpc.py +29 -0
- viam/gen/app/agent/v1/agent_pb2.py +47 -0
- viam/gen/app/agent/v1/agent_pb2.pyi +280 -0
- viam/gen/app/cloudslam/__init__.py +0 -0
- viam/gen/app/cloudslam/v1/__init__.py +0 -0
- viam/gen/app/cloudslam/v1/cloud_slam_grpc.py +70 -0
- viam/gen/app/cloudslam/v1/cloud_slam_pb2.py +54 -0
- viam/gen/app/cloudslam/v1/cloud_slam_pb2.pyi +384 -0
- viam/gen/app/data/__init__.py +0 -0
- viam/gen/app/data/v1/__init__.py +0 -0
- viam/gen/app/data/v1/data_grpc.py +206 -0
- viam/gen/app/data/v1/data_pb2.py +178 -0
- viam/gen/app/data/v1/data_pb2.pyi +1485 -0
- viam/gen/app/datapipelines/__init__.py +0 -0
- viam/gen/app/datapipelines/v1/__init__.py +0 -0
- viam/gen/app/datapipelines/v1/data_pipelines_grpc.py +84 -0
- viam/gen/app/datapipelines/v1/data_pipelines_pb2.py +56 -0
- viam/gen/app/datapipelines/v1/data_pipelines_pb2.pyi +370 -0
- viam/gen/app/dataset/__init__.py +0 -0
- viam/gen/app/dataset/v1/__init__.py +0 -0
- viam/gen/app/dataset/v1/dataset_grpc.py +60 -0
- viam/gen/app/dataset/v1/dataset_pb2.py +40 -0
- viam/gen/app/dataset/v1/dataset_pb2.pyi +179 -0
- viam/gen/app/datasync/__init__.py +0 -0
- viam/gen/app/datasync/v1/__init__.py +0 -0
- viam/gen/app/datasync/v1/data_sync_grpc.py +47 -0
- viam/gen/app/datasync/v1/data_sync_pb2.py +70 -0
- viam/gen/app/datasync/v1/data_sync_pb2.pyi +425 -0
- 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/__init__.py +0 -0
- viam/gen/app/mltraining/v1/__init__.py +0 -0
- viam/gen/app/mltraining/v1/ml_training_grpc.py +78 -0
- viam/gen/app/mltraining/v1/ml_training_pb2.py +124 -0
- viam/gen/app/mltraining/v1/ml_training_pb2.pyi +415 -0
- viam/gen/app/packages/__init__.py +0 -0
- viam/gen/app/packages/v1/__init__.py +0 -0
- viam/gen/app/packages/v1/packages_grpc.py +54 -0
- viam/gen/app/packages/v1/packages_pb2.py +52 -0
- viam/gen/app/packages/v1/packages_pb2.pyi +311 -0
- viam/gen/app/v1/__init__.py +0 -0
- viam/gen/app/v1/app_grpc.py +863 -0
- viam/gen/app/v1/app_pb2.py +649 -0
- viam/gen/app/v1/app_pb2.pyi +5279 -0
- viam/gen/app/v1/billing_grpc.py +76 -0
- viam/gen/app/v1/billing_pb2.py +92 -0
- viam/gen/app/v1/billing_pb2.pyi +463 -0
- viam/gen/app/v1/end_user_grpc.py +59 -0
- viam/gen/app/v1/end_user_pb2.py +55 -0
- viam/gen/app/v1/end_user_pb2.pyi +181 -0
- viam/gen/app/v1/robot_grpc.py +55 -0
- viam/gen/app/v1/robot_pb2.py +127 -0
- viam/gen/app/v1/robot_pb2.pyi +1202 -0
- viam/gen/common/__init__.py +0 -0
- viam/gen/common/v1/__init__.py +0 -0
- viam/gen/common/v1/common_grpc.py +0 -0
- viam/gen/common/v1/common_pb2.py +78 -0
- viam/gen/common/v1/common_pb2.pyi +687 -0
- viam/gen/component/__init__.py +0 -0
- viam/gen/component/arm/__init__.py +0 -0
- viam/gen/component/arm/v1/__init__.py +0 -0
- viam/gen/component/arm/v1/arm_grpc.py +102 -0
- viam/gen/component/arm/v1/arm_pb2.py +74 -0
- viam/gen/component/arm/v1/arm_pb2.pyi +344 -0
- viam/gen/component/audioinput/__init__.py +0 -0
- viam/gen/component/audioinput/v1/__init__.py +0 -0
- viam/gen/component/audioinput/v1/audioinput_grpc.py +63 -0
- viam/gen/component/audioinput/v1/audioinput_pb2.py +45 -0
- viam/gen/component/audioinput/v1/audioinput_pb2.pyi +179 -0
- viam/gen/component/base/__init__.py +0 -0
- viam/gen/component/base/v1/__init__.py +0 -0
- viam/gen/component/base/v1/base_grpc.py +94 -0
- viam/gen/component/base/v1/base_pb2.py +66 -0
- viam/gen/component/base/v1/base_pb2.pyi +258 -0
- viam/gen/component/board/__init__.py +0 -0
- viam/gen/component/board/v1/__init__.py +0 -0
- viam/gen/component/board/v1/board_grpc.py +127 -0
- viam/gen/component/board/v1/board_pb2.py +103 -0
- viam/gen/component/board/v1/board_pb2.pyi +496 -0
- 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/__init__.py +0 -0
- viam/gen/component/camera/v1/__init__.py +0 -0
- viam/gen/component/camera/v1/camera_grpc.py +79 -0
- viam/gen/component/camera/v1/camera_pb2.py +67 -0
- viam/gen/component/camera/v1/camera_pb2.pyi +373 -0
- viam/gen/component/encoder/__init__.py +0 -0
- viam/gen/component/encoder/v1/__init__.py +0 -0
- viam/gen/component/encoder/v1/encoder_grpc.py +62 -0
- viam/gen/component/encoder/v1/encoder_pb2.py +44 -0
- viam/gen/component/encoder/v1/encoder_pb2.pyi +147 -0
- viam/gen/component/gantry/__init__.py +0 -0
- viam/gen/component/gantry/v1/__init__.py +0 -0
- viam/gen/component/gantry/v1/gantry_grpc.py +86 -0
- viam/gen/component/gantry/v1/gantry_pb2.py +62 -0
- viam/gen/component/gantry/v1/gantry_pb2.pyi +239 -0
- viam/gen/component/generic/__init__.py +0 -0
- viam/gen/component/generic/v1/__init__.py +0 -0
- viam/gen/component/generic/v1/generic_grpc.py +37 -0
- viam/gen/component/generic/v1/generic_pb2.py +23 -0
- viam/gen/component/generic/v1/generic_pb2.pyi +6 -0
- viam/gen/component/gripper/__init__.py +0 -0
- viam/gen/component/gripper/v1/__init__.py +0 -0
- viam/gen/component/gripper/v1/gripper_grpc.py +70 -0
- viam/gen/component/gripper/v1/gripper_pb2.py +48 -0
- viam/gen/component/gripper/v1/gripper_pb2.pyi +137 -0
- viam/gen/component/inputcontroller/__init__.py +0 -0
- viam/gen/component/inputcontroller/v1/__init__.py +0 -0
- viam/gen/component/inputcontroller/v1/input_controller_grpc.py +71 -0
- viam/gen/component/inputcontroller/v1/input_controller_pb2.py +55 -0
- viam/gen/component/inputcontroller/v1/input_controller_pb2.pyi +243 -0
- viam/gen/component/motor/__init__.py +0 -0
- viam/gen/component/motor/v1/__init__.py +0 -0
- viam/gen/component/motor/v1/motor_grpc.py +118 -0
- viam/gen/component/motor/v1/motor_pb2.py +86 -0
- viam/gen/component/motor/v1/motor_pb2.pyi +368 -0
- viam/gen/component/movementsensor/__init__.py +0 -0
- viam/gen/component/movementsensor/v1/__init__.py +0 -0
- viam/gen/component/movementsensor/v1/movementsensor_grpc.py +110 -0
- viam/gen/component/movementsensor/v1/movementsensor_pb2.py +78 -0
- viam/gen/component/movementsensor/v1/movementsensor_pb2.pyi +384 -0
- viam/gen/component/posetracker/__init__.py +0 -0
- viam/gen/component/posetracker/v1/__init__.py +0 -0
- viam/gen/component/posetracker/v1/pose_tracker_grpc.py +46 -0
- viam/gen/component/posetracker/v1/pose_tracker_pb2.py +34 -0
- viam/gen/component/posetracker/v1/pose_tracker_pb2.pyi +79 -0
- viam/gen/component/powersensor/__init__.py +0 -0
- viam/gen/component/powersensor/v1/__init__.py +0 -0
- viam/gen/component/powersensor/v1/powersensor_grpc.py +62 -0
- viam/gen/component/powersensor/v1/powersensor_pb2.py +42 -0
- viam/gen/component/powersensor/v1/powersensor_pb2.pyi +124 -0
- viam/gen/component/sensor/__init__.py +0 -0
- viam/gen/component/sensor/v1/__init__.py +0 -0
- viam/gen/component/sensor/v1/sensor_grpc.py +45 -0
- viam/gen/component/sensor/v1/sensor_pb2.py +25 -0
- viam/gen/component/sensor/v1/sensor_pb2.pyi +6 -0
- viam/gen/component/servo/__init__.py +0 -0
- viam/gen/component/servo/v1/__init__.py +0 -0
- viam/gen/component/servo/v1/servo_grpc.py +70 -0
- viam/gen/component/servo/v1/servo_pb2.py +50 -0
- viam/gen/component/servo/v1/servo_pb2.pyi +150 -0
- 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 +109 -0
- viam/gen/component/testecho/__init__.py +0 -0
- viam/gen/component/testecho/v1/__init__.py +0 -0
- viam/gen/component/testecho/v1/testecho_grpc.py +52 -0
- viam/gen/component/testecho/v1/testecho_pb2.py +36 -0
- viam/gen/component/testecho/v1/testecho_pb2.pyi +114 -0
- viam/gen/module/__init__.py +0 -0
- viam/gen/module/v1/__init__.py +0 -0
- viam/gen/module/v1/module_grpc.py +61 -0
- viam/gen/module/v1/module_pb2.py +43 -0
- viam/gen/module/v1/module_pb2.pyi +211 -0
- viam/gen/proto/__init__.py +0 -0
- viam/gen/proto/rpc/__init__.py +0 -0
- viam/gen/proto/rpc/examples/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echo/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echo/v1/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echo/v1/echo_grpc.py +44 -0
- viam/gen/proto/rpc/examples/echo/v1/echo_pb2.py +32 -0
- viam/gen/proto/rpc/examples/echo/v1/echo_pb2.pyi +87 -0
- viam/gen/proto/rpc/examples/echoresource/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echoresource/v1/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_grpc.py +43 -0
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.py +29 -0
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.pyi +93 -0
- viam/gen/proto/rpc/v1/__init__.py +0 -0
- viam/gen/proto/rpc/v1/auth_grpc.py +47 -0
- viam/gen/proto/rpc/v1/auth_pb2.py +34 -0
- viam/gen/proto/rpc/v1/auth_pb2.pyi +92 -0
- viam/gen/proto/rpc/webrtc/__init__.py +0 -0
- viam/gen/proto/rpc/webrtc/v1/__init__.py +0 -0
- viam/gen/proto/rpc/webrtc/v1/grpc_grpc.py +0 -0
- viam/gen/proto/rpc/webrtc/v1/grpc_pb2.py +43 -0
- viam/gen/proto/rpc/webrtc/v1/grpc_pb2.pyi +304 -0
- viam/gen/proto/rpc/webrtc/v1/signaling_grpc.py +54 -0
- viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py +70 -0
- viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi +496 -0
- viam/gen/provisioning/__init__.py +0 -0
- viam/gen/provisioning/v1/__init__.py +0 -0
- viam/gen/provisioning/v1/provisioning_grpc.py +51 -0
- viam/gen/provisioning/v1/provisioning_pb2.py +39 -0
- viam/gen/provisioning/v1/provisioning_pb2.pyi +188 -0
- viam/gen/robot/__init__.py +0 -0
- viam/gen/robot/v1/__init__.py +0 -0
- viam/gen/robot/v1/robot_grpc.py +208 -0
- viam/gen/robot/v1/robot_pb2.py +188 -0
- viam/gen/robot/v1/robot_pb2.pyi +1020 -0
- viam/gen/service/__init__.py +0 -0
- viam/gen/service/datamanager/__init__.py +0 -0
- viam/gen/service/datamanager/v1/__init__.py +0 -0
- viam/gen/service/datamanager/v1/data_manager_grpc.py +38 -0
- viam/gen/service/datamanager/v1/data_manager_pb2.py +28 -0
- viam/gen/service/datamanager/v1/data_manager_pb2.pyi +39 -0
- 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/__init__.py +0 -0
- viam/gen/service/generic/v1/__init__.py +0 -0
- viam/gen/service/generic/v1/generic_grpc.py +29 -0
- viam/gen/service/generic/v1/generic_pb2.py +21 -0
- viam/gen/service/generic/v1/generic_pb2.pyi +6 -0
- viam/gen/service/mlmodel/__init__.py +0 -0
- viam/gen/service/mlmodel/v1/__init__.py +0 -0
- viam/gen/service/mlmodel/v1/mlmodel_grpc.py +37 -0
- viam/gen/service/mlmodel/v1/mlmodel_pb2.py +83 -0
- viam/gen/service/mlmodel/v1/mlmodel_pb2.pyi +480 -0
- viam/gen/service/motion/__init__.py +0 -0
- viam/gen/service/motion/v1/__init__.py +0 -0
- viam/gen/service/motion/v1/motion_grpc.py +87 -0
- viam/gen/service/motion/v1/motion_pb2.py +97 -0
- viam/gen/service/motion/v1/motion_pb2.pyi +838 -0
- viam/gen/service/navigation/__init__.py +0 -0
- viam/gen/service/navigation/v1/__init__.py +0 -0
- viam/gen/service/navigation/v1/navigation_grpc.py +102 -0
- viam/gen/service/navigation/v1/navigation_pb2.py +84 -0
- viam/gen/service/navigation/v1/navigation_pb2.pyi +419 -0
- viam/gen/service/sensors/__init__.py +0 -0
- viam/gen/service/sensors/v1/__init__.py +0 -0
- viam/gen/service/sensors/v1/sensors_grpc.py +46 -0
- viam/gen/service/sensors/v1/sensors_pb2.py +68 -0
- viam/gen/service/sensors/v1/sensors_pb2.pyi +137 -0
- viam/gen/service/shell/__init__.py +0 -0
- viam/gen/service/shell/v1/__init__.py +0 -0
- viam/gen/service/shell/v1/shell_grpc.py +55 -0
- viam/gen/service/shell/v1/shell_pb2.py +45 -0
- viam/gen/service/shell/v1/shell_pb2.pyi +307 -0
- viam/gen/service/slam/__init__.py +0 -0
- viam/gen/service/slam/v1/__init__.py +0 -0
- viam/gen/service/slam/v1/slam_grpc.py +61 -0
- viam/gen/service/slam/v1/slam_pb2.py +51 -0
- viam/gen/service/slam/v1/slam_pb2.pyi +213 -0
- viam/gen/service/vision/__init__.py +0 -0
- viam/gen/service/vision/v1/__init__.py +0 -0
- viam/gen/service/vision/v1/vision_grpc.py +87 -0
- viam/gen/service/vision/v1/vision_pb2.py +69 -0
- viam/gen/service/vision/v1/vision_pb2.pyi +454 -0
- viam/gen/stream/__init__.py +0 -0
- viam/gen/stream/v1/__init__.py +0 -0
- viam/gen/stream/v1/stream_grpc.py +59 -0
- viam/gen/stream/v1/stream_pb2.py +39 -0
- viam/gen/stream/v1/stream_pb2.pyi +161 -0
- viam/gen/tagger/__init__.py +0 -0
- viam/gen/tagger/v1/__init__.py +0 -0
- viam/gen/tagger/v1/tagger_grpc.py +0 -0
- viam/gen/tagger/v1/tagger_pb2.py +16 -0
- viam/gen/tagger/v1/tagger_pb2.pyi +15 -0
- viam/logging.py +216 -0
- viam/media/__init__.py +0 -0
- viam/media/audio.py +16 -0
- viam/media/utils/__init__.py +0 -0
- viam/media/utils/pil/__init__.py +51 -0
- viam/media/utils/pil/viam_rgba_plugin.py +73 -0
- viam/media/viam_rgba.py +10 -0
- viam/media/video.py +217 -0
- viam/module/__init__.py +5 -0
- viam/module/module.py +281 -0
- viam/module/service.py +66 -0
- viam/module/types.py +23 -0
- viam/operations.py +124 -0
- viam/proto/__init__.py +0 -0
- viam/proto/app/__init__.py +554 -0
- viam/proto/app/agent/__init__.py +28 -0
- viam/proto/app/billing.py +58 -0
- viam/proto/app/cloudslam/__init__.py +48 -0
- viam/proto/app/data/__init__.py +138 -0
- viam/proto/app/datapipelines/__init__.py +56 -0
- viam/proto/app/dataset/__init__.py +36 -0
- viam/proto/app/datasync/__init__.py +44 -0
- viam/proto/app/end_user.py +34 -0
- viam/proto/app/mlinference/__init__.py +15 -0
- viam/proto/app/mltraining/__init__.py +52 -0
- viam/proto/app/packages/__init__.py +38 -0
- viam/proto/app/robot.py +84 -0
- viam/proto/common/__init__.py +66 -0
- viam/proto/component/__init__.py +0 -0
- viam/proto/component/arm/__init__.py +48 -0
- viam/proto/component/audioinput/__init__.py +30 -0
- viam/proto/component/base/__init__.py +42 -0
- viam/proto/component/board/__init__.py +62 -0
- viam/proto/component/button/__init__.py +15 -0
- viam/proto/component/camera/__init__.py +46 -0
- viam/proto/component/encoder/__init__.py +28 -0
- viam/proto/component/gantry/__init__.py +40 -0
- viam/proto/component/generic/__init__.py +12 -0
- viam/proto/component/gripper/__init__.py +30 -0
- viam/proto/component/inputcontroller/__init__.py +38 -0
- viam/proto/component/motor/__init__.py +56 -0
- viam/proto/component/movementsensor/__init__.py +50 -0
- viam/proto/component/posetracker/__init__.py +19 -0
- viam/proto/component/powersensor/__init__.py +30 -0
- viam/proto/component/sensor/__init__.py +12 -0
- viam/proto/component/servo/__init__.py +32 -0
- viam/proto/component/switch/__init__.py +26 -0
- viam/proto/component/testecho/__init__.py +30 -0
- viam/proto/module/__init__.py +38 -0
- viam/proto/provisioning/__init__.py +36 -0
- viam/proto/robot/__init__.py +130 -0
- viam/proto/rpc/__init__.py +0 -0
- viam/proto/rpc/auth.py +34 -0
- viam/proto/rpc/examples/__init__.py +0 -0
- viam/proto/rpc/examples/echo/__init__.py +26 -0
- viam/proto/rpc/examples/echoresource/__init__.py +30 -0
- viam/proto/rpc/webrtc/__init__.py +0 -0
- viam/proto/rpc/webrtc/grpc.py +36 -0
- viam/proto/rpc/webrtc/signaling.py +58 -0
- viam/proto/service/__init__.py +0 -0
- viam/proto/service/datamanager/__init__.py +19 -0
- viam/proto/service/discovery/__init__.py +15 -0
- viam/proto/service/generic/__init__.py +12 -0
- viam/proto/service/mlmodel/__init__.py +54 -0
- viam/proto/service/motion/__init__.py +68 -0
- viam/proto/service/navigation/__init__.py +58 -0
- viam/proto/service/sensors/__init__.py +18 -0
- viam/proto/service/shell/__init__.py +36 -0
- viam/proto/service/slam/__init__.py +36 -0
- viam/proto/service/vision/__init__.py +46 -0
- viam/proto/stream/__init__.py +36 -0
- viam/proto/tagger/__init__.py +6 -0
- viam/py.typed +0 -0
- viam/resource/__init__.py +0 -0
- viam/resource/base.py +123 -0
- viam/resource/easy_resource.py +153 -0
- viam/resource/manager.py +126 -0
- viam/resource/registry.py +199 -0
- viam/resource/rpc_client_base.py +65 -0
- viam/resource/rpc_service_base.py +48 -0
- viam/resource/types.py +213 -0
- viam/robot/__init__.py +0 -0
- viam/robot/client.py +909 -0
- viam/robot/service.py +69 -0
- viam/rpc/__init__.py +0 -0
- viam/rpc/dial.py +420 -0
- viam/rpc/libviam_rust_utils.dll +0 -0
- viam/rpc/server.py +201 -0
- viam/rpc/signaling.py +29 -0
- viam/rpc/types.py +22 -0
- viam/services/__init__.py +0 -0
- 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 +18 -0
- viam/services/generic/client.py +58 -0
- viam/services/generic/generic.py +58 -0
- viam/services/generic/service.py +29 -0
- viam/services/mlmodel/__init__.py +24 -0
- viam/services/mlmodel/client.py +37 -0
- viam/services/mlmodel/mlmodel.py +78 -0
- viam/services/mlmodel/service.py +38 -0
- viam/services/mlmodel/utils.py +101 -0
- viam/services/motion/__init__.py +17 -0
- viam/services/motion/client.py +215 -0
- viam/services/motion/motion.py +378 -0
- viam/services/motion/service.py +132 -0
- viam/services/navigation/__init__.py +11 -0
- viam/services/navigation/client.py +99 -0
- viam/services/navigation/navigation.py +250 -0
- viam/services/navigation/service.py +137 -0
- viam/services/service_base.py +78 -0
- viam/services/service_client_base.py +46 -0
- viam/services/slam/__init__.py +17 -0
- viam/services/slam/client.py +62 -0
- viam/services/slam/service.py +75 -0
- viam/services/slam/slam.py +111 -0
- viam/services/vision/__init__.py +15 -0
- viam/services/vision/client.py +206 -0
- viam/services/vision/service.py +146 -0
- viam/services/vision/vision.py +315 -0
- viam/sessions_client.py +245 -0
- viam/streams.py +44 -0
- viam/utils.py +365 -0
- viam/version_metadata.py +4 -0
- viam_sdk-0.45.2.dist-info/METADATA +157 -0
- viam_sdk-0.45.2.dist-info/RECORD +476 -0
- viam_sdk-0.45.2.dist-info/WHEEL +4 -0
- viam_sdk-0.45.2.dist-info/licenses/LICENSE +202 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
from grpclib.server import Stream
|
|
2
|
+
|
|
3
|
+
from viam.components.movement_sensor.movement_sensor import MovementSensor
|
|
4
|
+
from viam.proto.common import (
|
|
5
|
+
DoCommandRequest,
|
|
6
|
+
DoCommandResponse,
|
|
7
|
+
GetGeometriesRequest,
|
|
8
|
+
GetGeometriesResponse,
|
|
9
|
+
GetReadingsRequest,
|
|
10
|
+
GetReadingsResponse,
|
|
11
|
+
)
|
|
12
|
+
from viam.proto.component.movementsensor import (
|
|
13
|
+
GetAccuracyRequest,
|
|
14
|
+
GetAccuracyResponse,
|
|
15
|
+
GetAngularVelocityRequest,
|
|
16
|
+
GetAngularVelocityResponse,
|
|
17
|
+
GetCompassHeadingRequest,
|
|
18
|
+
GetCompassHeadingResponse,
|
|
19
|
+
GetLinearAccelerationRequest,
|
|
20
|
+
GetLinearAccelerationResponse,
|
|
21
|
+
GetLinearVelocityRequest,
|
|
22
|
+
GetLinearVelocityResponse,
|
|
23
|
+
GetOrientationRequest,
|
|
24
|
+
GetOrientationResponse,
|
|
25
|
+
GetPositionRequest,
|
|
26
|
+
GetPositionResponse,
|
|
27
|
+
GetPropertiesRequest,
|
|
28
|
+
GetPropertiesResponse,
|
|
29
|
+
MovementSensorServiceBase,
|
|
30
|
+
)
|
|
31
|
+
from viam.resource.rpc_service_base import ResourceRPCServiceBase
|
|
32
|
+
from viam.utils import dict_to_struct, sensor_readings_native_to_value, struct_to_dict
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class MovementSensorRPCService(MovementSensorServiceBase, ResourceRPCServiceBase[MovementSensor]):
|
|
36
|
+
"""
|
|
37
|
+
gRPC Service for a MovementSensor
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
RESOURCE_TYPE = MovementSensor
|
|
41
|
+
|
|
42
|
+
async def GetLinearVelocity(self, stream: Stream[GetLinearVelocityRequest, GetLinearVelocityResponse]) -> None:
|
|
43
|
+
request = await stream.recv_message()
|
|
44
|
+
assert request is not None
|
|
45
|
+
name = request.name
|
|
46
|
+
sensor = self.get_resource(name)
|
|
47
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
48
|
+
velocity = await sensor.get_linear_velocity(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
49
|
+
response = GetLinearVelocityResponse(linear_velocity=velocity)
|
|
50
|
+
await stream.send_message(response)
|
|
51
|
+
|
|
52
|
+
async def GetAngularVelocity(self, stream: Stream[GetAngularVelocityRequest, GetAngularVelocityResponse]) -> None:
|
|
53
|
+
request = await stream.recv_message()
|
|
54
|
+
assert request is not None
|
|
55
|
+
name = request.name
|
|
56
|
+
sensor = self.get_resource(name)
|
|
57
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
58
|
+
velocity = await sensor.get_angular_velocity(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
59
|
+
response = GetAngularVelocityResponse(angular_velocity=velocity)
|
|
60
|
+
await stream.send_message(response)
|
|
61
|
+
|
|
62
|
+
async def GetLinearAcceleration(self, stream: Stream[GetLinearAccelerationRequest, GetLinearAccelerationResponse]) -> None:
|
|
63
|
+
request = await stream.recv_message()
|
|
64
|
+
assert request is not None
|
|
65
|
+
name = request.name
|
|
66
|
+
sensor = self.get_resource(name)
|
|
67
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
68
|
+
acceleration = await sensor.get_linear_acceleration(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
69
|
+
response = GetLinearAccelerationResponse(linear_acceleration=acceleration)
|
|
70
|
+
await stream.send_message(response)
|
|
71
|
+
|
|
72
|
+
async def GetCompassHeading(self, stream: Stream[GetCompassHeadingRequest, GetCompassHeadingResponse]) -> None:
|
|
73
|
+
request = await stream.recv_message()
|
|
74
|
+
assert request is not None
|
|
75
|
+
name = request.name
|
|
76
|
+
sensor = self.get_resource(name)
|
|
77
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
78
|
+
heading = await sensor.get_compass_heading(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
79
|
+
response = GetCompassHeadingResponse(value=heading)
|
|
80
|
+
await stream.send_message(response)
|
|
81
|
+
|
|
82
|
+
async def GetOrientation(self, stream: Stream[GetOrientationRequest, GetOrientationResponse]) -> None:
|
|
83
|
+
request = await stream.recv_message()
|
|
84
|
+
assert request is not None
|
|
85
|
+
name = request.name
|
|
86
|
+
sensor = self.get_resource(name)
|
|
87
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
88
|
+
orientation = await sensor.get_orientation(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
89
|
+
response = GetOrientationResponse(orientation=orientation)
|
|
90
|
+
await stream.send_message(response)
|
|
91
|
+
|
|
92
|
+
async def GetPosition(self, stream: Stream[GetPositionRequest, GetPositionResponse]) -> None:
|
|
93
|
+
request = await stream.recv_message()
|
|
94
|
+
assert request is not None
|
|
95
|
+
name = request.name
|
|
96
|
+
sensor = self.get_resource(name)
|
|
97
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
98
|
+
point, alt = await sensor.get_position(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
99
|
+
response = GetPositionResponse(coordinate=point, altitude_m=alt)
|
|
100
|
+
await stream.send_message(response)
|
|
101
|
+
|
|
102
|
+
async def GetProperties(self, stream: Stream[GetPropertiesRequest, GetPropertiesResponse]) -> None:
|
|
103
|
+
request = await stream.recv_message()
|
|
104
|
+
assert request is not None
|
|
105
|
+
name = request.name
|
|
106
|
+
sensor = self.get_resource(name)
|
|
107
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
108
|
+
response = await sensor.get_properties(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
109
|
+
await stream.send_message(response.proto)
|
|
110
|
+
|
|
111
|
+
async def GetAccuracy(self, stream: Stream[GetAccuracyRequest, GetAccuracyResponse]) -> None:
|
|
112
|
+
request = await stream.recv_message()
|
|
113
|
+
assert request is not None
|
|
114
|
+
name = request.name
|
|
115
|
+
sensor = self.get_resource(name)
|
|
116
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
117
|
+
accuracy = await sensor.get_accuracy(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
118
|
+
await stream.send_message(accuracy)
|
|
119
|
+
|
|
120
|
+
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
121
|
+
request = await stream.recv_message()
|
|
122
|
+
assert request is not None
|
|
123
|
+
sensor = self.get_resource(request.name)
|
|
124
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
125
|
+
result = await sensor.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
|
|
126
|
+
response = DoCommandResponse(result=dict_to_struct(result))
|
|
127
|
+
await stream.send_message(response)
|
|
128
|
+
|
|
129
|
+
async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
|
|
130
|
+
request = await stream.recv_message()
|
|
131
|
+
assert request is not None
|
|
132
|
+
sensor = self.get_resource(request.name)
|
|
133
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
134
|
+
geometries = await sensor.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
|
|
135
|
+
response = GetGeometriesResponse(geometries=geometries)
|
|
136
|
+
await stream.send_message(response)
|
|
137
|
+
|
|
138
|
+
async def GetReadings(self, stream: Stream[GetReadingsRequest, GetReadingsResponse]) -> None:
|
|
139
|
+
request = await stream.recv_message()
|
|
140
|
+
assert request is not None
|
|
141
|
+
name = request.name
|
|
142
|
+
sensor = self.get_resource(name)
|
|
143
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
144
|
+
readings = await sensor.get_readings(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
145
|
+
response = GetReadingsResponse(readings=sensor_readings_native_to_value(readings))
|
|
146
|
+
await stream.send_message(response)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from viam.resource.registry import Registry, ResourceRegistration
|
|
2
|
+
|
|
3
|
+
from .client import PoseTrackerClient
|
|
4
|
+
from .pose_tracker import PoseTracker
|
|
5
|
+
from .service import PoseTrackerRPCService
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"PoseTracker",
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
Registry.register_api(
|
|
12
|
+
ResourceRegistration(
|
|
13
|
+
PoseTracker,
|
|
14
|
+
PoseTrackerRPCService,
|
|
15
|
+
lambda name, channel: PoseTrackerClient(name, channel),
|
|
16
|
+
)
|
|
17
|
+
)
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Mapping, Optional
|
|
2
|
+
|
|
3
|
+
from grpclib.client import Channel
|
|
4
|
+
|
|
5
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, PoseInFrame
|
|
6
|
+
from viam.proto.component.posetracker import GetPosesRequest, GetPosesResponse, PoseTrackerServiceStub
|
|
7
|
+
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
8
|
+
from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
|
|
9
|
+
|
|
10
|
+
from .pose_tracker import PoseTracker
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class PoseTrackerClient(PoseTracker, ReconfigurableResourceRPCClientBase):
|
|
14
|
+
"""
|
|
15
|
+
gRPC client for the PoseTracker component.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(self, name: str, channel: Channel):
|
|
19
|
+
self.channel = channel
|
|
20
|
+
self.client = PoseTrackerServiceStub(channel)
|
|
21
|
+
super().__init__(name)
|
|
22
|
+
|
|
23
|
+
async def get_poses(
|
|
24
|
+
self,
|
|
25
|
+
body_names: List[str],
|
|
26
|
+
*,
|
|
27
|
+
extra: Optional[Mapping[str, Any]] = None,
|
|
28
|
+
timeout: Optional[float] = None,
|
|
29
|
+
**kwargs,
|
|
30
|
+
) -> Dict[str, PoseInFrame]:
|
|
31
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
32
|
+
request = GetPosesRequest(name=self.name, body_names=body_names, extra=dict_to_struct(extra))
|
|
33
|
+
response: GetPosesResponse = await self.client.GetPoses(request, timeout=timeout, metadata=md)
|
|
34
|
+
return {key: response.body_poses[key] for key in response.body_poses.keys()}
|
|
35
|
+
|
|
36
|
+
async def do_command(
|
|
37
|
+
self,
|
|
38
|
+
command: Mapping[str, ValueTypes],
|
|
39
|
+
*,
|
|
40
|
+
timeout: Optional[float] = None,
|
|
41
|
+
**kwargs,
|
|
42
|
+
) -> Mapping[str, ValueTypes]:
|
|
43
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
44
|
+
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
45
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
46
|
+
return struct_to_dict(response.result)
|
|
47
|
+
|
|
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)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import abc
|
|
2
|
+
from typing import Any, Dict, Final, List, Mapping, Optional
|
|
3
|
+
|
|
4
|
+
from viam.proto.common import PoseInFrame
|
|
5
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
6
|
+
|
|
7
|
+
from ..component_base import ComponentBase
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class PoseTracker(ComponentBase):
|
|
11
|
+
"""
|
|
12
|
+
PoseTracker represents a physical pose or motion tracking device.
|
|
13
|
+
|
|
14
|
+
This acts as an abstract base class for any drivers representing specific
|
|
15
|
+
pose tracker implementations. This cannot be used on its own. If the ``__init__()`` function is
|
|
16
|
+
overridden, it must call the ``super().__init__()`` function.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
20
|
+
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "pose_tracker"
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
@abc.abstractmethod
|
|
24
|
+
async def get_poses(
|
|
25
|
+
self,
|
|
26
|
+
body_names: List[str],
|
|
27
|
+
*,
|
|
28
|
+
extra: Optional[Mapping[str, Any]] = None,
|
|
29
|
+
timeout: Optional[float] = None,
|
|
30
|
+
**kwargs,
|
|
31
|
+
) -> Dict[str, PoseInFrame]:
|
|
32
|
+
"""
|
|
33
|
+
Returns the current pose of each body tracked by the pose tracker.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
body_names (List[str]): Names of the bodies whose poses are being
|
|
37
|
+
requested. In the event this parameter is not supplied or is
|
|
38
|
+
an empty list, all available poses are returned.
|
|
39
|
+
"""
|
|
40
|
+
...
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
from grpclib.server import Stream
|
|
2
|
+
|
|
3
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
|
|
4
|
+
from viam.proto.component.posetracker import GetPosesRequest, GetPosesResponse, PoseTrackerServiceBase
|
|
5
|
+
from viam.resource.rpc_service_base import ResourceRPCServiceBase
|
|
6
|
+
from viam.utils import dict_to_struct, struct_to_dict
|
|
7
|
+
|
|
8
|
+
from .pose_tracker import PoseTracker
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class PoseTrackerRPCService(PoseTrackerServiceBase, ResourceRPCServiceBase[PoseTracker]):
|
|
12
|
+
"""
|
|
13
|
+
gRPC service for a pose tracker
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
RESOURCE_TYPE = PoseTracker
|
|
17
|
+
|
|
18
|
+
async def GetPoses(self, stream: Stream[GetPosesRequest, GetPosesResponse]) -> None:
|
|
19
|
+
request = await stream.recv_message()
|
|
20
|
+
assert request is not None
|
|
21
|
+
name = request.name
|
|
22
|
+
pose_tracker = self.get_resource(name)
|
|
23
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
24
|
+
poses = await pose_tracker.get_poses(
|
|
25
|
+
list(request.body_names), extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata
|
|
26
|
+
)
|
|
27
|
+
await stream.send_message(GetPosesResponse(body_poses=poses))
|
|
28
|
+
|
|
29
|
+
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
30
|
+
request = await stream.recv_message()
|
|
31
|
+
assert request is not None
|
|
32
|
+
pose_tracker = self.get_resource(request.name)
|
|
33
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
34
|
+
result = await pose_tracker.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
|
|
35
|
+
response = DoCommandResponse(result=dict_to_struct(result))
|
|
36
|
+
await stream.send_message(response)
|
|
37
|
+
|
|
38
|
+
async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
|
|
39
|
+
request = await stream.recv_message()
|
|
40
|
+
assert request is not None
|
|
41
|
+
pose_tracker = self.get_resource(request.name)
|
|
42
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
43
|
+
geometries = await pose_tracker.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
|
|
44
|
+
response = GetGeometriesResponse(geometries=geometries)
|
|
45
|
+
await stream.send_message(response)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from viam.resource.registry import Registry, ResourceRegistration
|
|
2
|
+
|
|
3
|
+
from .client import PowerSensorClient
|
|
4
|
+
from .power_sensor import PowerSensor
|
|
5
|
+
from .service import PowerSensorRPCService
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"PowerSensor",
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
Registry.register_api(
|
|
12
|
+
ResourceRegistration(
|
|
13
|
+
PowerSensor,
|
|
14
|
+
PowerSensorRPCService,
|
|
15
|
+
lambda name, channel: PowerSensorClient(name, channel),
|
|
16
|
+
)
|
|
17
|
+
)
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
from typing import Any, Dict, Mapping, Optional, Tuple
|
|
2
|
+
|
|
3
|
+
from grpclib.client import Channel
|
|
4
|
+
|
|
5
|
+
from viam.components.power_sensor.power_sensor import PowerSensor
|
|
6
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, GetReadingsRequest, GetReadingsResponse
|
|
7
|
+
from viam.proto.component.powersensor import (
|
|
8
|
+
GetCurrentRequest,
|
|
9
|
+
GetCurrentResponse,
|
|
10
|
+
GetPowerRequest,
|
|
11
|
+
GetPowerResponse,
|
|
12
|
+
GetVoltageRequest,
|
|
13
|
+
GetVoltageResponse,
|
|
14
|
+
PowerSensorServiceStub,
|
|
15
|
+
)
|
|
16
|
+
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
17
|
+
from viam.utils import SensorReading, ValueTypes, dict_to_struct, sensor_readings_value_to_native, struct_to_dict
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class PowerSensorClient(PowerSensor, ReconfigurableResourceRPCClientBase):
|
|
21
|
+
"""gRPC client for the PowerSensor component."""
|
|
22
|
+
|
|
23
|
+
def __init__(self, name: str, channel: Channel):
|
|
24
|
+
self.channel = channel
|
|
25
|
+
self.client = PowerSensorServiceStub(channel)
|
|
26
|
+
super().__init__(name)
|
|
27
|
+
|
|
28
|
+
async def get_voltage(
|
|
29
|
+
self,
|
|
30
|
+
*,
|
|
31
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
32
|
+
timeout: Optional[float] = None,
|
|
33
|
+
**kwargs,
|
|
34
|
+
) -> Tuple[float, bool]:
|
|
35
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
36
|
+
request = GetVoltageRequest(name=self.name, extra=dict_to_struct(extra))
|
|
37
|
+
response: GetVoltageResponse = await self.client.GetVoltage(request, timeout=timeout, metadata=md)
|
|
38
|
+
return response.volts, response.is_ac
|
|
39
|
+
|
|
40
|
+
async def get_current(
|
|
41
|
+
self,
|
|
42
|
+
*,
|
|
43
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
44
|
+
timeout: Optional[float] = None,
|
|
45
|
+
**kwargs,
|
|
46
|
+
) -> Tuple[float, bool]:
|
|
47
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
48
|
+
request = GetCurrentRequest(name=self.name, extra=dict_to_struct(extra))
|
|
49
|
+
response: GetCurrentResponse = await self.client.GetCurrent(request, timeout=timeout, metadata=md)
|
|
50
|
+
return response.amperes, response.is_ac
|
|
51
|
+
|
|
52
|
+
async def get_power(
|
|
53
|
+
self,
|
|
54
|
+
*,
|
|
55
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
56
|
+
timeout: Optional[float] = None,
|
|
57
|
+
**kwargs,
|
|
58
|
+
) -> float:
|
|
59
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
60
|
+
request = GetPowerRequest(name=self.name, extra=dict_to_struct(extra))
|
|
61
|
+
response: GetPowerResponse = await self.client.GetPower(request, timeout=timeout, metadata=md)
|
|
62
|
+
return response.watts
|
|
63
|
+
|
|
64
|
+
async def get_readings(
|
|
65
|
+
self,
|
|
66
|
+
*,
|
|
67
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
68
|
+
timeout: Optional[float] = None,
|
|
69
|
+
**kwargs,
|
|
70
|
+
) -> Mapping[str, SensorReading]:
|
|
71
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
72
|
+
request = GetReadingsRequest(name=self.name, extra=dict_to_struct(extra))
|
|
73
|
+
response: GetReadingsResponse = await self.client.GetReadings(request, timeout=timeout, metadata=md)
|
|
74
|
+
return sensor_readings_value_to_native(response.readings)
|
|
75
|
+
|
|
76
|
+
async def do_command(
|
|
77
|
+
self,
|
|
78
|
+
command: Mapping[str, ValueTypes],
|
|
79
|
+
*,
|
|
80
|
+
timeout: Optional[float] = None,
|
|
81
|
+
**kwargs,
|
|
82
|
+
) -> Mapping[str, ValueTypes]:
|
|
83
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
84
|
+
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
85
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
86
|
+
return struct_to_dict(response.result)
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import abc
|
|
2
|
+
from typing import Any, Dict, Final, Mapping, Optional, Tuple
|
|
3
|
+
|
|
4
|
+
from viam.components.component_base import ComponentBase
|
|
5
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
6
|
+
from viam.utils import SensorReading
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class PowerSensor(ComponentBase):
|
|
10
|
+
"""PowerSensor reports information about voltage, current and power.
|
|
11
|
+
|
|
12
|
+
This acts as an abstract base class for any sensors that can provide data regarding voltage, current and/or power.
|
|
13
|
+
This cannot be used on its own. If the ``__init__()`` function is overridden, it must call the ``super().__init__()`` function.
|
|
14
|
+
|
|
15
|
+
::
|
|
16
|
+
|
|
17
|
+
from viam.components.power_sensor import PowerSensor
|
|
18
|
+
|
|
19
|
+
For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/>`_.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
23
|
+
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "power_sensor"
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
@abc.abstractmethod
|
|
27
|
+
async def get_voltage(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> Tuple[float, bool]:
|
|
28
|
+
"""Return the voltage reading of a specified device and whether it is AC or DC.
|
|
29
|
+
|
|
30
|
+
::
|
|
31
|
+
|
|
32
|
+
my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
|
|
33
|
+
|
|
34
|
+
# Get the voltage reading from the power sensor
|
|
35
|
+
voltage, is_ac = await my_power_sensor.get_voltage()
|
|
36
|
+
print("The voltage is", voltage, "V, Is AC:", is_ac)
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
Tuple[float, bool]: A float representing the voltage reading in V. A bool indicating whether the voltage is AC (`true`) or DC
|
|
40
|
+
(`false`).
|
|
41
|
+
|
|
42
|
+
For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/#getvoltage>`_.
|
|
43
|
+
"""
|
|
44
|
+
...
|
|
45
|
+
|
|
46
|
+
@abc.abstractmethod
|
|
47
|
+
async def get_current(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> Tuple[float, bool]:
|
|
48
|
+
"""Return the current of a specified device and whether it is AC or DC.
|
|
49
|
+
|
|
50
|
+
::
|
|
51
|
+
|
|
52
|
+
my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
|
|
53
|
+
|
|
54
|
+
# Get the current reading from the power sensor
|
|
55
|
+
current, is_ac = await my_power_sensor.get_current()
|
|
56
|
+
print("The current is ", current, " A, Is AC: ", is_ac)
|
|
57
|
+
|
|
58
|
+
Returns:
|
|
59
|
+
Tuple[float, bool]: A tuple which includes a float representing the current reading in amps, and a bool indicating whether the
|
|
60
|
+
current is AC (`true`) or DC (`false`).
|
|
61
|
+
|
|
62
|
+
For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/#getcurrent>`_.
|
|
63
|
+
"""
|
|
64
|
+
...
|
|
65
|
+
|
|
66
|
+
@abc.abstractmethod
|
|
67
|
+
async def get_power(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> float:
|
|
68
|
+
"""Return the power reading in watts.
|
|
69
|
+
|
|
70
|
+
::
|
|
71
|
+
|
|
72
|
+
my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
|
|
73
|
+
|
|
74
|
+
# Get the power reading from the power sensor
|
|
75
|
+
power = await my_power_sensor.get_power()
|
|
76
|
+
print("The power is", power, "Watts")
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
float: The power reading in watts.
|
|
80
|
+
|
|
81
|
+
For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/#getpower>`_.
|
|
82
|
+
"""
|
|
83
|
+
...
|
|
84
|
+
|
|
85
|
+
async def get_readings(
|
|
86
|
+
self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
|
|
87
|
+
) -> Mapping[str, SensorReading]:
|
|
88
|
+
"""Get the measurements or readings that this power sensor provides. If a sensor is not configured correctly or fails to read a
|
|
89
|
+
piece of data, it will not appear in the readings dictionary.
|
|
90
|
+
|
|
91
|
+
::
|
|
92
|
+
|
|
93
|
+
my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
|
|
94
|
+
|
|
95
|
+
# Get the readings provided by the sensor.
|
|
96
|
+
readings = await my_power_sensor.get_readings()
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
Mapping[str, Any]: The readings for the PowerSensor. Can be of any type. Includes voltage in volts (float), current in
|
|
100
|
+
amperes (float), is_ac (bool), and power in watts (float).
|
|
101
|
+
|
|
102
|
+
For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/#getreadings>`_.
|
|
103
|
+
"""
|
|
104
|
+
...
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
from grpclib.server import Stream
|
|
2
|
+
|
|
3
|
+
from viam.components.power_sensor.power_sensor import PowerSensor
|
|
4
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, GetReadingsRequest, GetReadingsResponse
|
|
5
|
+
from viam.proto.component.powersensor import (
|
|
6
|
+
GetCurrentRequest,
|
|
7
|
+
GetCurrentResponse,
|
|
8
|
+
GetPowerRequest,
|
|
9
|
+
GetPowerResponse,
|
|
10
|
+
GetVoltageRequest,
|
|
11
|
+
GetVoltageResponse,
|
|
12
|
+
PowerSensorServiceBase,
|
|
13
|
+
)
|
|
14
|
+
from viam.resource.rpc_service_base import ResourceRPCServiceBase
|
|
15
|
+
from viam.utils import dict_to_struct, sensor_readings_native_to_value, struct_to_dict
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class PowerSensorRPCService(PowerSensorServiceBase, ResourceRPCServiceBase[PowerSensor]):
|
|
19
|
+
"""
|
|
20
|
+
gRPC Service for a PowerSensor
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
RESOURCE_TYPE = PowerSensor
|
|
24
|
+
|
|
25
|
+
async def GetReadings(self, stream: Stream[GetReadingsRequest, GetReadingsResponse]) -> None:
|
|
26
|
+
request = await stream.recv_message()
|
|
27
|
+
assert request is not None
|
|
28
|
+
name = request.name
|
|
29
|
+
sensor = self.get_resource(name)
|
|
30
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
31
|
+
readings = await sensor.get_readings(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
32
|
+
response = GetReadingsResponse(readings=sensor_readings_native_to_value(readings))
|
|
33
|
+
await stream.send_message(response)
|
|
34
|
+
|
|
35
|
+
async def GetVoltage(self, stream: Stream[GetVoltageRequest, GetVoltageResponse]) -> None:
|
|
36
|
+
request = await stream.recv_message()
|
|
37
|
+
assert request is not None
|
|
38
|
+
name = request.name
|
|
39
|
+
sensor = self.get_resource(name)
|
|
40
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
41
|
+
voltage, is_ac = await sensor.get_voltage(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
42
|
+
response = GetVoltageResponse(volts=voltage, is_ac=is_ac)
|
|
43
|
+
await stream.send_message(response)
|
|
44
|
+
|
|
45
|
+
async def GetCurrent(self, stream: Stream[GetCurrentRequest, GetCurrentResponse]) -> None:
|
|
46
|
+
request = await stream.recv_message()
|
|
47
|
+
assert request is not None
|
|
48
|
+
name = request.name
|
|
49
|
+
sensor = self.get_resource(name)
|
|
50
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
51
|
+
current, is_ac = await sensor.get_current(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
52
|
+
response = GetCurrentResponse(amperes=current, is_ac=is_ac)
|
|
53
|
+
await stream.send_message(response)
|
|
54
|
+
|
|
55
|
+
async def GetPower(self, stream: Stream[GetPowerRequest, GetPowerResponse]) -> None:
|
|
56
|
+
request = await stream.recv_message()
|
|
57
|
+
assert request is not None
|
|
58
|
+
name = request.name
|
|
59
|
+
sensor = self.get_resource(name)
|
|
60
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
61
|
+
power = await sensor.get_power(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
62
|
+
response = GetPowerResponse(watts=power)
|
|
63
|
+
await stream.send_message(response)
|
|
64
|
+
|
|
65
|
+
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
66
|
+
request = await stream.recv_message()
|
|
67
|
+
assert request is not None
|
|
68
|
+
sensor = self.get_resource(request.name)
|
|
69
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
70
|
+
result = await sensor.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
|
|
71
|
+
response = DoCommandResponse(result=dict_to_struct(result))
|
|
72
|
+
await stream.send_message(response)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import viam.gen.component.sensor.v1.sensor_pb2 # Need this import for Sensor service descriptors to resolve
|
|
2
|
+
from viam.resource.registry import Registry, ResourceRegistration
|
|
3
|
+
|
|
4
|
+
from .client import SensorClient
|
|
5
|
+
from .sensor import Sensor
|
|
6
|
+
from .service import SensorRPCService
|
|
7
|
+
|
|
8
|
+
__all__ = [
|
|
9
|
+
"Sensor",
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
Registry.register_api(
|
|
13
|
+
ResourceRegistration(
|
|
14
|
+
Sensor,
|
|
15
|
+
SensorRPCService,
|
|
16
|
+
lambda name, channel: SensorClient(name, channel),
|
|
17
|
+
)
|
|
18
|
+
)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Mapping, Optional
|
|
2
|
+
|
|
3
|
+
from grpclib.client import Channel
|
|
4
|
+
|
|
5
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetReadingsRequest, GetReadingsResponse
|
|
6
|
+
from viam.proto.component.sensor import SensorServiceStub
|
|
7
|
+
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
8
|
+
from viam.utils import SensorReading, ValueTypes, dict_to_struct, get_geometries, sensor_readings_value_to_native, struct_to_dict
|
|
9
|
+
|
|
10
|
+
from .sensor import Sensor
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class SensorClient(Sensor, ReconfigurableResourceRPCClientBase):
|
|
14
|
+
"""
|
|
15
|
+
gRPC client for the Sensor component.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(self, name: str, channel: Channel):
|
|
19
|
+
self.channel = channel
|
|
20
|
+
self.client = SensorServiceStub(channel)
|
|
21
|
+
super().__init__(name)
|
|
22
|
+
|
|
23
|
+
async def get_readings(
|
|
24
|
+
self,
|
|
25
|
+
*,
|
|
26
|
+
extra: Optional[Mapping[str, Any]] = None,
|
|
27
|
+
timeout: Optional[float] = None,
|
|
28
|
+
**kwargs,
|
|
29
|
+
) -> Mapping[str, SensorReading]:
|
|
30
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
31
|
+
request = GetReadingsRequest(name=self.name, extra=dict_to_struct(extra))
|
|
32
|
+
response: GetReadingsResponse = await self.client.GetReadings(request, timeout=timeout, metadata=md)
|
|
33
|
+
return sensor_readings_value_to_native(response.readings)
|
|
34
|
+
|
|
35
|
+
async def do_command(
|
|
36
|
+
self,
|
|
37
|
+
command: Mapping[str, ValueTypes],
|
|
38
|
+
*,
|
|
39
|
+
timeout: Optional[float] = None,
|
|
40
|
+
**kwargs,
|
|
41
|
+
) -> Mapping[str, ValueTypes]:
|
|
42
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
43
|
+
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
44
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
45
|
+
return struct_to_dict(response.result)
|
|
46
|
+
|
|
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)
|