diff options
| author | s-ol <s+removethis@s-ol.nu> | 2024-03-20 17:38:13 +0000 |
|---|---|---|
| committer | s-ol <s+removethis@s-ol.nu> | 2024-03-20 17:38:13 +0000 |
| commit | f56bfd50c671fd29b1a442adcfea57ec9f74356e (patch) | |
| tree | 24beb774ad5b43608c84e4440d6ba325383a42ca /simulator/__init__.py | |
| parent | simulator: simulate simultaneous heat/cool state (diff) | |
| download | t937-serial-f56bfd50c671fd29b1a442adcfea57ec9f74356e.tar.gz t937-serial-f56bfd50c671fd29b1a442adcfea57ec9f74356e.zip | |
web, simulator: support WebSocket transport for development
Diffstat (limited to 'simulator/__init__.py')
| -rw-r--r-- | simulator/__init__.py | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/simulator/__init__.py b/simulator/__init__.py index e81ae9a..5fc1366 100644 --- a/simulator/__init__.py +++ b/simulator/__init__.py @@ -1,5 +1,4 @@ import random -import serial import time import sys @@ -178,8 +177,37 @@ def run(port): print("unexpected message", msg) +class WSPort: + def __init__(self, ws): + self.ws = ws + self.in_waiting = 0 + + def write(self, data): + self.ws.send(data) + + def read(self, _): + try: + return self.ws.recv(0) + except TimeoutError: + pass + + @staticmethod + def wrap(fn): + return lambda ws: fn(WSPort(ws)) + + if __name__ == "__main__": - port = sys.argv[-1] - print(f"starting Dummy Oven on port {port}") - with serial.Serial(port, baudrate=38400, timeout=1) as ser: - run(ser) + if len(sys.argv) < 2: + import websockets.sync.server as ws + + print("starting Dummy Oven over WebSocket on port :8001") + with ws.serve(WSPort.wrap(run), host="0.0.0.0", port=8001) as server: + server.serve_forever() + + else: + import serial + + port = sys.argv[-1] + print(f"starting Dummy Oven on port {port}") + with serial.Serial(port, baudrate=38400, timeout=1) as ser: + run(ser) |
