From 06172f251e18f9425e5eaa639199abbb74447a60 Mon Sep 17 00:00:00 2001 From: Daniel Maslowski Date: Sat, 1 Aug 2020 22:55:32 +0200 Subject: [PATCH 1/4] basic read command Python script --- scripts/bridge.py | 3 +++ scripts/sensors.py | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/scripts/bridge.py b/scripts/bridge.py index ea6169e8..76b57f4a 100755 --- a/scripts/bridge.py +++ b/scripts/bridge.py @@ -187,6 +187,9 @@ def main(): if command == 'SENSORS_SCAN': sensors.scan() + if command == 'SENSORS_READ': + sensors.read() + # -------------------------------- Write block ----------------------------------- if command == 'START_WRITE': diff --git a/scripts/sensors.py b/scripts/sensors.py index 0caf9d4b..55613021 100644 --- a/scripts/sensors.py +++ b/scripts/sensors.py @@ -3,7 +3,7 @@ import sys import threading import time - +from PSL.SENSORS.SHT21 import SHT21 class Sensors: def __init__(self, I, file_write): @@ -39,6 +39,22 @@ def capture_loop(self): if self.active_category == 'SCAN': self.scan() + def read(self): + datetime_data = datetime.datetime.now() + timestamp = time.time() + + sensor = SHT21(self.device.I2C) + data = sensor.getRaw() + + self.file_write.update_buffer( + "SENSORS", timestamp=timestamp, datetime=datetime_data, data='scan', value=data) + time.sleep(0.25) + + output = {'type': 'SENSORS_READ', 'data': data} + print(json.dumps(output)) + sys.stdout.flush() + + def scan(self): datetime_data = datetime.datetime.now() timestamp = time.time() From c7b4f8cfd464261938c1a63312a0c70ee7087672 Mon Sep 17 00:00:00 2001 From: Daniel Maslowski Date: Sat, 1 Aug 2020 23:28:55 +0200 Subject: [PATCH 2/4] frontend part :) --- background_tasks/linker.html | 3 +++ public/electron.js | 5 +++++ scripts/sensors.py | 2 +- src/screen/Sensors/Sensors.js | 35 ++++++++++++++++++++++++++++++++--- src/screen/Sensors/styles.js | 1 + 5 files changed, 42 insertions(+), 4 deletions(-) diff --git a/background_tasks/linker.html b/background_tasks/linker.html index 219e4e69..d6fe24e9 100644 --- a/background_tasks/linker.html +++ b/background_tasks/linker.html @@ -58,6 +58,9 @@ case 'SENSORS_SCAN': ipcRenderer.send('SENSORS_SCAN', { data: parsedJSON.data }); break; + case 'SENSORS_READ': + ipcRenderer.send('SENSORS_READ', { data: parsedJSON.data }); + break; case 'START_MUL_MET': ipcRenderer.send('MUL_MET_DATA', { data: parsedJSON.data, prefix: parsedJSON.prefix }); break; diff --git a/public/electron.js b/public/electron.js index e22f42cb..8048c63c 100644 --- a/public/electron.js +++ b/public/electron.js @@ -245,3 +245,8 @@ getMetaData = path => { time: data[2], }; }; + +// TODO +ipcMain.handle('SENSORS_READ', (event, args) => { + mainWindow.webContents.send('SENSORS_READ', args); +}); diff --git a/scripts/sensors.py b/scripts/sensors.py index 55613021..9861049d 100644 --- a/scripts/sensors.py +++ b/scripts/sensors.py @@ -47,7 +47,7 @@ def read(self): data = sensor.getRaw() self.file_write.update_buffer( - "SENSORS", timestamp=timestamp, datetime=datetime_data, data='scan', value=data) + "SENSOR_DATA", timestamp=timestamp, datetime=datetime_data, data='sensor_data', value=data) time.sleep(0.25) output = {'type': 'SENSORS_READ', 'data': data} diff --git a/src/screen/Sensors/Sensors.js b/src/screen/Sensors/Sensors.js index 33ca1331..645d4ef1 100644 --- a/src/screen/Sensors/Sensors.js +++ b/src/screen/Sensors/Sensors.js @@ -40,9 +40,15 @@ const knownSensors = [ id: 0x68, name: 'MPU6050', }, + { + id: 0x29, + name: 'VL53LXX', // TODO: implement in Python lib + description: 'Time-of-flight', + }, { id: 0x40, name: 'SHT21', + description: 'Temperature and humidity', }, { id: 0x49, @@ -61,7 +67,9 @@ const SensorList = ({ sensors = [], onReadSensor = () => {} }) => ( {sensors.map((item, index) => { return ( onReadSensor(item)}> - {item.name} + + {item.name} {item.description} + ); })} @@ -77,6 +85,7 @@ class Sensors extends Component { isScanned: false, sensorList: [], data: null, + sensorData: null, }; } @@ -96,11 +105,18 @@ class Sensors extends Component { sensorList: filterKnownSensors(args.data), }); }); + ipcRenderer.on('SENSORS_READ', (event, args) => { + this.setState({ + isScanned: true, + sensorData: args.data, + }); + }); // this.getConfigFromDevice(); } componentWillUnmount() { ipcRenderer.removeAllListeners('SENSORS_SCAN'); + ipcRenderer.removeAllListeners('SENSORS_READ'); } getConfigFromDevice = debounce(() => { @@ -118,8 +134,20 @@ class Sensors extends Component { command: 'SENSORS_SCAN', }); }, 500); + + onReadSensor = debounce(sensor => { + // TODO: use sensor and implement switch over it + // TODO: can we find a generic interface? + console.info({ sensor }); + const { isConnected } = this.props; + isConnected && + loadBalancer.sendData(ipcRenderer, 'linker', { + command: 'SENSORS_READ', + }); + }, 500); + render() { - const { data, isScanned, sensorList } = this.state; + const { data, isScanned, sensorList, sensorData } = this.state; return ( @@ -140,12 +168,13 @@ class Sensors extends Component { Detected sensors console.info({ sensor })} + onReadSensor={this.onReadSensor} /> ) : ( No sensors detected ))} + Sensor data:
{JSON.stringify(sensorData)}
Known sensors
{JSON.stringify(data)}
diff --git a/src/screen/Sensors/styles.js b/src/screen/Sensors/styles.js index 3a61b4db..cd0d0d0f 100644 --- a/src/screen/Sensors/styles.js +++ b/src/screen/Sensors/styles.js @@ -5,6 +5,7 @@ export const Container = styled.div` display: flex; flex-direction: column; align-items: center; + background-color: ${props => props.theme.common.white}; `; export const Wrapper = styled.div` From d879b1c43b7e4d363c6c65b3d8f6aacb692ede9a Mon Sep 17 00:00:00 2001 From: Daniel Maslowski Date: Sat, 20 Feb 2021 17:07:57 +0100 Subject: [PATCH 3/4] wip --- scripts/sensors.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/sensors.py b/scripts/sensors.py index 9861049d..4ac61a71 100644 --- a/scripts/sensors.py +++ b/scripts/sensors.py @@ -3,7 +3,8 @@ import sys import threading import time -from PSL.SENSORS.SHT21 import SHT21 +from pslab.external import SHT21 +from pslab.bus import i2c class Sensors: def __init__(self, I, file_write): @@ -43,7 +44,8 @@ def read(self): datetime_data = datetime.datetime.now() timestamp = time.time() - sensor = SHT21(self.device.I2C) + # FIXME! + sensor = SHT21(self.device.i2c) data = sensor.getRaw() self.file_write.update_buffer( From cc81618e9c08a990e6abaeb85990c346bf8dc1d1 Mon Sep 17 00:00:00 2001 From: Daniel Maslowski Date: Sat, 10 Apr 2021 12:53:54 +0200 Subject: [PATCH 4/4] WIP --- src/screen/Sensors/Sensors.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/screen/Sensors/Sensors.js b/src/screen/Sensors/Sensors.js index 645d4ef1..7873cf3e 100644 --- a/src/screen/Sensors/Sensors.js +++ b/src/screen/Sensors/Sensors.js @@ -54,11 +54,16 @@ const knownSensors = [ id: 0x49, name: 'TSL2561', }, + { + id: 0x22, + name: 'GY-906', + }, ]; const filterKnownSensors = (detectedSensors = []) => { // PSL always lists 0 and 96, regardless of whether a sensor is present const filtered = detectedSensors.filter(s => s !== 96 && s !== 0); + console.info({ detected: filtered }); return knownSensors.filter(k => filtered.includes(k.id)); };