54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
import subprocess
|
|
|
|
class SainsmartRelay:
|
|
def __init__(self, executable="sainsmartrelay"):
|
|
self.executable = executable
|
|
|
|
def _run_command(self, args):
|
|
try:
|
|
result = subprocess.run(
|
|
["sudo", self.executable] + args,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
text=True,
|
|
check=True
|
|
)
|
|
return result.stdout.strip()
|
|
except subprocess.CalledProcessError as e:
|
|
print(f"Error: {e.stderr.strip()}")
|
|
return None
|
|
|
|
def turn_on(self, relays):
|
|
"""Turn on specified relays."""
|
|
relays_str = ','.join(map(str, relays)) if isinstance(relays, (list, tuple)) else str(relays)
|
|
return self._run_command(["--on", relays_str])
|
|
|
|
def turn_off(self, relays):
|
|
"""Turn off specified relays."""
|
|
relays_str = ','.join(map(str, relays)) if isinstance(relays, (list, tuple)) else str(relays)
|
|
return self._run_command(["--off", relays_str])
|
|
|
|
def get_status(self, relays="all"):
|
|
"""Get the status of specified relays."""
|
|
return self._run_command(["--status", str(relays)])
|
|
|
|
def find_all_devices(self):
|
|
"""Find all connected FTDI devices."""
|
|
return self._run_command(["--findall"])
|
|
|
|
# Example usage:
|
|
if __name__ == "__main__":
|
|
relay = SainsmartRelay()
|
|
|
|
# Turn on relay 1
|
|
print(relay.turn_on(1))
|
|
|
|
# Turn off all relays
|
|
print(relay.turn_off("all"))
|
|
|
|
# Get the status of all relays
|
|
print(relay.get_status())
|
|
|
|
# Find all FTDI devices
|
|
print(relay.find_all_devices())
|