Skip to content

Releases: GhostTypes/ff-5mp-hass

v1.2.0

31 May 00:47

Choose a tag to compare

What's New in 1.2.0

Full HA experience for FlashForge Adventurer 5M / 5M Pro / AD5X printers (HTTP API only). 45 entities across sensors, binary sensors, switches, buttons, a select, camera, and images.

Added

  • AD5X IFS material station entities (AD5X only):
    • 4 image entities, one per slot, that render a labeled color swatch (filament hex color background + material name overlay, e.g. "PLA"). Empty slots render as a neutral "EMPTY" tile. Swatches are PNG-encoded with Pillow on a background executor and cached so re-renders only happen when the slot's material or color changes. Material name, color, and has_filament are also surfaced via extra_state_attributes for templating.
    • Active IFS Slot sensor — integer 1–4 of the slot currently being printed from, 0 when idle.
  • Print Completion Time sensor (device_class=TIMESTAMP) — the absolute wall-clock time at which the active print is expected to finish, rounded to the nearest minute. Only populated while a print is active (printing / heating / pausing / paused); idle otherwise.
  • Cooling Fan Speed sensor (universal, %) — the part-cooling fan duty cycle.
  • Chamber Fan Speed sensor (Adventurer 5M Pro only, %).
  • TVOC sensor (Adventurer 5M Pro only, device_class=VOLATILE_ORGANIC_COMPOUNDS, µg/m³) — air-quality reading from the Pro's onboard sensor.
  • Diagnostic sensors: firmware_version, free_disk_space, ip_address, and error_code (the last disabled by default; pairs with the existing Error binary sensor for actionable detail).
  • Diagnostics download support (diagnostics.py) — downloadable from the device page, with check_code, serial_number, MAC/IP, and cloud registration codes redacted.
  • Reauthentication flow — when the printer rejects the check code, HA can prompt for a new one without removing and re-adding the integration.
  • Reconfigure flow — IP and check code can be updated in place (e.g. after a DHCP shift).
  • Hardware-only sensors and entities are gated at setup time: AD5X-only entities (the 4 IFS slot images and Active IFS Slot sensor) are only created on AD5X printers; Adventurer 5M Pro-only sensors (TVOC, Chamber Fan Speed) are only created on 5M Pro printers.

Changed

  • Full entity translations across every platform (Gold quality scale). Every entity now declares a translation_key and resolves its display name (and, where applicable, state values) through strings.json / translations/en.json instead of carrying a hardcoded name. Covers all sensors, binary sensors, the LED switch, all buttons, the filtration select (with translated state labels: Off / Internal / External), the camera, and the image entities. Machine-status sensor states are translated as well (Ready / Busy / Calibrating / Error / Heating / Printing / Pausing / Paused / Cancelled / Completed / Unknown).
  • Sensor type audit — corrected device classes, units, and value formats so HA renders, graphs, and templates correctly:
    • machine_status is now device_class=ENUM with explicit options (the 11 MachineState values), enabling proper UI rendering and history graphs.
    • elapsed_time and remaining_time now expose numeric durations in seconds with device_class=DURATION, so templates / automations can do real arithmetic instead of parsing colon strings (e.g. notify when remaining < 600). Breaking: any user template that depended on the old "HH:MM" string format for these will need updating. lifetime_runtime remains a human-readable string ("818h:11m") since HA's default sensor card doesn't auto-format DURATION values into a friendly form and a many-digit number of minutes/seconds reads worse than the formatted string.
    • filament_weight gained device_class=WEIGHT + UnitOfMass.GRAMS.
    • filament_length and lifetime_filament gained device_class=DISTANCE + UnitOfLength.METERS.
    • z_offset now uses UnitOfLength.MILLIMETERS (was a literal "mm" string).
    • free_disk_space is now a numeric device_class=DATA_SIZE sensor in UnitOfInformation.GIGABYTES (was a pre-formatted string with no unit), matching the printer's reported unit.
    • Nozzle and bed temperature sensors now declare device_class=temperature for proper HA UI rendering.
    • print_speed now uses the PERCENTAGE constant rather than a literal "%".
  • Device model is now derived from the firmware-set pid (35 = Adventurer 5M, 36 = 5M Pro, 38 = AD5X) and resolved dynamically on every read, so it no longer permanently reads "Unknown" if the first refresh fails. Camera and image entities now report the model, which they were previously missing.
  • Refactored device_info construction into a shared helper, eliminating duplication across all entity platforms.
  • Bumped flashforge-python-api requirement to >=1.2.3. The library now derives is_pro / is_ad5x on FFMachineInfo from the firmware-set pid field instead of string-matching the user-mutable printer name, mirroring the v1.1.9 config-flow fix at the API layer (ff-5mp-api-py CHANGELOG). Refs #13.

