Skip to content

Commit

Permalink
feat: Add support for RND power supplies
Browse files Browse the repository at this point in the history
A very limited port of this:
https://github.com/rumpelsepp/opennetzteil/blob/master/devices/rnd/rnd320.go

However, these devices are so buggy that only switch on/off works
reliably … (in most cases).
  • Loading branch information
rumpelsepp committed Oct 24, 2024
1 parent 17408d9 commit d3975bd
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 1 deletion.
1 change: 1 addition & 0 deletions contrib/rnd.rules
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
KERNEL=="ttyACM[0-9]*", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0416", ATTRS{idProduct}=="5011", SYMLINK+="rnd-netzteil"
3 changes: 2 additions & 1 deletion src/opennetzteil/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
# SPDX-License-Identifier: Apache-2.0

from opennetzteil.devices.http.client import HTTPNetzteil
from opennetzteil.devices.rnd import RND320
from opennetzteil.devices.rs.hmc804 import HMC804
from opennetzteil.netzteil import BaseNetzteil

netzteile: list[type[BaseNetzteil]] = [HTTPNetzteil, HMC804]
netzteile: list[type[BaseNetzteil]] = [HTTPNetzteil, HMC804, RND320]
66 changes: 66 additions & 0 deletions src/opennetzteil/devices/rnd.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# SPDX-FileCopyrightText: AISEC Pentesting Team
#
# SPDX-License-Identifier: Apache-2.0

import asyncio
from typing import Any

from opennetzteil.exceptions import OperationNotSupportedError
from opennetzteil.netzteil import BaseNetzteil


class RND320(BaseNetzteil):
PRODUCT_ID = "RND320"

async def _send(self, data: str) -> None:
with open(self.target.path, "w") as f:
await asyncio.to_thread(f.write, data)

async def get_ident(self) -> str:
raise OperationNotSupportedError()

async def get_master(self) -> bool:
raise OperationNotSupportedError()

async def set_master(self, enabled: bool) -> None:
cmd = "OUT1" if enabled else "OUT0"
await self._send(cmd)

async def get_channels(self) -> int:
return 1

async def get_current(self, channel: int) -> float:
raise OperationNotSupportedError()

async def set_current(self, channel: int, value: float) -> None:
raise OperationNotSupportedError()

async def get_voltage(self, channel: int) -> float:
raise OperationNotSupportedError()

async def set_voltage(self, channel: int, value: float) -> None:
raise OperationNotSupportedError()

async def get_output(self, channel: int) -> bool:
raise OperationNotSupportedError()

async def set_output(self, channel: int, enabled: bool) -> None:
await self.set_master(enabled)

async def status(self) -> dict[str, Any]:
raise OperationNotSupportedError()

async def get_ocp(self, channel: int) -> bool:
raise OperationNotSupportedError()

async def set_ocp(self, channel: int, enabled: bool) -> None:
raise OperationNotSupportedError()

async def get_ovp(self, channel: int) -> bool:
raise OperationNotSupportedError()

async def set_ovp(self, channel: int, enabled: bool) -> None:
raise OperationNotSupportedError()

async def set_beep(self, enabled: bool) -> None:
raise OperationNotSupportedError()
Empty file.

0 comments on commit d3975bd

Please sign in to comment.