From 77b0c6cc6cfd51c68c2b4e6af2a0febaca5ffacc Mon Sep 17 00:00:00 2001 From: arnaud <arnaud.watlet@umons.ac.be> Date: Wed, 26 Oct 2022 11:47:36 +0200 Subject: [PATCH] Fixes bugs on MQTT and TCP communication - start woks on webserver and mqtt_interface (through Node-Red) --- config.py | 8 +++---- index.html | 22 +++++++++---------- mqtt_interface.py | 50 +++++++++++++++++++++++++----------------- ohmpi.py | 15 +++++++------ simple_ohmpi_flow.json | 2 +- webserver.py | 30 +++++++++++++------------ 6 files changed, 70 insertions(+), 57 deletions(-) diff --git a/config.py b/config.py index f92ef7e6..25f6efb4 100644 --- a/config.py +++ b/config.py @@ -56,13 +56,13 @@ SOH_LOGGING_CONFIG = { # MQTT logging configuration parameters MQTT_LOGGING_CONFIG = { - 'hostname': 'ohmpy.umons.ac.be', + 'hostname':'mg3d-dev.umons.ac.be', 'port': 1883, 'qos': 2, 'retain': False, 'keepalive': 60, 'will': None, - 'auth': None, + 'auth': { 'username': 'mqtt_user', 'password': 'mqtt_password' }, 'tls': None, 'protocol': MQTTv31, 'transport': 'tcp', @@ -74,13 +74,13 @@ MQTT_LOGGING_CONFIG = { # MQTT control configuration parameters MQTT_CONTROL_CONFIG = { - 'hostname': 'ohmpy.umons.ac.be', + 'hostname': 'mg3d-dev.umons.ac.be', 'port': 1883, 'qos': 2, 'retain': False, 'keepalive': 60, 'will': None, - 'auth': None, + 'auth': { 'username': 'mqtt_user', 'password': 'mqtt_password' }, 'tls': None, 'protocol': MQTTv31, 'transport': 'tcp', diff --git a/index.html b/index.html index 699fc924..691332e9 100644 --- a/index.html +++ b/index.html @@ -142,7 +142,7 @@ // useful functions function sendCommand(query, callback=null) { - // dic in the form: {'command': X, ...} as JSON + // dic in the form: {'cmd': X, ...} as JSON if (callback == null) { function callback(x) { console.log('default callback:', x) @@ -163,7 +163,7 @@ // start button function startBtnFunc() { - sendCommand('{"command": "start"}', function(x) { + sendCommand('{"cmd": "start"}', function(x) { console.log(x['status']) if (x['status'] == 'running') { output.innerHTML = 'Status: measuring...' @@ -175,7 +175,7 @@ // stop button function stopBtnFunc() { - sendCommand('{"command": "stop"}', function(x) { + sendCommand('{"cmd": "stop"}', function(x) { output.innerHTML = 'Status: ' + x['status'] clearInterval(interv) getData() @@ -197,7 +197,7 @@ // define callback to send settigs to Pi function configCallback() { sendCommand(JSON.stringify({ - 'command': 'setConfig', + 'cmd': 'setConfig', 'config': formVals }), function(x) { console.log('setconfig:', x) @@ -351,7 +351,7 @@ // run RS check function rsBtnFunc() { - sendCommand('{"command": "rsCheck"}', function (res) { + sendCommand('{"cmd": "rsCheck"}', function (res) { // update the bar plot rsdata.push({ x: res['data']['AB'], @@ -376,7 +376,7 @@ // getData function getData() { sendCommand(JSON.stringify({ - 'command': 'getData', + 'cmd': 'getData', 'surveyNames': Object.keys(data).slice(0, -1) // last survey is often partial so we download it again }), function(ddic) { @@ -497,7 +497,7 @@ // remove data function removeDataBtnFunc() { - sendCommand('{"command": "removeData"}',function(x) { + sendCommand('{"cmd": "removeData"}',function(x) { data = {} output.innerHTML = 'Status: ' + x['status'] + ' (all data cleared)' console.log('all data removed') @@ -508,7 +508,7 @@ // shutdown Pi function shutdownBtnFunc() { - sendCommand('{"command": "shutdown"}', function(x) { + sendCommand('{"cmd": "shutdown"}', function(x) { console.log('shuting down...') }) } @@ -517,7 +517,7 @@ // restart Pi function restartBtnFunc() { - sendCommand('{"command": "restart"}', function(x) { + sendCommand('{"cmd": "restart"}', function(x) { console.log('rebooting...') }) } @@ -526,7 +526,7 @@ // invert data // function invertBtnFunc() { - // sendCommand('{"command": "invert"}', function(x) { + // sendCommand('{"cmd": "invert"}', function(x) { // console.log('inversion results', x) // }) // } @@ -535,7 +535,7 @@ // download data function downloadBtnFunc() { - sendCommand('{"command": "download"}', function(x) { + sendCommand('{"cmd": "download"}', function(x) { let dwl = document.getElementById('download') dwl.setAttribute('href', serverUrl + '/data.zip') dwl.setAttribute('download', 'data.zip') diff --git a/mqtt_interface.py b/mqtt_interface.py index e9005264..24124527 100644 --- a/mqtt_interface.py +++ b/mqtt_interface.py @@ -6,42 +6,52 @@ import zmq ctrl_queue = Queue() - def on_message(client, userdata, message): global socket # Send the command print(f'Sending command {message.payload.decode("utf-8")}') - socket.send_string(message.payload.decode("utf-8")) - - # Get the reply. + socket.send(message.payload) + + # Get the reply + # event = socket.poll(timeout=1000) + # if event == 0: + # print('timeout') + # reply = 'no reply...' + # else: reply = socket.recv() - print(f'Received reply {message.payload.decode("utf-8")}: {reply}') + print(f'Received reply {message.payload.decode("utf-8")}: {reply}') mqtt_client = mqtt.Client(f'ohmpi_{OHMPI_CONFIG["id"]}_listener', clean_session=False) # create new instance -print('now this') print('connecting to broker') trials = 0 trials_max = 10 +broker_connected = False while trials < trials_max: try: + mqtt_client.username_pw_set(MQTT_CONTROL_CONFIG['auth'].get('username'),MQTT_CONTROL_CONFIG['auth']['password']) mqtt_client.connect(MQTT_CONTROL_CONFIG['hostname']) trials = trials_max + broker_connected = True except: - print('new trial') + print('trying again...') time.sleep(2) trials+=1 -print('Subscribing to topic', MQTT_CONTROL_CONFIG['ctrl_topic']) -mqtt_client.subscribe(MQTT_CONTROL_CONFIG['ctrl_topic'], MQTT_CONTROL_CONFIG['qos']) -mqtt_client.on_message = on_message -mqtt_client.loop_start() -context = zmq.Context() - -# Socket to talk to server -print("Connecting to ohmpi control server") -socket = context.socket(zmq.REQ) -socket.connect(f'tcp://localhost:{CONTROL_CONFIG["tcp_port"]}') - -while True: - time.sleep(.1) +if broker_connected: + print('Subscribing to topic', MQTT_CONTROL_CONFIG['ctrl_topic']) + mqtt_client.subscribe(MQTT_CONTROL_CONFIG['ctrl_topic'], MQTT_CONTROL_CONFIG['qos']) + mqtt_client.on_message = on_message + mqtt_client.loop_start() + + context = zmq.Context() + # Socket to talk to server + print("Connecting to ohmpi control server") + socket = context.socket(zmq.REQ) + socket.connect(f'tcp://localhost:{CONTROL_CONFIG["tcp_port"]}') + + while True: + time.sleep(.1) +else: + print("Unable to connect to broker") + exit(1) diff --git a/ohmpi.py b/ohmpi.py index ff8ebb59..2d0ac6a7 100644 --- a/ohmpi.py +++ b/ohmpi.py @@ -656,6 +656,9 @@ class OhmPi(object): self.exec_logger.debug(f'Start listening for commands on port {tcp_port}') while self.cmd_listen: try: + #id_sock = socket.recv() + #assert not socket.recv() # empty data here + #assert socket.recv() == id_sock message = socket.recv(flags=zmq.NOBLOCK) self.exec_logger.debug(f'Received command: {message}') e = None @@ -706,14 +709,15 @@ class OhmPi(object): reply = {'cmd_id': cmd_id, 'status': status} reply = json.dumps(reply) self.exec_logger.debug(f'Execution report: {reply}') - self.exec_logger.debug(reply) - reply = bytes(reply, 'utf-8') + # self.exec_logger.debug(reply) + # reply = bytes(reply, 'utf-8') + reply = reply.encode('utf-8') socket.send(reply) except zmq.ZMQError as e: if e.errno == zmq.EAGAIN: pass # no message was ready (yet!) else: - traceback.print_exc() + self.exec_logger.error(f'Unexpected error while process: {e}') def measure(self, cmd_id=None): """Run the sequence in a separate thread. Can be stopped by 'OhmPi.stop()'. @@ -827,8 +831,5 @@ print(current_time.strftime("%Y-%m-%d %H:%M:%S")) if __name__ == "__main__": # start interface Popen(['python', CONTROL_CONFIG['interface']]) - + print('done') ohmpi = OhmPi(settings=OHMPI_CONFIG['settings']) - - - diff --git a/simple_ohmpi_flow.json b/simple_ohmpi_flow.json index 767fde28..17df4bd7 100644 --- a/simple_ohmpi_flow.json +++ b/simple_ohmpi_flow.json @@ -1 +1 @@ -[{"id":"ea6628fd.4d57e8","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"6ae7e77e.04c64","type":"mqtt-broker","name":"ohmpi_mqtt_broker","broker":"ohmpy.umons.ac.be","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"64a75353.37700c","type":"ui_group","name":"Messages","tab":"5d888f29.07334","order":1,"disp":true,"width":"16","collapse":true},{"id":"142ad6ae.d55e29","type":"ui_group","name":"Buttons","tab":"5d888f29.07334","order":3,"disp":true,"width":"6","collapse":false},{"id":"5d888f29.07334","type":"ui_tab","name":"Home","icon":"dashboard","disabled":false,"hidden":false},{"id":"ea73b76b.ee0738","type":"ui_base","theme":{"name":"theme-light","lightTheme":{"default":"#0094CE","baseColor":"#0094CE","baseFont":"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif","edited":false},"darkTheme":{"default":"#097479","baseColor":"#097479","baseFont":"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif","edited":false},"customTheme":{"name":"Untitled Theme 1","default":"#4B7930","baseColor":"#4B7930","baseFont":"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif"},"themeState":{"base-color":{"default":"#0094CE","value":"#0094CE","edited":false},"page-titlebar-backgroundColor":{"value":"#0094CE","edited":false},"page-backgroundColor":{"value":"#fafafa","edited":false},"page-sidebar-backgroundColor":{"value":"#ffffff","edited":false},"group-textColor":{"value":"#1bbfff","edited":false},"group-borderColor":{"value":"#ffffff","edited":false},"group-backgroundColor":{"value":"#ffffff","edited":false},"widget-textColor":{"value":"#111111","edited":false},"widget-backgroundColor":{"value":"#0094ce","edited":false},"widget-borderColor":{"value":"#ffffff","edited":false},"base-font":{"value":"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif"}},"angularTheme":{"primary":"indigo","accents":"blue","warn":"red","background":"grey","palette":"light"}},"site":{"name":"Node-RED Dashboard","hideToolbar":"false","allowSwipe":"false","lockMenu":"false","allowTempTheme":"true","dateFormat":"DD/MM/YYYY","sizes":{"sx":48,"sy":48,"gx":6,"gy":6,"cx":6,"cy":6,"px":0,"py":0}}},{"id":"147e389f.fc5a6f","type":"mqtt in","z":"ea6628fd.4d57e8","name":"","topic":"ohmpi_0001/exec","qos":"2","datatype":"auto","broker":"6ae7e77e.04c64","inputs":0,"x":110,"y":40,"wires":[["ddcc63.c93813a","40efede3.33021c"]]},{"id":"ddcc63.c93813a","type":"debug","z":"ea6628fd.4d57e8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":390,"y":40,"wires":[]},{"id":"40efede3.33021c","type":"ui_text","z":"ea6628fd.4d57e8","group":"64a75353.37700c","order":0,"width":"0","height":"0","name":"MQTT exec","label":"Execution","format":"{{msg.payload}}","layout":"row-spread","x":390,"y":80,"wires":[]},{"id":"64e06023.868f58","type":"mqtt in","z":"ea6628fd.4d57e8","name":"","topic":"ohmpi_0001/data","qos":"2","datatype":"auto","broker":"6ae7e77e.04c64","inputs":0,"x":100,"y":140,"wires":[["ac400b27.992c78","8d7f5d51.c06c4"]]},{"id":"ac400b27.992c78","type":"debug","z":"ea6628fd.4d57e8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":390,"y":140,"wires":[]},{"id":"8d7f5d51.c06c4","type":"ui_text","z":"ea6628fd.4d57e8","group":"64a75353.37700c","order":1,"width":0,"height":0,"name":"MQTT Data","label":"Data","format":"{{msg.payload}}","layout":"row-spread","x":390,"y":180,"wires":[]},{"id":"e1cc28ee.d2dd6","type":"mqtt out","z":"ea6628fd.4d57e8","name":"MQTT ctrl","topic":"ohmpi_0001/ctrl","qos":"0","retain":"false","broker":"6ae7e77e.04c64","x":380,"y":340,"wires":[]},{"id":"a144e7f8.416768","type":"ui_button","z":"ea6628fd.4d57e8","name":"","group":"142ad6ae.d55e29","order":0,"width":"2","height":"1","passthru":false,"label":"Start","tooltip":"","color":"","bgcolor":"green","className":"","icon":"","payload":"start","payloadType":"str","topic":"topic","topicType":"msg","x":70,"y":340,"wires":[["e1cc28ee.d2dd6","4a86345b.fb400c"]]},{"id":"abd65786.c433c8","type":"ui_button","z":"ea6628fd.4d57e8","name":"","group":"142ad6ae.d55e29","order":0,"width":"2","height":"1","passthru":false,"label":"Stop","tooltip":"","color":"","bgcolor":"red","icon":"","payload":"stop","payloadType":"str","topic":"topic","topicType":"msg","x":70,"y":400,"wires":[["e1cc28ee.d2dd6","4a86345b.fb400c"]]},{"id":"4a86345b.fb400c","type":"ui_audio","z":"ea6628fd.4d57e8","name":"","group":"142ad6ae.d55e29","voice":"urn:moz-tts:speechd:English%20(Received%20Pronunciation)?en","always":"","x":380,"y":400,"wires":[]},{"id":"398460c6.27a9e8","type":"mqtt in","z":"ea6628fd.4d57e8","name":"","topic":"ohmpi_0001/soh","qos":"2","datatype":"auto","broker":"6ae7e77e.04c64","inputs":0,"x":100,"y":240,"wires":[["21b85b73.b7ef34","498c2864.b36b18"]]},{"id":"21b85b73.b7ef34","type":"debug","z":"ea6628fd.4d57e8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":390,"y":240,"wires":[]},{"id":"498c2864.b36b18","type":"ui_text","z":"ea6628fd.4d57e8","group":"64a75353.37700c","order":1,"width":0,"height":0,"name":"MQTT SOH","label":"SOH","format":"{{msg.payload}}","layout":"row-spread","x":390,"y":280,"wires":[]},{"id":"3dbcbc0e.3d24ac","type":"ui_form","z":"ea6628fd.4d57e8","name":"Commands","label":"","group":"142ad6ae.d55e29","order":4,"width":0,"height":0,"options":[{"label":"cmd_id","value":"cmd_id","type":"text","required":false,"rows":null},{"label":"cmd","value":"cmd","type":"text","required":true,"rows":null},{"label":"args","value":"args","type":"text","required":false,"rows":null}],"formValue":{"cmd_id":"","cmd":"","args":""},"payload":"","submit":"submit","cancel":"cancel","topic":"topic","topicType":"msg","splitLayout":"","className":"","x":120,"y":640,"wires":[["e1cc28ee.d2dd6","bfc5c3.3e79724"]]},{"id":"bfc5c3.3e79724","type":"ui_text","z":"ea6628fd.4d57e8","group":"64a75353.37700c","order":3,"width":0,"height":0,"name":"","label":"text","format":"{{msg.payload}}","layout":"row-spread","className":"","x":380,"y":640,"wires":[]}] \ No newline at end of file +[{"id":"ea6628fd.4d57e8","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"6ae7e77e.04c64","type":"mqtt-broker","name":"ohmpi_mqtt_broker","broker":"mg3d-dev.umons.ac.be","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"64a75353.37700c","type":"ui_group","name":"Messages","tab":"5d888f29.07334","order":1,"disp":true,"width":"16","collapse":true},{"id":"142ad6ae.d55e29","type":"ui_group","name":"Buttons","tab":"5d888f29.07334","order":3,"disp":true,"width":"6","collapse":false},{"id":"5d888f29.07334","type":"ui_tab","name":"Home","icon":"dashboard","disabled":false,"hidden":false},{"id":"ea73b76b.ee0738","type":"ui_base","theme":{"name":"theme-light","lightTheme":{"default":"#0094CE","baseColor":"#0094CE","baseFont":"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif","edited":false},"darkTheme":{"default":"#097479","baseColor":"#097479","baseFont":"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif","edited":false},"customTheme":{"name":"Untitled Theme 1","default":"#4B7930","baseColor":"#4B7930","baseFont":"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif"},"themeState":{"base-color":{"default":"#0094CE","value":"#0094CE","edited":false},"page-titlebar-backgroundColor":{"value":"#0094CE","edited":false},"page-backgroundColor":{"value":"#fafafa","edited":false},"page-sidebar-backgroundColor":{"value":"#ffffff","edited":false},"group-textColor":{"value":"#1bbfff","edited":false},"group-borderColor":{"value":"#ffffff","edited":false},"group-backgroundColor":{"value":"#ffffff","edited":false},"widget-textColor":{"value":"#111111","edited":false},"widget-backgroundColor":{"value":"#0094ce","edited":false},"widget-borderColor":{"value":"#ffffff","edited":false},"base-font":{"value":"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif"}},"angularTheme":{"primary":"indigo","accents":"blue","warn":"red","background":"grey","palette":"light"}},"site":{"name":"Node-RED Dashboard","hideToolbar":"false","allowSwipe":"false","lockMenu":"false","allowTempTheme":"true","dateFormat":"DD/MM/YYYY","sizes":{"sx":48,"sy":48,"gx":6,"gy":6,"cx":6,"cy":6,"px":0,"py":0}}},{"id":"147e389f.fc5a6f","type":"mqtt in","z":"ea6628fd.4d57e8","name":"","topic":"ohmpi_0001/exec","qos":"2","datatype":"auto","broker":"6ae7e77e.04c64","inputs":0,"x":110,"y":40,"wires":[["ddcc63.c93813a","40efede3.33021c"]]},{"id":"ddcc63.c93813a","type":"debug","z":"ea6628fd.4d57e8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":390,"y":40,"wires":[]},{"id":"40efede3.33021c","type":"ui_text","z":"ea6628fd.4d57e8","group":"64a75353.37700c","order":0,"width":"0","height":"0","name":"MQTT exec","label":"Execution","format":"{{msg.payload}}","layout":"row-spread","x":390,"y":80,"wires":[]},{"id":"64e06023.868f58","type":"mqtt in","z":"ea6628fd.4d57e8","name":"","topic":"ohmpi_0001/data","qos":"2","datatype":"auto","broker":"6ae7e77e.04c64","inputs":0,"x":100,"y":140,"wires":[["ac400b27.992c78","8d7f5d51.c06c4"]]},{"id":"ac400b27.992c78","type":"debug","z":"ea6628fd.4d57e8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":390,"y":140,"wires":[]},{"id":"8d7f5d51.c06c4","type":"ui_text","z":"ea6628fd.4d57e8","group":"64a75353.37700c","order":1,"width":0,"height":0,"name":"MQTT Data","label":"Data","format":"{{msg.payload}}","layout":"row-spread","x":390,"y":180,"wires":[]},{"id":"e1cc28ee.d2dd6","type":"mqtt out","z":"ea6628fd.4d57e8","name":"MQTT ctrl","topic":"ohmpi_0001/ctrl","qos":"0","retain":"false","broker":"6ae7e77e.04c64","x":380,"y":340,"wires":[]},{"id":"a144e7f8.416768","type":"ui_button","z":"ea6628fd.4d57e8","name":"","group":"142ad6ae.d55e29","order":0,"width":"2","height":"1","passthru":false,"label":"Start","tooltip":"","color":"","bgcolor":"green","className":"","icon":"","payload":"start","payloadType":"str","topic":"topic","topicType":"msg","x":70,"y":340,"wires":[["e1cc28ee.d2dd6","4a86345b.fb400c"]]},{"id":"abd65786.c433c8","type":"ui_button","z":"ea6628fd.4d57e8","name":"","group":"142ad6ae.d55e29","order":0,"width":"2","height":"1","passthru":false,"label":"Stop","tooltip":"","color":"","bgcolor":"red","icon":"","payload":"stop","payloadType":"str","topic":"topic","topicType":"msg","x":70,"y":400,"wires":[["e1cc28ee.d2dd6","4a86345b.fb400c"]]},{"id":"4a86345b.fb400c","type":"ui_audio","z":"ea6628fd.4d57e8","name":"","group":"142ad6ae.d55e29","voice":"urn:moz-tts:speechd:English%20(Received%20Pronunciation)?en","always":"","x":380,"y":400,"wires":[]},{"id":"398460c6.27a9e8","type":"mqtt in","z":"ea6628fd.4d57e8","name":"","topic":"ohmpi_0001/soh","qos":"2","datatype":"auto","broker":"6ae7e77e.04c64","inputs":0,"x":100,"y":240,"wires":[["21b85b73.b7ef34","498c2864.b36b18"]]},{"id":"21b85b73.b7ef34","type":"debug","z":"ea6628fd.4d57e8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":390,"y":240,"wires":[]},{"id":"498c2864.b36b18","type":"ui_text","z":"ea6628fd.4d57e8","group":"64a75353.37700c","order":1,"width":0,"height":0,"name":"MQTT SOH","label":"SOH","format":"{{msg.payload}}","layout":"row-spread","x":390,"y":280,"wires":[]},{"id":"3dbcbc0e.3d24ac","type":"ui_form","z":"ea6628fd.4d57e8","name":"Commands","label":"","group":"142ad6ae.d55e29","order":4,"width":0,"height":0,"options":[{"label":"cmd_id","value":"cmd_id","type":"text","required":false,"rows":null},{"label":"cmd","value":"cmd","type":"text","required":true,"rows":null},{"label":"args","value":"args","type":"text","required":false,"rows":null}],"formValue":{"cmd_id":"","cmd":"","args":""},"payload":"","submit":"submit","cancel":"cancel","topic":"topic","topicType":"msg","splitLayout":"","className":"","x":120,"y":640,"wires":[["e1cc28ee.d2dd6","bfc5c3.3e79724"]]},{"id":"bfc5c3.3e79724","type":"ui_text","z":"ea6628fd.4d57e8","group":"64a75353.37700c","order":3,"width":0,"height":0,"name":"","label":"text","format":"{{msg.payload}}","layout":"row-spread","className":"","x":380,"y":640,"wires":[]}] diff --git a/webserver.py b/webserver.py index f9d5dabc..8c0479f5 100644 --- a/webserver.py +++ b/webserver.py @@ -29,6 +29,8 @@ context = zmq.Context() socket = context.socket(zmq.REQ) socket.connect(f'tcp://localhost:{CONTROL_CONFIG["tcp_port"]}') print(colored(f'Sending commands and listenning on tcp port {tcp_port}.')) +#id_sock = socket.getsockopt(zmq.IDENTITY) +#socket.send(id_sock, zmq.SNDMORE) class MyServer(SimpleHTTPRequestHandler): # because we use SimpleHTTPRequestHandler, we do not need to implement @@ -52,19 +54,19 @@ class MyServer(SimpleHTTPRequestHandler): #global ohmpiThread, status, run dic = json.loads(self.rfile.read(int(self.headers['Content-Length']))) rdic = {} # response dictionnary - if dic['command'] == 'start': + if dic['cmd'] == 'start': #ohmpi.measure() socket.send_string(json.dumps({ 'cmd_id': cmd_id, - 'command': 'start' + 'cmd': 'start' })) - elif dic['command'] == 'stop': + elif dic['cmd'] == 'stop': #ohmpi.stop() socket.send_string(json.dumps({ 'cmd_id': cmd_id, - 'command': 'stop' + 'cmd': 'stop' })) - elif dic['command'] == 'getData': + elif dic['cmd'] == 'getData': # get all .csv file in data folder fnames = [fname for fname in os.listdir('data/') if fname[-4:] == '.csv'] ddic = {} @@ -81,10 +83,10 @@ class MyServer(SimpleHTTPRequestHandler): 'rho': df['R [ohm]'].tolist(), } rdic['data'] = ddic - elif dic['command'] == 'removeData': + elif dic['cmd'] == 'removeData': shutil.rmtree('data') os.mkdir('data') - elif dic['command'] == 'update_settings': + elif dic['cmd'] == 'update_settings': #ohmpi.stop() socket.send_string(json.dumps({ 'cmd_id': cmd_id, @@ -106,11 +108,11 @@ class MyServer(SimpleHTTPRequestHandler): print('new sequence set.') print('setConfig', ohmpi.pardict) """ - elif dic['command'] == 'invert': + elif dic['cmd'] == 'invert': pass - elif dic['command'] == 'getResults': + elif dic['cmd'] == 'getResults': pass - elif dic['command'] == 'rsCheck': + elif dic['cmd'] == 'rsCheck': #ohmpi.rs_check() socket.send_string(json.dumps({ 'cmd_id': cmd_id, @@ -123,12 +125,12 @@ class MyServer(SimpleHTTPRequestHandler): 'res': df['RS [kOhm]'].tolist() } rdic['data'] = ddic - elif dic['command'] == 'download': + elif dic['cmd'] == 'download': shutil.make_archive('data', 'zip', 'data') - elif dic['command'] == 'shutdown': + elif dic['cmd'] == 'shutdown': print('shutting down...') os.system('shutdown now -h') - elif dic['command'] == 'restart': + elif dic['cmd'] == 'restart': print('shutting down...') os.system('reboot') else: @@ -141,7 +143,7 @@ class MyServer(SimpleHTTPRequestHandler): message = socket.recv() print('+++////', message) - rdic['data'] = message + rdic['data'] = message.decode('utf-8') """ while False: message = socket.recv() -- GitLab