Breaking: elapsed_time / remaining_time now expose numeric seconds (device_class=DURATION) instead of "HH:MM" strings — update any templates that parsed the old format.

Requires flashforge-python-api>=1.2.3 (auto-installed via HACS). Tested on HA Core 2026.4.2.

v1.2.0

31 May 00:47

Choose a tag to compare

Added

  • AD5X IFS material station entities (AD5X only):
    • 4 image entities, one per slot, that render a labeled color swatch (filament hex color background + material name overlay, e.g. "PLA"). Empty slots render as a neutral "EMPTY" tile. Swatches are PNG-encoded with Pillow on a background executor and cached so re-renders only happen when the slot's material or color changes. Material name, color, and has_filament are also surfaced via extra_state_attributes for templating.
    • Active IFS Slot sensor — integer 1–4 of the slot currently being printed from, 0 when idle.
  • Print Completion Time sensor (device_class=TIMESTAMP) — the absolute wall-clock time at which the active print is expected to finish, rounded to the nearest minute. Only populated while a print is active (printing / heating / pausing / paused); idle otherwise.
  • Cooling Fan Speed sensor (universal, %) — the part-cooling fan duty cycle.
  • Chamber Fan Speed sensor (Adventurer 5M Pro only, %).
  • TVOC sensor (Adventurer 5M Pro only, device_class=VOLATILE_ORGANIC_COMPOUNDS, µg/m³) — air-quality reading from the Pro's onboard sensor.
  • Diagnostic sensors: firmware_version, free_disk_space, ip_address, and error_code (the last disabled by default; pairs with the existing Error binary sensor for actionable detail).
  • Diagnostics download support (diagnostics.py) — downloadable from the device page, with check_code, serial_number, MAC/IP, and cloud registration codes redacted.
  • Reauthentication flow — when the printer rejects the check code, HA can prompt for a new one without removing and re-adding the integration.
  • Reconfigure flow — IP and check code can be updated in place (e.g. after a DHCP shift).
  • Hardware-only sensors and entities are gated at setup time: AD5X-only entities (the 4 IFS slot images and Active IFS Slot sensor) are only created on AD5X printers; Adventurer 5M Pro-only sensors (TVOC, Chamber Fan Speed) are only created on 5M Pro printers.

Changed

  • Full entity translations across every platform (Gold quality scale). Every entity now declares a translation_key and resolves its display name (and, where applicable, state values) through strings.json / translations/en.json instead of carrying a hardcoded name. Covers all sensors, binary sensors, the LED switch, all buttons, the filtration select (with translated state labels: Off / Internal / External), the camera, and the image entities. Machine-status sensor states are translated as well (Ready / Busy / Calibrating / Error / Heating / Printing / Pausing / Paused / Cancelled / Completed / Unknown).
  • Sensor type audit — corrected device classes, units, and value formats so HA renders, graphs, and templates correctly:
    • machine_status is now device_class=ENUM with explicit options (the 11 MachineState values), enabling proper UI rendering and history graphs.
    • elapsed_time and remaining_time now expose numeric durations in seconds with device_class=DURATION, so templates / automations can do real arithmetic instead of parsing colon strings (e.g. notify when remaining < 600). Breaking: any user template that depended on the old "HH:MM" string format for these will need updating. lifetime_runtime remains a human-readable string ("818h:11m") since HA's default sensor card doesn't auto-format DURATION values into a friendly form and a many-digit number of minutes/seconds reads worse than the formatted string.
    • filament_weight gained device_class=WEIGHT + UnitOfMass.GRAMS.
    • filament_length and lifetime_filament gained device_class=DISTANCE + UnitOfLength.METERS.
    • z_offset now uses UnitOfLength.MILLIMETERS (was a literal "mm" string).
    • free_disk_space is now a numeric device_class=DATA_SIZE sensor in UnitOfInformation.GIGABYTES (was a pre-formatted string with no unit), matching the printer's reported unit.
    • Nozzle and bed temperature sensors now declare device_class=temperature for proper HA UI rendering.
    • print_speed now uses the PERCENTAGE constant rather than a literal "%".
  • Device model is now derived from the firmware-set pid (35 = Adventurer 5M, 36 = 5M Pro, 38 = AD5X) and resolved dynamically on every read, so it no longer permanently reads "Unknown" if the first refresh fails. Camera and image entities now report the model, which they were previously missing.
  • Refactored device_info construction into a shared helper, eliminating duplication across all entity platforms.
  • Bumped flashforge-python-api requirement to >=1.2.3. The library now derives is_pro / is_ad5x on FFMachineInfo from the firmware-set pid field instead of string-matching the user-mutable printer name, mirroring the v1.1.9 config-flow fix at the API layer (ff-5mp-api-py CHANGELOG). Refs #13.

