{"id":23913,"library":"joulescope","title":"Joulescope","description":"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.","status":"active","version":"1.5.0","language":"python","source_language":"en","source_url":"https://github.com/jetperch/pyjoulescope/","tags":["energy","measurement","hardware","driver","power analyzer"],"install":[{"cmd":"pip install joulescope","lang":"bash","label":"pip install"}],"dependencies":[{"reason":"USB/network driver for Joulescope hardware","package":"pyjoulescope_driver","optional":false},{"reason":"JLS file format reading/writing","package":"pyjls","optional":false},{"reason":"Data processing and array handling","package":"numpy","optional":false},{"reason":"Encryption support for device communication","package":"pymonocypher","optional":false},{"reason":"System resource monitoring","package":"psutil","optional":true}],"imports":[{"note":"The main class is directly in joulescope, not in a submodule.","wrong":"from joulescope.driver import Joulescope","symbol":"Joulescope","correct":"from joulescope import Joulescope"},{"note":"scan is a top-level function in joulescope.","wrong":"from joulescope.scanner import scan","symbol":"scan","correct":"from joulescope import scan"}],"quickstart":{"code":"from joulescope import Joulescope, scan\nimport time\n\ndevice = None\nfor info in scan():\n    if info['brand'] == 'Joulescope':\n        device = Joulescope(info['serial_number'])\n        break\n\nif device is None:\n    print('No Joulescope device found')\nelse:\n    with device:\n        current = device.current()\n        voltage = device.voltage()\n        print(f'Current: {current:.3f} A, Voltage: {voltage:.3f} V')\n        time.sleep(1)","lang":"python","description":"Scan for a Joulescope device and read instantaneous current and voltage."},"warnings":[{"fix":"Upgrade Python to 3.11 or later.","message":"Dropped Python 3.10 support in v1.4.0. Python >=3.11 required.","severity":"breaking","affected_versions":">=1.4.0"},{"fix":"Do not set output_sampling_frequency; it is managed internally.","message":"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`.","severity":"breaking","affected_versions":">=1.2.2"},{"fix":"Use the v1 backend (default). Avoid using v0 functions like `open_v0`.","message":"The v0 backend (old JLS format) is deprecated and may be removed in future versions.","severity":"deprecated","affected_versions":">=1.0.0"},{"fix":"Use `list(scan())` or iterate with `for info in scan():`.","message":"Scan function returns a generator, not a list. Must iterate or convert to list.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Install manually with `pip install pyjoulescope_driver` or reinstall joulescope with `pip install --upgrade joulescope`.","cause":"Missing USB driver package, often on fresh install.","error":"ModuleNotFoundError: No module named 'pyjoulescope_driver'"},{"fix":"Check device connection, install pyjoulescope_driver, and ensure the device is powered on. Use sudo on Linux for USB permissions.","cause":"No Joulescope device detected or driver not installed.","error":"joulescope.exceptions.JoulescopeError: Device not found"},{"fix":"Use `from joulescope import Joulescope`. Upgrade with `pip install --upgrade joulescope`.","cause":"Importing from the wrong submodule or outdated install.","error":"AttributeError: module 'joulescope' has no attribute 'Joulescope'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}