viam.components.power_sensor
============================
.. py:module:: viam.components.power_sensor
Submodules
----------
.. toctree::
:maxdepth: 1
/autoapi/viam/components/power_sensor/client/index
/autoapi/viam/components/power_sensor/power_sensor/index
/autoapi/viam/components/power_sensor/service/index
Classes
-------
.. autoapisummary::
viam.components.power_sensor.PowerSensor
Package Contents
----------------
.. py:class:: PowerSensor(name: str, *, logger: Optional[logging.Logger] = None)
Bases: :py:obj:`viam.components.component_base.ComponentBase`
PowerSensor reports information about voltage, current and power.
This acts as an abstract base class for any sensors that can provide data regarding voltage, current and/or power.
This cannot be used on its own. If the ``__init__()`` function is overridden, it must call the ``super().__init__()`` function.
::
from viam.components.power_sensor import PowerSensor
For more information, see `Power Sensor component `_.
.. py:attribute:: API
:type: Final
The API of the Resource
.. py:method:: get_voltage(*, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> Tuple[float, bool]
:abstractmethod:
:async:
Return the voltage reading of a specified device and whether it is AC or DC.
::
my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
# Get the voltage reading from the power sensor
voltage, is_ac = await my_power_sensor.get_voltage()
print("The voltage is", voltage, "V, Is AC:", is_ac)
:returns: A float representing the voltage reading in V. A bool indicating whether the voltage is AC (`true`) or DC
(`false`).
:rtype: Tuple[float, bool]
For more information, see `Power Sensor component `_.
.. py:method:: get_current(*, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> Tuple[float, bool]
:abstractmethod:
:async:
Return the current of a specified device and whether it is AC or DC.
::
my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
# Get the current reading from the power sensor
current, is_ac = await my_power_sensor.get_current()
print("The current is ", current, " A, Is AC: ", is_ac)
:returns: A tuple which includes a float representing the current reading in amps, and a bool indicating whether the
current is AC (`true`) or DC (`false`).
:rtype: Tuple[float, bool]
For more information, see `Power Sensor component `_.
.. py:method:: get_power(*, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> float
:abstractmethod:
:async:
Return the power reading in watts.
::
my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
# Get the power reading from the power sensor
power = await my_power_sensor.get_power()
print("The power is", power, "Watts")
:returns: The power reading in watts.
:rtype: float
For more information, see `Power Sensor component `_.
.. py:method:: get_readings(*, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> Mapping[str, viam.utils.SensorReading]
:async:
Get the measurements or readings that this power sensor provides. If a sensor is not configured correctly or fails to read a
piece of data, it will not appear in the readings dictionary.
::
my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
# Get the readings provided by the sensor.
readings = await my_power_sensor.get_readings()
:returns:
The readings for the PowerSensor. Can be of any type. Includes voltage in volts (float), current in
amperes (float), is_ac (bool), and power in watts (float).
:rtype: Mapping[str, Any]
For more information, see `Power Sensor component `_.
.. py:method:: from_robot(robot: viam.robot.client.RobotClient, name: str) -> typing_extensions.Self
:classmethod:
Get the component named ``name`` from the provided robot.
:param robot: The robot
:type robot: RobotClient
:param name: The name of the component
:type name: str
:returns: The component, if it exists on the robot
:rtype: Self
.. py:method:: do_command(command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None, **kwargs) -> Mapping[str, ValueTypes]
:abstractmethod:
:async:
Send/Receive arbitrary commands to the Resource
::
command = {"cmd": "test", "data1": 500}
result = await component.do_command(command)
:param command: The command to execute
:type command: Mapping[str, ValueTypes]
:raises NotImplementedError: Raised if the Resource does not support arbitrary commands
:returns: Result of the executed command
:rtype: Mapping[str, ValueTypes]
.. py:method:: get_geometries(*, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> List[viam.proto.common.Geometry]
:async:
Get all geometries associated with the component, in their current configuration, in the
`frame `__ of the component.
::
geometries = await component.get_geometries()
if geometries:
# Get the center of the first geometry
print(f"Pose of the first geometry's centerpoint: {geometries[0].center}")
:returns: The geometries associated with the Component.
:rtype: List[Geometry]
.. py:method:: get_resource_name(name: str) -> viam.proto.common.ResourceName
:classmethod:
Get the ResourceName for this Resource with the given name
::
# Can be used with any resource, using an arm as an example
my_arm_name = Arm.get_resource_name("my_arm")
:param name: The name of the Resource
:type name: str
:returns: The ResourceName of this Resource
:rtype: ResourceName
.. py:method:: get_operation(kwargs: Mapping[str, Any]) -> viam.operations.Operation
Get the ``Operation`` associated with the currently running function.
When writing custom resources, you should get the ``Operation`` by calling this function and check to see if it's cancelled.
If the ``Operation`` is cancelled, then you can perform any necessary (terminating long running tasks, cleaning up connections, etc.
).
:param kwargs: The kwargs object containing the operation
:type kwargs: Mapping[str, Any]
:returns: The operation associated with this function
:rtype: viam.operations.Operation
.. py:method:: close()
:async:
Safely shut down the resource and prevent further use.
Close must be idempotent. Later configuration may allow a resource to be "open" again.
If a resource does not want or need a close function, it is assumed that the resource does not need to return errors when future
non-Close methods are called.
::
await component.close()