Installation

Via HACS (Recommended)

  1. Open HACS -> Integrations
  2. Click the menu -> Custom repositories
  3. Add: https://github.com/GhostTypes/ff-5mp-hass
  4. Category: Integration
  5. Search "FlashForge" and install

Manual Installation

  1. Download Source code (zip) below
  2. Extract custom_components/flashforge/ folder
  3. Copy to your Home Assistant config/custom_components/ directory
  4. Restart Home Assistant

README: https://github.com/GhostTypes/ff-5mp-hass/blob/v1.2.0/README.md
Changelog: https://github.com/GhostTypes/ff-5mp-hass/blob/v1.2.0/CHANGELOG.md

Full Changelog: v1.1.9...v1.2.0

v1.1.9

08 May 18:49

Choose a tag to compare

Fixed

  • Renamed printers were rejected during initial pairing as unsupported because model detection matched against the user-mutable name field. Detection now uses the firmware-set pid value from /detail (35 = Adventurer 5M, 36 = 5M Pro, 38 = AD5X). Refs #13.

Installation

Via HACS (Recommended)

  1. Open HACS -> Integrations
  2. Click the menu -> Custom repositories
  3. Add: https://github.com/GhostTypes/ff-5mp-hass
  4. Category: Integration
  5. Search "FlashForge" and install

Manual Installation

  1. Download Source code (zip) below
  2. Extract custom_components/flashforge/ folder
  3. Copy to your Home Assistant config/custom_components/ directory
  4. Restart Home Assistant

README: https://github.com/GhostTypes/ff-5mp-hass/blob/v1.1.9/README.md
Changelog: https://github.com/GhostTypes/ff-5mp-hass/blob/v1.1.9/CHANGELOG.md

Full Changelog: v1.1.8...v1.1.9

v1.1.8

08 May 17:50

Choose a tag to compare

Added

  • New image entity exposing the g-code thumbnail of the currently printing file. Fetched on demand via the printer's /gcodeThumb HTTP endpoint and cached per-filename so the cache only invalidates when the active file changes.

Installation

Via HACS (Recommended)

  1. Open HACS -> Integrations
  2. Click the menu -> Custom repositories
  3. Add: https://github.com/GhostTypes/ff-5mp-hass
  4. Category: Integration
  5. Search "FlashForge" and install

Manual Installation

  1. Download Source code (zip) below
  2. Extract custom_components/flashforge/ folder
  3. Copy to your Home Assistant config/custom_components/ directory
  4. Restart Home Assistant

README: https://github.com/GhostTypes/ff-5mp-hass/blob/v1.1.8/README.md
Changelog: https://github.com/GhostTypes/ff-5mp-hass/blob/v1.1.8/CHANGELOG.md

Full Changelog: v1.1.7...v1.1.8

v1.1.7

28 Apr 00:18

Choose a tag to compare

