M.A.R-T>Y. was originally intended to be a distributed, low-latency and minimalist home automation engine. Although it can kind of be used for anything!
M.A.R-T>Y. - Matt's Asynchronous Receive + Transmit Yutilities (yes I'm aware of the spelling here) was built based on my want: a minimalist and tweakable home automation engine. I wanted to automate my home, but without all the bloat. I wanted a messaging protocol I understood all the way down to the packet level, and is so simple I can inspect the raw data and immediately know what's going on. Despite these constraints, it still has to be fault-tolerant and versatile - a tricky challenge!
For the first iteration of this the transport layers were chosen to be TCP and UNIX sockets - however a cut-down version of the messaging protocol exists for low-power embedded devices, and a bridge is planned for development. For now consider 'modules' in the home automation engine as UNIX hosts, e.g. desktop Linux computers, Raspberry Pi's or a FreeBSD server (this setup is exactly how I'm running this). Microservices can be run on these modules, which connect to a message broker and are identified by a 3-part key of priority, hostname and service name.
The following microservices are currently finished:
The message broker admiral has been running 24/7 and M.A.R-T>Y. automates my life without major issues so far.
M.A.R-T>Y. is currently undergoing a major refactor and re-architecture, so downloads for the services are not available at the moment, but development builds are available on request. You can download the libraries implementing the protocol from here in the meantime.