# The MoaT
"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.
## Seriously …
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 what?
Structured Concurrency.
There's a [Wikipedia article](https://en.wikipedia.org/wiki/Structured_concurrency) about it.
A good Pythonic introduction is [here](https://vorpus.org/blog/notes-on-structured-concurrency-or-go-statement-considered-harmful/).
## Repository Structure
The MoaT code is built using git submodules, corresponding to separate
`moat-XXX` packages.
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).
The only mandatory submodule is "util". It contains a heap of
semi-structured helper code which the rest of the MoaT infrastructure
depends on. "moat-util" also has a command line; it serves as a convenient
example for building your own extension, and exports a
time-until-absolute-date calculator and a msgpack codec.
## Modules
### Libraries
* 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
### MoaT parts
* main, util: See above.
* kv: distributed masterless eventually-consistent key-value storage.
* ems: Battery management, photovoltaics, …
* src: MoaT source code management
### MoaT-KV components
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.
* kv-akumuli: Data storage to [Akumuli](https://docs.akumuli.org/), an
efficient light-weight time series database
* kv-gpio: Connecting Moat-KV and MoaT-GPIO
* kv-hass: Use MoaT-KV as the MQTT back-end to Home Assistant
* kv-inv: Network inventory management (hosts, networks, VLANs, links between hosts)
* kv-knx: Link with KNX building automation networks
* kv-owfs: Connecting 1wire sensors
* kv-wago: A rudimentary interface for WAGO 330 controllers
### MoaT-EMS components
EMS is an acronym for "Energy Management System".
* ems-battery: Battery management
* ems-inv: Inverter management
* ems-sched: Energy storage scheduling
More will follow.
Raw data
{
"_id": null,
"home_page": "",
"name": "moat",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "",
"keywords": "MoaT",
"author": "",
"author_email": "Matthias Urlichs <matthias@urlichs.de>",
"download_url": "https://files.pythonhosted.org/packages/c4/a3/27b179645b7ef8a38dd3ecddac5b4f29a3615af9a331d53f56de5ea4d130/moat-0.3.6.tar.gz",
"platform": null,
"description": "# The MoaT\n\n\"MoaT\" is an acronym of \"Master of all Things\", which is either\naspirational or just plain pretentious. Take your pick.\n\nIf you assume that this repository contains the same stuff as a regular\nmoat, i.e. a lot of water of questionable quality (plus whatever the\ncastle's inhabitants wanted to get rid off), you might not be too far off\nthe mark.\n\nWell, except for the water.\n\n\n## Seriously \u2026\n\nThe MoaT code comprises a lot of somewhat-opinionated code to control\nvarious IoT devices. Among those are photovoltaics, irrigation, door\nintercoms, and whatnot.\n\nThe core of MoaT is written in anyio-compatible asynchronous Python3,\nwritten with Structured Concurrency principles in mind.\n\nSatellite microcontrollers typically run MicroPython, again heavily using\nstructured async code: MicroPython supports taskgroups if you patch it\nlightly.\n\n\n### Structured what?\n\nStructured Concurrency.\n\nThere's a [Wikipedia article](https://en.wikipedia.org/wiki/Structured_concurrency) about it.\n\nA good Pythonic introduction is [here](https://vorpus.org/blog/notes-on-structured-concurrency-or-go-statement-considered-harmful/).\n\n\n## Repository Structure\n\nThe MoaT code is built using git submodules, corresponding to separate\n`moat-XXX` packages.\n\nThe top module contains the command-line front-end of MoaT. Any\nMoaT code that can reasonably be controlled by a command line hooks into\nit, by way of a `_main` module with a `cli` object, which should be an\n`asyncclick` group (or command).\n\nThe only mandatory submodule is \"util\". It contains a heap of\nsemi-structured helper code which the rest of the MoaT infrastructure\ndepends on. \"moat-util\" also has a command line; it serves as a convenient\nexample for building your own extension, and exports a\ntime-until-absolute-date calculator and a msgpack codec.\n\n\n## Modules\n\n### Libraries\n\n* dbus: an async DBus client.\n\n* gpio: a library to read and write GPIO lines.\n\n* modbus: an opinionated Modbus client and server library.\n\n* mqtt: a MQTT broker, client library, and client command line front-ends.\n\n* wire: a bidirectional link exchanging structured messages,\n with backends for serial and TCP.\n\n* micro: Support for MoaT sattelites running MicroPython\n\n\n### MoaT parts\n\n* main, util: See above.\n\n* kv: distributed masterless eventually-consistent key-value storage.\n\n* ems: Battery management, photovoltaics, \u2026\n\n* src: MoaT source code management\n\n\n### MoaT-KV components\n\nMoat-KV is a master-less distributed key-value storage system. It is\nresistant to partitioning and intended to be always-on. It will not block\nor lose updates in a partitioned network; inconsistent entries are\nre-synchronized upon reconnection.\n\n\"moat.kv\" is currently named \"distkv\". Conversion to MoaT is planned.\n\n* kv-akumuli: Data storage to [Akumuli](https://docs.akumuli.org/), an\n efficient light-weight time series database\n\n* kv-gpio: Connecting Moat-KV and MoaT-GPIO\n\n* kv-hass: Use MoaT-KV as the MQTT back-end to Home Assistant\n\n* kv-inv: Network inventory management (hosts, networks, VLANs, links between hosts)\n\n* kv-knx: Link with KNX building automation networks\n\n* kv-owfs: Connecting 1wire sensors\n\n* kv-wago: A rudimentary interface for WAGO 330 controllers\n\n\n### MoaT-EMS components\n\nEMS is an acronym for \"Energy Management System\".\n\n* ems-battery: Battery management\n\n* ems-inv: Inverter management\n\n* ems-sched: Energy storage scheduling\n\nMore will follow.\n",
"bugtrack_url": null,
"license": "The code in this repository, and all MoaT submodules it refers to, is part of the MoaT project. Unless a submodule's LICENSE.txt states otherwise, all included files are licensed under the LGPL V3, as published by the FSF at https://www.gnu.org/licenses/lgpl-3.0.html . In addition to the LGPL's terms, the author(s) respectfully ask all users of this code to contribute any bug fixes or enhancements. Also, please link back to https://M-o-a-T.org. Thank you. Copyright \u00a9 2021 ff.: the MoaT contributor(s), as per the git changelog(s). ",
"summary": "The command line for MoaT",
"version": "0.3.6",
"project_urls": {
"homepage": "https://m-o-a-t.org",
"repository": "https://github.com/M-o-a-T/moat"
},
"split_keywords": [
"moat"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "4c5d8fed0b46ea08b2ae05a639887734f412e5e00d2858a8953a6288416544c2",
"md5": "9de9845c2fe235b4961f2e6aa0bf7ba9",
"sha256": "c054edb1c79fb03cbe469432b9a4a319876d74ffde9b88bdaee98086d830beff"
},
"downloads": -1,
"filename": "moat-0.3.6-py3-none-any.whl",
"has_sig": false,
"md5_digest": "9de9845c2fe235b4961f2e6aa0bf7ba9",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 6849,
"upload_time": "2024-01-07T16:05:54",
"upload_time_iso_8601": "2024-01-07T16:05:54.247735Z",
"url": "https://files.pythonhosted.org/packages/4c/5d/8fed0b46ea08b2ae05a639887734f412e5e00d2858a8953a6288416544c2/moat-0.3.6-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c4a327b179645b7ef8a38dd3ecddac5b4f29a3615af9a331d53f56de5ea4d130",
"md5": "01b639d0a0928322277b6157f971daa4",
"sha256": "9468a79947c084cdef3f77d00b46b7750b6a1b397ee790ef9987b72f80139a93"
},
"downloads": -1,
"filename": "moat-0.3.6.tar.gz",
"has_sig": false,
"md5_digest": "01b639d0a0928322277b6157f971daa4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 9405,
"upload_time": "2024-01-07T16:05:55",
"upload_time_iso_8601": "2024-01-07T16:05:55.343421Z",
"url": "https://files.pythonhosted.org/packages/c4/a3/27b179645b7ef8a38dd3ecddac5b4f29a3615af9a331d53f56de5ea4d130/moat-0.3.6.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-01-07 16:05:55",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "M-o-a-T",
"github_project": "moat",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [],
"lcname": "moat"
}