HotLoop Flow 2.8.0 release notes
HotLoop Flow 2.8.0 adds four things to FlowLab, the diagram tab for test benches and data loggers: analysis nodes, a data acquisition node for NI hardware, an MQTT output that keeps what the broker misses, and a TDMS log. Flows run exactly as they did, a flow file you have today loads and saves byte for byte, and a tab that isn’t a diagram doesn’t see any of it.
What’s new
Section titled “What’s new”Analysis. Four nodes work on an array of readings: statistics (mean, RMS, smallest, largest and standard deviation), integral (the area under the array by the trapezoid rule, as one number or as a running area), derivative (the slope at each sample), and a Butterworth filter of order 1 to 10 as a lowpass, highpass, bandpass or bandstop, with the cutoff in hertz. The code is in internal/diagram/dsp, with tests against values worked out by hand.
A data acquisition node. read DAQ task reads samples from NI hardware, such as a CompactDAQ chassis, through NI’s gRPC Device Server. The client is about as small as it can be: Go’s own HTTP/2 with hand-written messages, so the binary didn’t take on a gRPC library. NI’s published protocol definitions are in third_party/ni-grpc-device under their license, with a notice in NOTICE.
An MQTT output that loses nothing. mqtt out publishes through the broker the flow file configures, the same connection the MQTT nodes use. Mark it durable and a message the broker misses is written to disk before the node finishes and sent, oldest first, when the broker is back, even across a restart. Nothing overtakes anything waiting ahead of it. Its sent output says whether the message went straight out.
A TDMS log. log to TDMS file appends a record to a TDMS file, one channel per field, and the file opens in the tools a lab already has. The reader and writer are in internal/tdms, pure Go, written from NI’s public format documentation and none of their code. A file whose last write was cut short by a power loss still reads up to the last whole value.
What changed
Section titled “What changed”- There are now 28 node types in the FlowLab section of the palette, up from 21, and the README says so.
- A test that fails in the CI collector step now prints its output. A step that failed once in the 2.7.1 run printed nothing, and the cause was the collector test comparing a span before the log it reads had all of it; it waits for the whole span now. The OPC UA simulator in CI listens on 4840 and not 50000, a port the kernel hands to outgoing connections. Two more tests were made to wait for what they check. None of that ships.
- The README’s pictures were retaken so the top bar says v2.8.0.
- FlowLab grew by about 290 KB in the binary, 41,402,530 bytes at 2.7.0 and 41,693,346 with these four, built the same way on The Beast. The binary and image sizes in the README were read again for this release.
New settings
Section titled “New settings”None.
Upgrade
Section titled “Upgrade”On amd64, a plain helm upgrade to the 2.8.0 image and chart, or the new tag in your Quadlet unit. On arm64, stay where you are until 2.8.1, which is this release with arm64 added and nothing else. Nothing happens on first start and there is nothing to migrate.
What isn’t proven
Section titled “What isn’t proven”The TDMS reader and writer have not been run against a file written by NI’s own software, because I had none. They are checked against the byte layouts in NI’s documentation, against my own writer, with fuzzing, and by reading a file this writer made with nptdms 1.13.0, an independent library used as a black box.
The DAQ node has not been run against NI’s server or any NI hardware. It is tested against a stand-in server that speaks the same protocol, written from NI’s definitions, and a stand-in proves the messages, not the device.
The durable MQTT output can deliver a message twice when a send timed out while the client still believed the link was up, and I forced that on a real broker to check the count. It never loses one that I could make it lose.
What a FlowLab diagram can’t do yet: a case structure, records and shared types, waveforms, instrument sessions, sub-diagrams, serial flow control, hotloop-flow test and CI checks for diagrams, event handlers, an operator only panel, a panel layout editor, and a diagram as an MCP tool.
Image: ghcr.io/hotloop-io/hotloop-flow:2.8.0, linux/amd64 only. I build amd64 first, let it read stable in production, and then one small 2.8.1 with nothing else in it adds arm64. Until then the 2 tag holds the new amd64 image and the arm64 image from 2.7.1, so a box on arm64 that follows 2 or 2.7 keeps what it has, and a box pinned to 2.8.0 needs amd64. Chart: https://hotloop.io/hotloop-flow/. The README at this tag has the rest, with pictures: https://github.com/HotLoop-io/hotloop-flow/blob/v2.8.0/README.md