https://github.com/ajimaru/octoprint-tempeta
„OctoPrint plugin that shows an ETA countdown while bed/hotend/chamber heats up or cools down.
https://github.com/ajimaru/octoprint-tempeta
bed chamber eta heating hotend octoprint octoprint-plugin temperature
Last synced: 14 days ago
JSON representation
„OctoPrint plugin that shows an ETA countdown while bed/hotend/chamber heats up or cools down.
- Host: GitHub
- URL: https://github.com/ajimaru/octoprint-tempeta
- Owner: Ajimaru
- License: agpl-3.0
- Created: 2026-01-09T18:55:21.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2026-01-15T06:12:41.000Z (5 months ago)
- Last Synced: 2026-01-15T07:58:41.381Z (5 months ago)
- Topics: bed, chamber, eta, heating, hotend, octoprint, octoprint-plugin, temperature
- Language: Python
- Homepage: https://github.com/Ajimaru/OctoPrint-TempETA/releases
- Size: 2.13 MB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Codeowners: .github/CODEOWNERS
- Security: SECURITY.md
- Authors: AUTHORS.md
Awesome Lists containing this project
README
OctoPrint Temperature ETA Plugin
[](https://github.com/Ajimaru/OctoPrint-TempETA#license)
[](https://python.org)

[](https://octoprint.org)
[](https://github.com/Ajimaru/OctoPrint-TempETA/releases/latest)


[](https://github.com/Ajimaru/OctoPrint-TempETA/pulls)



---
### Heat Up and Cool Down with Confidence
Display real-time countdown/ETA when your 3D printer's bed, hotend, or chamber is heating up or cooling down.
No more guessing how long until your print starts or is ready for maintenance!
#### Heating

#### Cooling

## Table of Contents
- [Table of Contents](#table-of-contents)
- [Features](#features)
- [Installation](#installation)
- [Via Plugin Manager (Recommended)](#via-plugin-manager-recommended)
- [Manual Installation](#manual-installation)
- [Configuration](#configuration)
- [General](#general)
- [Heating ETA](#heating-eta)
- [Cool-down ETA](#cool-down-eta)
- [MQTT](#mqtt)
- [Maintenance](#maintenance)
- [Help](#help)
- [Settings Defaults](#settings-defaults)
- [How It Works](#how-it-works)
- [MQTT Message Format](#mqtt-message-format)
- [FAQ](#faq)
- [Contributing](#contributing)
- [License](#license)
- [Support](#support)
- [Credits](#credits)
## Features
- ⏱️ **Real-time ETA countdown** for bed, hotend and chamber heating or cooling
- 🌡️ **Smart calculation algorithms**: Linear (default) and exponential models
- 📊 **Flexible display**: Show ETA in navbar, sidebar, and/or a dedicated tab
- 📈 **Progress bars**: Show progress to target in the sidebar and tab views
- 📉 **Historical temperature graphs**: A dedicated history view in the tab with a configurable time window
- ⏳ **Heating ETA**: Estimates time remaining until target temperature is reached
- 🧊 **Cool-down ETA**: Estimates time remaining until cool-down target is reached (target set to 0), with two modes: threshold-based and ambient-based
- 🎛️ **Configurable thresholds**: Start countdown when within a configurable delta to target
- 🎨 **Status colors**: Optional color bands for heating/cooling/idle states
- 🔔 **Sound alerts**: Play a sound when target is reached or cool-down finishes
- 🖥️ **Browser toast notifications**: Small top-right notifications for key events (default off)
- 📡 **MQTT integration**: Publish ETA data and state changes to an MQTT broker for home automation
- 🔁 **Reset history**: One-click reset deletes persisted history files for all printer profiles
- 🧰 **Multiple heaters**: Supports tools, bed and chamber (as reported by OctoPrint/printer)
- 🌍 **Internationalization**: English and German included, easily extensible
- 🧮 **Supports °C and °F** based on OctoPrint settings
- ⚙️ **Highly configurable**: Many settings to tailor behavior and display to your needs
- 🚀 **Lightweight**: Minimal performance impact (~2Hz monitoring)
## Installation
### Via Plugin Manager (Recommended)
1. Open OctoPrint web interface
2. Navigate to **Settings** → **Plugin Manager**
3. Click **Get More...**
4. Click **Install from URL** and enter:
`https://github.com/Ajimaru/OctoPrint-TempETA/releases/latest/download/octoprint_tempeta-latest.zip`
5. Click **Install**
6. Restart OctoPrint
### Manual Installation
Manual pip install (advanced users)
```bash
pip install https://github.com/Ajimaru/OctoPrint-TempETA/releases/latest/download/octoprint_tempeta-latest.zip
```
The `releases/latest` URL always points to the newest stable release.
## Configuration
Configure the plugin in **Settings** → **Temperature ETA**:

The settings UI is organized into multiple tabs:
### General
General Settings (click to expand)
- **Enable Temperature ETA**: Master switch for the plugin
- **Hide ETA while printing**: Optionally suppress ETA during active print jobs
- **Show in sidebar / navbar / tab**: Independently enable the UI placements
- **Show progress bars**: Show progress bars in sidebar and tab
- **Show historical graph** + **Historical graph window (seconds)**: Configure the history graph in the tab
- **Temperature display**: Use OctoPrint's preference or override it
- **Status colors**: Configure time-based bands or fixed status colors (heating/cooling/idle)
- **Update & Logging**:
- **Update interval** + **Temperature history size**: Control refresh rate and retained samples
- **Debug logging** (optional): Enables additional log output (may be noisy)
- **Sound alerts** (optional): Enable per-event sounds, volume, rate limit, and a test button
- **Browser notifications** (optional): Enable per-event toasts, timeout, and rate limit
Note: Numeric settings inputs are validated (min/max/range) and saving is blocked until invalid values are fixed.
## How It Works
1. **Temperature Monitoring**: Plugin registers for temperature callbacks (~2Hz frequency)
2. **Rate Calculation**: Analyzes temperature history to determine heating rate (°C/second)
3. **ETA Estimation**: Uses selected algorithm (linear/exponential) to predict time to target
4. **Display Update**: Sends countdown to frontend via WebSocket (1Hz default)
5. **Smart Thresholds**: Only shows ETA when heating or cooling and within configured threshold
### Heating ETA
Heating ETA Settings (click to expand)
- **Enable heating ETA**: Controls whether heating ETAs are shown/calculated
- **Heating threshold** + **Threshold unit**: Start ETA when within a configured delta to the target
- **Calculation algorithm**: Linear (default) or exponential
### Cool-down ETA
Cool-down ETA Settings (click to expand)
- **Enable cool-down ETA**: Turn cool-down ETA on/off
- **Mode**:
- **Threshold target (default)**: Estimate time until a fixed, per-heater target is reached
- **Ambient-based target**: Estimate time until near ambient temperature (best-effort)
- **Cool-down targets**: Configure per-heater targets (tool0/bed/chamber) for threshold mode
- **Ambient temperature** (optional): Provide a fixed ambient value for ambient mode
- **Hysteresis / fit window**: Controls when cool-down ETA disappears and how much recent data is used
### MQTT
MQTT Settings (click to expand)
- **Enable MQTT**: Master switch for MQTT integration (publishes ETA data to external broker)
- **Broker Host**: MQTT broker hostname or IP address (e.g., `localhost`, `192.168.1.100`)
- **Broker Port**: MQTT broker port (default: `1883`, TLS typically uses `8883`)
- **Username/Password**: Optional authentication credentials for the MQTT broker
- **Use TLS/SSL**: Enable encrypted connection to the broker
- **Skip TLS certificate verification**: For self-signed certificates (not recommended for production)
- **Base Topic**: Root MQTT topic for publishing messages (default: `octoprint/temp_eta`)
- ETA updates are published to: `{base_topic}/{heater}/eta`
- State changes are published to: `{base_topic}/{heater}/state_change`
- **QoS**: MQTT Quality of Service level (0=At most once, 1=At least once, 2=Exactly once)
- **Retain Messages**: Enable MQTT retain flag (new subscribers receive the last message)
- **Publish Interval**: Minimum seconds between MQTT publishes (default: `1.0`)
### Maintenance
Maintenance Actions (click to expand)
- **Reset profile history**: Deletes all persisted ETA history JSON files for all printer profiles (stored in OctoPrint's plugin data folder)
- **Restore defaults**: Resets only this plugin's settings back to defaults (does not delete history files)
### Help
How is ETA calculated? (click to expand)
**ETA Logic Overview**
The plugin estimates how long it will take for each heater (bed, hotend, chamber) to reach its target temperature (heating) or cool down to a set value (cooling). It does this by analyzing recent temperature history and applying a calculation algorithm.
#### Algorithms Used
- **Linear ETA (default):**
Calculates the rate of temperature change (°C/s) using the last 10 seconds of data. ETA is the remaining temperature difference divided by this rate.
This method is fast and stable for most printers.
- **Exponential ETA (advanced):**
Models heating/cooling as an exponential curve, which can be more accurate for some hardware.
This option can be enabled in the settings.
#### Key Points
- ETA is only shown when the heater is actively heating/cooling and within a configurable threshold of the target.
- The plugin automatically handles multiple heaters and adapts to target changes.
- All calculations are optimized for performance and run in a background thread.
### Settings Defaults
Default Plugin Settings (click to expand)
The following defaults apply to the user-editable plugin settings:
Setting
Key
Default
Enable Temperature ETAenabledtrue
Enable heating ETAenable_heating_etatrue
Hide ETA while printingsuppress_while_printingfalse
Show in sidebarshow_in_sidebartrue
Show in navbarshow_in_navbartrue
Show in tabshow_in_tabtrue
Show progress barsshow_progress_barstrue
Show historical graphshow_historical_graphtrue
Graph window (seconds)historical_graph_window_seconds180
Temperature displaytemp_displayoctoprint
Heating thresholdthreshold_start5.0 °C
Threshold unitthreshold_unitoctoprint
Algorithmalgorithmlinear
Update Intervalupdate_interval1.0 s
History Sizehistory_size60
Enable cool-down ETAenable_cooldown_etatrue
Cool-down modecooldown_modethreshold
Enable debug loggingdebug_loggingfalse
Color modecolor_modebands
Heating colorcolor_heating#5cb85c
Cooling colorcolor_cooling#337ab7
Idle colorcolor_idle#777777
Enable sound alertssound_enabledfalse
Sound: target reachedsound_target_reachedfalse
Sound: cool-down donesound_cooldown_finishedfalse
Sound volumesound_volume0.5
Sound min intervalsound_min_interval_s10.0 s
Enable notificationsnotification_enabledfalse
Notify: target reachednotification_target_reachedfalse
Notify: cool-down donenotification_cooldown_finishedfalse
Notification timeoutnotification_timeout_s6.0 s
Notification min intervalnotification_min_interval_s10.0 s
Enable MQTTmqtt_enabledfalse
MQTT broker hostmqtt_broker_host""
MQTT broker portmqtt_broker_port1883
MQTT usernamemqtt_username""
MQTT passwordmqtt_password""
MQTT use TLSmqtt_use_tlsfalse
MQTT TLS insecuremqtt_tls_insecurefalse
MQTT base topicmqtt_base_topicoctoprint/temp_eta
MQTT QoSmqtt_qos0
MQTT retainmqtt_retainfalse
MQTT publish intervalmqtt_publish_interval1.0 s
## MQTT Message Format
MQTT Message Format Details (click to expand)
**ETA Updates** (`{base_topic}/{heater}/eta`):
```json
{
"heater": "bed",
"eta_seconds": 120.5,
"eta_kind": "heating",
"target": 60.0,
"actual": 40.2,
"cooldown_target": null,
"timestamp": 1234567890.123,
"state": "heating"
}
```
**State Changes** (`{base_topic}/{heater}/state_change`):
```json
{
"heater": "bed",
"state": "at_target",
"previous_state": "heating",
"timestamp": 1234567890.456,
"actual": 60.0,
"target": 60.0
}
```
## FAQ
**Q: Why does the ETA jump around?**
A: Temperature changes aren't perfectly linear. The plugin uses recent data to calculate rate. Longer threshold values provide more stable estimates.
**Q: Can I use this with multiple hotends?**
A: Yes. The UI registers heaters dynamically as OctoPrint reports them (e.g. tool0, tool1, ...).
**Q: Does this work with chamber heaters?**
A: Yes! Enable chamber in settings if your printer has a chamber heater.
**Q: Will this slow down my prints?**
A: No. The plugin uses efficient algorithms and runs in a separate thread. Impact is negligible.
**Q: Can I hide the ETA during an active print?**
A: Yes. If you enable "Hide ETA while printing", the plugin will only show ETA when no print job is active. If the option is disabled (default), ETA is shown whenever the target temperature is at least the configured heating threshold above the current temperature.
## Contributing
Contributions welcome! Please:
1. Fork the repository
2. Create a feature branch: `git checkout -b wip/my-feature`
3. Write tests for new features
4. Submit a pull request
5. For local development scripts (setup, restart helper, post-commit build hook, performance monitor), see [.development/README.md](.development/README.md).
6. See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines.
7. Please follow our [Code of Conduct](CODE_OF_CONDUCT.md).
Note: `main` is protected on GitHub, so changes go through PRs.
[](https://github.com/Ajimaru/OctoPrint-TempETA/issues?q=is%3Aissue%20state%3Aopen)
[](https://github.com/Ajimaru/OctoPrint-TempETA/issues?q=is%3Aissue%20state%3Aclosed)
[](https://github.com/Ajimaru/OctoPrint-TempETA/pulls?q=is%3Aopen+is%3Apr)
[](https://github.com/Ajimaru/OctoPrint-TempETA/pulls?q=is%3Apr+is%3Aclosed)
[](https://pre-commit.com/)



[](https://codecov.io/gh/Ajimaru/OctoPrint-TempETA)
[](https://github.com/Ajimaru/OctoPrint-TempETA/actions/workflows/ci.yml?query=branch%3Amain)
[](https://github.com/Ajimaru/OctoPrint-TempETA/actions/workflows/i18n.yml?query=branch%3Amain)

[](https://github.com/psf/black)
[](https://github.com/prettier/prettier)

## License
AGPLv3 - See [LICENSE](LICENSE) for details.
## Support
- 🐛 **Bug Reports**: [GitHub Issues](https://github.com/Ajimaru/OctoPrint-TempETA/issues)
- 💬 **Discussion**: [Github Discussions](https://github.com/Ajimaru/OctoPrint-TempETA/discussions)
Note: For logs and troubleshooting, enable "debug logging" in the plugin settings.
## Credits
- **Original Request**: [Issue #469](https://github.com/OctoPrint/OctoPrint/issues/469) by [@CptanPanic](https://github.com/CptanPanic) (2014)
- **Development**: Built following [OctoPrint Plugin Guidelines](https://docs.octoprint.org/en/main/plugins/index.html)
- **Contributors**: See [AUTHORS.md](AUTHORS.md)
---
**Like this plugin?** ⭐ Star the repo and share it with the OctoPrint community!