Fixed

  • Resolved "Config flow could not be loaded: Invalid handler specified" on Home Assistant 2026.4.x / Python 3.14 (#10). Root cause: the upstream flashforge-python-api depended on netifaces, which is source-only on PyPI and has no Python 3.14 wheel — install failed inside the HA environment, the integration's top-level from flashforge import ... raised ImportError, and HA reported the generic invalid-handler error for both auto-discovery and manual setup paths.
  • Bumped flashforge-python-api requirement to >=1.2.2, which replaces netifaces with the pure-Python ifaddr library (already a transitive dependency of Home Assistant via zeroconf).

Installation

Via HACS (Recommended)

  1. Open HACS -> Integrations
  2. Click the menu -> Custom repositories
  3. Add: https://github.com/GhostTypes/ff-5mp-hass
  4. Category: Integration
  5. Search "FlashForge" and install

Manual Installation

  1. Download Source code (zip) below
  2. Extract custom_components/flashforge/ folder
  3. Copy to your Home Assistant config/custom_components/ directory
  4. Restart Home Assistant

README: https://github.com/GhostTypes/ff-5mp-hass/blob/v1.1.7/README.md
Changelog: https://github.com/GhostTypes/ff-5mp-hass/blob/v1.1.7/CHANGELOG.md

Full Changelog: v1.1.6...v1.1.7

v1.1.6

23 Mar 21:31

Choose a tag to compare

Fixed

  • Fixed AD5X entities going unavailable while printing due to currentPrintSpeed / printSpeedAdjust Pydantic validation rejecting values above 200 (AD5X reports up to 500)
  • Fixed HTTP connection churn caused by per-request aiohttp.ClientSession() creation across all API control modules — now uses a shared session with proper timeout handling
  • Fixed intermittent timeouts during print operations by increasing the default HTTP timeout from 5s to 15s
  • Updated dependency to flashforge-python-api>=1.2.1 which includes all of the above upstream fixes (contributed by @spawnegit in ff-5mp-api-py#12)

Installation

Via HACS (Recommended)

  1. Open HACS -> Integrations
  2. Click the menu -> Custom repositories
  3. Add: https://github.com/GhostTypes/ff-5mp-hass
  4. Category: Integration
  5. Search "FlashForge" and install

Manual Installation

  1. Download Source code (zip) below
  2. Extract custom_components/flashforge/ folder
  3. Copy to your Home Assistant config/custom_components/ directory
  4. Restart Home Assistant

README: https://github.com/GhostTypes/ff-5mp-hass/blob/v1.1.6/README.md
Changelog: https://github.com/GhostTypes/ff-5mp-hass/blob/v1.1.6/CHANGELOG.md

Full Changelog: v1.1.5...v1.1.6

v1.1.5

21 Mar 23:43

Choose a tag to compare


Installation

Via HACS (Recommended)

  1. Open HACS -> Integrations
  2. Click the menu -> Custom repositories
  3. Add: https://github.com/GhostTypes/ff-5mp-hass
  4. Category: Integration
  5. Search "FlashForge" and install

Manual Installation

  1. Download Source code (zip) below
  2. Extract custom_components/flashforge/ folder
  3. Copy to your Home Assistant config/custom_components/ directory
  4. Restart Home Assistant

README: https://github.com/GhostTypes/ff-5mp-hass/blob/v1.1.5/README.md
Changelog: https://github.com/GhostTypes/ff-5mp-hass/blob/v1.1.5/CHANGELOG.md
Compare: v1.1.4...v1.1.5

v1.1.4

10 Mar 02:08

Choose a tag to compare

Fixed

  • Registered the filtration select platform so select.flashforge_filtration_mode now loads correctly
  • Restricted discovery and setup to supported modern HTTP printers only: AD5X, Adventurer 5M, and Adventurer 5M Pro
  • Corrected the README, support matrix, entity counts, and camera behavior notes for the 1.1.4 release
  • Fixed AD5X compatibility when newer firmware returns additional /detail fields during setup and polling

Changed

  • Moved the LED availability workaround into flashforge-python-api client configuration instead of mutating integration state directly
  • Updated dependency to flashforge-python-api>=1.1.1 for modern-printer discovery improvements, AD5X detection, library-level LED override support, and newer AD5X /detail response compatibility
  • Preserved the manual LED override for aftermarket LED installs while routing it through the library-level override model used by HACS installs
  • Switched the camera entity to runtime OEM stream detection while keeping camera power control limited to Pro models

v1.1.3

31 Dec 14:55

Choose a tag to compare


📦 Installation

Via HACS (Recommended)

  1. Open HACS → Integrations
  2. Click ⋮ → Custom repositories
  3. Add: https://github.com/GhostTypes/ff-5mp-hass
  4. Category: Integration
  5. Search "FlashForge" and install

Manual Installation

  1. Download Source code (zip) below
  2. Extract custom_components/flashforge/ folder
  3. Copy to your Home Assistant config/custom_components/ directory
  4. Restart Home Assistant

Full Changelog: https://github.com/GhostTypes/ff-5mp-hass/blob/main/CHANGELOG.md

v1.1.2

26 Dec 21:20

Choose a tag to compare


📦 Installation

Via HACS (Recommended)

  1. Open HACS → Integrations
  2. Click ⋮ → Custom repositories
  3. Add: https://github.com/GhostTypes/ff-5mp-hass
  4. Category: Integration
  5. Search "FlashForge" and install

Manual Installation

  1. Download Source code (zip) below
  2. Extract custom_components/flashforge/ folder
  3. Copy to your Home Assistant config/custom_components/ directory
  4. Restart Home Assistant

Full Changelog: https://github.com/GhostTypes/ff-5mp-hass/blob/main/CHANGELOG.md