Joulescope

raw JSON →
1.5.0 verified Fri May 01 auth: no python

Host driver and utilities for Joulescope™ precision DC energy analyzers (JS110, JS220). Receives real-time sensor data and records to JLS files. Current version 1.5.0, requires Python ~=3.11. Releases occur a few times a year.

pip install joulescope
error ModuleNotFoundError: No module named 'pyjoulescope_driver'
cause Missing USB driver package, often on fresh install.
fix
Install manually with pip install pyjoulescope_driver or reinstall joulescope with pip install --upgrade joulescope.
error joulescope.exceptions.JoulescopeError: Device not found
cause No Joulescope device detected or driver not installed.
fix
Check device connection, install pyjoulescope_driver, and ensure the device is powered on. Use sudo on Linux for USB permissions.
error AttributeError: module 'joulescope' has no attribute 'Joulescope'
cause Importing from the wrong submodule or outdated install.
fix
Use from joulescope import Joulescope. Upgrade with pip install --upgrade joulescope.
breaking Dropped Python 3.10 support in v1.4.0. Python >=3.11 required.
fix Upgrade Python to 3.11 or later.
breaking Removed public setter `Device.output_sampling_frequency` in v1.2.2. The setter never worked as an API and is now a protected function `_output_sampling_frequency_set`.
fix Do not set output_sampling_frequency; it is managed internally.
deprecated The v0 backend (old JLS format) is deprecated and may be removed in future versions.
fix Use the v1 backend (default). Avoid using v0 functions like `open_v0`.
gotcha Scan function returns a generator, not a list. Must iterate or convert to list.
fix Use `list(scan())` or iterate with `for info in scan():`.

Scan for a Joulescope device and read instantaneous current and voltage.

from joulescope import Joulescope, scan
import time

device = None
for info in scan():
    if info['brand'] == 'Joulescope':
        device = Joulescope(info['serial_number'])
        break

if device is None:
    print('No Joulescope device found')
else:
    with device:
        current = device.current()
        voltage = device.voltage()
        print(f'Current: {current:.3f} A, Voltage: {voltage:.3f} V')
        time.sleep(1)