Software developers on hardware teams don’t usually have infrastructure to build their custom software on. They have to work with dozens of data acquisition devices to get data into a single database. Oftentimes, they have to use several different solutions to communicate with different devices: LabVIEW for National Instruments hardware, ROS for robotics, and SCADA software for PLCs.
There’s no good “glue” that lets you coordinate all of these devices together. Developers end up using tools like Apache Kafka for streaming and InfluxDB for storage, but these tools are hard to get working with hardware, plus it’s a pain to configure these tools to also record and stream data whenever commands are sent to control hardware.
This forces developers to repeatedly build adapters to get data off hardware devices and manage separate systems for real-time streaming, data storage, and hardware control.
I (Emiliano) discovered this problem while working as a test engineer at an aerospace company. We used old control software that spit out data in massive 10 GB CSV or TDMS files. After a long day and night of testing, no one wanted to go through all the work to review the data.
One day, I was operating the system, and a very expensive component failed, causing a multi-million dollar test stand to explode. After many days of data review, we found a small anomaly that indicated a component defect.
I then got fascinated by this problem, and moved into a software engineering role to improve their data pipeline. After I left this job and went back to school, I spent most of my time skipping classes to build Synnax, eventually meeting Patrick and Elham.
Synnax has several main parts. We have a custom time series-database that was designed to be horizontally scalable and fault-tolerant. The database can deploy in an OS or in a container. Every sensor and actuator can fit into a “channel” that can be written to using our client libraries in C++, Python, and TypeScript.
When writing to a channel the server both persists it to the database and streams it for real-time consumption for any type of service, such as a GUI, automated post-processing tools, and supervisory control sequences.
Finally, we’ve built a React component library that simplifies the process of making a GUI, a visualization and control desktop application, and pre-built device integrations for National Instruments hardware and PLCs via OPC UA.
We think Synnax is unique in that it provides a bridge between existing solutions like ROS, LabVIEW, and SCADA software and general purpose tools like Apache Kafka or InfluxDB.
Synnax is source-available on a BSL 1.1 license (GitHub: https://github.com/synnaxlabs/synnax, documentation: https://docs.synnaxlabs.com). Usage of the software is free for up to 50 channels. We aren’t yet sure on what pricing to settle on—we’ve talked about doing only usage-based implementation or also adding an implementation cost.
If this sounds interesting to you, please check us out! You can follow through on our documentation website (https://docs.synnaxlabs.com) to deploy a database and download the desktop visualization dashboard.
We’d really love to hear your feedback and look forward to all of the comments!