# Decatur Makers Machine Access Control (dm-mac)
[![Project Status: Concept – Minimal or no implementation has been done yet, or the repository is only intended to be a limited example, demo, or proof-of-concept.](https://www.repostatus.org/badges/latest/concept.svg)](https://www.repostatus.org/#concept)
[![Tests](https://github.com/jantman/machine_access_control/workflows/Tests/badge.svg)](https://github.com/jantman/machine_access_control/actions?workflow=Tests)
This is a software and hardware project for using RFID cards/fobs to control use of various power tools and equipment in the [Decatur Makers](https://decaturmakers.org/) makerspace. It is made up of custom ESP32-based hardware (machine control units) controlling power to each enabled machine and running ESPHome, and a central access control/management/logging server application written in Python/Flask. Like our [“glue” server](https://github.com/decaturmakers/glue) that powers the RFID-based door access control to the makerspace, dm-mac uses the [Neon CRM](https://www.neoncrm.com/) (or a local flat-file when in development mode) as its backend datastore.
## Software Components
At a high level, the system is made up of the central control server and the ESPHome configuration for the ESP32’s.
### Control Server
This is a Python/Flask application that provides authentication and authorization for users via RFID credentials, control of the ESP32-based machine control units;, and logging and monitoring as well as basic management capabilities.
**Why not use the Glue server?** First, because the glue server is currently running in a cloud hosting provider. That makes sense for its purpose, but less so for direct control of physical machines in our space. We want the machine access control system to always function, regardless of the state of our Internet connection, with low latency. We also aren’t concerned about reliability through a power outage, as that will also prevent the controlled machines from working. Secondly, having the business logic contained in a central server with relatively “dumb” machine control units on the machines allows for simpler management of the system.
### Machine Control Unit Software
The machine control units run ESPHome, because it is well-supported with an active community, requires minimal programming (just a YAML configuration), and allows updating and managing many devices wirelessly from a central point. The machine control units (and their ESPHome configuration) are relatively simple - they just react to events (RFID card insertion or removal, button press, or a timer ticking), send their current state to the control server via a HTTP POST, and receive a response with the intended state of their outputs (control relay, LCD screen, LEDs). All of the logic of the system is contained in the central control server.
In the event of an extended control server outage, special event, or other exigent circumstance, the machine control unit software is configured with a list of permanently-authorized RFID cards that will enable the machine without requiring authorization from the control server.
## Installation
It's recommended to install and run via Docker. Details TBD.
## Contributing and Development
Contributions are very welcome. To learn more, see the [Contributor Guide](https://github.com/jantman/machine_access_control/blob/main/CONTRIBUTING.md).
## License
Distributed under the terms of the [MIT license](https://github.com/jantman/machine_access_control/blob/main/LICENSE), _Machine_Access_Control_ (`dm_mac`) is free and open source software.
Raw data
{
"_id": null,
"home_page": "https://github.com/jantman/machine_access_control",
"name": "machine_access_control",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.12",
"maintainer_email": null,
"keywords": null,
"author": "Jason Antman",
"author_email": "jason@jasonantman.com",
"download_url": "https://files.pythonhosted.org/packages/91/c5/cb7315025cf5c09a76cc2b67ef826f208ebb03d36f2eac4c0cb8fb62890b/machine_access_control-0.1.0.tar.gz",
"platform": null,
"description": "# Decatur Makers Machine Access Control (dm-mac)\n\n[![Project Status: Concept \u2013 Minimal or no implementation has been done yet, or the repository is only intended to be a limited example, demo, or proof-of-concept.](https://www.repostatus.org/badges/latest/concept.svg)](https://www.repostatus.org/#concept)\n[![Tests](https://github.com/jantman/machine_access_control/workflows/Tests/badge.svg)](https://github.com/jantman/machine_access_control/actions?workflow=Tests)\n\nThis is a software and hardware project for using RFID cards/fobs to control use of various power tools and equipment in the [Decatur Makers](https://decaturmakers.org/) makerspace. It is made up of custom ESP32-based hardware (machine control units) controlling power to each enabled machine and running ESPHome, and a central access control/management/logging server application written in Python/Flask. Like our [\u201cglue\u201d server](https://github.com/decaturmakers/glue) that powers the RFID-based door access control to the makerspace, dm-mac uses the [Neon CRM](https://www.neoncrm.com/) (or a local flat-file when in development mode) as its backend datastore.\n\n## Software Components\n\nAt a high level, the system is made up of the central control server and the ESPHome configuration for the ESP32\u2019s.\n\n### Control Server\n\nThis is a Python/Flask application that provides authentication and authorization for users via RFID credentials, control of the ESP32-based machine control units;, and logging and monitoring as well as basic management capabilities.\n\n**Why not use the Glue server?** First, because the glue server is currently running in a cloud hosting provider. That makes sense for its purpose, but less so for direct control of physical machines in our space. We want the machine access control system to always function, regardless of the state of our Internet connection, with low latency. We also aren\u2019t concerned about reliability through a power outage, as that will also prevent the controlled machines from working. Secondly, having the business logic contained in a central server with relatively \u201cdumb\u201d machine control units on the machines allows for simpler management of the system.\n\n### Machine Control Unit Software\n\nThe machine control units run ESPHome, because it is well-supported with an active community, requires minimal programming (just a YAML configuration), and allows updating and managing many devices wirelessly from a central point. The machine control units (and their ESPHome configuration) are relatively simple - they just react to events (RFID card insertion or removal, button press, or a timer ticking), send their current state to the control server via a HTTP POST, and receive a response with the intended state of their outputs (control relay, LCD screen, LEDs). All of the logic of the system is contained in the central control server.\n\nIn the event of an extended control server outage, special event, or other exigent circumstance, the machine control unit software is configured with a list of permanently-authorized RFID cards that will enable the machine without requiring authorization from the control server.\n\n## Installation\n\nIt's recommended to install and run via Docker. Details TBD.\n\n## Contributing and Development\n\nContributions are very welcome. To learn more, see the [Contributor Guide](https://github.com/jantman/machine_access_control/blob/main/CONTRIBUTING.md).\n\n## License\n\nDistributed under the terms of the [MIT license](https://github.com/jantman/machine_access_control/blob/main/LICENSE), _Machine_Access_Control_ (`dm_mac`) is free and open source software.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Decatur Makers Machine Access Control package",
"version": "0.1.0",
"project_urls": {
"Changelog": "https://github.com/jantman/machine_access_control/releases",
"Documentation": "https://github.com/jantman/machine_access_control",
"Homepage": "https://github.com/jantman/machine_access_control",
"Repository": "https://github.com/jantman/machine_access_control"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "02032350b2b500d5231d6a5e64d96da714bcb0a2f7f1a7240adfaa2d0c47410e",
"md5": "8818da5dfaa2a085b9e57a82d5647773",
"sha256": "d9562a4f0a4bb305404344b5cb16fc4071388d6304381bc7c8d95d0223ad9843"
},
"downloads": -1,
"filename": "machine_access_control-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8818da5dfaa2a085b9e57a82d5647773",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.12",
"size": 6518,
"upload_time": "2024-08-04T19:28:31",
"upload_time_iso_8601": "2024-08-04T19:28:31.847629Z",
"url": "https://files.pythonhosted.org/packages/02/03/2350b2b500d5231d6a5e64d96da714bcb0a2f7f1a7240adfaa2d0c47410e/machine_access_control-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "91c5cb7315025cf5c09a76cc2b67ef826f208ebb03d36f2eac4c0cb8fb62890b",
"md5": "0686e588314b33c299840c0f06ce6be7",
"sha256": "e59395063402208acc157e87b1ab1123a0b07ce9d3bd10d1db9b4ea3e85dec67"
},
"downloads": -1,
"filename": "machine_access_control-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "0686e588314b33c299840c0f06ce6be7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.12",
"size": 5609,
"upload_time": "2024-08-04T19:28:33",
"upload_time_iso_8601": "2024-08-04T19:28:33.468737Z",
"url": "https://files.pythonhosted.org/packages/91/c5/cb7315025cf5c09a76cc2b67ef826f208ebb03d36f2eac4c0cb8fb62890b/machine_access_control-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-08-04 19:28:33",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "jantman",
"github_project": "machine_access_control",
"github_not_found": true,
"lcname": "machine_access_control"
}