OneVariable is working on a new product: Poststation.

GUI screenshot

the Poststation device interface

Poststation is not yet available for purchase. This page is currently a summary of planned features. Information subject to change before launch.

Want early access? Send us an email to contact@onevariable.com

Poststation: The Vision

We've been working on a project called "Poststation", which is the "pro tool toolkit" for postcard and postcard-rpc. Poststation serves as a reverse proxy for devices: the goal is to make it painless to work with multiple embedded devices, and allow you to control, observe, and manage them all from your desktop, a laptop, or embedded linux machines.

Block Diagram

A block diagram of how user programs can talk to devices through Poststation

We want people to build systems where you can have small, simple, microcontrollers that have simple but important jobs: spinning motors, reading sensors, driving LEDs, speaking weird serial protocols. The kind of things that are easy to do in a microcontroller, but harder to do even on embedded linux, and even harder from a high power desktop or laptop.

Instead of trying to make a big computer do little computer things, or trying to shove 10 jobs inside a single microcontroller, where it gets complicated to keep all the plates spinning, you should be able to throw together a couple "so simple it can't go wrong" devices, and let the big computer, with real CPU power, networking, and user interfaces, orchestrate the whole thing.

Just like backend developers use reverse proxies, like NGINX or Apache, to make a fleet of microservices appear like one cohesive system, we want embedded developers to be able to use Poststation to be the glue that ties all of those independent pieces together.

This is going to sound a bit like "microservices for microcontrollers", and it kind of is that! It's easier to build and test a couple simple things, and make sure they work in isolation. But this only works if integrating and coordinating between them is just as easy, or easier, than doing it all in one place.

What Poststation Does For You

Device Communication

Poststation handles all of the communication with your embedded devices. Today, our main interface is USB, since it is fast, commonly available, and supported by relatively cheap embedded systems like the Raspberry Pi RP2xxx devices. Support for other interfaces is planned, like serial ports, SPI, I2C, and RS-485, for when you need something a little lighter or more robust than what USB gives you.

Poststation can enumerate all of the connected devices, and discover all of the capabilities that they offer. This is "Service Discovery". This means you get true "plug and play" capabilities, and if you ever update your devices, Poststation will automatically know what new capabilities you have added.

GUI screenshot

automatically discover devices and their endpoints

It also keeps a rolling history of every message sent to or from your devices, which means you can look back at historical data, decode old messages, or even get a full sequence of events, like looking at a Wireshark capture for ethernet.

All of the management is done by Poststation, which can then act as the "front desk" for the parts of your software that live on the big computer.

User Side

Poststation gives you a couple ways to look at and interact with your connected devices. You can use these for any connected device, and for different stages of your development process

Screenshot of Info Tab

view connected and disconnected devices

TUI application

Today, you can use the TUI - a text user interface, to see an overview of connected devices, the kinds of interfaces they offer, and a live view of any logs or other messages they are sending or receiving. This is all presented in a human readable format - no need for hex editors to look at the binary data!

Screenshot of History Tab

view live and historical logs

Command Line Interface

The CLI, a Command Line Interface, lets you enter data in JSON, and will automatically translate any messages from the device back into JSON, so you can work with it directly as a human, while the device still speaks a compact binary format.

Screenshot of Console Tool

list devices and their states

If you want to put together a quick script to check the hardware is working, or follow the logs, or just poke around, you can use the CLI. This lets you send one-off messages, follow streamed data, or tail the logs of your devices. This is great for quick experimentation!

Screenshot of Console Tool

send individual endpoint messages, or subscribe to a topic

We are also developing a GUI application - a graphical user interface, which will allow you to interactively fill out data to send to your device, as well as view graphs of data over time, and quickly see the status of all of your devices.

Rust users

If you're building your system with Rust on the big computer too, Poststation has an SDK that allows you to programmatically talk with your devices, in a faster and more efficient way than just using command line calls. You can speak the same postcard binary format with the server over a socket, allowing you to send and receive messages from as many tasks, threads, or applications as you'd like, to better match what your system does.

Using the Rust SDK

inside of rust: use native types and a fully async api

Just like with the CLI and TUI, you can also query historical data, which means you don't need to manage buffering of data in every application, you can do things like view trend lines, or even debounce buttons and other events totally in software.

Non-Rust users

Not using Rust for your desktop application? That's fine too! Poststation offers a REST API for all of the functionality we've mentioned, which also supports WebSockets for streaming data to or from your devices.

Screenshot of Python code

use python (or any other language) with the REST api

You can use Python, NodeJS, Go, or any other language which can speak HTTP, and all messages are automatically translated to JSON, making it easy to bridge the gap between embedded systems and any ecosystem

Screenshot of Python code running

run repeatable scripts using Poststation

Poststation for single users

Poststation is aimed at being useful for the entire development cycle, from prototyping to production. For individual developers, we'll be offering a single user version of Poststation as a one-time purchase. This will include all of the features shown above, and will ship with support for Windows, MacOS, and Linux.

Stay tuned for the launch of the single user version of Poststation!

Poststations for companies

We are now offering development previews of Poststation to companies interested in shipping the Poststation server as part of their products and embedded systems. This version includes all features above, and is designed to be shipped as a part of headless devices to manage device communication.

Screenshot of Python code running

run the poststation server as a headless service

Contact us at contact@onevariable.com for pricing and early access details!