From f1d2cb408df44b208e02bb3c5bdfa16dfa778fd2 Mon Sep 17 00:00:00 2001 From: Guillaume <sagitta1618@gmail.com> Date: Wed, 2 Nov 2022 22:00:06 +0100 Subject: [PATCH] improving index-mqtt.html putting cmd_id as part of kwargs --- index-mqtt.html | 63 +++++++++++++++++++++++++++++++++++-------------- ohmpi.py | 13 +++++----- 2 files changed, 51 insertions(+), 25 deletions(-) diff --git a/index-mqtt.html b/index-mqtt.html index 3eae4a52..1ee100c3 100755 --- a/index-mqtt.html +++ b/index-mqtt.html @@ -145,11 +145,14 @@ let callbacks = {} // store callback (might not be needed) // function with MQTT - let topic = '/World' - let hostname = 'localhost' + let topic = 'ohmpi_0001' // we could change this through a drop-down to connect to a different ohmpi + let topic_ctrl = topic + '/ctrl' + let topic_exec = topic + '/exec' + let topic_data = topic + '/data' + let hostname = location.hostname let port = 9001 let clientId = 'ohmpi_0001_html' - + let message = null // create client client = new Paho.MQTT.Client(hostname, port, clientId); @@ -159,28 +162,42 @@ function onConnect() { console.log("onConnect") - client.subscribe(topic) + client.subscribe(topic_data) + client.subscribe(topic_exec) + + // send welcome message message = new Paho.MQTT.Message("Hello from index.html") - message.destinationName = topic + message.destinationName = topic_ctrl client.send(message) } function onConnectionLost(responseObject) { if (responseObject.errorCode !== 0) - console.log("onConnectionLost:"+responseObject.errorMessage) + console.log("onConnectionLost:" + responseObject.errorMessage) } function onMessageArrived(message) { - console.log("onMessageArrived:"+message.payloadString) + console.log("onMessageArrived:" + message.payloadString) try { - let response = JSON.parse(message.payloadString) - console.log('response=', response) - // check ID of message against our dictionnary of callback - let cmd_id = response['cmd_id'] - if (callbacks.hasOwnProperty(cmd_id)) { - console.log('++ execute callback') - callbacks[cmd_id](response['content']) // execute callback + let payload = message.payloadString + if (message.topic == topic_data) { + // process data + console.log('DATA', payload) + // usually these don't have a cmd_id so we are not sure when + + } else if (message.topic == topic_exec) { + // display it in the log + console.log('EXEC LOG:', payload) } + + // let response = JSON.parse(message.payloadString) + // console.log('response=', response) + // // check ID of message against our dictionnary of callback + // let cmd_id = response['cmd_id'] + // if (callbacks.hasOwnProperty(cmd_id)) { + // console.log('++ execute callback') + // callbacks[cmd_id](response['content']) // execute callback + // } } catch (e) { console.log(e) } @@ -188,6 +205,14 @@ } // useful functions + function generateUniqSerial() { + return 'xxxx-xxxx-xxx-xxxx'.replace(/[x]/g, (c) => { + const r = Math.floor(Math.random() * 16); + return r.toString(16); + }); + } + + // sending commands to the OhmPi function sendCommand(query, callback=null) { // dic in the form: {'cmd': X, ...} as JSON if (callback == null) { @@ -211,19 +236,19 @@ */ // generate a unique command id to be associated with the commands - let uuid = crypto.randomUUID() + let uuid = generateUniqSerial() commands[uuid] = query callbacks[uuid] = callback // store the callback to be processed later when message arrives let payload = '{"cmd_id": "' + uuid + '",' + query.slice(1) console.log('sendCommand()', payload) message = new Paho.MQTT.Message(payload) - message.destinationName = topic + message.destinationName = topic_ctrl client.send(message) } // run button function runBtnFunc() { - sendCommand('{"cmd": "run_sequence"}', function(x) { + sendCommand('{"cmd": "run_multiple_sequences"}', function(x) { console.log(x['status']) if (x['status'] == 'running') { output.innerHTML = 'Status: measuring...' @@ -258,7 +283,9 @@ function configCallback() { sendCommand(JSON.stringify({ 'cmd': 'update_settings', - 'config': formVals + 'kwargs': { + 'config': formVals + } }), function(x) { console.log('update_settings', x) }) diff --git a/ohmpi.py b/ohmpi.py index 6db7b4c1..d3cacfcb 100644 --- a/ohmpi.py +++ b/ohmpi.py @@ -872,15 +872,13 @@ class OhmPi(object): return d - def run_multiple_sequences(self, cmd_id=None, sequence_delay=None, nb_meas=None, **kwargs): + def run_multiple_sequences(self, sequence_delay=None, nb_meas=None, **kwargs): """Runs multiple sequences in a separate thread for monitoring mode. Can be stopped by 'OhmPi.interrupt()'. Additional arguments are passed to run_measurement(). Parameters ---------- - cmd_id : - sequence_delay : int, optional Number of seconds at which the sequence must be started from each others. nb_meas : int, optional @@ -916,7 +914,7 @@ class OhmPi(object): self.thread = threading.Thread(target=func) self.thread.start() - def run_sequence(self, cmd_id=None, **kwargs): + def run_sequence(self, **kwargs): """Runs sequence synchronously (=blocking on main thread). Additional arguments are passed to run_measurement(). """ @@ -962,9 +960,9 @@ class OhmPi(object): self.switch_mux_off(quad) # add command_id in dataset - acquired_data.update({'cmd_id': cmd_id}) + # acquired_data.update({'cmd_id': cmd_id}) // in run_measurement() # log data to the data logger - # self.data_logger.info(f'{acquired_data}') + # self.data_logger.info(f'{acquired_data}') // in run_measurement() # save data and print in a text file self.append_and_save(filename, acquired_data) self.exec_logger.debug(f'quadrupole {i + 1:d}/{n:d}') @@ -1177,7 +1175,8 @@ class OhmPi(object): def set_sequence(self, sequence=None): try: - self.sequence = np.loadtxt(StringIO(sequence)).astype('uint32') + self.sequence = np.array(sequence) + #self.sequence = np.loadtxt(StringIO(sequence)).astype('uint32') status = True except Exception as e: self.exec_logger.warning(f'Unable to set sequence: {e}') -- GitLab