Add module identification command (relay id)

This commit is contained in:
Eddy de Vink 2026-08-13 12:17:54 +02:00
commit cbb0d672f6
3 changed files with 10 additions and 5 deletions

View file

@ -10,6 +10,7 @@ Sluit aan via USB en stuur commando's:
./relay 1 # relais aan ./relay 1 # relais aan
./relay 0 # relais uit ./relay 0 # relais uit
./relay 1 /dev/cu.usbserial-XXXX # poort opgeven als default afwijkt ./relay 1 /dev/cu.usbserial-XXXX # poort opgeven als default afwijkt
./relay id # toont module-ID (chip-ID, uniek per chip, onafhankelijk van USB-poort)
``` ```
## Pinnen ## Pinnen

11
relay
View file

@ -1,15 +1,16 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
"""Toggle the USB relay via serial: ./relay 1|0 [serial_port].""" """Toggle the USB relay via serial: ./relay 1|0|id [serial_port]."""
import sys import sys
import serial import serial
DEFAULT_PORT = "/dev/cu.usbserial-2110" DEFAULT_PORT = "/dev/cu.usbserial-2110"
def main() -> int: def main() -> int:
if len(sys.argv) not in (2, 3) or sys.argv[1] not in ("0", "1"): if len(sys.argv) not in (2, 3) or sys.argv[1] not in ("0", "1", "id"):
print(f"Usage: {sys.argv[0]} 0|1 [serial_port]", file=sys.stderr) print(f"Usage: {sys.argv[0]} 0|1|id [serial_port]", file=sys.stderr)
return 1 return 1
command = sys.argv[1] command = sys.argv[1]
serial_cmd = "?" if command == "id" else command
port = sys.argv[2] if len(sys.argv) == 3 else DEFAULT_PORT port = sys.argv[2] if len(sys.argv) == 3 else DEFAULT_PORT
try: try:
# dtr/rts expliciet uit vóór open: voorkomt (of beperkt) de CH340 # dtr/rts expliciet uit vóór open: voorkomt (of beperkt) de CH340
@ -32,12 +33,12 @@ def main() -> int:
# binnen 2 s (timeout, readline geeft b"") = geen reset: door. # binnen 2 s (timeout, readline geeft b"") = geen reset: door.
s.readline() s.readline()
s.reset_input_buffer() s.reset_input_buffer()
s.write(command.encode()) s.write(serial_cmd.encode())
s.flush() s.flush()
reply = s.readline().decode(errors="replace").strip() reply = s.readline().decode(errors="replace").strip()
finally: finally:
s.close() s.close()
if reply in ("ON", "OFF"): if reply in ("ON", "OFF") or (command == "id" and reply.startswith("ID ")):
print(reply) print(reply)
return 0 return 0
print(f"ERROR: no valid reply from board (got {reply!r})", file=sys.stderr) print(f"ERROR: no valid reply from board (got {reply!r})", file=sys.stderr)

View file

@ -23,6 +23,9 @@ void loop() {
digitalWrite(RELAY_PIN, LOW); digitalWrite(RELAY_PIN, LOW);
digitalWrite(LED_PIN, HIGH); digitalWrite(LED_PIN, HIGH);
Serial.println("OFF"); Serial.println("OFF");
} else if (c == '?') {
Serial.print("ID usbtoggle-relay ");
Serial.println(ESP.getChipId(), HEX);
} }
} }
} }