Mycodo
环境调节系统
最新版本: 8.15.13
Mycodo是一款开源软件,适用于Raspberry Pi,可以通过有趣的方式将输入和输出耦合在一起,以感知和操控环境。
|构建状态| |Codacy徽章| |翻译徽章| |DOI|
.. contents:: 目录 :depth: 1
快速安装
先决条件:基于Debian的Linux操作系统(apt)。
推荐:带有通用输入输出(GPIO)引脚的单板计算机(SBC)。
安装命令:
.. code:: bash
curl -L https://kizniche.github.io/Mycodo/install | bash
更多详细信息请参阅"安装Mycodo"部分。
支持
文档
`Mycodo手册 <https://kizniche.github.io/Mycodo>`__
`Mycodo API <https://kizniche.github.io/Mycodo/mycodo-api.html>`__ (版本: v1)
`Mycodo Wiki <https://github.com/kizniche/Mycodo/wiki>`__
`Mycodo自定义模块存储库 <https://github.com/kizniche/Mycodo-custom>`__
讨论
~~~~~~~~~~
`Mycodo问题(错误报告/功能请求) <https://github.com/kizniche/Mycodo/issues>`__
`Mycodo论坛 <https://forum.radicaldiy.com>`__
`Mycodo Discord <https://discord.gg/kmDNky4ZHZ>`__
Mycodo软件中的错误
如果您认为Mycodo软件中存在错误,请首先搜索github上的问题 <https://github.com/kizniche/Mycodo/issues>
,看看您的问题是否已经最近被讨论或解决。如果您的问题是新的或比类似问题更近期,您应该创建一个新问题 <https://github.com/kizniche/Mycodo/issues/new>
。创建新问题时,请务必阅读问题模板中的所有信息并按照说明操作。用所请求的信息替换模板文本(例如,"重现问题的步骤"下的"步骤1"应替换为实际重现问题的步骤)。您提供的信息越多,就越容易重现和诊断问题。如果由于提供的信息不足而无法重现问题,可能会延迟或阻碍解决问题。
捐赠
我一直免费提供Mycodo,并且我不打算改变这一点。但是,如果您觉得Mycodo有用并想支持它的持续开发,请考虑在github.com/sponsors/kizniche <https://github.com/sponsors/kizniche>
__成为赞助人或在kylegabriel.com/donate <https://kylegabriel.com/donate>
__进行捐赠。
特性
输入 <https://kizniche.github.io/Mycodo/Inputs/>
:记录来自传感器、GPIO引脚状态、模数转换器等的测量值(或创建您自己的自定义输入 <https://kizniche.github.io/Mycodo/Inputs/#custom-inputs>
)。查看所有支持的输入 <https://kizniche.github.io/Mycodo/Supported-Inputs-By-Measurement/>
__。输出 <https://kizniche.github.io/Mycodo/Outputs/>
:执行操作,如切换GPIO引脚高/低、生成PWM信号、执行shell脚本和Python代码等(或创建您自己的自定义输出 <https://kizniche.github.io/Mycodo/Outputs/#custom-outputs>
)。查看所有支持的输出 <https://kizniche.github.io/Mycodo/Supported-Outputs/>
__。功能 <https://kizniche.github.io/Mycodo/Functions/>
:执行任务,如以有趣的方式耦合输入和输出,例如PID <https://kizniche.github.io/Mycodo/Functions/#pid-controller>
、条件 <https://kizniche.github.io/Mycodo/Functions/#conditional>
、触发器 <https://kizniche.github.io/Mycodo/Functions/#trigger>
等(或创建您自己的自定义功能 <https://kizniche.github.io/Mycodo/Functions/#custom-functions>
)。查看所有支持的功能 <https://kizniche.github.io/Mycodo/Supported-Functions/>
。Web界面 <https://kizniche.github.io/Mycodo/About/#web-interface>
__:通过在本地网络或世界任何地方的互联网连接上使用网络浏览器安全访问Mycodo,查看和配置系统,包括多种浅色和深色主题。仪表板 <https://kizniche.github.io/Mycodo/Data-Viewing/#dashboard>
:显示可配置的小部件,包括交互式实时和历史图表、仪表、输出状态指示器、测量值等(或创建您自己的自定义小部件 <https://kizniche.github.io/Mycodo/Widgets/#custom-widgets>
)。查看所有支持的小部件 <https://kizniche.github.io/Mycodo/Supported-Widgets/>
__。警报通知 <https://kizniche.github.io/Mycodo/Alerts/>
__:当测量值达到或超过用户指定的阈值时发送电子邮件,对于立即知道问题出现非常重要。设定点跟踪 <https://kizniche.github.io/Mycodo/Methods/>
__:随时间改变PID控制器的设定点,用于terrarium、回流炉、热循环器、sous-vide烹饪等。笔记 <https://kizniche.github.io/Mycodo/Notes/>
__:记录事件、警报和其他重要的时间点,可以叠加在图表上以可视化您的测量数据中的事件。相机 <https://kizniche.github.io/Mycodo/Camera/>
__:用于远程实时流媒体、图像捕获和延时摄影。能源使用测量 <https://kizniche.github.io/Mycodo/Energy-Usage/>
__:计算和跟踪一段时间内的功耗和成本。升级系统 <https://kizniche.github.io/Mycodo/Upgrade-Backup-Restore/>
__:轻松将Mycodo系统升级到最新版本以获取最新功能,或恢复到先前备份的版本。翻译 <https://kizniche.github.io/Mycodo/Translations/>
__:使web界面能够以不同的语言 <https://github.com/kizniche/Mycodo#features>
__呈现。
.. image:: https://kylegabriel.com/projects/wp-content/uploads/sites/3/2020/06/Screenshot_2020-04-25-hydra-Default-Dashboard-Mycodo-8-4-0-dashboard_2.png :target: https://kylegabriel.com/projects/wp-content/uploads/sites/3/2020/06/Screenshot_2020-04-25-hydra-Default-Dashboard-Mycodo-8-4-0-dashboard_2.png
图:自动化水培系统搭建
用途
Mycodo最初是为培育食用蘑菇而开发的,但现在已经发展到可以做更多的事情。以下是使用Mycodo完成的一些事情:
Kyle Gabriel(核心开发者)的项目
- `蘑菇培养自动化 <https://kylegabriel.com/projects/2021/09/mushroom-cultivation-automation.html>`__ (`存档 <https://archive.is/HUtdp>`__)
- `水培系统自动化 <https://kylegabriel.com/projects/2020/06/automated-hydroponic-system-build.html>`__ (`存档 <http://archive.is/mB2zc>`__)
- `蘑菇培养 <https://kylegabriel.com/projects/2015/04/mushroom-cultivation-revisited.html>`__ (`存档 <http://archive.is/J92Xa>`__)
- `地面植物培养 <https://www.youtube.com/watch?v=QNCx_VE7D-8>`__
- `维持蜜蜂养殖场的稳态 <https://kylegabriel.com/projects/2015/12/environmentally-controlled-apiary.html>`__ (`存档 <http://archive.is/RLo6n>`__)
- `维持地下人工蝙蝠洞的湿度 <https://kylegabriel.com/projects/2015/10/artificial-bat-cave.html>`__ (`存档 <http://archive.is/QIJ5G>`__)
- `远程辐射监测和绘图 <https://kylegabriel.com/projects/2019/08/remote-radiation-monitoring.html>`__ (`存档 <http://archive.is/PF44Z>`__)
- `真空低温烹饪 <https://hackaday.io/project/11997-mycodo-environmental-regulation-system/log/45733-sous-vide-pid-tuning-and-the-unexpected-electrical-fire>`__ (`存档 <http://archive.is/Mx52U>`__)
- `维持光照计划和调节湿度 <https://fieldstation.kennesaw.edu/summer-days-2020.php#2020_07_16_gabriel_chestnut>`__,在4周内将湿度从90%逐步降低到50%,以使微繁殖的美国栗树幼苗从实验室环境适应到室外环境 (`存档 <http://archive.is/Jp60P>`__)
特色项目
~~~~~~~
.. image:: https://kylegabriel.com/projects/wp-content/uploads/sites/3/2021/09/MushroomCultivation_512x288.jpg
:target: https://www.youtube.com/watch?v=z41Wy5ZF4O8
.. image:: https://kylegabriel.com/projects/wp-content/uploads/sites/3/2020/07/VID_PROJ_HYDRO_512x288.jpg
:target: https://www.youtube.com/watch?v=nyqykZK2Ev4
其他人的项目
~~~~~~~~~~
- 维护水生系统(如鱼类、水培、水产养殖)
- 维护生态缸、爬虫箱和生态箱环境
- 孵化幼年动物和蛋类
- 陈化奶酪
- 干式熟成、腌制和烟熏肉类 (`链接1 <http://www.charcuterie-worst.nl/forum/index.php/topic,425.0.html>`__ (`存档 <http://archive.is/NHKqp>`__), `链接2 <https://www.floriske.nl/wordpress/2019/06/meat-curing-cabinet/>`__ (`存档 <https://archive.ph/57ouJ>`__))
- 发酵啤酒、食品和烟草
- 控制回流焊炉
- 培养微生物
- `处理农业废水 <https://projects.sare.org/project-reports/gne17-158/>`__ (`存档 <http://archive.is/enJQs>`__, `出版物 <https://pubs.acs.org/doi/pdf/10.1021/acsestwater.0c00234>`__)
- ...等等
如果你使用Mycodo的方式有所不同,`请告诉我 <https://kylegabriel.com/contact/>`__,我可能会将其添加到这个列表中。
截图
----
访问Wiki的 `截图 <https://github.com/kizniche/Mycodo/wiki/Screenshots>`__ 页面。
安装Mycodo
---------
前提条件
~~~~~~
必需:
- 基于Debian的操作系统
- 活跃的互联网连接
推荐:
- `树莓派 <https://www.raspberrypi.org>`__ 单板计算机:3、4或5(不再推荐Zero、1和2)
- `树莓派操作系统 <https://www.raspberrypi.com/software/>`__ 刷入微型SD卡或SSD
Mycodo已经在树莓派OS 12(Bookworm版本)上进行了测试,包括Lite和Desktop版本,32位和64位。
安装命令
~~~~~~
一旦树莓派启动,登录并在终端中运行以下命令,将Mycodo安装到/opt/Mycodo:
.. code:: bash
curl -L https://kizniche.github.io/Mycodo/install | bash
安装注意事项
~~~~~~~~~~
确保安装脚本无错误完成。安装输出日志将创建在 ``/opt/Mycodo/install/setup.log``。
如果安装成功,可以通过在网络浏览器中导航到 ``https://127.0.0.1/`` 来访问Web用户界面,将 ``127.0.0.1`` 替换为你安装系统的IP地址。首次访问时,系统会提示你创建一个管理员用户,然后重定向到登录页面。登录后,检查页面左上角的时间是否正确。不正确的时间可能会导致时间序列数据库中的测量存储和检索出现一系列问题。另外,确保页面左上角的主机名和版本号为绿色,表示守护进程正在运行。如果是红色,则表示守护进程处于非活动状态或无响应。最后,确保禁用浏览器的任何Java阻止插件,以便Web界面的所有部分都能正常运行。
如果在安装过程中遇到错误,你认为这阻碍了系统正常运行,请 `创建一个问题 <https://github.com/kizniche/Mycodo/issues>`__,并附上安装日志。如果你想先尝试自己诊断问题,请参阅 `诊断问题 <#diagnosing-issues>`__。
系统会收集一些最小的匿名使用统计数据,以帮助改进开发。不会保存任何可识别的信息,收集的信息仅用于改进Mycodo。除开发团队外,没有人能访问这些信息,这些信息也永远不会被出售。收集的数据主要是使用了哪些功能以及使用频率,以及其他类似信息。可以在 ``设置 -> 常规`` 页面的"查看收集的统计数据"链接中查看收集的数据。如果你想关闭此功能,可以在常规设置页面上选择退出。
测量数据库
~~~~~~~~
Mycodo目前支持InfluxDB作为存储测量数据的时间序列数据库。支持1.x版本(用于32位系统)和2.x版本(用于64位系统)。在安装过程中,系统会提示你安装1.x、2.x或不安装(如果你希望自己设置,无论是本地还是远程)。安装后可以重新配置数据库设置。
Docker
~~~~~~
Docker支持仍处于实验阶段,但如果你想尝试,请阅读docker `README.md <https://github.com/kizniche/Mycodo/blob/master/docker/README.md>`__。还有一个 `Docker问题(#637) <https://github.com/kizniche/Mycodo/issues/637>`__ 在github上,欢迎那些希望帮助开发的人参与。
REST API
--------
最新的API文档可以在这里找到:`API信息 <https://kizniche.github.io/Mycodo/API/>`__ 和 `API端点文档 <https://kizniche.github.io/Mycodo/mycodo-api.html>`__。
关于PID控制
----------
比例-积分-微分(PID)控制器是一种在工业中广泛使用的控制回路反馈机制,用于控制系统。它能有效地将可测量的条件(如温度)调整到所需状态(设定点)。一个调校良好的PID控制器可以快速达到设定点,几乎不会出现过冲,并能以很小的振荡维持设定点。
顶部图表展示了温度调节的过程。红线是设定的目标温度(设定点),已被配置为每天变化。蓝线是实际记录的温度。绿色垂直条表示每20秒周期内加热器的激活时间。这种调节仅通过最小的调整就实现了,并且已经显示出与设定点的极小偏差(±0.5摄氏度)。进一步调整可以进一步减少这种变化。
有关更多信息,请参阅手册中的PID控制器和PID调优部分。
支持的输入和输出
所有支持的输入、输出和其他设备可以在手册的支持设备部分找到。
自定义输入、输出、功能、动作和小部件
Mycodo支持导入自定义输入、输出、功能、动作和小部件模块。你可以在手册的自定义输入、自定义输出、自定义功能、自定义动作和自定义小部件部分找到更多相关信息。
如果你想增加支持的输入、输出、功能、动作和小部件列表,请提交包含你创建的模块的拉取请求或开启一个新问题。
此外,我还有另一个专门用于自定义模块的GitHub仓库,这些模块不一定适合内置集合,默认情况下不包含在Mycodo中,但可以导入。这些可以在kizniche/Mycodo-custom找到。
链接
感谢使用和支持Mycodo,但根据你获取这份文档的位置,你可能没有最新版本或者文档可能已被更改,如果不是从官方发布网站获取的话。你应该能在GitHub上找到最新版本。
许可证
请参阅License.txt
Mycodo是自由软件:你可以根据自由软件基金会发布的GNU通用公共许可证的条款重新分发或修改它,可以选择使用该许可证的第3版或(由你选择)任何更新的版本。
Mycodo的分发希望它能有用,但不提供任何保证;甚至不提供适销性或特定用途适用性的隐含保证。更多详细信息,请参阅GNU通用公共许可证。
GNU通用公共许可证的完整副本可以在http://www.gnu.org/licenses/gpl-3.0.en.html找到。
这个软件包含第三方开源软件组件。请查看各个文件中的许可信息(如果适用)。
语言
Mycodo已被翻译成多种语言。现在使用Weblate,所以任何人都可以为翻译做出贡献。但是,由于新增加的语言数量不断增加且未被翻译,只有完成度至少达到50%的语言才会被包含在Mycodo的翻译选项中。
安装脚本会提示你选择一种语言。这将是你首次打开Web用户界面时设置的语言。你可以稍后在设置页面的"[齿轮图标] -> 配置 -> 一般 -> 语言"中更改这个设置。
如果你想为翻译做出贡献,可以在http://translate.kylegabriel.com上进行。请阅读"如何为Mycodo的语言翻译做出贡献"以获取更多信息。
致谢
Mycodo的实现在一定程度上要归功于下面这些优秀的开源库。
- `Alembic <https://alembic.sqlalchemy.org>`__
- `Argparse <https://pypi.org/project/argparse>`__
- `Bcrypt <https://pypi.org/project/bcrypt>`__
- `Bootstrap <https://getbootstrap.com>`__
- `Daemonize <https://pypi.org/project/daemonize>`__
- `Date Range Picker <https://github.com/dangrossman/daterangepicker>`__
- `Distro <https://pypi.org/project/distro>`__
- `Email_Validator <https://pypi.org/project/email_validator>`__
- `Filelock <https://pypi.org/project/filelock>`__
- `Flask <https://pypi.org/project/flask>`__
- `Flask_Accept <https://pypi.org/project/flask_accept>`__
- `Flask_Babel <https://pypi.org/project/flask_babel>`__
- `Flask_Compress <https://pypi.org/project/flask_compress>`__
- `Flask_Limiter <https://pypi.org/project/flask_limiter>`__
- `Flask_Login <https://pypi.org/project/flask_login>`__
- `Flask_Marshmallow <https://pypi.org/project/flask_marshmallow>`__
- `Flask_Profiler <https://github.com/muatik/flask-profiler>`__
- `Flask_RESTX <https://pypi.org/project/flask_restx>`__
- `Flask_Session <https://pypi.org/project/flask_session>`__
- `Flask_SQLAlchemy <https://pypi.org/project/flask_sqlalchemy>`__
- `Flask_Talisman <https://pypi.org/project/flask_talisman>`__
- `Flask_WTF <https://pypi.org/project/flask_wtf>`__
- `FontAwesome <https://fontawesome.com>`__
- `Geocoder <https://pypi.org/project/geocoder>`__
- `gridstack.js <https://github.com/gridstack/gridstack.js>`__
- `Gunicorn <https://gunicorn.org>`__
- `Highcharts <https://www.highcharts.com>`__
- `importlib_metadata <https://github.com/python/importlib_metadata>`__
- `InfluxDB <https://github.com/influxdata/influxdb>`__
- `influxdb <https://github.com/influxdata/influxdb-python>`__
- `influxdb_client <https://github.com/influxdata/influxdb-client-python>`__
- `jQuery <https://jquery.com>`__
- `Marshmallow_SQLAlchemy <https://pypi.org/project/marshmallow_sqlalchemy>`__
- `Pyro5 <https://github.com/irmen/Pyro5>`__
- `SQLAlchemy <https://www.sqlalchemy.org>`__
- `SQLite <https://www.sqlite.org>`__
- `toastr <https://github.com/CodeSeven/toastr>`__
- `Werkzeug <https://palletsprojects.com/p/werkzeug/>`__
- `WTForms <https://pypi.org/project/wtforms>`__
.. |构建状态| image:: https://github.com/kizniche/Mycodo/actions/workflows/main.yml/badge.svg
:target: https://github.com/kizniche/Mycodo/actions/workflows/main.yml
.. |Codacy徽章| image:: https://app.codacy.com/project/badge/Grade/bb5ffc43e4444231b813ca6e81359336
:target: https://www.codacy.com/gh/kizniche/Mycodo/dashboard?utm_source=github.com&utm_medium=referral&utm_content=kizniche/Mycodo&utm_campaign=Badge_Grade
.. |翻译徽章| image:: https://translate.kylegabriel.com/widgets/mycodo/-/svg-badge.svg
:target: https://translate.kylegabriel.com/engage/mycodo/
.. |翻译表格| image:: https://translate.kylegabriel.com/widgets/mycodo/-/multi-auto.svg
:target: https://translate.kylegabriel.com/engage/mycodo/
.. |DOI| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.824199.svg
:target: https://doi.org/10.5281/zenodo.824199
.. |Mycodo| image:: https://kylegabriel.com/projects/wp-content/uploads/sites/3/2016/05/Mycodo-3.6.0-tango-Graph-2016-05-21-11-15-26.png
:target: https://kylegabriel.com/projects/