Upgrade Notes
- Update your boxes. Most of this release runs on the box. Run
lager update --box <box-name>after you upgrade the CLI. - The first update downloads the whole box image. The box image moves to a new Python base image, so every layer changes. Expect a download of about 1 GB per box.
lager nets add-allnames a scope’s instrument netoscilloscope1. It used to name the instrument net and its channel 1 netscope1. Nets that are already saved keep their names. A script that creates nets withadd-alland then uses the instrument net by name must use the new name.lager nets addneeds this CLI to accept aUVC_Camera. Older CLIs refuse the new instrument name.lager nets add-alland the nets TUI accept it from older CLIs.
Features
lager update --forkandlager install --forkdeploy box code from a GitHub fork. Push a branch to your own public fork, then runlager update --box <box> --fork <owner>/<repo> --version <branch>.--versionis required with--fork.- A fork deploy always builds on the box, because pre-built images exist only for release tags.
- The box keeps
lagerdata/lagerasorigin, and the fork’s tags never replace release tags. lager hellomarks the box as a fork build. The next update without--forkreturns the box tolagerdata/lager.
- Any USB video class camera can be a webcam net. Cameras no longer need to be on a list.
lager instrumentslists an unknown camera asUVC_Camerawith its product name. This includes a box’s built-in camera. HDMI capture cards stay out. - Bench multimeters are supported, starting with the Siglent SDM3065X. The new
dmmnet role andlager dmm NET [FUNCTION]take one reading. Functions include DC and AC volts and current, 2- and 4-wire resistance, continuity, diode, frequency, period, capacitance and temperature. The options are--range,--nplcand--sensor. Python scripts useNet.get(name, NetType.DMM).measure(...). - Siglent SPD1168X supplies are supported. The SPD1168X is a single-channel
power-supplynet forlager supply.lager instrumentsandlager nets add-alldetect it over USB (f4ec:1410). Over LAN, create the net withlager nets add-batch, with"instrument": "Siglent_SPD1168X"and aTCPIP::<ip>::INSTRaddress. - Rigol DS1000Z-series scopes (DS1054Z, DS1074Z, DS1104Z) work as scope nets. The scope
daemon reads the model from
*IDN?and drives a DS1000Z over SCPI alone.lager instrumentslists it (1ab1:04ce), andlager scopecontrols it. - The box HTTP API covers more of the Python API. Each new action has a
/statuscapability or a response field, so a client can tell an older box apart. None of these actions has alagercommand yet, and none has run on real instruments.enableanddisableon an e-load net switch its input (eloadInputSwitch).set_esron/battery/commandsets or reads the series-resistance offset (batteryEsr).disable_ocpanddisable_ovpon/supply/commandturn a supply’s protection off (supplyProtectionOff). Setting a limit turns it back on.recoveron/usb/commandreturns theportsthat it powers back on.disconnecton/wifi/commandtakes the box’s wlan interface down until aconnector a host reboot (wifiDisconnect). A box that you reach over that interface goes offline.read,write,notifyandpairon/ble/commandwork on one GATT characteristic (bleGatt).set_modeandcustom_dataon/blufi/commandset an ESP32’s op mode and exchange bytes with it (blufiDeviceMode,blufiCustomData).
Bug Fixes
lager pythonshows why a box refused a run. For an HTTP error, the CLI now prints the reason from the box. It used to print a generic hint, such as “Try again later” for a 503. A box in collected run-record mode that cannot record a run now names the cause and the fix. The box also repairs the ownership of/etc/lager/run_recordswhen it starts.- Webcam nets keep their camera when
/dev/video*numbers change. A net opened the device number that was saved with it, so a different plug-in order could start the wrong camera. The net now finds its camera from its address each time. It reports a missing camera and does not open another one. - Two identical cameras can both be webcam nets. A camera with no serial, or with a
serial that another camera shares, now has its USB port as its address, such as
usb-port:1-1.4. Two of these cameras used to share an address, solager nets addrefused both. /debug/connectuses thetransportthat you ask for. It takesSWDorJTAGand returns the transport that it used. It used to start J-Link and OpenOCD with SWD for every request. A net with its own OpenOCD config keeps the transport from that config.lager nets add-allno longer gives two nets the same name. A scope’s instrument net and its channel 1 net were bothscope1. No new net now reuses a name that the box already holds under another role.
Improvements
- A net with a safety ceiling keeps its protection on. With
max_voltageset, OVP stays on. Withmax_currentset, OCP stays on. The hardware service enforces this, so it also covers a script that calls a driver’s owndisable_*_protectionmethods.
Known Limitations
- The Siglent SPD1168X has no OVP or OCP.
--ovp,--ocp,clear-ovpandclear-ocpreturn an error. Its readings update about every 0.35 s, so a reading soon after a setpoint change shows the old value.

