Custom integration for monitoring UltiMaker 3, S3, S5, S7 and S8 3D printers from Home Assistant. Provides detailed real-time data, camera stream, and firmware updates.
- 🖨️ Print job status, progress, ETA, and remaining time
- 🔥 Extruder and bed temperatures
- 🌡️ Ambient temperature
- ⚙️ System firmware, hardware info, uptime
- 📸 Live camera view and snapshots
- 🔄 Firmware update availability
- 📊 Sensor data with proper device classes and icons
- 🧠 Uses DataUpdateCoordinator for efficient polling
- 📁 Fully supports config flow (UI setup)
- Go to HACS > Integrations
- Click + Explore & Download Repositories
- Search for
Ultimaker
and add it as a custom integration - Restart Home Assistant
- Add the integration from Settings > Devices & Services
- Copy the
ultimaker/
folder tocustom_components/
in your Home Assistant config - Restart Home Assistant
- Add the integration from Settings > Devices & Services
No YAML required.
After installation, go to Settings > Devices & Services, click Add Integration, and select Ultimaker. Enter the printer's IP address and a name.
- Ambient Temperature
- Bed Temperature
- Bed Target Temperature
- Extruder 0 Temperature
- Extruder 0 Target Temperature
- ETA
- Firmware Version
- Hardware Revision
- Layer Number
- Material 0 Length Remaining
- Material 0 Type
- Model
- Nozzle Diameter
- Print Duration
- Print Duration Elapsed
- Print Duration Remaining
- Print Job Name
- Printer Status
- Serial Number
- Total Extrusion
- Total Hot Time
- Total Print Time
- Uptime
- Variant
- Camera (Stream & Snapshot)
- Firmware Update Available
This version is a complete rewrite. It is not compatible with earlier versions and introduces breaking changes in:
- Entity unique IDs
- Sensor availability and types
- Data update logic (now using
DataUpdateCoordinator
) - UI configuration only (no YAML)
Please remove and re-add the integration if you’re updating from a previous version.
Add a Lovelace card to the UI:
Example 1
type: grid
cards:
- type: heading
heading: UltiMaker
heading_style: title
- show_state: true
show_name: false
camera_view: auto
fit_mode: cover
type: picture-entity
entity: sensor.ums5_print_job_progress
camera_image: camera.ums5_camera
tap_action:
action: more-info
- show_name: true
show_icon: false
show_state: true
type: glance
entities:
- entity: sensor.ums5_time_remaining
- entity: sensor.ums5_eta
state_color: false
- type: tile
entity: sensor.ums5_printer_activity
features_position: bottom
vertical: false
name: Estado
grid_options:
columns: 6
rows: 1
- type: tile
entity: switch.sonoff_10003b7db7
features_position: bottom
vertical: true
icon_tap_action:
action: more-info
- type: tile
entity: sensor.ums5_print_job_name
features_position: bottom
vertical: false
grid_options:
columns: 6
rows: 1
name: Archivo
- type: entities
entities:
- entity: sensor.ums5_bed_temperature
- entity: sensor.ums5_bed_temperature_target
- entity: sensor.ums5_fan_speed
- entity: sensor.ums5_print_job_state
grid_options:
columns: 6
rows: auto
- type: entities
entities:
- entity: sensor.ums5_hotend_1_temperature
- entity: sensor.ums5_hotend_1_id
- entity: sensor.ums5_hotend_2_temperature
- entity: sensor.ums5_hotend_2_id
grid_options:
columns: 6
rows: auto
Example 2
type: grid
cards:
- type: heading
icon: ""
heading_style: title
heading: UltiMaker
- show_state: false
show_name: false
camera_view: auto
fit_mode: cover
type: picture-entity
entity: sensor.ums5_print_job_progress
camera_image: camera.ums5_camera
tap_action:
action: more-info
- type: markdown
content: >
**Hora finalización:** {{ as_timestamp(states('sensor.ums5_eta')) |
timestamp_custom('%H:%M', true) }}
**Tiempo transcurrido:** {{ states('sensor.ums5_time_elapsed') }} h
**Tiempo restante:** {{ states('sensor.ums5_time_remaining') }} h
**Archivo actual:** {{ states('sensor.ums5_print_job_name') }}
**Estado de la impresora:** {{ states('sensor.ums5_printer_activity') }}
// {{ states('sensor.ums5_print_job_progress') }} %
**Hotend 1:** {{ states('sensor.ums5_hotend_1_temperature') }} °C // {{
states('sensor.ums5_hotend_1_temperature_target') }} °C // {{
states('sensor.ums5_hotend_1_id') }}
**Hotend 2:** {{ states('sensor.ums5_hotend_2_temperature') }} °C // {{
states('sensor.ums5_hotend_2_temperature_target') }} °C // {{
states('sensor.ums5_hotend_2_id') }}
**Cama caliente:** {{ states('sensor.ums5_bed_temperature') }} °C
(objetivo: {{ states('sensor.ums5_bed_temperature_target') }} °C)
**Firmware:** {{ states('sensor.ums5_firmware_version') }} → Última: {{
states('sensor.ums5_latest_firmware_version') }}
v1.0 – Current Stable Version
- Functional sensors: temperature, progress, time, firmware, etc.
- Proper device grouping
- Configuration via
config_flow
- Basic webhook support (
camera.snapshot
) - Implemented localization with language files
en.json
andes.json
- Metadata defined (
iot_class
,integration_type
, etc.) - Clean
device_class
,entity_category
,state_class
- Advanced sensors:
print_count
,hours_on
,filament_used
v1.1 – Cleanup, Structure, and Basic Checks
Improve structure, ensure compliance with HA standards, and add resiliency
- Complete translations (ensure no hardcoded strings)
- Finalize
manifest.json
cleanup (validate all fields) - Add full translation support:
- Implement
strings.json
to define UI labels and errors in the config flow - Add
translations/en.json
andtranslations/es.json
for multilingual support - Ensure all
translation_key
values inconfig_flow.py
are declared instrings.json
- [ ] Add error handling if the printer is offline/unreachable
- Implement
- Ensure consistent
unique_id
generation - Add
extra_state_attributes
to relevant sensors - Group entities logically by domain or purpose
- Ensure full
async_unload_entry
support - Input validation in
config_flow
(e.g., valid IP format) - Add basic schema validation and unit tests
v1.2 – Automatic Discovery and Detection
Make setup easier and seamless via network discovery
- Support
zeroconf
/mdns
auto-discovery - Adjust
config_flow.py
to accept network detections - Detect model (UMS5, S3...) and customize sensors accordingly
- Check for active HTTP port during setup
v1.3 – Controls with Authentication
Enable active interaction with the printer via Home Assistant
- Implement HTTP Digest authentication (
/auth/request
,/auth/check
) - Add control buttons:
- Pause print
- Resume print
- Cancel print
- Preheat bed and hotends
- Verify authentication with
/auth/verify
- Store
id
andkey
securely inconfig_entry.options
- Handle auth errors and retries gracefully
v1.4 – Quality, Testing, and Core Readiness
Final QA and compatibility for Home Assistant Core
- Add unit tests with
pytest
,aiohttp
, mocking printer responses - Include
analytics.json
(opt-in telemetry) - GitHub CI for linting and automated testing
- Ensure documentation is complete (
README.md
, usage examples) - Optional: prepare and submit PR to Home Assistant Core
This integration was inspired by the original work of jellespijker and later expanded by alnavasa.
MIT License. Not affiliated with Ultimaker BV.