Jetzt hast Du zusätzlich eine globale Variable definiert. Dass `cient` in der ursprünglichen Variante nicht definiert war und Du deshalb einen NameError bekommen hast, hättest Du irgendwo als Fehlermeldung sehen sollen. Wenn das nicht der Fall ist, mußt Du erst einmal herausfinden, warum, und wo die Fehlermeldung hingeschrieben wird, denn ohne diese Information ist eine Fehlersuche unmöglich.
Signale sind sehr sehr low-level, und benutzt man nicht. Zum Aufräumen kennt Python finally-Blöcke. Vielleicht sorgte ja Dein Signal-Handler dafür, dass Fehlermeldungen verschluckt werden, da kann alles mögliche unvorhersehbares passieren.
Importe gehören immer an den Anfang der Datei und keine Konstanten dazwischen. time und pdb werden nicht benutzt, aber importiert, sys und signal sollten nicht benutzt werden.
`main` ist nicht nur einfach so da, sondern enthält das gesamte Hauptprogramm. Du hast das Hauptprogramm aber über den ganzen Code verteilt.
Code: Alles auswählen
from functools import partial
from pymodbus.client.sync import ModbusTcpClient as ModbusClient
from SimpleWebSocketServer import WebSocket, SimpleWebSocketServer
UNIT = 0x1
HOST = '192.168.0.50'
PORT = 502
COILBASE = 512 # Coil Output Base Address
PORTNUM = 8001
# Websocket class to echo received data
class Echo(WebSocket):
def __init__(self, client, server, sock, address):
super().__init__(server, sock, address)
self.client = client
def handleMessage(self):
print("Echoing '%s'" % self.data)
self.sendMessage(self.data)
command = self.data
address, value = {
'relaise1': (COILBASE + 0, True),
'relaise1off': (COILBASE + 0, False),
'relaise2': (COILBASE + 1, True),
'relaise2off': (COILBASE + 1, False),
}[command]
rq = self.client.write_coil(address, value, unit= UNIT)
def handleConnected(self):
print("Connected")
def handleClose(self):
print("Disconnected")
def main():
with ModbusClient(host=HOST, port=PORT) as client:
client.connect()
print("Websocket server on port %s" % PORTNUM)
server = SimpleWebSocketServer('', PORTNUM, partial(Echo, client))
try:
server.serveforever()
finally:
server.close()
if __name__ == "__main__":
main()