Connected Devices
An unattended service that turns machine tests into clean data
an industrial materials manufacturer
On the production line of an industrial materials manufacturer, a test machine wrote a new spreadsheet for every run and spoke to its controller over serial and OPC-UA. DigitalBorders built the unattended service that reads the machine, parses each result the moment it lands, and ships it to the cloud — and the dashboard the engineers review it in.
- Electron
- serialport
- OPC-UA
- Appwrite
- React
- TypeScript
Context
The manufacturer runs quality tests on a machine on the production line. Every test writes a spreadsheet into a folder, and the machine itself is driven and queried over an industrial bus. The results were piling up as files on a PC, read one at a time by hand. The manufacturer wanted every test centralized and reviewable — without anyone standing at the line to make it happen.
Problem
The test data was trapped at the edge, in two formats neither of which was made for a web backend.
- The machine speaks two protocols, neither of them HTTP — a serial link and an OPC-UA server. Reaching its status and readings means talking both.
- The results arrive as files. One spreadsheet per test, dropped into a folder at unpredictable times. Polling on a timer wastes effort and still risks missing one; missing one isn't acceptable.
- It has to run unattended on a factory PC. No operator to start it, restart it after a reboot, or push an update — and a floor PC reboots, loses the network, and is generally a hostile place for software to keep running.
- Native modules have to actually load. Serial and OPC-UA access depend on native bindings that have to survive being packaged into a desktop app.
Approach
We built the edge service as an Electron desktop app that lives on the floor PC. It launches itself on boot and updates itself in place, so no one walks over to tend it. The native bindings it needs — serialport for the serial link and OPC-UA for the controller — are packaged so they load reliably inside the app.
The service reads the machine directly over both serial and OPC-UA, and it watches the results folder rather than polling it: the moment a test writes a new spreadsheet, the service parses it and pushes the structured result to an Appwrite backend. Nothing is checked on a timer, and nothing is missed.
Engineers review every test in a React dashboard backed by the same Appwrite project — searchable and charted — instead of opening files on the line. One team owned the firmware-adjacent edge service, the backend, and the dashboard, so a reading taken off the machine flows to a chart without a handoff in between.
Outcome
Every test the machine runs lands in one place, parsed and queryable, seconds after it finishes — no operator, no manual file handling. The service survives the reboots and network drops of a factory PC and updates itself when we ship a change, so the line keeps reporting without anyone tending the software that makes it happen.