Skip to content

Settings Reference

Complete reference for all OctoPrint-TempETA configuration options.

Configuration Structure

Settings are stored in OctoPrint's config.yaml:

plugins:
  temp_eta:
    # ... settings here

General Settings

enabled

  • Type: boolean
  • Default: true
  • Description: Enable/disable the plugin globally
enabled: true

algorithm

  • Type: string
  • Default: "linear"
  • Options: "linear", "exponential"
  • Description: ETA calculation algorithm
algorithm: "linear"

update_interval

  • Type: float
  • Default: 1.0
  • Range: 0.5 - 5.0
  • Unit: seconds
  • Description: How often to send updates to frontend
update_interval: 1.0

min_rate

  • Type: float
  • Default: 0.1
  • Range: 0.01 - 1.0
  • Unit: °C/s
  • Description: Minimum temperature change rate to show ETA
min_rate: 0.1

max_eta

  • Type: integer
  • Default: 3600
  • Range: 60 - 7200
  • Unit: seconds
  • Description: Maximum ETA to display (longer = "calculating")
max_eta: 3600

Heating ETA Settings

heating_enabled

  • Type: boolean
  • Default: true
  • Description: Show ETA for heating
heating_enabled: true

heating_threshold

  • Type: float
  • Default: 1.0
  • Range: 0.1 - 10.0
  • Unit: °C
  • Description: Temperature difference to start showing ETA
heating_threshold: 1.0

heating_sound_enabled

  • Type: boolean
  • Default: false
  • Description: Play sound when heating completes
heating_sound_enabled: false

heating_sound_file

  • Type: string
  • Default: "default"
  • Description: Sound file to play
heating_sound_file: "default"

Cool-down ETA Settings

cooling_enabled

  • Type: boolean
  • Default: true
  • Description: Show ETA for cooling
cooling_enabled: true

cooling_threshold

  • Type: float
  • Default: 1.0
  • Range: 0.1 - 10.0
  • Unit: °C
  • Description: Temperature difference to start showing ETA
cooling_threshold: 1.0

cooling_sound_enabled

  • Type: boolean
  • Default: false
  • Description: Play sound when cooling completes
cooling_sound_enabled: false

cooling_sound_file

  • Type: string
  • Default: "default"
  • Description: Sound file to play
cooling_sound_file: "default"

Display Settings

show_in_graph

  • Type: boolean
  • Default: true
  • Description: Show ETA in temperature graph
show_in_graph: true

show_in_sidebar

  • Type: boolean
  • Default: true
  • Description: Show ETA in sidebar
show_in_sidebar: true

time_format

  • Type: string
  • Default: "auto"
  • Options: "auto", "seconds", "minutes", "hours"
  • Description: ETA display format
time_format: "auto"

MQTT Settings

mqtt_enabled

  • Type: boolean
  • Default: false
  • Description: Enable MQTT publishing
mqtt_enabled: false

mqtt_broker

  • Type: string
  • Default: "localhost"
  • Description: MQTT broker hostname/IP
mqtt_broker: "localhost"

mqtt_port

  • Type: integer
  • Default: 1883
  • Range: 1 - 65535
  • Description: MQTT broker port
mqtt_port: 1883

mqtt_username

  • Type: string
  • Default: ""
  • Description: MQTT username (optional)
mqtt_username: ""

mqtt_password

  • Type: string
  • Default: ""
  • Description: MQTT password (optional)
mqtt_password: ""

mqtt_tls_enabled

  • Type: boolean
  • Default: false
  • Description: Use TLS/SSL for MQTT
mqtt_tls_enabled: false

mqtt_topic_prefix

  • Type: string
  • Default: "octoprint/temp_eta"
  • Description: MQTT topic prefix
mqtt_topic_prefix: "octoprint/temp_eta"

mqtt_retain

  • Type: boolean
  • Default: false
  • Description: Set retain flag on MQTT messages
mqtt_retain: false

mqtt_qos

  • Type: integer
  • Default: 0
  • Options: 0, 1, 2
  • Description: MQTT quality of service level
mqtt_qos: 0

Advanced Settings

history_max_age

  • Type: integer
  • Default: 60
  • Range: 10 - 300
  • Unit: seconds
  • Description: Maximum age of history data
history_max_age: 60

history_max_samples

  • Type: integer
  • Default: 120
  • Range: 10 - 1000
  • Description: Maximum number of samples per heater
history_max_samples: 120

exponential_window

  • Type: integer
  • Default: 30
  • Range: 10 - 60
  • Unit: seconds
  • Description: Time window for exponential fitting
exponential_window: 30

linear_window

  • Type: integer
  • Default: 10
  • Range: 5 - 30
  • Unit: seconds
  • Description: Time window for linear calculation
linear_window: 10

Complete Example

plugins:
  temp_eta:
    # General
    enabled: true
    algorithm: "linear"
    update_interval: 1.0
    min_rate: 0.1
    max_eta: 3600

    # Heating
    heating_enabled: true
    heating_threshold: 1.0
    heating_sound_enabled: false
    heating_sound_file: "default"

    # Cooling
    cooling_enabled: true
    cooling_threshold: 1.0
    cooling_sound_enabled: false
    cooling_sound_file: "default"

    # Display
    show_in_graph: true
    show_in_sidebar: true
    time_format: "auto"

    # MQTT
    mqtt_enabled: false
    mqtt_broker: "localhost"
    mqtt_port: 1883
    mqtt_username: ""
    mqtt_password: ""
    mqtt_tls_enabled: false
    mqtt_topic_prefix: "octoprint/temp_eta"
    mqtt_retain: false
    mqtt_qos: 0

    # Advanced
    history_max_age: 60
    history_max_samples: 120
    exponential_window: 30
    linear_window: 10

Programmatic Access

Python (Backend)

# Get setting
algorithm = self._settings.get(["algorithm"])

# Set setting
self._settings.set(["algorithm"], "exponential")

# Save settings
self._settings.save()

JavaScript (Frontend)

// Get setting
var algorithm = self.settings.algorithm();

// Set setting
self.settings.algorithm("exponential");

// Save settings (triggers server update)
self.saveSettings();

Validation

Settings are validated on save:

def on_settings_save(self, data):
    # Validate algorithm
    if data.get("algorithm") not in ["linear", "exponential"]:
        raise ValueError("Invalid algorithm")

    # Validate ranges
    min_rate = data.get("min_rate", 0.1)
    if not 0.01 <= min_rate <= 1.0:
        raise ValueError("min_rate out of range")

    # ... more validation

    octoprint.plugin.SettingsPlugin.on_settings_save(self, data)

Migration

Settings are automatically migrated between versions:

def get_settings_version(self):
    return 2

def on_settings_migrate(self, target, current):
    if current == 1:
        # Migrate from v1 to v2
        self._settings.set(["new_setting"], "default")

Reset to Defaults

Via OctoPrint UI:

Settings → Temperature ETA → Reset to Defaults

Programmatically:

self._settings.clean_all_data()

Next Steps