"MoaT" is an acronym of "Master of all Things", which is either aspirational or just plain pretentious. Take your pick.
If you assume that this repository contains the same stuff as a regular moat, i.e. a lot of water of questionable quality (plus whatever the castle's inhabitants wanted to get rid off), you might not be too far off the mark.
Well, except for the water.
The MoaT code comprises a lot of somewhat-opinionated code to control various IoT devices. Among those are photovoltaics, irrigation, door intercoms, and whatnot.
The core of MoaT is written in anyio-compatible asynchronous Python3, written with Structured Concurrency principles in mind.
Satellite microcontrollers typically run MicroPython, again heavily using structured async code: MicroPython supports taskgroups if you patch it lightly.
Structured Concurrency.
There's a Wikipedia article about it.
A good Pythonic introduction is here.
The MoaT code lives in a single mono-repository.
The MoaT modules once were stored in separate repositories. This however caused too many coordination problems. Thus they were all imported into the main repo, including their history, which is why this repository has way too many initial commits. ;-)
The top module contains the command-line front-end of MoaT. Any
MoaT code that can reasonably be controlled by a command line hooks into
it, by way of a _main
module with a cli
object, which should be an
asyncclick
group (or command).
-
dbus: an async DBus client.
-
gpio: a library to read and write GPIO lines.
-
modbus: an opinionated Modbus client and server library.
-
mqtt: a MQTT broker, client library, and client command line front-ends.
-
wire: a bidirectional link exchanging structured messages, with backends for serial and TCP.
-
micro: Support for MoaT sattelites running MicroPython
-
kv: distributed masterless eventually-consistent key-value storage.
-
ems: Battery management, photovoltaics, …
-
src: MoaT source code management
-
dev: support for specific devices
- pid: a PID controller with anti-wind-up, saveable state, bumpless transfer, and measurement noise suppression.
Moat-KV is a master-less distributed key-value storage system. It is resistant to partitioning and intended to be always-on. It will not block or lose updates in a partitioned network; inconsistent entries are re-synchronized upon reconnection.
"moat.kv" is currently named "distkv". Conversion to MoaT is planned.
-
akumuli: Data storage to Akumuli, an efficient light-weight time series database
-
gpio: Connecting Moat-KV and MoaT-GPIO
-
hass: Use MoaT-KV as the MQTT back-end to Home Assistant
-
inv: Network inventory management (hosts, networks, VLANs, links between hosts)
-
knx: Link with KNX building automation networks
-
owfs: Connecting 1wire sensors
-
wago: A rudimentary interface for WAGO 330 controllers
EMS is an acronym for "Energy Management System".
-
battery: Battery management
-
inv: Inverter management
-
sched: Energy storage scheduling
More will follow.
- heat: example for controlling a home's heating system (heat exchanger, pellet boiler, buffer for hot water and radiator-based heating).
Supporting MoaT is possible via Paypal or bank transfer (DE34430609671145580100, GENODEM1GLS).
Direct support via email or Zoom/Teamviewer is also available. Contact Matthias Urlichs for details.