I recently did another Lab equipment upgrade (video to follow on Element14presents) and wanted to get access to the new devices via my network. this quickly got a bit out of hand.
It's called lab_UI and it's a browser-based control and data-logging panel that talks to your hardware over your local network — no proprietary software, no USB drivers, just Python and a web browser.
All devices are connected via an ethernet hub to my local network.
GitHub: https://github.com/mayermakes/lab_UI

The project has two main parts:
lab_api — a Python driver package with one module per instrument. Each driver handles the raw network communication (TCP for the PSU and DMM, UDP for the DC Load) and exposes clean Python methods: set voltage, enable output, take a measurement, and so on.
server.py + lab_control.html — a Flask server that wraps those drivers as a REST API, and a single-file HTML/JS frontend that talks to it. You run the server on the machine that's physically connected to your network (or the same bench PC), then open the UI from any browser on the same LAN — laptop, tablet, whatever.
How it works technically
When you start server.py, it binds to port 5000 and initialises a DeviceManager that holds references to all three drivers. Connections to the instruments are lazy — the TCP/UDP sockets aren't opened until the first actual API call hits that device. If a socket drops mid-session it resets and retries once before returning an HTTP 500, so transient network hiccups don't kill your session.
All three devices and the HTML frontend are served from that single port. The API follows a clean REST structure:
- PSU endpoints live under
/api/psu/channel/<1–4>/...— you can set voltage, set current limit, toggle output, and read back actual values per channel independently. - Multimeter endpoints are under
/api/mm/measure/<mode>— modes includedc_voltage,ac_voltage,dc_current,ac_current,resistance,continuity,diode,capacitance, andfrequency. - DC Load endpoints are under
/api/dcload/— you set the operating mode (CC, CV, CP, or CR), send a setpoint, engage/disengage the load, and read back measured voltage and current.
Thread safety is handled with a threading.Lock around all driver access, so the auto-polling frontend (which can fire requests every 1, 2, 5, or 10 seconds across all three devices simultaneously) won't cause race conditions.
The live chart in the UI plots PSU voltage, PSU current, DMM reading, load voltage, and load current on a shared time axis, keeping up to 120 samples. You can hide individual series, clear history, or export everything as a CSV at any time.
There's also a Config Manager that saves complete instrument setups — server URL, all setpoints, modes, and channel selection — to browser localStorage and lets you export/import them as JSON. Handy for quickly switching between recurring test configurations.
Practical measurement scenarios
Here are a few workflows where having all three instruments coordinated like this actually changes how you work:
PSU output characterisation / load regulation Set the PSU to a target rail (say 5 V / 2 A on CH1), put the DC Load in CC mode at a series of current steps, and watch the PSU's actual output voltage in the live chart. The load current readback and PSU voltage readback are plotted together, so you can see how much the rail sags under load without manually writing anything down. Export to CSV and you've got a load-regulation curve.
Battery / supercapacitor discharge profiling Put the device under test between the PSU (as a charge source on a separate channel) and the DC Load in CC or CP mode. Poll voltage and current at your chosen rate and the live chart builds a discharge curve in real time. The CSV export gives you the raw data for further analysis.
Power supply efficiency testing Use the multimeter in DC voltage mode to measure input voltage at a precise point (useful when you need a third measurement point independent of the PSU's own readback), and use the load to set the output power demand. With all three polled simultaneously at the same rate, you get correlated input/output measurements for computing efficiency.
Multi-rail DUT bring-up The PSU has four independent channels. You can configure each rail (e.g. 3.3 V, 5 V, 12 V, −12 V) with its own current limit, save that as a named config, and bring them all up in sequence without touching the instrument front panel. If something trips a current limit you'll see it immediately in the chart.
Automated script testing via the REST API Because the whole thing is just HTTP, you can drive it from a Python script, a Jupyter notebook, or even a shell script with curl. The API reference in the repo documents every endpoint with request/response examples. This makes it easy to build simple parametric sweeps — iterate a voltage setpoint, trigger a measurement, log the result — without needing VISA or any instrument-specific library on the client.
You can try an example via demo.py in this repo.
It should be quite easy to add drivers for more Instruments / include them in the UI, but of course a rewrite to a more "modular" UI will likely be the next step ( in case I aquire more gear to Automate)
currently MP711001 PSU , MP730027 DMM, MP71077x DC Load are supported. the Driver for an Arbitrary Waveform generator is only working for channel 1 at the moment.
maybe someone reading this post knows how to correctly address channel 2 https://github.com/mayermakes/MP750513_python
https://github.com/mayermakes/MP750513_python/tree/multi-channel
Obviously the whole project made use of Ai for writing docs etc. the device drivers took a lot of manual tweaking as the devices all behave a bit differently and use different protocols but getting Ai tools to write test scripts that try out possible command structures for SCPI commands helped a lot. this apporach might work for many other devices, so Ideally I hope people contribute drivers for their own devices over time.
Hope this helps.
Clem



