Mycodo Environmental Monitoring
This lab explores automated environmental monitoring and regulation using a single-board computer platform to construct a complete data acquisition and feedback automation system. Students interface digital and analog sensors, relays, and actuators using standard expansion buses such as I2C, SPI, and UART alongside general-purpose input-output pins. By recording environmental variables such as temperature, humidity, and atmospheric parameters into a time-series database, students configure real-time telemetry dashboards and REST API endpoints. Through hands-on experimentation, students implement closed-loop control algorithms, including proportional-integral-derivative (PID) regulation, to actively stabilize environmental conditions. The lab teaches core competencies in embedded systems, digital sensor integration, time-series data logging, automated actuator switching, and control systems engineering.
Uploaded by demo on 2026-09-03 · ready · Electronics · Original source ↗
Files: README.rst · install_requirements.txt
Readiness checks
-
complete 2026-09-03 18:32 🛡 Cybersecurity: Review before networking · 10 findings 6 searches · 9 pagesview · PDF
Latest report — 2026-09-03 18:32
Readiness: Mycodo Environmental Monitoring
Verdict: Ready with caveats · 2026-09-03 · est. parts cost $126–$340 Cybersecurity — software & network: Review before networking
This is the cold check for this lab — there is no previous readiness report, so the prices and sellers below establish the baseline that future checks will measure drift against. The bill of materials is unusually small: the Mycodo distribution ships no PCB files, no schematics and no component-level parts list, so the only hardware this lab strictly requires is a Raspberry Pi single-board computer and a storage card, both mass-produced commodity items available today from many independent sellers. Nothing is discontinued, out of stock or unobtainable, and no substitute is needed. The caveats are about ordering carefully rather than about scarcity: the cheapest search results are starter kits and Compute Modules rather than bare boards, most listings do not state RAM size or card capacity, the same Raspberry Pi 5 board spans $175 to $290 across sellers, and Raspberry Pi's own product pages block automated fetching so no manufacturer-side price or production-longevity statement is on this run's record. Sensors, relay boards and actuators are explicitly user-selected in this lab and are not part of the checked bill of materials.
Action required
None — all checked parts are sourceable.
Cybersecurity — software & network
Review before networking — Every dependency the project pins was checked and only minor, non-applicable advisories came back, but the web interface runs as root behind a self-signed certificate and the InfluxDB release is unpinned, so the device should be isolated and reviewed before it goes on a shared network.
| Component | Version | How known | Support status |
|---|---|---|---|
| Mycodo Environmental Regulation System | 8.17.0 | inferred (stated in the lab's README.rst per the snapshot; README.rst was not re-fetched this run, and the upstream repository's default branch (master) is the 8.17.0 line) | — |
| Raspberry Pi OS (Debian 13 ‘Trixie’ base) | 13 | inferred (stated in the lab's README.rst per the snapshot; not re-fetched this run) | supported until 2028-08-09 |
| InfluxDB — 2.x line (installer default on 64-bit) | 2 | inferred (install/setup.sh offers “Install Influxdb 2.x (recommended)” and pins no patch release (fetched/02-setup.sh)) | supported |
| InfluxDB — 1.x line (required on 32-bit hosts) | 1 | inferred (install/setup.sh offers “Install Influxdb 1.x” and pins no patch release (fetched/02-setup.sh)) | supported |
| Flask | 3.1.2 | read from project (pinned in install/requirements.txt (fetched/01-requirements.txt)) | — |
| Werkzeug | 3.1.4 | read from project (pinned in install/requirements.txt (fetched/01-requirements.txt)) | — |
| gunicorn | 23.0.0 | read from project (pinned in install/requirements.txt (fetched/01-requirements.txt)) | — |
| requests | 2.32.5 | read from project (pinned in install/requirements.txt (fetched/01-requirements.txt)) | — |
| setuptools | 80.9.0 | read from project (pinned in install/requirements.txt (fetched/01-requirements.txt)) | — |
| filelock | 3.20.1 | read from project (pinned in install/requirements.txt (fetched/01-requirements.txt)) | — |
| Flask_Talisman | 1.1.0 | read from project (pinned in install/requirements.txt (fetched/01-requirements.txt)) | — |
| Flask_Login | 0.6.3 | read from project (pinned in install/requirements.txt (fetched/01-requirements.txt)) | — |
| bcrypt | 5.0.0 | read from project (pinned in install/requirements.txt (fetched/01-requirements.txt)) | — |
| pyro5 | 5.16 | read from project (pinned in install/requirements.txt (fetched/01-requirements.txt)) | — |
| influxdb_client[ciso] | 1.49.0 | read from project (pinned in install/requirements.txt (fetched/01-requirements.txt)) | — |
| SQLAlchemy | 2.0.45 | read from project (pinned in install/requirements.txt (fetched/01-requirements.txt)) | — |
| SQLite | not determined | not determined (no version is stated in the lab's documentation; SQLite is supplied by the host OS) | — |
| Bundled frontend web assets (Bootstrap, Date Range Picker, FontAwesome, gridstack.js, Highcharts, jQuery, toastr) | not determined | not determined (acknowledged in README.rst without version numbers; vendored into the distribution) | — |
| Component | Finding | Severity | Fix available? |
|---|---|---|---|
| filelock 3.20.1 | A time-of-check/time-of-use symlink flaw in SoftFileLock lets someone with a local account on the Pi redirect a lock file, which matters most on a shared classroom device. — GHSA-qmgc-5h2g-mvrw | moderate | No — project pins filelock==3.20.1; the fix is in 3.20.3. |
| requests 2.32.5 | The advisory describes insecure reuse of a temporary file inside the extract_zipped_paths() helper — a local issue on the device, not something reachable from the web interface. — GHSA-gc5v-m9x4-r6x2 | moderate | No — project pins requests==2.32.5; the fix is in 2.33.0. |
| setuptools 80.9.0 | The advisory covers a MANIFEST.in exclusion bypass when building source distributions on macOS filesystems; this lab installs on Raspberry Pi OS and does not build source distributions. — GHSA-h35f-9h28-mq5c | moderate | No — project pins setuptools==80.9.0; the fix is in 83.0.0. |
| Werkzeug 3.1.4 | Both advisories concern Werkzeug's safe_join() accepting Windows special device names, so they cannot be triggered on the Linux host this lab runs on. — GHSA-29vq-49wr-vm6x, GHSA-87hc-h4r5-73f7 | moderate | No — project pins Werkzeug==3.1.4; the fixes are in 3.1.5 and 3.1.6. |
| Flask 3.1.2 | Flask omits a “Vary: Cookie” header on some session accesses, so a caching proxy placed in front of the web interface could hand one user's page to another. — GHSA-68rp-wp8r-4726 | low | No — project pins Flask==3.1.2; the fix is in 3.1.3. |
| HTTPS certificate | The installer generates the HTTPS certificate itself and nginx serves it from the application's own ssl_certs directory, so the certificate is self-signed: browsers will warn, and nothing proves to a user on the network that they reached the right device. | posture | Mitigation only — expect the browser warning, or replace the generated certificate with one issued by the institution. |
| InfluxDB | The installer lets the user choose the 1.x or 2.x line but pins no specific release, so whatever patch version the vendor repository serves on install day is what runs and its security state cannot be checked from the project files. | posture | Mitigation only — record the installed version after setup (influxd version) and keep the database port reachable only from the host. |
| Installation method | Mycodo is installed by downloading a script from kizniche.github.io and running it with root privileges, so the install trusts whatever that URL serves on the day it is run. | posture | Mitigation only — download the installer, read it, and run it from a checked-out release rather than piping it straight into a shell. |
| Mycodo web interface (Gunicorn/Flask) | The systemd unit that runs the web interface sets User=root, so the whole web application runs with full administrative rights on the device. | posture | Mitigation only — keep the device on its own isolated lab network segment and off any open or campus-wide network. |
| nginx site configuration | The bundled nginx site listens on plain HTTP port 80 as well as HTTPS port 443 with no redirect in the server block; the HTTPS-only behaviour the documentation describes comes from Flask_Talisman inside the application rather than from the web server. | posture | Mitigation only — confirm the HTTP-to-HTTPS redirect actually fires before connecting the device to a shared network. |
What this means for your lab
Mycodo puts a web dashboard on the network that can switch relays and read every sensor the lab is wired to, and the service behind that dashboard runs as root on the Raspberry Pi. Anyone who can reach the device's address and get past the login can therefore turn outputs on and off, read and export the logged data, and change the automation rules; if they got past the web application itself they would have the whole device. The good news is that Mycodo does not ship a default password — it makes you create the admin account on first visit — so set a strong one at that prompt and do not reuse it. The HTTPS certificate is generated by the installer rather than issued by anyone, so your browser will warn you and there is nothing to confirm you are talking to the right board; treat that as normal here but do not rely on it to protect a password on an untrusted network. The dependency versions the project pins are current enough that the only advisories found are minor ones that do not apply to a Linux device or are not reachable from the web interface, and the operating system is still in support. The practical advice: put the Pi on an isolated lab network or VLAN rather than the general campus network, talk to campus IT before giving it a routable address, note the InfluxDB version the installer chooses so it can be checked later, and review the install script before running it as root.
Not checked
- Mycodo application code (8.17.0): no vulnerability database covers the Mycodo project itself, so only its Python dependencies were checked, never the application's own code
- SQLite: no version is stated in the lab's documentation, so no advisory lookup was possible
- Bundled frontend web assets (Bootstrap, Date Range Picker, FontAwesome, gridstack.js, Highcharts, jQuery, toastr): vendored into the distribution with no version numbers recorded, so no advisory lookup was possible
- Flask_Profiler 1.8.1: commented out in install/requirements.txt, so it is not installed and was not checked
- Debian system packages installed by apt: install/setup.sh delegates package installation to mycodo/scripts/upgrade_commands.sh, which was not fetched this run; their versions come from the Debian repositories rather than the project
Parts
Bill of Materials
| Part | Spec/Package | Status | Stock | Price | Source |
|---|---|---|---|---|---|
| Raspberry Pi Single Board Computer (Model 3, 4 or 5) | 85 × 56 mm SBC, 40-pin 2.54 mm male header; 5.0 V DC in (micro-USB on Pi 3, USB-C on Pi 4/5); 3.3 V CMOS GPIO, not 5 V tolerant | readily available | not reported by retail listings | $100.00 — Pi 4 Model B, DigiKey · $289.99 — Pi 5 8GB, Micro Center | Google Shopping, 2026-09-03 |
| Host Storage Medium (MicroSD card or SSD) | MicroSD Class 10 / UHS-I or better, 16 GB minimum; high-endurance recommended for continuous logging | readily available | not reported by retail listings | $25.98 — SanDisk High Endurance, Walmart (Newegg Inc.) | Google Shopping, 2026-09-03 |
Raspberry Pi — what the search actually returned. Bare-board listings: $175.00 PiShop USA, $199.00 AAAwave, $210.00 Elecrow and $289.99 Micro Center for the Pi 5, and $100.00 DigiKey for the Pi 4 Model B. Only the Micro Center row states its RAM (8 GB) — Google Shopping ignored the "8GB" in the query, so check RAM on the seller's page before ordering. Cheaper hits are not bare boards: $61.05 Vilros and $121.95 Neobits are starter kits, and the Compute Module 5 ($165.00) and CM4 ($105.99) that also appeared are a different form factor with no 40-pin header — they do not meet this lab's footprint requirement.
MicroSD — what the search actually returned. $25.98 SanDisk High Endurance, $30.37 Kingston High Endurance, $35.99 SanDisk MAX Endurance, $39.00 Transcend High Endurance 350V and $50.10 Kingston at Best Buy. No listing states its capacity in the title, so pick 32 GB or larger at the seller. A $20.99 generic Class 10 card also appeared — it is not a high-endurance part, and continuous 24/7 sensor logging is exactly the write pattern high-endurance cards exist for.
Substitutes
None needed.
Other dependencies
- Fabrication: not required. The snapshot records no PCB design files, Gerber archives, drill files or mechanical drawings in this upload; assembly is connecting off-the-shelf sensor and relay modules to the Raspberry Pi.
- Upstream source repository — https://github.com/kizniche/Mycodo: reachable this run. Listed successfully via the GitHub API; default branch
master, 14 entries at the repository root. - Installer URL — https://kizniche.github.io/Mycodo/install: reachable this run. Responded with a 1449-byte payload (Content-Type
application/octet-stream). - Custom module repository — https://github.com/kizniche/Mycodo-custom: not checked — not dispatched this run; optional for the base lab.
- Documentation site — https://kizniche.github.io/Mycodo and https://kizniche.github.io/Mycodo/mycodo-api.html: not checked — not dispatched this run.
- Community translation platform — http://translate.kylegabriel.com: not checked — not dispatched this run; it is not required to run the lab, and it is a plain-HTTP host.
- Raspberry Pi official product pages — https://www.raspberrypi.com/products/raspberry-pi-5/ and .../raspberry-pi-4-model-b/: could not be fetched. Both were attempted and returned nothing (the site blocks automated fetching), so official pricing, the board's power-supply rating and any production-longevity commitment are not on this run's record. The electrical constraints in this report come from the lab's own snapshot.
Watch list
- Raspberry Pi 5 price spread. $175 to $290 for the same board across sellers this run — the widest variance in the whole bill of materials, and the number most likely to have moved by the next check. Budget from a bare-board listing, not from the cheapest search hit.
- Kit-versus-board confusion. Several of the lowest-priced results are starter kits or Compute Modules. If a future check reports a sudden price drop, verify it is still the same product before trusting it.
- Raspberry Pi 4 Model B availability. Priced here at $100.00, but it is the older generation of a family whose current model is the Pi 5; worth re-checking that bare Pi 4 boards are still stocked at retail rather than only appearing inside kits.
- RAM and capacity opacity. Retail listings for both bill-of-materials lines routinely omit RAM size and card capacity, so drift measurement on these two rows is only as good as the listing titles. Treat a large price change as a prompt to re-read the listing.
- No distributor-side data on either line. Neither part carries a manufacturer part number in the snapshot, so there is no lifecycle status or stock figure behind these verdicts — only retail listings. A future check would gain a lot from recording the DigiKey part numbers for the specific Raspberry Pi variants this lab standardises on.
Snapshot What the lab depended on when it was uploaded — the baseline the readiness checks research against.
This lab implements the Mycodo Environmental Regulation System (version 8.17.0), an open-source software and hardware automation suite designed for environmental monitoring, data logging, and closed-loop control (such as PID regulation for temperature, humidity, and atmospheric conditions). The hardware platform is based around a commercial off-the-shelf single-board computer (SBC)—specifically the Raspberry Pi family—interfacing with peripheral sensors, analog-to-digital converters, relays, and actuators via hardware General-Purpose Input-Output (GPIO) pins and serial buses. The system runs on a 5.0 V DC primary power rail supplied to the SBC via micro-USB or USB-C, with standard 3.3 V DC logic levels across the 40-pin GPIO expansion interface for digital communication (I2C, SPI, UART, PWM). Attached peripherals and switching elements in real-world deployments operate across 3.3 V, 5.0 V, or external AC/DC mains voltages, though no custom peripheral PCB schematics or circuit layouts are included in the source distribution.
Bill of Materials
The project distribution contains no custom printed circuit board files, CAD models, schematic sheets, or component-level hardware BOM files. All hardware requirements specified in the documentation are commercial off-the-shelf host computing equipment and media. Sensor, relay, and driver circuits are modular and user-selected; no specific circuit references (R, C, D, Q, U) exist in the provided package.
Raspberry Pi Single Board Computer
- Identity: Raspberry Pi Foundation, Model 3, 4, or 5 (Raspberry Pi 3 Model B/B+, Raspberry Pi 4 Model B, or Raspberry Pi 5). Models Zero, 1, and 2 are explicitly noted as deprecated and not recommended.
- Quantity: 1
- Footprint/package: Standard Raspberry Pi SBC form factor (approx. 85 mm x 56 mm) with standard 40-pin 2.54 mm pitch GPIO male header.
- Electrical constraints: Supply input: 5.0 V DC (2.5 A to 5.0 A depending on board revision: micro-USB on Pi 3, USB-C on Pi 4 and 5). Interface logic: 3.3 V CMOS logic across all 40 GPIO pins (non-5V tolerant).
- Substitution latitude: Any Raspberry Pi 3, 4, or 5 board. Raspberry Pi Zero, 1, and 2 are deprecated due to processing and memory constraints. Other Linux SBCs running Debian can run Mycodo if GPIO bindings are adapted, but Raspberry Pi 3/4/5 is the tested and supported target.
- Control check: Host computing platform; not a student-operated manual adjustment during runtime.
- Sourcing plan: retail shopping search: Raspberry Pi 4 Model B or Raspberry Pi 5
Host Storage Medium (MicroSD Card or Solid-State Drive)
- Identity: MicroSD Flash Card (Class 10 / UHS-I or higher) or USB/PCIe Solid-State Drive (SSD)
- Quantity: 1
- Footprint/package: MicroSD standard form factor (15 mm x 11 mm x 1 mm) or external 2.5-inch / M.2 enclosure connected via USB/PCIe.
- Electrical constraints: 3.3 V supply via MicroSD socket or 5.0 V via USB. Capacity must accommodate the Debian OS, InfluxDB database, Python virtual environment, and measurement logs (minimum 16 GB recommended).
- Substitution latitude: Any standard high-endurance MicroSD card or SSD compatible with Raspberry Pi bootloader.
- Control check: Non-operated storage medium.
- Sourcing plan: retail shopping search: microSD card 32GB Class 10 UHS-I
Software and network dependencies
Host Operating System:
- Name: Raspberry Pi OS (Debian Linux base, release 13 "Trixie", Lite or Desktop editions, supporting 32-bit and 64-bit architectures)
- Repository/Download: Raspberry Pi Foundation / Debian project (https://www.raspberrypi.com/software/)
- Version: "13 (Trixie release)"
- Where the version came from: stated in documentation (README.rst)
- Version pinning: Stated in documentation as the tested distribution; minor packages track Debian repository updates.
- Check plan: support-status lookup: Debian 13
Core Application Suite:
- Name: Mycodo Environmental Regulation System
- Repository: https://github.com/kizniche/Mycodo
- Version: "8.17.0"
- Where the version came from: stated in documentation (README.rst)
- Version pinning: Stated in documentation; installed via remote bash installer fetched from https://kizniche.github.io/Mycodo/install into /opt/Mycodo.
- Check plan: not checkable: standalone open-source application project without an independent vulnerability database registry
Time-Series Database Backend:
- Name: InfluxDB
- Repository: https://github.com/influxdata/influxdb
- Version: "1.x" (for 32-bit systems) or "2.x" (for 64-bit systems)
- Where the version came from: stated in documentation (README.rst)
- Version pinning: Major versions 1.x and 2.x are stated in documentation; specific minor/patch versions are not pinned in documentation or requirements files.
- Check plan: support-status lookup: InfluxDB 1.x and 2.x
Relational / State Storage Engine:
- Name: SQLite
- Repository: https://www.sqlite.org
- Version: not stated
- Where the version came from: not stated
- Check plan: not checkable: version not stated
Python Package Dependencies:
Manifest file path: install_requirements.txt
Pinning status: All base runtime Python packages are explicitly pinned with exact versions using the == operator in install_requirements.txt. One profiling package is commented out.
alembic
- Version: "1.17.2"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: alembic / PyPI / 1.17.2
argparse
- Version: "1.4.0"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: argparse / PyPI / 1.4.0
bcrypt
- Version: "5.0.0"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: bcrypt / PyPI / 5.0.0
distro
- Version: "1.9.0"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: distro / PyPI / 1.9.0
email_validator
- Version: "2.3.0"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: email_validator / PyPI / 2.3.0
filelock
- Version: "3.20.1"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: filelock / PyPI / 3.20.1
Flask
- Version: "3.1.2"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: Flask / PyPI / 3.1.2
Flask_Accept
- Version: "0.0.7"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: Flask_Accept / PyPI / 0.0.7
Flask_Babel
- Version: "4.0.0"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: Flask_Babel / PyPI / 4.0.0
Flask_Compress
- Version: "1.23"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: Flask_Compress / PyPI / 1.23
Flask_Limiter
- Version: "4.1.1"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: Flask_Limiter / PyPI / 4.1.1
Flask_Login
- Version: "0.6.3"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: Flask_Login / PyPI / 0.6.3
Flask_Marshmallow
- Version: "1.3.0"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: Flask_Marshmallow / PyPI / 1.3.0
Flask_Profiler
- Version: "1.8.1"
- Where the version came from: pinned in install_requirements.txt (commented out by default; optional for profiling)
- Check plan: vulnerability lookup: Flask_Profiler / PyPI / 1.8.1
Flask_RESTX
- Version: "1.3.2"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: Flask_RESTX / PyPI / 1.3.2
Flask_Session
- Version: "0.8.0"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: Flask_Session / PyPI / 0.8.0
Flask_SQLAlchemy
- Version: "3.1.1"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: Flask_SQLAlchemy / PyPI / 3.1.1
Flask_Talisman
- Version: "1.1.0"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: Flask_Talisman / PyPI / 1.1.0
Flask_WTF
- Version: "1.2.2"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: Flask_WTF / PyPI / 1.2.2
geocoder
- Version: "1.38.1"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: geocoder / PyPI / 1.38.1
gunicorn
- Version: "23.0.0"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: gunicorn / PyPI / 23.0.0
importlib_metadata
- Version: "8.7.1"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: importlib_metadata / PyPI / 8.7.1
influxdb
- Version: "5.3.2"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: influxdb / PyPI / 5.3.2
influxdb_client[ciso]
- Version: "1.49.0"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: influxdb-client / PyPI / 1.49.0
MarkupSafe
- Version: "3.0.3"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: MarkupSafe / PyPI / 3.0.3
marshmallow_sqlalchemy
- Version: "1.4.2"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: marshmallow_sqlalchemy / PyPI / 1.4.2
pyro5
- Version: "5.16"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: pyro5 / PyPI / 5.16
pyserial
- Version: "3.5"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: pyserial / PyPI / 3.5
python-dateutil
- Version: "2.9.0.post0"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: python-dateutil / PyPI / 2.9.0.post0
requests
- Version: "2.32.5"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: requests / PyPI / 2.32.5
setuptools
- Version: "80.9.0"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: setuptools / PyPI / 80.9.0
SQLAlchemy
- Version: "2.0.45"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: SQLAlchemy / PyPI / 2.0.45
Werkzeug
- Version: "3.1.4"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: Werkzeug / PyPI / 3.1.4
WTForms
- Version: "3.2.1"
- Where the version came from: pinned in install_requirements.txt
- Check plan: vulnerability lookup: WTForms / PyPI / 3.2.1
Frontend Web Assets (included in distribution, acknowledged in README.rst):
- Components: Bootstrap, Date Range Picker, FontAwesome, gridstack.js, Highcharts, jQuery, toastr
- Version: not stated
- Where the version came from: not stated (referenced under README.rst Acknowledgments without version numbers)
- Check plan: not checkable: version not stated
Network Exposure:
- Network Interface: The device joins the network via host Ethernet or Wi-Fi. An active internet connection is required during initial setup to download packages and software dependencies.
- Listening Services and Ports:
- HTTPS Web Server: Port 443 (default). Documentation specifies connecting to https://127.0.0.1/ (or the SBC's LAN IP address). Production traffic is served by Gunicorn running Flask applications with Flask_Talisman enforcing TLS/HTTPS.
- REST API: Version 1 API endpoints served over HTTPS port 443.
- Pyro5 RPC Daemon: Used internally for inter-process communication between worker daemons and backend controllers.
- InfluxDB Service: Local or remote time-series database listener (standard InfluxDB port 8086, local socket or network).
- Default Credentials: None documented or hardcoded. README.rst states under Install Notes: "Upon your first visit, you will be prompted to create an admin user before being redirected to the login page."
- Remote Access Documentation: The documentation instructs users to access the web UI from a browser at https://127.0.0.1/ (replacing 127.0.0.1 with the host IP). SSH activation is not explicitly documented in README.rst, though command-line access via terminal/SSH is required to execute the curl installation command.
External Downloads and URLs
- Initial Installation Shell Script: https://kizniche.github.io/Mycodo/install
- Upstream Git Source Repository: https://github.com/kizniche/Mycodo
- Custom Module Git Repository: https://github.com/kizniche/Mycodo-custom
- Online Documentation and API Manual: https://kizniche.github.io/Mycodo and https://kizniche.github.io/Mycodo/mycodo-api.html
- Community Translation Platform: http://translate.kylegabriel.com
Fabrication
No custom PCB design files, Gerber archives, drill files, layer counts, or dimensional mechanical specifications exist in this upload. Fabrication is not required; physical assembly relies exclusively on connecting standard peripheral sensor modules and relay boards to commercial Raspberry Pi hardware.