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.

Files changed (476) hide show
  1. viam/__init__.py +71 -0
  2. viam/app/__init__.py +0 -0
  3. viam/app/_logs.py +34 -0
  4. viam/app/app_client.py +2525 -0
  5. viam/app/billing_client.py +143 -0
  6. viam/app/data_client.py +1715 -0
  7. viam/app/ml_training_client.py +251 -0
  8. viam/app/provisioning_client.py +95 -0
  9. viam/app/viam_client.py +260 -0
  10. viam/components/__init__.py +0 -0
  11. viam/components/arm/__init__.py +16 -0
  12. viam/components/arm/arm.py +223 -0
  13. viam/components/arm/client.py +124 -0
  14. viam/components/arm/service.py +123 -0
  15. viam/components/audio_input/__init__.py +18 -0
  16. viam/components/audio_input/audio_input.py +81 -0
  17. viam/components/audio_input/client.py +70 -0
  18. viam/components/audio_input/service.py +114 -0
  19. viam/components/base/__init__.py +13 -0
  20. viam/components/base/base.py +260 -0
  21. viam/components/base/client.py +153 -0
  22. viam/components/base/service.py +138 -0
  23. viam/components/board/__init__.py +9 -0
  24. viam/components/board/board.py +414 -0
  25. viam/components/board/client.py +241 -0
  26. viam/components/board/service.py +223 -0
  27. viam/components/button/__init__.py +10 -0
  28. viam/components/button/button.py +41 -0
  29. viam/components/button/client.py +52 -0
  30. viam/components/button/service.py +46 -0
  31. viam/components/camera/__init__.py +22 -0
  32. viam/components/camera/camera.py +138 -0
  33. viam/components/camera/client.py +98 -0
  34. viam/components/camera/service.py +105 -0
  35. viam/components/component_base.py +65 -0
  36. viam/components/encoder/__init__.py +18 -0
  37. viam/components/encoder/client.py +83 -0
  38. viam/components/encoder/encoder.py +118 -0
  39. viam/components/encoder/service.py +72 -0
  40. viam/components/gantry/__init__.py +11 -0
  41. viam/components/gantry/client.py +115 -0
  42. viam/components/gantry/gantry.py +156 -0
  43. viam/components/gantry/service.py +113 -0
  44. viam/components/generic/__init__.py +18 -0
  45. viam/components/generic/client.py +62 -0
  46. viam/components/generic/generic.py +76 -0
  47. viam/components/generic/service.py +40 -0
  48. viam/components/gripper/__init__.py +11 -0
  49. viam/components/gripper/client.py +85 -0
  50. viam/components/gripper/gripper.py +114 -0
  51. viam/components/gripper/service.py +81 -0
  52. viam/components/input/__init__.py +15 -0
  53. viam/components/input/client.py +194 -0
  54. viam/components/input/input.py +297 -0
  55. viam/components/input/service.py +175 -0
  56. viam/components/motor/__init__.py +11 -0
  57. viam/components/motor/client.py +168 -0
  58. viam/components/motor/motor.py +301 -0
  59. viam/components/motor/service.py +150 -0
  60. viam/components/movement_sensor/__init__.py +21 -0
  61. viam/components/movement_sensor/client.py +161 -0
  62. viam/components/movement_sensor/movement_sensor.py +253 -0
  63. viam/components/movement_sensor/service.py +146 -0
  64. viam/components/pose_tracker/__init__.py +17 -0
  65. viam/components/pose_tracker/client.py +50 -0
  66. viam/components/pose_tracker/pose_tracker.py +40 -0
  67. viam/components/pose_tracker/service.py +45 -0
  68. viam/components/power_sensor/__init__.py +17 -0
  69. viam/components/power_sensor/client.py +86 -0
  70. viam/components/power_sensor/power_sensor.py +104 -0
  71. viam/components/power_sensor/service.py +72 -0
  72. viam/components/sensor/__init__.py +18 -0
  73. viam/components/sensor/client.py +49 -0
  74. viam/components/sensor/sensor.py +48 -0
  75. viam/components/sensor/service.py +51 -0
  76. viam/components/servo/__init__.py +11 -0
  77. viam/components/servo/client.py +86 -0
  78. viam/components/servo/service.py +80 -0
  79. viam/components/servo/servo.py +114 -0
  80. viam/components/switch/__init__.py +10 -0
  81. viam/components/switch/client.py +83 -0
  82. viam/components/switch/service.py +72 -0
  83. viam/components/switch/switch.py +95 -0
  84. viam/errors.py +105 -0
  85. viam/gen/__init__.py +0 -0
  86. viam/gen/app/__init__.py +0 -0
  87. viam/gen/app/agent/__init__.py +0 -0
  88. viam/gen/app/agent/v1/__init__.py +0 -0
  89. viam/gen/app/agent/v1/agent_grpc.py +29 -0
  90. viam/gen/app/agent/v1/agent_pb2.py +47 -0
  91. viam/gen/app/agent/v1/agent_pb2.pyi +280 -0
  92. viam/gen/app/cloudslam/__init__.py +0 -0
  93. viam/gen/app/cloudslam/v1/__init__.py +0 -0
  94. viam/gen/app/cloudslam/v1/cloud_slam_grpc.py +70 -0
  95. viam/gen/app/cloudslam/v1/cloud_slam_pb2.py +54 -0
  96. viam/gen/app/cloudslam/v1/cloud_slam_pb2.pyi +384 -0
  97. viam/gen/app/data/__init__.py +0 -0
  98. viam/gen/app/data/v1/__init__.py +0 -0
  99. viam/gen/app/data/v1/data_grpc.py +206 -0
  100. viam/gen/app/data/v1/data_pb2.py +178 -0
  101. viam/gen/app/data/v1/data_pb2.pyi +1485 -0
  102. viam/gen/app/datapipelines/__init__.py +0 -0
  103. viam/gen/app/datapipelines/v1/__init__.py +0 -0
  104. viam/gen/app/datapipelines/v1/data_pipelines_grpc.py +84 -0
  105. viam/gen/app/datapipelines/v1/data_pipelines_pb2.py +56 -0
  106. viam/gen/app/datapipelines/v1/data_pipelines_pb2.pyi +370 -0
  107. viam/gen/app/dataset/__init__.py +0 -0
  108. viam/gen/app/dataset/v1/__init__.py +0 -0
  109. viam/gen/app/dataset/v1/dataset_grpc.py +60 -0
  110. viam/gen/app/dataset/v1/dataset_pb2.py +40 -0
  111. viam/gen/app/dataset/v1/dataset_pb2.pyi +179 -0
  112. viam/gen/app/datasync/__init__.py +0 -0
  113. viam/gen/app/datasync/v1/__init__.py +0 -0
  114. viam/gen/app/datasync/v1/data_sync_grpc.py +47 -0
  115. viam/gen/app/datasync/v1/data_sync_pb2.py +70 -0
  116. viam/gen/app/datasync/v1/data_sync_pb2.pyi +425 -0
  117. viam/gen/app/mlinference/__init__.py +0 -0
  118. viam/gen/app/mlinference/v1/__init__.py +0 -0
  119. viam/gen/app/mlinference/v1/ml_inference_grpc.py +28 -0
  120. viam/gen/app/mlinference/v1/ml_inference_pb2.py +23 -0
  121. viam/gen/app/mlinference/v1/ml_inference_pb2.pyi +63 -0
  122. viam/gen/app/mltraining/__init__.py +0 -0
  123. viam/gen/app/mltraining/v1/__init__.py +0 -0
  124. viam/gen/app/mltraining/v1/ml_training_grpc.py +78 -0
  125. viam/gen/app/mltraining/v1/ml_training_pb2.py +124 -0
  126. viam/gen/app/mltraining/v1/ml_training_pb2.pyi +415 -0
  127. viam/gen/app/packages/__init__.py +0 -0
  128. viam/gen/app/packages/v1/__init__.py +0 -0
  129. viam/gen/app/packages/v1/packages_grpc.py +54 -0
  130. viam/gen/app/packages/v1/packages_pb2.py +52 -0
  131. viam/gen/app/packages/v1/packages_pb2.pyi +311 -0
  132. viam/gen/app/v1/__init__.py +0 -0
  133. viam/gen/app/v1/app_grpc.py +863 -0
  134. viam/gen/app/v1/app_pb2.py +649 -0
  135. viam/gen/app/v1/app_pb2.pyi +5279 -0
  136. viam/gen/app/v1/billing_grpc.py +76 -0
  137. viam/gen/app/v1/billing_pb2.py +92 -0
  138. viam/gen/app/v1/billing_pb2.pyi +463 -0
  139. viam/gen/app/v1/end_user_grpc.py +59 -0
  140. viam/gen/app/v1/end_user_pb2.py +55 -0
  141. viam/gen/app/v1/end_user_pb2.pyi +181 -0
  142. viam/gen/app/v1/robot_grpc.py +55 -0
  143. viam/gen/app/v1/robot_pb2.py +127 -0
  144. viam/gen/app/v1/robot_pb2.pyi +1202 -0
  145. viam/gen/common/__init__.py +0 -0
  146. viam/gen/common/v1/__init__.py +0 -0
  147. viam/gen/common/v1/common_grpc.py +0 -0
  148. viam/gen/common/v1/common_pb2.py +78 -0
  149. viam/gen/common/v1/common_pb2.pyi +687 -0
  150. viam/gen/component/__init__.py +0 -0
  151. viam/gen/component/arm/__init__.py +0 -0
  152. viam/gen/component/arm/v1/__init__.py +0 -0
  153. viam/gen/component/arm/v1/arm_grpc.py +102 -0
  154. viam/gen/component/arm/v1/arm_pb2.py +74 -0
  155. viam/gen/component/arm/v1/arm_pb2.pyi +344 -0
  156. viam/gen/component/audioinput/__init__.py +0 -0
  157. viam/gen/component/audioinput/v1/__init__.py +0 -0
  158. viam/gen/component/audioinput/v1/audioinput_grpc.py +63 -0
  159. viam/gen/component/audioinput/v1/audioinput_pb2.py +45 -0
  160. viam/gen/component/audioinput/v1/audioinput_pb2.pyi +179 -0
  161. viam/gen/component/base/__init__.py +0 -0
  162. viam/gen/component/base/v1/__init__.py +0 -0
  163. viam/gen/component/base/v1/base_grpc.py +94 -0
  164. viam/gen/component/base/v1/base_pb2.py +66 -0
  165. viam/gen/component/base/v1/base_pb2.pyi +258 -0
  166. viam/gen/component/board/__init__.py +0 -0
  167. viam/gen/component/board/v1/__init__.py +0 -0
  168. viam/gen/component/board/v1/board_grpc.py +127 -0
  169. viam/gen/component/board/v1/board_pb2.py +103 -0
  170. viam/gen/component/board/v1/board_pb2.pyi +496 -0
  171. viam/gen/component/button/__init__.py +0 -0
  172. viam/gen/component/button/v1/__init__.py +0 -0
  173. viam/gen/component/button/v1/button_grpc.py +38 -0
  174. viam/gen/component/button/v1/button_pb2.py +28 -0
  175. viam/gen/component/button/v1/button_pb2.pyi +39 -0
  176. viam/gen/component/camera/__init__.py +0 -0
  177. viam/gen/component/camera/v1/__init__.py +0 -0
  178. viam/gen/component/camera/v1/camera_grpc.py +79 -0
  179. viam/gen/component/camera/v1/camera_pb2.py +67 -0
  180. viam/gen/component/camera/v1/camera_pb2.pyi +373 -0
  181. viam/gen/component/encoder/__init__.py +0 -0
  182. viam/gen/component/encoder/v1/__init__.py +0 -0
  183. viam/gen/component/encoder/v1/encoder_grpc.py +62 -0
  184. viam/gen/component/encoder/v1/encoder_pb2.py +44 -0
  185. viam/gen/component/encoder/v1/encoder_pb2.pyi +147 -0
  186. viam/gen/component/gantry/__init__.py +0 -0
  187. viam/gen/component/gantry/v1/__init__.py +0 -0
  188. viam/gen/component/gantry/v1/gantry_grpc.py +86 -0
  189. viam/gen/component/gantry/v1/gantry_pb2.py +62 -0
  190. viam/gen/component/gantry/v1/gantry_pb2.pyi +239 -0
  191. viam/gen/component/generic/__init__.py +0 -0
  192. viam/gen/component/generic/v1/__init__.py +0 -0
  193. viam/gen/component/generic/v1/generic_grpc.py +37 -0
  194. viam/gen/component/generic/v1/generic_pb2.py +23 -0
  195. viam/gen/component/generic/v1/generic_pb2.pyi +6 -0
  196. viam/gen/component/gripper/__init__.py +0 -0
  197. viam/gen/component/gripper/v1/__init__.py +0 -0
  198. viam/gen/component/gripper/v1/gripper_grpc.py +70 -0
  199. viam/gen/component/gripper/v1/gripper_pb2.py +48 -0
  200. viam/gen/component/gripper/v1/gripper_pb2.pyi +137 -0
  201. viam/gen/component/inputcontroller/__init__.py +0 -0
  202. viam/gen/component/inputcontroller/v1/__init__.py +0 -0
  203. viam/gen/component/inputcontroller/v1/input_controller_grpc.py +71 -0
  204. viam/gen/component/inputcontroller/v1/input_controller_pb2.py +55 -0
  205. viam/gen/component/inputcontroller/v1/input_controller_pb2.pyi +243 -0
  206. viam/gen/component/motor/__init__.py +0 -0
  207. viam/gen/component/motor/v1/__init__.py +0 -0
  208. viam/gen/component/motor/v1/motor_grpc.py +118 -0
  209. viam/gen/component/motor/v1/motor_pb2.py +86 -0
  210. viam/gen/component/motor/v1/motor_pb2.pyi +368 -0
  211. viam/gen/component/movementsensor/__init__.py +0 -0
  212. viam/gen/component/movementsensor/v1/__init__.py +0 -0
  213. viam/gen/component/movementsensor/v1/movementsensor_grpc.py +110 -0
  214. viam/gen/component/movementsensor/v1/movementsensor_pb2.py +78 -0
  215. viam/gen/component/movementsensor/v1/movementsensor_pb2.pyi +384 -0
  216. viam/gen/component/posetracker/__init__.py +0 -0
  217. viam/gen/component/posetracker/v1/__init__.py +0 -0
  218. viam/gen/component/posetracker/v1/pose_tracker_grpc.py +46 -0
  219. viam/gen/component/posetracker/v1/pose_tracker_pb2.py +34 -0
  220. viam/gen/component/posetracker/v1/pose_tracker_pb2.pyi +79 -0
  221. viam/gen/component/powersensor/__init__.py +0 -0
  222. viam/gen/component/powersensor/v1/__init__.py +0 -0
  223. viam/gen/component/powersensor/v1/powersensor_grpc.py +62 -0
  224. viam/gen/component/powersensor/v1/powersensor_pb2.py +42 -0
  225. viam/gen/component/powersensor/v1/powersensor_pb2.pyi +124 -0
  226. viam/gen/component/sensor/__init__.py +0 -0
  227. viam/gen/component/sensor/v1/__init__.py +0 -0
  228. viam/gen/component/sensor/v1/sensor_grpc.py +45 -0
  229. viam/gen/component/sensor/v1/sensor_pb2.py +25 -0
  230. viam/gen/component/sensor/v1/sensor_pb2.pyi +6 -0
  231. viam/gen/component/servo/__init__.py +0 -0
  232. viam/gen/component/servo/v1/__init__.py +0 -0
  233. viam/gen/component/servo/v1/servo_grpc.py +70 -0
  234. viam/gen/component/servo/v1/servo_pb2.py +50 -0
  235. viam/gen/component/servo/v1/servo_pb2.pyi +150 -0
  236. viam/gen/component/switch/__init__.py +0 -0
  237. viam/gen/component/switch/v1/__init__.py +0 -0
  238. viam/gen/component/switch/v1/switch_grpc.py +54 -0
  239. viam/gen/component/switch/v1/switch_pb2.py +40 -0
  240. viam/gen/component/switch/v1/switch_pb2.pyi +109 -0
  241. viam/gen/component/testecho/__init__.py +0 -0
  242. viam/gen/component/testecho/v1/__init__.py +0 -0
  243. viam/gen/component/testecho/v1/testecho_grpc.py +52 -0
  244. viam/gen/component/testecho/v1/testecho_pb2.py +36 -0
  245. viam/gen/component/testecho/v1/testecho_pb2.pyi +114 -0
  246. viam/gen/module/__init__.py +0 -0
  247. viam/gen/module/v1/__init__.py +0 -0
  248. viam/gen/module/v1/module_grpc.py +61 -0
  249. viam/gen/module/v1/module_pb2.py +43 -0
  250. viam/gen/module/v1/module_pb2.pyi +211 -0
  251. viam/gen/proto/__init__.py +0 -0
  252. viam/gen/proto/rpc/__init__.py +0 -0
  253. viam/gen/proto/rpc/examples/__init__.py +0 -0
  254. viam/gen/proto/rpc/examples/echo/__init__.py +0 -0
  255. viam/gen/proto/rpc/examples/echo/v1/__init__.py +0 -0
  256. viam/gen/proto/rpc/examples/echo/v1/echo_grpc.py +44 -0
  257. viam/gen/proto/rpc/examples/echo/v1/echo_pb2.py +32 -0
  258. viam/gen/proto/rpc/examples/echo/v1/echo_pb2.pyi +87 -0
  259. viam/gen/proto/rpc/examples/echoresource/__init__.py +0 -0
  260. viam/gen/proto/rpc/examples/echoresource/v1/__init__.py +0 -0
  261. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_grpc.py +43 -0
  262. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.py +29 -0
  263. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.pyi +93 -0
  264. viam/gen/proto/rpc/v1/__init__.py +0 -0
  265. viam/gen/proto/rpc/v1/auth_grpc.py +47 -0
  266. viam/gen/proto/rpc/v1/auth_pb2.py +34 -0
  267. viam/gen/proto/rpc/v1/auth_pb2.pyi +92 -0
  268. viam/gen/proto/rpc/webrtc/__init__.py +0 -0
  269. viam/gen/proto/rpc/webrtc/v1/__init__.py +0 -0
  270. viam/gen/proto/rpc/webrtc/v1/grpc_grpc.py +0 -0
  271. viam/gen/proto/rpc/webrtc/v1/grpc_pb2.py +43 -0
  272. viam/gen/proto/rpc/webrtc/v1/grpc_pb2.pyi +304 -0
  273. viam/gen/proto/rpc/webrtc/v1/signaling_grpc.py +54 -0
  274. viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py +70 -0
  275. viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi +496 -0
  276. viam/gen/provisioning/__init__.py +0 -0
  277. viam/gen/provisioning/v1/__init__.py +0 -0
  278. viam/gen/provisioning/v1/provisioning_grpc.py +51 -0
  279. viam/gen/provisioning/v1/provisioning_pb2.py +39 -0
  280. viam/gen/provisioning/v1/provisioning_pb2.pyi +188 -0
  281. viam/gen/robot/__init__.py +0 -0
  282. viam/gen/robot/v1/__init__.py +0 -0
  283. viam/gen/robot/v1/robot_grpc.py +208 -0
  284. viam/gen/robot/v1/robot_pb2.py +188 -0
  285. viam/gen/robot/v1/robot_pb2.pyi +1020 -0
  286. viam/gen/service/__init__.py +0 -0
  287. viam/gen/service/datamanager/__init__.py +0 -0
  288. viam/gen/service/datamanager/v1/__init__.py +0 -0
  289. viam/gen/service/datamanager/v1/data_manager_grpc.py +38 -0
  290. viam/gen/service/datamanager/v1/data_manager_pb2.py +28 -0
  291. viam/gen/service/datamanager/v1/data_manager_pb2.pyi +39 -0
  292. viam/gen/service/discovery/__init__.py +0 -0
  293. viam/gen/service/discovery/v1/__init__.py +0 -0
  294. viam/gen/service/discovery/v1/discovery_grpc.py +39 -0
  295. viam/gen/service/discovery/v1/discovery_pb2.py +29 -0
  296. viam/gen/service/discovery/v1/discovery_pb2.pyi +51 -0
  297. viam/gen/service/generic/__init__.py +0 -0
  298. viam/gen/service/generic/v1/__init__.py +0 -0
  299. viam/gen/service/generic/v1/generic_grpc.py +29 -0
  300. viam/gen/service/generic/v1/generic_pb2.py +21 -0
  301. viam/gen/service/generic/v1/generic_pb2.pyi +6 -0
  302. viam/gen/service/mlmodel/__init__.py +0 -0
  303. viam/gen/service/mlmodel/v1/__init__.py +0 -0
  304. viam/gen/service/mlmodel/v1/mlmodel_grpc.py +37 -0
  305. viam/gen/service/mlmodel/v1/mlmodel_pb2.py +83 -0
  306. viam/gen/service/mlmodel/v1/mlmodel_pb2.pyi +480 -0
  307. viam/gen/service/motion/__init__.py +0 -0
  308. viam/gen/service/motion/v1/__init__.py +0 -0
  309. viam/gen/service/motion/v1/motion_grpc.py +87 -0
  310. viam/gen/service/motion/v1/motion_pb2.py +97 -0
  311. viam/gen/service/motion/v1/motion_pb2.pyi +838 -0
  312. viam/gen/service/navigation/__init__.py +0 -0
  313. viam/gen/service/navigation/v1/__init__.py +0 -0
  314. viam/gen/service/navigation/v1/navigation_grpc.py +102 -0
  315. viam/gen/service/navigation/v1/navigation_pb2.py +84 -0
  316. viam/gen/service/navigation/v1/navigation_pb2.pyi +419 -0
  317. viam/gen/service/sensors/__init__.py +0 -0
  318. viam/gen/service/sensors/v1/__init__.py +0 -0
  319. viam/gen/service/sensors/v1/sensors_grpc.py +46 -0
  320. viam/gen/service/sensors/v1/sensors_pb2.py +68 -0
  321. viam/gen/service/sensors/v1/sensors_pb2.pyi +137 -0
  322. viam/gen/service/shell/__init__.py +0 -0
  323. viam/gen/service/shell/v1/__init__.py +0 -0
  324. viam/gen/service/shell/v1/shell_grpc.py +55 -0
  325. viam/gen/service/shell/v1/shell_pb2.py +45 -0
  326. viam/gen/service/shell/v1/shell_pb2.pyi +307 -0
  327. viam/gen/service/slam/__init__.py +0 -0
  328. viam/gen/service/slam/v1/__init__.py +0 -0
  329. viam/gen/service/slam/v1/slam_grpc.py +61 -0
  330. viam/gen/service/slam/v1/slam_pb2.py +51 -0
  331. viam/gen/service/slam/v1/slam_pb2.pyi +213 -0
  332. viam/gen/service/vision/__init__.py +0 -0
  333. viam/gen/service/vision/v1/__init__.py +0 -0
  334. viam/gen/service/vision/v1/vision_grpc.py +87 -0
  335. viam/gen/service/vision/v1/vision_pb2.py +69 -0
  336. viam/gen/service/vision/v1/vision_pb2.pyi +454 -0
  337. viam/gen/stream/__init__.py +0 -0
  338. viam/gen/stream/v1/__init__.py +0 -0
  339. viam/gen/stream/v1/stream_grpc.py +59 -0
  340. viam/gen/stream/v1/stream_pb2.py +39 -0
  341. viam/gen/stream/v1/stream_pb2.pyi +161 -0
  342. viam/gen/tagger/__init__.py +0 -0
  343. viam/gen/tagger/v1/__init__.py +0 -0
  344. viam/gen/tagger/v1/tagger_grpc.py +0 -0
  345. viam/gen/tagger/v1/tagger_pb2.py +16 -0
  346. viam/gen/tagger/v1/tagger_pb2.pyi +15 -0
  347. viam/logging.py +216 -0
  348. viam/media/__init__.py +0 -0
  349. viam/media/audio.py +16 -0
  350. viam/media/utils/__init__.py +0 -0
  351. viam/media/utils/pil/__init__.py +51 -0
  352. viam/media/utils/pil/viam_rgba_plugin.py +73 -0
  353. viam/media/viam_rgba.py +10 -0
  354. viam/media/video.py +217 -0
  355. viam/module/__init__.py +5 -0
  356. viam/module/module.py +281 -0
  357. viam/module/service.py +66 -0
  358. viam/module/types.py +23 -0
  359. viam/operations.py +124 -0
  360. viam/proto/__init__.py +0 -0
  361. viam/proto/app/__init__.py +554 -0
  362. viam/proto/app/agent/__init__.py +28 -0
  363. viam/proto/app/billing.py +58 -0
  364. viam/proto/app/cloudslam/__init__.py +48 -0
  365. viam/proto/app/data/__init__.py +138 -0
  366. viam/proto/app/datapipelines/__init__.py +56 -0
  367. viam/proto/app/dataset/__init__.py +36 -0
  368. viam/proto/app/datasync/__init__.py +44 -0
  369. viam/proto/app/end_user.py +34 -0
  370. viam/proto/app/mlinference/__init__.py +15 -0
  371. viam/proto/app/mltraining/__init__.py +52 -0
  372. viam/proto/app/packages/__init__.py +38 -0
  373. viam/proto/app/robot.py +84 -0
  374. viam/proto/common/__init__.py +66 -0
  375. viam/proto/component/__init__.py +0 -0
  376. viam/proto/component/arm/__init__.py +48 -0
  377. viam/proto/component/audioinput/__init__.py +30 -0
  378. viam/proto/component/base/__init__.py +42 -0
  379. viam/proto/component/board/__init__.py +62 -0
  380. viam/proto/component/button/__init__.py +15 -0
  381. viam/proto/component/camera/__init__.py +46 -0
  382. viam/proto/component/encoder/__init__.py +28 -0
  383. viam/proto/component/gantry/__init__.py +40 -0
  384. viam/proto/component/generic/__init__.py +12 -0
  385. viam/proto/component/gripper/__init__.py +30 -0
  386. viam/proto/component/inputcontroller/__init__.py +38 -0
  387. viam/proto/component/motor/__init__.py +56 -0
  388. viam/proto/component/movementsensor/__init__.py +50 -0
  389. viam/proto/component/posetracker/__init__.py +19 -0
  390. viam/proto/component/powersensor/__init__.py +30 -0
  391. viam/proto/component/sensor/__init__.py +12 -0
  392. viam/proto/component/servo/__init__.py +32 -0
  393. viam/proto/component/switch/__init__.py +26 -0
  394. viam/proto/component/testecho/__init__.py +30 -0
  395. viam/proto/module/__init__.py +38 -0
  396. viam/proto/provisioning/__init__.py +36 -0
  397. viam/proto/robot/__init__.py +130 -0
  398. viam/proto/rpc/__init__.py +0 -0
  399. viam/proto/rpc/auth.py +34 -0
  400. viam/proto/rpc/examples/__init__.py +0 -0
  401. viam/proto/rpc/examples/echo/__init__.py +26 -0
  402. viam/proto/rpc/examples/echoresource/__init__.py +30 -0
  403. viam/proto/rpc/webrtc/__init__.py +0 -0
  404. viam/proto/rpc/webrtc/grpc.py +36 -0
  405. viam/proto/rpc/webrtc/signaling.py +58 -0
  406. viam/proto/service/__init__.py +0 -0
  407. viam/proto/service/datamanager/__init__.py +19 -0
  408. viam/proto/service/discovery/__init__.py +15 -0
  409. viam/proto/service/generic/__init__.py +12 -0
  410. viam/proto/service/mlmodel/__init__.py +54 -0
  411. viam/proto/service/motion/__init__.py +68 -0
  412. viam/proto/service/navigation/__init__.py +58 -0
  413. viam/proto/service/sensors/__init__.py +18 -0
  414. viam/proto/service/shell/__init__.py +36 -0
  415. viam/proto/service/slam/__init__.py +36 -0
  416. viam/proto/service/vision/__init__.py +46 -0
  417. viam/proto/stream/__init__.py +36 -0
  418. viam/proto/tagger/__init__.py +6 -0
  419. viam/py.typed +0 -0
  420. viam/resource/__init__.py +0 -0
  421. viam/resource/base.py +123 -0
  422. viam/resource/easy_resource.py +153 -0
  423. viam/resource/manager.py +126 -0
  424. viam/resource/registry.py +199 -0
  425. viam/resource/rpc_client_base.py +65 -0
  426. viam/resource/rpc_service_base.py +48 -0
  427. viam/resource/types.py +213 -0
  428. viam/robot/__init__.py +0 -0
  429. viam/robot/client.py +909 -0
  430. viam/robot/service.py +69 -0
  431. viam/rpc/__init__.py +0 -0
  432. viam/rpc/dial.py +420 -0
  433. viam/rpc/libviam_rust_utils.dll +0 -0
  434. viam/rpc/server.py +201 -0
  435. viam/rpc/signaling.py +29 -0
  436. viam/rpc/types.py +22 -0
  437. viam/services/__init__.py +0 -0
  438. viam/services/discovery/__init__.py +12 -0
  439. viam/services/discovery/client.py +55 -0
  440. viam/services/discovery/discovery.py +52 -0
  441. viam/services/discovery/service.py +43 -0
  442. viam/services/generic/__init__.py +18 -0
  443. viam/services/generic/client.py +58 -0
  444. viam/services/generic/generic.py +58 -0
  445. viam/services/generic/service.py +29 -0
  446. viam/services/mlmodel/__init__.py +24 -0
  447. viam/services/mlmodel/client.py +37 -0
  448. viam/services/mlmodel/mlmodel.py +78 -0
  449. viam/services/mlmodel/service.py +38 -0
  450. viam/services/mlmodel/utils.py +101 -0
  451. viam/services/motion/__init__.py +17 -0
  452. viam/services/motion/client.py +215 -0
  453. viam/services/motion/motion.py +378 -0
  454. viam/services/motion/service.py +132 -0
  455. viam/services/navigation/__init__.py +11 -0
  456. viam/services/navigation/client.py +99 -0
  457. viam/services/navigation/navigation.py +250 -0
  458. viam/services/navigation/service.py +137 -0
  459. viam/services/service_base.py +78 -0
  460. viam/services/service_client_base.py +46 -0
  461. viam/services/slam/__init__.py +17 -0
  462. viam/services/slam/client.py +62 -0
  463. viam/services/slam/service.py +75 -0
  464. viam/services/slam/slam.py +111 -0
  465. viam/services/vision/__init__.py +15 -0
  466. viam/services/vision/client.py +206 -0
  467. viam/services/vision/service.py +146 -0
  468. viam/services/vision/vision.py +315 -0
  469. viam/sessions_client.py +245 -0
  470. viam/streams.py +44 -0
  471. viam/utils.py +365 -0
  472. viam/version_metadata.py +4 -0
  473. viam_sdk-0.45.2.dist-info/METADATA +157 -0
  474. viam_sdk-0.45.2.dist-info/RECORD +476 -0
  475. viam_sdk-0.45.2.dist-info/WHEEL +4 -0
  476. 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)