Module meshtastic.powermon.riden

code logging power consumption of meshtastic devices.

Expand source code
"""code logging power consumption of meshtastic devices."""

import logging
from datetime import datetime

from riden import Riden

from .power_supply import PowerSupply


class RidenPowerSupply(PowerSupply):
    """Interface for talking to Riden programmable bench-top power supplies.
    Only RD6006 tested but others should be similar.
    """

    def __init__(self, portName: str = "/dev/ttyUSB0"):
        """Initialize the RidenPowerSupply object.

        portName (str, optional): The port name of the power supply. Defaults to "/dev/ttyUSB0".
        """
        self.r = r = Riden(port=portName, baudrate=115200, address=1)
        logging.info(
            f"Connected to Riden power supply: model {r.type}, sn {r.sn}, firmware {r.fw}. Date/time updated."
        )
        r.set_date_time(datetime.now())
        self.prevWattHour = self._getRawWattHour()
        self.nowWattHour = self.prevWattHour
        super().__init__()  # we call this late so that the port is already open and _getRawWattHour callback works

    def setMaxCurrent(self, i: float):
        """Set the maximum current the supply will provide."""
        self.r.set_i_set(i)

    def powerOn(self):
        """Power on the supply, with reasonable defaults for meshtastic devices."""
        self.r.set_v_set(
            self.v
        )  # my WM1110 devboard header is directly connected to the 3.3V rail
        self.r.set_output(1)

    def get_average_current_mA(self) -> float:
        """Returns average current of last measurement in mA (since last call to this method)"""
        now = datetime.now()
        nowWattHour = self._getRawWattHour()
        watts = (
            (nowWattHour - self.prevWattHour)
            / (now - self.prevPowerTime).total_seconds()
            * 3600
        )
        self.prevPowerTime = now
        self.prevWattHour = nowWattHour
        return watts / 1000

    def _getRawWattHour(self) -> float:
        """Get the current watt-hour reading."""
        self.r.update()
        return self.r.wh

Classes

class RidenPowerSupply (portName: str = '/dev/ttyUSB0')

Interface for talking to Riden programmable bench-top power supplies. Only RD6006 tested but others should be similar.

Initialize the RidenPowerSupply object.

portName (str, optional): The port name of the power supply. Defaults to "/dev/ttyUSB0".

Expand source code
class RidenPowerSupply(PowerSupply):
    """Interface for talking to Riden programmable bench-top power supplies.
    Only RD6006 tested but others should be similar.
    """

    def __init__(self, portName: str = "/dev/ttyUSB0"):
        """Initialize the RidenPowerSupply object.

        portName (str, optional): The port name of the power supply. Defaults to "/dev/ttyUSB0".
        """
        self.r = r = Riden(port=portName, baudrate=115200, address=1)
        logging.info(
            f"Connected to Riden power supply: model {r.type}, sn {r.sn}, firmware {r.fw}. Date/time updated."
        )
        r.set_date_time(datetime.now())
        self.prevWattHour = self._getRawWattHour()
        self.nowWattHour = self.prevWattHour
        super().__init__()  # we call this late so that the port is already open and _getRawWattHour callback works

    def setMaxCurrent(self, i: float):
        """Set the maximum current the supply will provide."""
        self.r.set_i_set(i)

    def powerOn(self):
        """Power on the supply, with reasonable defaults for meshtastic devices."""
        self.r.set_v_set(
            self.v
        )  # my WM1110 devboard header is directly connected to the 3.3V rail
        self.r.set_output(1)

    def get_average_current_mA(self) -> float:
        """Returns average current of last measurement in mA (since last call to this method)"""
        now = datetime.now()
        nowWattHour = self._getRawWattHour()
        watts = (
            (nowWattHour - self.prevWattHour)
            / (now - self.prevPowerTime).total_seconds()
            * 3600
        )
        self.prevPowerTime = now
        self.prevWattHour = nowWattHour
        return watts / 1000

    def _getRawWattHour(self) -> float:
        """Get the current watt-hour reading."""
        self.r.update()
        return self.r.wh

Ancestors

Methods

def powerOn(self)

Power on the supply, with reasonable defaults for meshtastic devices.

Expand source code
def powerOn(self):
    """Power on the supply, with reasonable defaults for meshtastic devices."""
    self.r.set_v_set(
        self.v
    )  # my WM1110 devboard header is directly connected to the 3.3V rail
    self.r.set_output(1)
def setMaxCurrent(self, i: float)

Set the maximum current the supply will provide.

Expand source code
def setMaxCurrent(self, i: float):
    """Set the maximum current the supply will provide."""
    self.r.set_i_set(i)

Inherited members