[bluelink] Allow disabling force refresh (#20673)

* [bluelink] Allow disabling force refresh

Signed-off-by: Florian Hotze <dev@florianhotze.com>
This commit is contained in:
Florian Hotze
2026-05-08 21:09:23 +02:00
committed by GitHub
parent 7fd0fc78c7
commit cb52ed32df
3 changed files with 36 additions and 16 deletions
@@ -101,14 +101,21 @@ public class BluelinkVehicleHandler extends BaseThingHandler implements VehicleS
final Duration refreshInterval = config.refreshInterval >= 1 ? Duration.ofMinutes(config.refreshInterval)
: DEFAULT_REFRESH_INTERVAL;
final Duration forceRefreshInterval = config.forceRefreshInterval >= 1
? Duration.ofMinutes(config.forceRefreshInterval)
: DEFAULT_FORCE_REFRESH_INTERVAL;
this.forceRefreshInterval = forceRefreshInterval;
refreshJob = scheduler.scheduleWithFixedDelay(() -> refreshVehicleStatus(false), 5, refreshInterval.toSeconds(),
TimeUnit.SECONDS);
forceRefreshJob = scheduler.scheduleWithFixedDelay(() -> refreshVehicleStatus(true), 30,
forceRefreshInterval.toSeconds(), TimeUnit.SECONDS);
final @Nullable Duration forceRefreshInterval;
if (config.forceRefreshInterval == 0) {
forceRefreshInterval = null;
} else {
forceRefreshInterval = config.forceRefreshInterval >= 1 ? Duration.ofMinutes(config.forceRefreshInterval)
: DEFAULT_FORCE_REFRESH_INTERVAL;
}
this.forceRefreshInterval = forceRefreshInterval;
if (forceRefreshInterval != null) {
forceRefreshJob = scheduler.scheduleWithFixedDelay(() -> refreshVehicleStatus(true), 30,
forceRefreshInterval.toSeconds(), TimeUnit.SECONDS);
}
updateStatus(ThingStatus.UNKNOWN);
initTask = scheduler.schedule(() -> loadVehicle(vin), 0, TimeUnit.MILLISECONDS);
@@ -298,7 +305,11 @@ public class BluelinkVehicleHandler extends BaseThingHandler implements VehicleS
return false;
}
return bridgeHnd.climateStart(vehicle, temperature, heat, defrost, igniOnDuration);
final boolean res = bridgeHnd.climateStart(vehicle, temperature, heat, defrost, igniOnDuration);
if (res) {
scheduleForceRefresh();
}
return res;
}
public boolean climateStop() throws BluelinkApiException {
@@ -308,7 +319,11 @@ public class BluelinkVehicleHandler extends BaseThingHandler implements VehicleS
return false;
}
return bridgeHnd.climateStop(vehicle);
final boolean res = bridgeHnd.climateStop(vehicle);
if (res) {
scheduleForceRefresh();
}
return res;
}
public void refreshVehicleStatus(boolean forceRefresh) {
@@ -558,12 +573,17 @@ public class BluelinkVehicleHandler extends BaseThingHandler implements VehicleS
*/
private void scheduleForceRefresh() {
final ScheduledFuture<?> job = forceRefreshJob;
final Duration forceRefreshInterval = this.forceRefreshInterval;
if (job == null || forceRefreshInterval == null) {
return;
if (job != null) {
job.cancel(false);
}
final @Nullable Duration forceRefreshInterval = this.forceRefreshInterval;
if (forceRefreshInterval != null) {
// schedule a periodic job according to forceRefreshInterval
forceRefreshJob = scheduler.scheduleWithFixedDelay(() -> refreshVehicleStatus(true), 10,
forceRefreshInterval.toSeconds(), TimeUnit.SECONDS);
} else {
// schedule a one-shot job if forceRefreshInterval is null
forceRefreshJob = scheduler.schedule(() -> refreshVehicleStatus(true), 10, TimeUnit.SECONDS);
}
job.cancel(false);
scheduler.scheduleWithFixedDelay(() -> refreshVehicleStatus(true), 10, forceRefreshInterval.toSeconds(),
TimeUnit.SECONDS);
}
}
@@ -29,7 +29,7 @@ thing-type.config.bluelink.account.region.option.EU = Europe
thing-type.config.bluelink.account.username.label = Username
thing-type.config.bluelink.account.username.description = Your Bluelink/Connect account email address (not required for EU region)
thing-type.config.bluelink.vehicle.forceRefreshInterval.label = Refresh Interval
thing-type.config.bluelink.vehicle.forceRefreshInterval.description = Interval in minutes to refresh data from the vehicle
thing-type.config.bluelink.vehicle.forceRefreshInterval.description = Interval in minutes to refresh data from the vehicle. Set to 0 to disable periodic forced refresh.
thing-type.config.bluelink.vehicle.refreshInterval.label = Refresh Interval
thing-type.config.bluelink.vehicle.refreshInterval.description = Interval in minutes to fetch cached data from the Hyundai/Kia servers
thing-type.config.bluelink.vehicle.vin.label = VIN
@@ -39,7 +39,7 @@
</parameter>
<parameter name="forceRefreshInterval" type="integer" min="0" unit="min" required="false">
<label>Refresh Interval</label>
<description>Interval in minutes to refresh data from the vehicle</description>
<description>Interval in minutes to refresh data from the vehicle. Set to 0 to disable periodic forced refresh.</description>
<default>240</default>
<advanced>true</advanced>
</parameter>