59.X Customer Beta Release Notes - V2/V3/Aeotec Hubs

Hey everyone!

We’re excited to announce the start of a new SmartThings Hub Firmware Beta. Version 0.59.4 will begin rolling out in batches starting no sooner than October 31st, 2025. This will be a phased rollout so that we can keep a close eye on any issues that arise so your hub may not be updated immediately. The hub will be offline for about a minute during the update. See below for more specific details about the update.

Hub Target

  • Samsung SmartThings Hub 2015 (Hub v2)
  • Samsung SmartThings Hub 2018 (Hub v3)
  • Aeotec Smart Home Hub
  • Aeotec Smart Home Hub 2

Release Dates

  • 0.59.4: 10-31-2025
  • 0.59.5: 11-11-2025
  • 0.59.6: 11-13-2025

Help Us Help You

As part of our Beta program, it is important for our support team to investigate logs from Hubs running that are reporting errors. To provide our team access, please follow these instructions:

  1. Go to SmartThings Web (my.smartthings.com)
  2. Log in to your Samsung Account
  3. Select the Menu (⋮) and choose Settings
  4. Toggle on Account Data Access
  5. Select the time period and choose Confirm

Release Notes

General

  • When merging a Hub’s Thread network into a 3rd party network, handle unexpected data in the Thread network settings that might have previously prevented the merge from succeeding.

Edge Drivers

Significant Memory optimizations

These changes should be fully backwards compatible and automatically apply to all existing drivers. Some, like the new method for subdriver loading, will require driver changes to fully utilize the new savings, but the existing methods will continue to work, they just wont see the same benefits.

  • Add lazy_load_subdriver_v2 option that allows for a different subdriver structure to further limit memory usage of subdrivers
  • Split some commonly required files up (e.g. st.utils) so that only the functions being used are in memory so some previous functionality may be in new files
  • Remove device event state cache from lua. Instead if get_latest_state is called the value will be loaded from the hub, and after that point will continue to cache events generated from the driver, but only for values that have been requested via get_latest_state
  • Additional structural changes to optimize memory footprint.

Other Driver Changes

  • On startup enforce parent devices being sent the init lifecycle event before children allowing children that depend on parent information to not have to handle cases where the parent is not yet present.
  • Extend the latency improvements for default handlers to Zigbee Light Link (ZLL) devices

Deprecation Notice

  • For Zigbee devices, the monitored_attribute feature is being deprecated. There are other systems in place for tracking when we last heard from a device and updating the attributes, so duplicating that effort in the driver was both memory and cpu expensive but unnecessary. For now a warning will be added to documentation and on calling functions related to monitored_attributes and the release where these will be fully removed hasn’t been decided yet, but developers should remove usage when they next update their drivers.

NOTE

If you’d like to participate in the beta, please see these instructions for how to sign up or unenroll.

Anyone who participated in the previous beta is automatically signed up for this one, unless you have unenrolled.

3 Likes

I had to read this a couple times, this would fix the issue of get_latest_state returning nil the first time if the driver wasn’t the one that emitted the event, right? Then it’s great news :slight_smile:

1 Like

This is correct, if the device has emitted an event while connected to the hub, the state will be available regardless of if it was generated from the driver or not.

3 Likes

Excellent! Just got the update by the way, so far everything seems to be working fine.

2 Likes

The old problem with buttons 2,3 and 4 on Hue dimmer switch not recording button presses came back with this upgrade. I am using the Philips Hue LAN integration

Would this affect Sonos as last couple of days seem to be getting problems with Sonos driver

Edit: Forget that and the logs, it was my fault, Friday and not enough coffee :man_facepalming:.

Well that’s problematic. There are many devices (e.g some Tuya valves and sensors etc) which don’t send periodic reports so the drivers use add_monitored_attributes to have the system automatically check on specific attributes and have it poll the device to see it’s still online. This will adversely impact those devices which don’t automatically report configured_attributes due to firmware bugs.

I would not recommend removing this completely, maybe don’t use it by default for regular devices but allow drivers to continue using this amazing API to automatically poll devices which don’t report attributes on a regular basis.

Is there an alternative API which provides similar functionality of polling attributes if they haven’t reported in? If not we’re basically going to have to replicate this API in each driver manually which probably won’t be as efficient as having HubCore do it.

To be clear, hubcore has never done this, this has always been managed only from the lua side in drivers. While we don’t have concrete plans on when this will be removed the overhead is pretty significant, and if you expect a value from a device that does not support reporting, using a single call_on_schedule function to poll the desired attributes is a less intensive way to accomplish that. We’ve noted your interest in either keeping the API or providing a replacement and will discuss before we make any final plans for the deprecation.

4 Likes

Appreciate it, the current implementation is very nicely done and would be a great to keep the API’s interface the same, even if the backend functionality is stripped down to basically track and send a request on schedule. This will also avoid breaking existing drivers who’s devs aren’t around to update drivers.

On a side note, I found a bug in one of the lua libraries, in st.zwave.defaults.voltageMeasurementinit.lua in the function get_refresh_commands

  if device:supports_capability_by_id(capabilities.voltageMeasurement.ID, component) and device:is_cc_supported(cc.SENSOR_MULTILEVEL, endpoint) then
    return {SensorMultilevel:Get({sensor_type = SensorMultilevel.sensor_type.VOLTAGE}, {dst_channels = {endpoint}})}

This is incorrect (or more appropriately incomplete) as voltage reports are reported either via cc SensorMultievel or from Meter depending on the device. Most mains powered devices will use the Meter cc to provide this information. A more complete implementation should be:

  if device:supports_capability_by_id(capabilities.voltageMeasurement.ID, component) and device:is_cc_supported(cc.SENSOR_MULTILEVEL, endpoint) then
    return {SensorMultilevel:Get({sensor_type = SensorMultilevel.sensor_type.VOLTAGE}, {dst_channels = {endpoint}})}
  elseif device:supports_capability_by_id(capabilities.voltageMeasurement.ID, component) and device:is_cc_supported(cc.METER, endpoint) then
    return {Meter:Get({scale = Meter.scale.electric_meter.VOLTS}, {dst_channels = {endpoint}})}
  end

The zwave_handlers may also need to be updated to add support for processing a [cc.METER] report in the same file.

@nayelyz

Okay :+1: good send it to me here what is that.?