diff --git a/devices/homie/modules/home-assistant/netdaemon/HomeAssistantGenerated b/devices/homie/modules/home-assistant/netdaemon/HomeAssistantGenerated
index a7ed1b79..2a5adaaa 100644
--- a/devices/homie/modules/home-assistant/netdaemon/HomeAssistantGenerated
+++ b/devices/homie/modules/home-assistant/netdaemon/HomeAssistantGenerated
@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 // <auto-generated>
 // Generated using NetDaemon CodeGenerator nd-codegen v24.43.0.0
-//   At: 2024-10-31T10:48:03.3647423-04:00
+//   At: 2024-12-02T10:39:19.4163305-05:00
 //
 // *** Make sure the version of the codegen tool and your nugets NetDaemon.* have the same version.***
 // You can use following command to keep it up to date with the latest version:
@@ -64,7 +64,10 @@ public static class GeneratedExtensions
         serviceCollection.AddTransient<WakeWordEntities>();
         serviceCollection.AddTransient<WeatherEntities>();
         serviceCollection.AddTransient<ZoneEntities>();
+        serviceCollection.AddTransient<AssistSatelliteEntities>();
         serviceCollection.AddTransient<Services>();
+        serviceCollection.AddTransient<AndroidtvServices>();
+        serviceCollection.AddTransient<AssistSatelliteServices>();
         serviceCollection.AddTransient<AutomationServices>();
         serviceCollection.AddTransient<BackupServices>();
         serviceCollection.AddTransient<ButtonServices>();
@@ -97,6 +100,7 @@ public static class GeneratedExtensions
         serviceCollection.AddTransient<PersistentNotificationServices>();
         serviceCollection.AddTransient<PersonServices>();
         serviceCollection.AddTransient<RecorderServices>();
+        serviceCollection.AddTransient<RemoteServices>();
         serviceCollection.AddTransient<RestServices>();
         serviceCollection.AddTransient<SceneServices>();
         serviceCollection.AddTransient<ScheduleServices>();
@@ -129,6 +133,7 @@ public class GeneratedEntityFactory : IEntityFactory
         var domain = dot < 0 ? entityId.AsSpan() : entityId[..dot];
         return domain switch
         {
+            "assist_satellite" => new AssistSatelliteEntity(haContext, entityId),
             "automation" => new AutomationEntity(haContext, entityId),
             "binary_sensor" => new BinarySensorEntity(haContext, entityId),
             "button" => new ButtonEntity(haContext, entityId),
@@ -214,6 +219,8 @@ public interface IEntities
     WeatherEntities Weather { get; }
 
     ZoneEntities Zone { get; }
+
+    AssistSatelliteEntities AssistSatellite { get; }
 }
 
 public partial class Entities : IEntities
@@ -250,6 +257,7 @@ public partial class Entities : IEntities
     public WakeWordEntities WakeWord => new(_haContext);
     public WeatherEntities Weather => new(_haContext);
     public ZoneEntities Zone => new(_haContext);
+    public AssistSatelliteEntities AssistSatellite => new(_haContext);
 }
 
 public partial class LightEntities
@@ -276,12 +284,15 @@ public partial class MediaPlayerEntities
 
     /// <summary>Enumerates all media_player entities currently registered (at runtime) in Home Assistant as MediaPlayerEntity</summary>
     public IEnumerable<MediaPlayerEntity> EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("media_player.")).Select(e => new MediaPlayerEntity(e));
+    ///<summary>Android TV 192.168.0.106</summary>
     public MediaPlayerEntity AndroidTv1921680106 => new(_haContext, "media_player.android_tv_192_168_0_106");
     ///<summary>YAS_209</summary>
     public MediaPlayerEntity LivingRoomSpeaker => new(_haContext, "media_player.living_room_speaker");
     ///<summary>UE Boom 2</summary>
     public MediaPlayerEntity MusicPlayerDaemon => new(_haContext, "media_player.music_player_daemon");
+    ///<summary>Living room TV</summary>
     public MediaPlayerEntity Onn4kStreamingBox => new(_haContext, "media_player.onn_4k_streaming_box");
+    ///<summary>Living room TV</summary>
     public MediaPlayerEntity Onn4kStreamingBox2 => new(_haContext, "media_player.onn_4k_streaming_box_2");
     ///<summary>Spotify matt</summary>
     public MediaPlayerEntity SpotifyMatt => new(_haContext, "media_player.spotify_matt");
@@ -405,6 +416,7 @@ public partial class DeviceTrackerEntities
 
     /// <summary>Enumerates all device_tracker entities currently registered (at runtime) in Home Assistant as DeviceTrackerEntity</summary>
     public IEnumerable<DeviceTrackerEntity> EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("device_tracker.")).Select(e => new DeviceTrackerEntity(e));
+    public DeviceTrackerEntity Care4b6b => new(_haContext, "device_tracker.care_4b6b");
     ///<summary>Pixel 8</summary>
     public DeviceTrackerEntity Pixel8 => new(_haContext, "device_tracker.pixel_8");
     ///<summary>Z Flip 6</summary>
@@ -421,14 +433,14 @@ public partial class InputBooleanEntities
 
     /// <summary>Enumerates all input_boolean entities currently registered (at runtime) in Home Assistant as InputBooleanEntity</summary>
     public IEnumerable<InputBooleanEntity> EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("input_boolean.")).Select(e => new InputBooleanEntity(e));
-    ///<summary>netdaemon_spotify_play_album</summary>
-    public InputBooleanEntity NetdaemonSpotifyPlayAlbum => new(_haContext, "input_boolean.netdaemon_spotify_play_album");
-    ///<summary>netdaemon_spotify_play_artist</summary>
-    public InputBooleanEntity NetdaemonSpotifyPlayArtist => new(_haContext, "input_boolean.netdaemon_spotify_play_artist");
-    ///<summary>netdaemon_spotify_play_playlist</summary>
-    public InputBooleanEntity NetdaemonSpotifyPlayPlaylist => new(_haContext, "input_boolean.netdaemon_spotify_play_playlist");
-    ///<summary>netdaemon_spotify_play_song</summary>
-    public InputBooleanEntity NetdaemonSpotifyPlaySong => new(_haContext, "input_boolean.netdaemon_spotify_play_song");
+    ///<summary>netdaemon_net_daemon_config_apps_spotify_play_album_play_album</summary>
+    public InputBooleanEntity NetdaemonNetDaemonConfigAppsSpotifyPlayAlbumPlayAlbum => new(_haContext, "input_boolean.netdaemon_net_daemon_config_apps_spotify_play_album_play_album");
+    ///<summary>netdaemon_net_daemon_config_apps_spotify_play_artist_play_artist</summary>
+    public InputBooleanEntity NetdaemonNetDaemonConfigAppsSpotifyPlayArtistPlayArtist => new(_haContext, "input_boolean.netdaemon_net_daemon_config_apps_spotify_play_artist_play_artist");
+    ///<summary>netdaemon_net_daemon_config_apps_spotify_play_playlist_play_playlist</summary>
+    public InputBooleanEntity NetdaemonNetDaemonConfigAppsSpotifyPlayPlaylistPlayPlaylist => new(_haContext, "input_boolean.netdaemon_net_daemon_config_apps_spotify_play_playlist_play_playlist");
+    ///<summary>netdaemon_net_daemon_config_apps_spotify_play_song_play_song</summary>
+    public InputBooleanEntity NetdaemonNetDaemonConfigAppsSpotifyPlaySongPlaySong => new(_haContext, "input_boolean.netdaemon_net_daemon_config_apps_spotify_play_song_play_song");
 }
 
 public partial class InputTextEntities
@@ -511,7 +523,9 @@ public partial class RemoteEntities
 
     /// <summary>Enumerates all remote entities currently registered (at runtime) in Home Assistant as RemoteEntity</summary>
     public IEnumerable<RemoteEntity> EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("remote.")).Select(e => new RemoteEntity(e));
+    ///<summary>Android TV 192.168.0.106</summary>
     public RemoteEntity AndroidTv1921680106 => new(_haContext, "remote.android_tv_192_168_0_106");
+    ///<summary>Living room TV</summary>
     public RemoteEntity Onn4kStreamingBox => new(_haContext, "remote.onn_4k_streaming_box");
 }
 
@@ -581,6 +595,8 @@ public partial class SensorEntities
     public IEnumerable<NumericSensorEntity> EnumerateAllNumeric() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("sensor.") && (e.EntityState?.AttributesJson?.TryGetProperty("unit_of_measurement", out _) ?? false)).Select(e => new NumericSensorEntity(e));
     ///<summary>CODA-4680-FIZ External IP</summary>
     public SensorEntity Coda4680FizExternalIp => new(_haContext, "sensor.coda_4680_fiz_external_ip");
+    ///<summary>Fallback Conversation Agent Result</summary>
+    public SensorEntity FallbackConversationAgentResult => new(_haContext, "sensor.fallback_conversation_agent_result");
     ///<summary>Material Rounded Base Color Matt</summary>
     public SensorEntity MaterialRoundedBaseColorMatt => new(_haContext, "sensor.material_rounded_base_color_matt");
     ///<summary>Pixel 8 Accent color</summary>
@@ -663,6 +679,8 @@ public partial class SensorEntities
     public SensorEntity SunNextRising => new(_haContext, "sensor.sun_next_rising");
     ///<summary>Sun Next setting</summary>
     public SensorEntity SunNextSetting => new(_haContext, "sensor.sun_next_setting");
+    ///<summary>Estimated distance</summary>
+    public NumericSensorEntity Care4b6bEstimatedDistance => new(_haContext, "sensor.care_4b6b_estimated_distance");
     ///<summary>CODA-4680-FIZ Data received</summary>
     public NumericSensorEntity Coda4680FizDataReceived => new(_haContext, "sensor.coda_4680_fiz_data_received");
     ///<summary>CODA-4680-FIZ Data sent</summary>
@@ -693,6 +711,8 @@ public partial class SensorEntities
     public NumericSensorEntity Pixel8WifiSignalStrength => new(_haContext, "sensor.pixel_8_wifi_signal_strength");
     ///<summary>Z Flip 6 Battery level</summary>
     public NumericSensorEntity SmF741wBatteryLevel => new(_haContext, "sensor.sm_f741w_battery_level");
+    ///<summary>Spotify matt Song tempo</summary>
+    public NumericSensorEntity SpotifyMattSongTempo => new(_haContext, "sensor.spotify_matt_song_tempo");
 }
 
 public partial class SttEntities
@@ -833,6 +853,20 @@ public partial class ZoneEntities
     public ZoneEntity Home => new(_haContext, "zone.home");
 }
 
+public partial class AssistSatelliteEntities
+{
+    private readonly IHaContext _haContext;
+    public AssistSatelliteEntities(IHaContext haContext)
+    {
+        _haContext = haContext;
+    }
+
+    /// <summary>Enumerates all assist_satellite entities currently registered (at runtime) in Home Assistant as AssistSatelliteEntity</summary>
+    public IEnumerable<AssistSatelliteEntity> EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("assist_satellite.")).Select(e => new AssistSatelliteEntity(e));
+    ///<summary>M5Stack Atom Echo 31196c Assist satellite</summary>
+    public AssistSatelliteEntity M5stackAtomEcho31196cAssistSatellite => new(_haContext, "assist_satellite.m5stack_atom_echo_31196c_assist_satellite");
+}
+
 public partial record LightEntity : Entity<LightEntity, EntityState<LightAttributes>, LightAttributes>, ILightEntityCore
 {
     public LightEntity(IHaContext haContext, string entityId) : base(haContext, entityId)
@@ -896,6 +930,9 @@ public partial record LightAttributes
 
     [JsonPropertyName("friendly_name")]
     public string? FriendlyName { get; init; }
+
+    [JsonPropertyName("effect")]
+    public string? Effect { get; init; }
 }
 
 public partial record MediaPlayerEntity : Entity<MediaPlayerEntity, EntityState<MediaPlayerAttributes>, MediaPlayerAttributes>, IMediaPlayerEntityCore
@@ -1240,6 +1277,12 @@ public partial record DeviceTrackerAttributes
 
     [JsonPropertyName("vertical_accuracy")]
     public double? VerticalAccuracy { get; init; }
+
+    [JsonPropertyName("restored")]
+    public bool? Restored { get; init; }
+
+    [JsonPropertyName("supported_features")]
+    public double? SupportedFeatures { get; init; }
 }
 
 public partial record InputBooleanEntity : Entity<InputBooleanEntity, EntityState<InputBooleanAttributes>, InputBooleanAttributes>, IInputBooleanEntityCore
@@ -1585,6 +1628,24 @@ public partial record SensorAttributes
 
     [JsonPropertyName("title_org.kde.kdeconnect_tp")]
     public string? TitleOrg_kde_kdeconnectTp { get; init; }
+
+    [JsonPropertyName("speech")]
+    public object? Speech { get; init; }
+
+    [JsonPropertyName("card")]
+    public object? Card { get; init; }
+
+    [JsonPropertyName("language")]
+    public string? Language { get; init; }
+
+    [JsonPropertyName("response_type")]
+    public string? ResponseType { get; init; }
+
+    [JsonPropertyName("data")]
+    public object? Data { get; init; }
+
+    [JsonPropertyName("Full State")]
+    public string? FullState { get; init; }
 }
 
 public partial record NumericSensorEntity : NumericEntity<NumericSensorEntity, NumericEntityState<NumericSensorAttributes>, NumericSensorAttributes>, ISensorEntityCore
@@ -1632,6 +1693,12 @@ public partial record NumericSensorAttributes
 
     [JsonPropertyName("ip6_addresses")]
     public object? Ip6Addresses { get; init; }
+
+    [JsonPropertyName("restored")]
+    public bool? Restored { get; init; }
+
+    [JsonPropertyName("supported_features")]
+    public double? SupportedFeatures { get; init; }
 }
 
 public partial record SttEntity : Entity<SttEntity, EntityState<SttAttributes>, SttAttributes>
@@ -1907,8 +1974,32 @@ public partial record ZoneAttributes
     public string? FriendlyName { get; init; }
 }
 
+public partial record AssistSatelliteEntity : Entity<AssistSatelliteEntity, EntityState<AssistSatelliteAttributes>, AssistSatelliteAttributes>
+{
+    public AssistSatelliteEntity(IHaContext haContext, string entityId) : base(haContext, entityId)
+    {
+    }
+
+    public AssistSatelliteEntity(IEntityCore entity) : base(entity)
+    {
+    }
+}
+
+public partial record AssistSatelliteAttributes
+{
+    [JsonPropertyName("friendly_name")]
+    public string? FriendlyName { get; init; }
+
+    [JsonPropertyName("supported_features")]
+    public double? SupportedFeatures { get; init; }
+}
+
 public interface IServices
 {
+    AndroidtvServices Androidtv { get; }
+
+    AssistSatelliteServices AssistSatellite { get; }
+
     AutomationServices Automation { get; }
 
     BackupServices Backup { get; }
@@ -1973,6 +2064,8 @@ public interface IServices
 
     RecorderServices Recorder { get; }
 
+    RemoteServices Remote { get; }
+
     RestServices Rest { get; }
 
     SceneServices Scene { get; }
@@ -2016,6 +2109,8 @@ public partial class Services : IServices
         _haContext = haContext;
     }
 
+    public AndroidtvServices Androidtv => new(_haContext);
+    public AssistSatelliteServices AssistSatellite => new(_haContext);
     public AutomationServices Automation => new(_haContext);
     public BackupServices Backup => new(_haContext);
     public ButtonServices Button => new(_haContext);
@@ -2048,6 +2143,7 @@ public partial class Services : IServices
     public PersistentNotificationServices PersistentNotification => new(_haContext);
     public PersonServices Person => new(_haContext);
     public RecorderServices Recorder => new(_haContext);
+    public RemoteServices Remote => new(_haContext);
     public RestServices Rest => new(_haContext);
     public SceneServices Scene => new(_haContext);
     public ScheduleServices Schedule => new(_haContext);
@@ -2067,6 +2163,130 @@ public partial class Services : IServices
     public ZoneServices Zone => new(_haContext);
 }
 
+public partial class AndroidtvServices
+{
+    private readonly IHaContext _haContext;
+    public AndroidtvServices(IHaContext haContext)
+    {
+        _haContext = haContext;
+    }
+
+    ///<summary>Sends an ADB command to an Android / Fire TV device.</summary>
+    ///<param name="target">The target for this service call</param>
+    public void AdbCommand(ServiceTarget target, AndroidtvAdbCommandParameters data)
+    {
+        _haContext.CallService("androidtv", "adb_command", target, data);
+    }
+
+    ///<summary>Sends an ADB command to an Android / Fire TV device.</summary>
+    ///<param name="command">Either a key command or an ADB shell command. eg: HOME</param>
+    public void AdbCommand(ServiceTarget target, string command)
+    {
+        _haContext.CallService("androidtv", "adb_command", target, new AndroidtvAdbCommandParameters { Command = command });
+    }
+
+    ///<summary>Downloads a file from your Android / Fire TV device to your Home Assistant instance.</summary>
+    ///<param name="target">The target for this service call</param>
+    public void Download(ServiceTarget target, AndroidtvDownloadParameters data)
+    {
+        _haContext.CallService("androidtv", "download", target, data);
+    }
+
+    ///<summary>Downloads a file from your Android / Fire TV device to your Home Assistant instance.</summary>
+    ///<param name="devicePath">The filepath on the Android / Fire TV device. eg: /storage/emulated/0/Download/example.txt</param>
+    ///<param name="localPath">The filepath on your Home Assistant instance. eg: /config/www/example.txt</param>
+    public void Download(ServiceTarget target, string devicePath, string localPath)
+    {
+        _haContext.CallService("androidtv", "download", target, new AndroidtvDownloadParameters { DevicePath = devicePath, LocalPath = localPath });
+    }
+
+    ///<summary>Translates a key press on a remote into ADB &apos;sendevent&apos; commands. You must press one button on the remote within 8 seconds of performing this action.</summary>
+    ///<param name="target">The target for this service call</param>
+    public void LearnSendevent(ServiceTarget target, object? data = null)
+    {
+        _haContext.CallService("androidtv", "learn_sendevent", target, data);
+    }
+
+    ///<summary>Uploads a file from your Home Assistant instance to an Android / Fire TV device.</summary>
+    ///<param name="target">The target for this service call</param>
+    public void Upload(ServiceTarget target, AndroidtvUploadParameters data)
+    {
+        _haContext.CallService("androidtv", "upload", target, data);
+    }
+
+    ///<summary>Uploads a file from your Home Assistant instance to an Android / Fire TV device.</summary>
+    ///<param name="devicePath">The filepath on the Android / Fire TV device. eg: /storage/emulated/0/Download/example.txt</param>
+    ///<param name="localPath">The filepath on your Home Assistant instance. eg: /config/www/example.txt</param>
+    public void Upload(ServiceTarget target, string devicePath, string localPath)
+    {
+        _haContext.CallService("androidtv", "upload", target, new AndroidtvUploadParameters { DevicePath = devicePath, LocalPath = localPath });
+    }
+}
+
+public partial record AndroidtvAdbCommandParameters
+{
+    ///<summary>Either a key command or an ADB shell command. eg: HOME</summary>
+    [JsonPropertyName("command")]
+    public string? Command { get; init; }
+}
+
+public partial record AndroidtvDownloadParameters
+{
+    ///<summary>The filepath on the Android / Fire TV device. eg: /storage/emulated/0/Download/example.txt</summary>
+    [JsonPropertyName("device_path")]
+    public string? DevicePath { get; init; }
+
+    ///<summary>The filepath on your Home Assistant instance. eg: /config/www/example.txt</summary>
+    [JsonPropertyName("local_path")]
+    public string? LocalPath { get; init; }
+}
+
+public partial record AndroidtvUploadParameters
+{
+    ///<summary>The filepath on the Android / Fire TV device. eg: /storage/emulated/0/Download/example.txt</summary>
+    [JsonPropertyName("device_path")]
+    public string? DevicePath { get; init; }
+
+    ///<summary>The filepath on your Home Assistant instance. eg: /config/www/example.txt</summary>
+    [JsonPropertyName("local_path")]
+    public string? LocalPath { get; init; }
+}
+
+public partial class AssistSatelliteServices
+{
+    private readonly IHaContext _haContext;
+    public AssistSatelliteServices(IHaContext haContext)
+    {
+        _haContext = haContext;
+    }
+
+    ///<summary>Let the satellite announce a message.</summary>
+    ///<param name="target">The target for this service call</param>
+    public void Announce(ServiceTarget target, AssistSatelliteAnnounceParameters data)
+    {
+        _haContext.CallService("assist_satellite", "announce", target, data);
+    }
+
+    ///<summary>Let the satellite announce a message.</summary>
+    ///<param name="message">The message to announce. eg: Time to wake up!</param>
+    ///<param name="mediaId">The media ID to announce instead of using text-to-speech.</param>
+    public void Announce(ServiceTarget target, string? message = null, string? mediaId = null)
+    {
+        _haContext.CallService("assist_satellite", "announce", target, new AssistSatelliteAnnounceParameters { Message = message, MediaId = mediaId });
+    }
+}
+
+public partial record AssistSatelliteAnnounceParameters
+{
+    ///<summary>The message to announce. eg: Time to wake up!</summary>
+    [JsonPropertyName("message")]
+    public string? Message { get; init; }
+
+    ///<summary>The media ID to announce instead of using text-to-speech.</summary>
+    [JsonPropertyName("media_id")]
+    public string? MediaId { get; init; }
+}
+
 public partial class AutomationServices
 {
     private readonly IHaContext _haContext;
@@ -2207,8 +2427,8 @@ public partial class CalendarServices
 
     ///<summary>Get events on a calendar within a time range.</summary>
     ///<param name="startDateTime">Returns active events after this time (exclusive). When not set, defaults to now. eg: 2022-03-22 20:00:00</param>
-    ///<param name="endDateTime">Returns active events before this time (exclusive). Cannot be used with &apos;duration&apos;. eg: 2022-03-22 22:00:00</param>
-    ///<param name="duration">Returns active events from start_date_time until the specified duration.</param>
+    ///<param name="endDateTime">Returns active events before this time (exclusive). Cannot be used with Duration. eg: 2022-03-22 22:00:00</param>
+    ///<param name="duration">Returns active events from Start time for the specified duration.</param>
     public void GetEvents(ServiceTarget target, DateTime? startDateTime = null, DateTime? endDateTime = null, object? duration = null)
     {
         _haContext.CallService("calendar", "get_events", target, new CalendarGetEventsParameters { StartDateTime = startDateTime, EndDateTime = endDateTime, Duration = duration });
@@ -2224,8 +2444,8 @@ public partial class CalendarServices
     ///<summary>Get events on a calendar within a time range.</summary>
     ///<param name="target">The target for this service call</param>
     ///<param name="startDateTime">Returns active events after this time (exclusive). When not set, defaults to now. eg: 2022-03-22 20:00:00</param>
-    ///<param name="endDateTime">Returns active events before this time (exclusive). Cannot be used with &apos;duration&apos;. eg: 2022-03-22 22:00:00</param>
-    ///<param name="duration">Returns active events from start_date_time until the specified duration.</param>
+    ///<param name="endDateTime">Returns active events before this time (exclusive). Cannot be used with Duration. eg: 2022-03-22 22:00:00</param>
+    ///<param name="duration">Returns active events from Start time for the specified duration.</param>
     public Task<JsonElement?> GetEventsAsync(ServiceTarget target, DateTime? startDateTime = null, DateTime? endDateTime = null, object? duration = null)
     {
         return _haContext.CallServiceWithResponseAsync("calendar", "get_events", target, new CalendarGetEventsParameters { StartDateTime = startDateTime, EndDateTime = endDateTime, Duration = duration });
@@ -2273,11 +2493,11 @@ public partial record CalendarGetEventsParameters
     [JsonPropertyName("start_date_time")]
     public DateTime? StartDateTime { get; init; }
 
-    ///<summary>Returns active events before this time (exclusive). Cannot be used with &apos;duration&apos;. eg: 2022-03-22 22:00:00</summary>
+    ///<summary>Returns active events before this time (exclusive). Cannot be used with Duration. eg: 2022-03-22 22:00:00</summary>
     [JsonPropertyName("end_date_time")]
     public DateTime? EndDateTime { get; init; }
 
-    ///<summary>Returns active events from start_date_time until the specified duration.</summary>
+    ///<summary>Returns active events from Start time for the specified duration.</summary>
     [JsonPropertyName("duration")]
     public object? Duration { get; init; }
 }
@@ -2299,7 +2519,7 @@ public partial class CastServices
     ///<summary>Shows a dashboard view on a Chromecast device.</summary>
     ///<param name="entityId">Media player entity to show the dashboard view on.</param>
     ///<param name="dashboardPath">The URL path of the dashboard to show. eg: lovelace-cast</param>
-    ///<param name="viewPath">The path of the dashboard view to show. eg: downstairs</param>
+    ///<param name="viewPath">The URL path of the dashboard view to show. eg: downstairs</param>
     public void ShowLovelaceView(string entityId, string dashboardPath, string? viewPath = null)
     {
         _haContext.CallService("cast", "show_lovelace_view", null, new CastShowLovelaceViewParameters { EntityId = entityId, DashboardPath = dashboardPath, ViewPath = viewPath });
@@ -2316,7 +2536,7 @@ public partial record CastShowLovelaceViewParameters
     [JsonPropertyName("dashboard_path")]
     public string? DashboardPath { get; init; }
 
-    ///<summary>The path of the dashboard view to show. eg: downstairs</summary>
+    ///<summary>The URL path of the dashboard view to show. eg: downstairs</summary>
     [JsonPropertyName("view_path")]
     public string? ViewPath { get; init; }
 }
@@ -2657,13 +2877,13 @@ public partial class DeviceTrackerServices
         _haContext = haContext;
     }
 
-    ///<summary>Records a seen tracked device.</summary>
+    ///<summary>Manually update the records of a seen legacy device tracker in the known_devices.yaml file.</summary>
     public void See(DeviceTrackerSeeParameters data)
     {
         _haContext.CallService("device_tracker", "see", null, data);
     }
 
-    ///<summary>Records a seen tracked device.</summary>
+    ///<summary>Manually update the records of a seen legacy device tracker in the known_devices.yaml file.</summary>
     ///<param name="mac">MAC address of the device. eg: FF:FF:FF:FF:FF:FF</param>
     ///<param name="devId">ID of the device (find the ID in `known_devices.yaml`). eg: phonedave</param>
     ///<param name="hostName">Hostname of the device. eg: Dave</param>
@@ -3150,7 +3370,7 @@ public partial class InputNumberServices
         _haContext.CallService("input_number", "decrement", target, data);
     }
 
-    ///<summary>Increments the value by 1 step.</summary>
+    ///<summary>Increments the current value by 1 step.</summary>
     ///<param name="target">The target for this service call</param>
     public void Increment(ServiceTarget target, object? data = null)
     {
@@ -4574,6 +4794,158 @@ public partial record RecorderPurgeEntitiesParameters
     public double? KeepDays { get; init; }
 }
 
+public partial class RemoteServices
+{
+    private readonly IHaContext _haContext;
+    public RemoteServices(IHaContext haContext)
+    {
+        _haContext = haContext;
+    }
+
+    ///<summary>Deletes a command or a list of commands from the database.</summary>
+    ///<param name="target">The target for this service call</param>
+    public void DeleteCommand(ServiceTarget target, RemoteDeleteCommandParameters data)
+    {
+        _haContext.CallService("remote", "delete_command", target, data);
+    }
+
+    ///<summary>Deletes a command or a list of commands from the database.</summary>
+    ///<param name="device">Device from which commands will be deleted. eg: television</param>
+    ///<param name="command">The single command or the list of commands to be deleted. eg: Mute</param>
+    public void DeleteCommand(ServiceTarget target, object command, string? device = null)
+    {
+        _haContext.CallService("remote", "delete_command", target, new RemoteDeleteCommandParameters { Device = device, Command = command });
+    }
+
+    ///<summary>Learns a command or a list of commands from a device.</summary>
+    ///<param name="target">The target for this service call</param>
+    public void LearnCommand(ServiceTarget target, RemoteLearnCommandParameters data)
+    {
+        _haContext.CallService("remote", "learn_command", target, data);
+    }
+
+    ///<summary>Learns a command or a list of commands from a device.</summary>
+    ///<param name="device">Device ID to learn command from. eg: television</param>
+    ///<param name="command">A single command or a list of commands to learn. eg: Turn on</param>
+    ///<param name="commandType">The type of command to be learned.</param>
+    ///<param name="alternative">If code must be stored as an alternative. This is useful for discrete codes. Discrete codes are used for toggles that only perform one function. For example, a code to only turn a device on. If it is on already, sending the code won&apos;t change the state.</param>
+    ///<param name="timeout">Timeout for the command to be learned.</param>
+    public void LearnCommand(ServiceTarget target, string? device = null, object? command = null, object? commandType = null, bool? alternative = null, long? timeout = null)
+    {
+        _haContext.CallService("remote", "learn_command", target, new RemoteLearnCommandParameters { Device = device, Command = command, CommandType = commandType, Alternative = alternative, Timeout = timeout });
+    }
+
+    ///<summary>Sends a command or a list of commands to a device.</summary>
+    ///<param name="target">The target for this service call</param>
+    public void SendCommand(ServiceTarget target, RemoteSendCommandParameters data)
+    {
+        _haContext.CallService("remote", "send_command", target, data);
+    }
+
+    ///<summary>Sends a command or a list of commands to a device.</summary>
+    ///<param name="device">Device ID to send command to. eg: 32756745</param>
+    ///<param name="command">A single command or a list of commands to send. eg: Play</param>
+    ///<param name="numRepeats">The number of times you want to repeat the commands.</param>
+    ///<param name="delaySecs">The time you want to wait in between repeated commands.</param>
+    ///<param name="holdSecs">The time you want to have it held before the release is send.</param>
+    public void SendCommand(ServiceTarget target, object command, string? device = null, double? numRepeats = null, double? delaySecs = null, double? holdSecs = null)
+    {
+        _haContext.CallService("remote", "send_command", target, new RemoteSendCommandParameters { Device = device, Command = command, NumRepeats = numRepeats, DelaySecs = delaySecs, HoldSecs = holdSecs });
+    }
+
+    ///<summary>Toggles a device on/off.</summary>
+    ///<param name="target">The target for this service call</param>
+    public void Toggle(ServiceTarget target, object? data = null)
+    {
+        _haContext.CallService("remote", "toggle", target, data);
+    }
+
+    ///<summary>Turns the device off.</summary>
+    ///<param name="target">The target for this service call</param>
+    public void TurnOff(ServiceTarget target, object? data = null)
+    {
+        _haContext.CallService("remote", "turn_off", target, data);
+    }
+
+    ///<summary>Sends the power on command.</summary>
+    ///<param name="target">The target for this service call</param>
+    public void TurnOn(ServiceTarget target, RemoteTurnOnParameters data)
+    {
+        _haContext.CallService("remote", "turn_on", target, data);
+    }
+
+    ///<summary>Sends the power on command.</summary>
+    ///<param name="activity">Activity ID or activity name to be started. eg: BedroomTV</param>
+    public void TurnOn(ServiceTarget target, string? activity = null)
+    {
+        _haContext.CallService("remote", "turn_on", target, new RemoteTurnOnParameters { Activity = activity });
+    }
+}
+
+public partial record RemoteDeleteCommandParameters
+{
+    ///<summary>Device from which commands will be deleted. eg: television</summary>
+    [JsonPropertyName("device")]
+    public string? Device { get; init; }
+
+    ///<summary>The single command or the list of commands to be deleted. eg: Mute</summary>
+    [JsonPropertyName("command")]
+    public object? Command { get; init; }
+}
+
+public partial record RemoteLearnCommandParameters
+{
+    ///<summary>Device ID to learn command from. eg: television</summary>
+    [JsonPropertyName("device")]
+    public string? Device { get; init; }
+
+    ///<summary>A single command or a list of commands to learn. eg: Turn on</summary>
+    [JsonPropertyName("command")]
+    public object? Command { get; init; }
+
+    ///<summary>The type of command to be learned.</summary>
+    [JsonPropertyName("command_type")]
+    public object? CommandType { get; init; }
+
+    ///<summary>If code must be stored as an alternative. This is useful for discrete codes. Discrete codes are used for toggles that only perform one function. For example, a code to only turn a device on. If it is on already, sending the code won&apos;t change the state.</summary>
+    [JsonPropertyName("alternative")]
+    public bool? Alternative { get; init; }
+
+    ///<summary>Timeout for the command to be learned.</summary>
+    [JsonPropertyName("timeout")]
+    public long? Timeout { get; init; }
+}
+
+public partial record RemoteSendCommandParameters
+{
+    ///<summary>Device ID to send command to. eg: 32756745</summary>
+    [JsonPropertyName("device")]
+    public string? Device { get; init; }
+
+    ///<summary>A single command or a list of commands to send. eg: Play</summary>
+    [JsonPropertyName("command")]
+    public object? Command { get; init; }
+
+    ///<summary>The number of times you want to repeat the commands.</summary>
+    [JsonPropertyName("num_repeats")]
+    public double? NumRepeats { get; init; }
+
+    ///<summary>The time you want to wait in between repeated commands.</summary>
+    [JsonPropertyName("delay_secs")]
+    public double? DelaySecs { get; init; }
+
+    ///<summary>The time you want to have it held before the release is send.</summary>
+    [JsonPropertyName("hold_secs")]
+    public double? HoldSecs { get; init; }
+}
+
+public partial record RemoteTurnOnParameters
+{
+    ///<summary>Activity ID or activity name to be started. eg: BedroomTV</summary>
+    [JsonPropertyName("activity")]
+    public string? Activity { get; init; }
+}
+
 public partial class RestServices
 {
     private readonly IHaContext _haContext;
@@ -5026,6 +5398,23 @@ public partial class SpotifyplusServices
         _haContext = haContext;
     }
 
+    ///<summary>Add one or more items to the end of the user&apos;s current Spotify Player playback queue.</summary>
+    public void AddPlayerQueueItems(SpotifyplusAddPlayerQueueItemsParameters data)
+    {
+        _haContext.CallService("spotifyplus", "add_player_queue_items", null, data);
+    }
+
+    ///<summary>Add one or more items to the end of the user&apos;s current Spotify Player playback queue.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="uris">A list of Spotify track or episode URIs to add to the queue (spotify:track:6zd8T1PBe9JFHmuVnurdRp, spotify:track:1kWUud3vY5ij5r62zxpTRy); values can be track or episode URIs.  All URIs must be of the same type - you cannot mix and match tracks and episodes.  An unlimited number of items can be added in one request, but the more items the longer it will take. eg: spotify:track:6zd8T1PBe9JFHmuVnurdRp</param>
+    ///<param name="deviceId">The id or name of the Spotify Connect Player device this command is targeting.  If not supplied, the user&apos;s currently active device is the target.  If no device is active (or an &apos;*&apos; is specified), then the SpotifyPlus default device is activated. eg: 0d1841b0976bae2a3a310dd74c0f337465899bc8</param>
+    ///<param name="verifyDeviceId">True to verify a device id is active; otherwise, false to assume that a device id is already active. Default is True. eg: True</param>
+    ///<param name="delay">Time delay (in seconds) to wait AFTER issuing the add request (if necessary). This delay will give the spotify web api time to process the change before another command is issued.  Default is 0.15; value range is 0 - 10. eg: 0.15</param>
+    public void AddPlayerQueueItems(string entityId, string uris, string? deviceId = null, bool? verifyDeviceId = null, double? delay = null)
+    {
+        _haContext.CallService("spotifyplus", "add_player_queue_items", null, new SpotifyplusAddPlayerQueueItemsParameters { EntityId = entityId, Uris = uris, DeviceId = deviceId, VerifyDeviceId = verifyDeviceId, Delay = delay });
+    }
+
     ///<summary>Check if one or more albums (or the currently playing album) exists in the current user&apos;s &apos;Your Library&apos; favorites.</summary>
     public void CheckAlbumFavorites(SpotifyplusCheckAlbumFavoritesParameters data)
     {
@@ -5224,6 +5613,34 @@ public partial class SpotifyplusServices
         return _haContext.CallServiceWithResponseAsync("spotifyplus", "check_track_favorites", null, new SpotifyplusCheckTrackFavoritesParameters { EntityId = entityId, Ids = ids });
     }
 
+    ///<summary>Check to see if the current user is following one or more users.</summary>
+    public void CheckUsersFollowing(SpotifyplusCheckUsersFollowingParameters data)
+    {
+        _haContext.CallService("spotifyplus", "check_users_following", null, data);
+    }
+
+    ///<summary>Check to see if the current user is following one or more users.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="ids">A comma-separated list of Spotify user ID&apos;s to check (e.g. `smedjan, 7piUznRWxNyKpaPvmOSdiZ`).  A maximum of 50 ID&apos;s can be specified. eg: smedjan, 7piUznRWxNyKpaPvmOSdiZ</param>
+    public void CheckUsersFollowing(string entityId, string ids)
+    {
+        _haContext.CallService("spotifyplus", "check_users_following", null, new SpotifyplusCheckUsersFollowingParameters { EntityId = entityId, Ids = ids });
+    }
+
+    ///<summary>Check to see if the current user is following one or more users.</summary>
+    public Task<JsonElement?> CheckUsersFollowingAsync(SpotifyplusCheckUsersFollowingParameters data)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "check_users_following", null, data);
+    }
+
+    ///<summary>Check to see if the current user is following one or more users.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="ids">A comma-separated list of Spotify user ID&apos;s to check (e.g. `smedjan, 7piUznRWxNyKpaPvmOSdiZ`).  A maximum of 50 ID&apos;s can be specified. eg: smedjan, 7piUznRWxNyKpaPvmOSdiZ</param>
+    public Task<JsonElement?> CheckUsersFollowingAsync(string entityId, string ids)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "check_users_following", null, new SpotifyplusCheckUsersFollowingParameters { EntityId = entityId, Ids = ids });
+    }
+
     ///<summary>Add the current user as a follower of one or more artists.</summary>
     public void FollowArtists(SpotifyplusFollowArtistsParameters data)
     {
@@ -5501,6 +5918,68 @@ public partial class SpotifyplusServices
         return _haContext.CallServiceWithResponseAsync("spotifyplus", "get_artist_info", null, new SpotifyplusGetArtistInfoParameters { EntityId = entityId, ArtistId = artistId });
     }
 
+    ///<summary>Get Spotify catalog information about artists similar to a given artist. Similarity is based on analysis of the Spotify community&apos;s listening history.</summary>
+    public void GetArtistRelatedArtists(SpotifyplusGetArtistRelatedArtistsParameters data)
+    {
+        _haContext.CallService("spotifyplus", "get_artist_related_artists", null, data);
+    }
+
+    ///<summary>Get Spotify catalog information about artists similar to a given artist. Similarity is based on analysis of the Spotify community&apos;s listening history.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="artistId">The Spotify ID of the artist.  If omitted, the currently playing artist uri id value is used. eg: 6APm8EjxOHSYM5B4i3vT3q</param>
+    ///<param name="sortResult">True to sort result items by name prior to returning to the caller; otherwise, False to return results in the order that the Spotify Web API returned them. eg: True</param>
+    public void GetArtistRelatedArtists(string entityId, string? artistId = null, bool? sortResult = null)
+    {
+        _haContext.CallService("spotifyplus", "get_artist_related_artists", null, new SpotifyplusGetArtistRelatedArtistsParameters { EntityId = entityId, ArtistId = artistId, SortResult = sortResult });
+    }
+
+    ///<summary>Get Spotify catalog information about artists similar to a given artist. Similarity is based on analysis of the Spotify community&apos;s listening history.</summary>
+    public Task<JsonElement?> GetArtistRelatedArtistsAsync(SpotifyplusGetArtistRelatedArtistsParameters data)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "get_artist_related_artists", null, data);
+    }
+
+    ///<summary>Get Spotify catalog information about artists similar to a given artist. Similarity is based on analysis of the Spotify community&apos;s listening history.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="artistId">The Spotify ID of the artist.  If omitted, the currently playing artist uri id value is used. eg: 6APm8EjxOHSYM5B4i3vT3q</param>
+    ///<param name="sortResult">True to sort result items by name prior to returning to the caller; otherwise, False to return results in the order that the Spotify Web API returned them. eg: True</param>
+    public Task<JsonElement?> GetArtistRelatedArtistsAsync(string entityId, string? artistId = null, bool? sortResult = null)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "get_artist_related_artists", null, new SpotifyplusGetArtistRelatedArtistsParameters { EntityId = entityId, ArtistId = artistId, SortResult = sortResult });
+    }
+
+    ///<summary>Get Spotify catalog information about an artist&apos;s top tracks by country.</summary>
+    public void GetArtistTopTracks(SpotifyplusGetArtistTopTracksParameters data)
+    {
+        _haContext.CallService("spotifyplus", "get_artist_top_tracks", null, data);
+    }
+
+    ///<summary>Get Spotify catalog information about an artist&apos;s top tracks by country.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="artistId">The Spotify ID of the artist.  If omitted, the currently playing artist uri id value is used. eg: 6APm8EjxOHSYM5B4i3vT3q</param>
+    ///<param name="market">An ISO 3166-1 alpha-2 country code. If a country code is specified, only content that is available in that market will be returned.  The country associated with the user account will take priority over this parameter. eg: ES</param>
+    ///<param name="sortResult">True to sort result items by name prior to returning to the caller; otherwise, False to return results in the order that the Spotify Web API returned them. eg: True</param>
+    public void GetArtistTopTracks(string entityId, string? artistId = null, string? market = null, bool? sortResult = null)
+    {
+        _haContext.CallService("spotifyplus", "get_artist_top_tracks", null, new SpotifyplusGetArtistTopTracksParameters { EntityId = entityId, ArtistId = artistId, Market = market, SortResult = sortResult });
+    }
+
+    ///<summary>Get Spotify catalog information about an artist&apos;s top tracks by country.</summary>
+    public Task<JsonElement?> GetArtistTopTracksAsync(SpotifyplusGetArtistTopTracksParameters data)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "get_artist_top_tracks", null, data);
+    }
+
+    ///<summary>Get Spotify catalog information about an artist&apos;s top tracks by country.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="artistId">The Spotify ID of the artist.  If omitted, the currently playing artist uri id value is used. eg: 6APm8EjxOHSYM5B4i3vT3q</param>
+    ///<param name="market">An ISO 3166-1 alpha-2 country code. If a country code is specified, only content that is available in that market will be returned.  The country associated with the user account will take priority over this parameter. eg: ES</param>
+    ///<param name="sortResult">True to sort result items by name prior to returning to the caller; otherwise, False to return results in the order that the Spotify Web API returned them. eg: True</param>
+    public Task<JsonElement?> GetArtistTopTracksAsync(string entityId, string? artistId = null, string? market = null, bool? sortResult = null)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "get_artist_top_tracks", null, new SpotifyplusGetArtistTopTracksParameters { EntityId = entityId, ArtistId = artistId, Market = market, SortResult = sortResult });
+    }
+
     ///<summary>Get the current user&apos;s followed artists.</summary>
     public void GetArtistsFollowed(SpotifyplusGetArtistsFollowedParameters data)
     {
@@ -5535,6 +6014,36 @@ public partial class SpotifyplusServices
         return _haContext.CallServiceWithResponseAsync("spotifyplus", "get_artists_followed", null, new SpotifyplusGetArtistsFollowedParameters { EntityId = entityId, After = after, Limit = limit, LimitTotal = limitTotal, SortResult = sortResult });
     }
 
+    ///<summary>Get Spotify catalog information for a single audiobook.</summary>
+    public void GetAudiobook(SpotifyplusGetAudiobookParameters data)
+    {
+        _haContext.CallService("spotifyplus", "get_audiobook", null, data);
+    }
+
+    ///<summary>Get Spotify catalog information for a single audiobook.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="audiobookId">The Spotify ID for the audiobook (e.g. `74aydHJKgYz3AIq3jjBSv1`). If null, the currently playing audiobook uri id value is used. eg: 74aydHJKgYz3AIq3jjBSv1</param>
+    ///<param name="market">An ISO 3166-1 alpha-2 country code. If a country code is specified, only content that is available in that market will be returned.  The country associated with the user account will take priority over this parameter. eg: ES</param>
+    public void GetAudiobook(string entityId, string? audiobookId = null, string? market = null)
+    {
+        _haContext.CallService("spotifyplus", "get_audiobook", null, new SpotifyplusGetAudiobookParameters { EntityId = entityId, AudiobookId = audiobookId, Market = market });
+    }
+
+    ///<summary>Get Spotify catalog information for a single audiobook.</summary>
+    public Task<JsonElement?> GetAudiobookAsync(SpotifyplusGetAudiobookParameters data)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "get_audiobook", null, data);
+    }
+
+    ///<summary>Get Spotify catalog information for a single audiobook.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="audiobookId">The Spotify ID for the audiobook (e.g. `74aydHJKgYz3AIq3jjBSv1`). If null, the currently playing audiobook uri id value is used. eg: 74aydHJKgYz3AIq3jjBSv1</param>
+    ///<param name="market">An ISO 3166-1 alpha-2 country code. If a country code is specified, only content that is available in that market will be returned.  The country associated with the user account will take priority over this parameter. eg: ES</param>
+    public Task<JsonElement?> GetAudiobookAsync(string entityId, string? audiobookId = null, string? market = null)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "get_audiobook", null, new SpotifyplusGetAudiobookParameters { EntityId = entityId, AudiobookId = audiobookId, Market = market });
+    }
+
     ///<summary>Get Spotify catalog information about an audiobook&apos;s chapters.</summary>
     public void GetAudiobookChapters(SpotifyplusGetAudiobookChaptersParameters data)
     {
@@ -5993,6 +6502,34 @@ public partial class SpotifyplusServices
         return _haContext.CallServiceWithResponseAsync("spotifyplus", "get_playlist", null, new SpotifyplusGetPlaylistParameters { EntityId = entityId, PlaylistId = playlistId, Market = market, Fields = fields, AdditionalTypes = additionalTypes });
     }
 
+    ///<summary>Get the current image associated with a specific playlist.</summary>
+    public void GetPlaylistCoverImage(SpotifyplusGetPlaylistCoverImageParameters data)
+    {
+        _haContext.CallService("spotifyplus", "get_playlist_cover_image", null, data);
+    }
+
+    ///<summary>Get the current image associated with a specific playlist.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="playlistId">The Spotify ID of the playlist (e.g. 5v5ETK9WFXAnGQ3MRubKuE).  If omitted, the currently playing playlist uri id value is used. eg: 5v5ETK9WFXAnGQ3MRubKuE</param>
+    public void GetPlaylistCoverImage(string entityId, string? playlistId = null)
+    {
+        _haContext.CallService("spotifyplus", "get_playlist_cover_image", null, new SpotifyplusGetPlaylistCoverImageParameters { EntityId = entityId, PlaylistId = playlistId });
+    }
+
+    ///<summary>Get the current image associated with a specific playlist.</summary>
+    public Task<JsonElement?> GetPlaylistCoverImageAsync(SpotifyplusGetPlaylistCoverImageParameters data)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "get_playlist_cover_image", null, data);
+    }
+
+    ///<summary>Get the current image associated with a specific playlist.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="playlistId">The Spotify ID of the playlist (e.g. 5v5ETK9WFXAnGQ3MRubKuE).  If omitted, the currently playing playlist uri id value is used. eg: 5v5ETK9WFXAnGQ3MRubKuE</param>
+    public Task<JsonElement?> GetPlaylistCoverImageAsync(string entityId, string? playlistId = null)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "get_playlist_cover_image", null, new SpotifyplusGetPlaylistCoverImageParameters { EntityId = entityId, PlaylistId = playlistId });
+    }
+
     ///<summary>Get a list of the playlists owned or followed by the current Spotify user.</summary>
     public void GetPlaylistFavorites(SpotifyplusGetPlaylistFavoritesParameters data)
     {
@@ -6067,6 +6604,42 @@ public partial class SpotifyplusServices
         return _haContext.CallServiceWithResponseAsync("spotifyplus", "get_playlist_items", null, new SpotifyplusGetPlaylistItemsParameters { EntityId = entityId, PlaylistId = playlistId, Limit = limit, Offset = offset, Market = market, Fields = fields, AdditionalTypes = additionalTypes, LimitTotal = limitTotal });
     }
 
+    ///<summary>Get a list of the playlists owned or followed by the current Spotify user.</summary>
+    public void GetPlaylistsForUser(SpotifyplusGetPlaylistsForUserParameters data)
+    {
+        _haContext.CallService("spotifyplus", "get_playlists_for_user", null, data);
+    }
+
+    ///<summary>Get a list of the playlists owned or followed by the current Spotify user.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="userId">The user&apos;s Spotify user ID (e.g. `smedjan`). eg: smedjan</param>
+    ///<param name="limit">The maximum number of items to return in a page of items when manual paging is used.  Default is 20, Range is 1 to 50.  See the limit_total argument for automatic paging option. eg: 20</param>
+    ///<param name="offset">The page index offset of the first item to return.  Use with limit to get the next set of items.  Default is 0 (the first item). eg: 0</param>
+    ///<param name="limitTotal">The maximum number of items to return for the request.  If specified, this argument overrides the limit and offset argument values and paging is automatically used to retrieve all available items up to the specified limit total. eg: 20</param>
+    ///<param name="sortResult">True to sort result items by name prior to returning to the caller; otherwise, False to return results in the order that the Spotify Web API returned them. eg: True</param>
+    public void GetPlaylistsForUser(string entityId, string userId, double? limit = null, double? offset = null, double? limitTotal = null, bool? sortResult = null)
+    {
+        _haContext.CallService("spotifyplus", "get_playlists_for_user", null, new SpotifyplusGetPlaylistsForUserParameters { EntityId = entityId, UserId = userId, Limit = limit, Offset = offset, LimitTotal = limitTotal, SortResult = sortResult });
+    }
+
+    ///<summary>Get a list of the playlists owned or followed by the current Spotify user.</summary>
+    public Task<JsonElement?> GetPlaylistsForUserAsync(SpotifyplusGetPlaylistsForUserParameters data)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "get_playlists_for_user", null, data);
+    }
+
+    ///<summary>Get a list of the playlists owned or followed by the current Spotify user.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="userId">The user&apos;s Spotify user ID (e.g. `smedjan`). eg: smedjan</param>
+    ///<param name="limit">The maximum number of items to return in a page of items when manual paging is used.  Default is 20, Range is 1 to 50.  See the limit_total argument for automatic paging option. eg: 20</param>
+    ///<param name="offset">The page index offset of the first item to return.  Use with limit to get the next set of items.  Default is 0 (the first item). eg: 0</param>
+    ///<param name="limitTotal">The maximum number of items to return for the request.  If specified, this argument overrides the limit and offset argument values and paging is automatically used to retrieve all available items up to the specified limit total. eg: 20</param>
+    ///<param name="sortResult">True to sort result items by name prior to returning to the caller; otherwise, False to return results in the order that the Spotify Web API returned them. eg: True</param>
+    public Task<JsonElement?> GetPlaylistsForUserAsync(string entityId, string userId, double? limit = null, double? offset = null, double? limitTotal = null, bool? sortResult = null)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "get_playlists_for_user", null, new SpotifyplusGetPlaylistsForUserParameters { EntityId = entityId, UserId = userId, Limit = limit, Offset = offset, LimitTotal = limitTotal, SortResult = sortResult });
+    }
+
     ///<summary>Get Spotify catalog information for a single show.</summary>
     public void GetShow(SpotifyplusGetShowParameters data)
     {
@@ -6551,6 +7124,21 @@ public partial class SpotifyplusServices
         return _haContext.CallServiceWithResponseAsync("spotifyplus", "player_activate_devices", null, new SpotifyplusPlayerActivateDevicesParameters { EntityId = entityId, VerifyUserContext = verifyUserContext, Delay = delay });
     }
 
+    ///<summary>Pause media play for the specified Spotify Connect device.</summary>
+    public void PlayerMediaPause(SpotifyplusPlayerMediaPauseParameters data)
+    {
+        _haContext.CallService("spotifyplus", "player_media_pause", null, data);
+    }
+
+    ///<summary>Pause media play for the specified Spotify Connect device.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="deviceId">The id or name of the Spotify Connect Player device this command is targeting.  If not supplied, the user&apos;s currently active device is the target.  If no device is active (or an &apos;*&apos; is specified), then the SpotifyPlus default device is activated. eg: 0d1841b0976bae2a3a310dd74c0f337465899bc8</param>
+    ///<param name="delay">Time delay (in seconds) to wait AFTER issuing the final Connect command (if necessary). This delay will give the spotify web api time to process the device list change before another command is issued.  Default is 0.50; value range is 0 - 10. eg: 0.50</param>
+    public void PlayerMediaPause(string entityId, string? deviceId = null, double? delay = null)
+    {
+        _haContext.CallService("spotifyplus", "player_media_pause", null, new SpotifyplusPlayerMediaPauseParameters { EntityId = entityId, DeviceId = deviceId, Delay = delay });
+    }
+
     ///<summary>Start playing one or more tracks of the specified context on a Spotify Connect device.</summary>
     public void PlayerMediaPlayContext(SpotifyplusPlayerMediaPlayContextParameters data)
     {
@@ -6605,6 +7193,21 @@ public partial class SpotifyplusServices
         _haContext.CallService("spotifyplus", "player_media_play_tracks", null, new SpotifyplusPlayerMediaPlayTracksParameters { EntityId = entityId, Uris = uris, PositionMs = positionMs, DeviceId = deviceId, Delay = delay });
     }
 
+    ///<summary>Resume media play for the specified Spotify Connect device.</summary>
+    public void PlayerMediaResume(SpotifyplusPlayerMediaResumeParameters data)
+    {
+        _haContext.CallService("spotifyplus", "player_media_resume", null, data);
+    }
+
+    ///<summary>Resume media play for the specified Spotify Connect device.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="deviceId">The id or name of the Spotify Connect Player device this command is targeting.  If not supplied, the user&apos;s currently active device is the target.  If no device is active (or an &apos;*&apos; is specified), then the SpotifyPlus default device is activated. eg: 0d1841b0976bae2a3a310dd74c0f337465899bc8</param>
+    ///<param name="delay">Time delay (in seconds) to wait AFTER issuing the final Connect command (if necessary). This delay will give the spotify web api time to process the device list change before another command is issued.  Default is 0.50; value range is 0 - 10. eg: 0.50</param>
+    public void PlayerMediaResume(string entityId, string? deviceId = null, double? delay = null)
+    {
+        _haContext.CallService("spotifyplus", "player_media_resume", null, new SpotifyplusPlayerMediaResumeParameters { EntityId = entityId, DeviceId = deviceId, Delay = delay });
+    }
+
     ///<summary>Seeks to the given absolute or relative position in the user&apos;s currently playing track for the specified Spotify Connect device.</summary>
     public void PlayerMediaSeek(SpotifyplusPlayerMediaSeekParameters data)
     {
@@ -6622,6 +7225,36 @@ public partial class SpotifyplusServices
         _haContext.CallService("spotifyplus", "player_media_seek", null, new SpotifyplusPlayerMediaSeekParameters { EntityId = entityId, PositionMs = positionMs, DeviceId = deviceId, Delay = delay, RelativePositionMs = relativePositionMs });
     }
 
+    ///<summary>Skips to next track in the user&apos;s queue for the specified Spotify Connect device.</summary>
+    public void PlayerMediaSkipNext(SpotifyplusPlayerMediaSkipNextParameters data)
+    {
+        _haContext.CallService("spotifyplus", "player_media_skip_next", null, data);
+    }
+
+    ///<summary>Skips to next track in the user&apos;s queue for the specified Spotify Connect device.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="deviceId">The id or name of the Spotify Connect Player device this command is targeting.  If not supplied, the user&apos;s currently active device is the target.  If no device is active (or an &apos;*&apos; is specified), then the SpotifyPlus default device is activated. eg: 0d1841b0976bae2a3a310dd74c0f337465899bc8</param>
+    ///<param name="delay">Time delay (in seconds) to wait AFTER issuing the final Connect command (if necessary). This delay will give the spotify web api time to process the device list change before another command is issued.  Default is 0.50; value range is 0 - 10. eg: 0.50</param>
+    public void PlayerMediaSkipNext(string entityId, string? deviceId = null, double? delay = null)
+    {
+        _haContext.CallService("spotifyplus", "player_media_skip_next", null, new SpotifyplusPlayerMediaSkipNextParameters { EntityId = entityId, DeviceId = deviceId, Delay = delay });
+    }
+
+    ///<summary>Skips to previous track in the user&apos;s queue for the specified Spotify Connect device.</summary>
+    public void PlayerMediaSkipPrevious(SpotifyplusPlayerMediaSkipPreviousParameters data)
+    {
+        _haContext.CallService("spotifyplus", "player_media_skip_previous", null, data);
+    }
+
+    ///<summary>Skips to previous track in the user&apos;s queue for the specified Spotify Connect device.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="deviceId">The id or name of the Spotify Connect Player device this command is targeting.  If not supplied, the user&apos;s currently active device is the target.  If no device is active (or an &apos;*&apos; is specified), then the SpotifyPlus default device is activated. eg: 0d1841b0976bae2a3a310dd74c0f337465899bc8</param>
+    ///<param name="delay">Time delay (in seconds) to wait AFTER issuing the final Connect command (if necessary). This delay will give the spotify web api time to process the device list change before another command is issued.  Default is 0.50; value range is 0 - 10. eg: 0.50</param>
+    public void PlayerMediaSkipPrevious(string entityId, string? deviceId = null, double? delay = null)
+    {
+        _haContext.CallService("spotifyplus", "player_media_skip_previous", null, new SpotifyplusPlayerMediaSkipPreviousParameters { EntityId = entityId, DeviceId = deviceId, Delay = delay });
+    }
+
     ///<summary>Resolves a Spotify Connect device identifier from a specified device id, name, alias id, or alias name.  This will ensure that the device id can be found on the network, as well as connect to the device if necessary with the current user context.</summary>
     public void PlayerResolveDeviceId(SpotifyplusPlayerResolveDeviceIdParameters data)
     {
@@ -6808,6 +7441,22 @@ public partial class SpotifyplusServices
         _haContext.CallService("spotifyplus", "playlist_items_add", null, new SpotifyplusPlaylistItemsAddParameters { EntityId = entityId, PlaylistId = playlistId, Uris = uris, Position = position });
     }
 
+    ///<summary>Add one or more items to a user&apos;s playlist.  Items are added in the order they are listed in the `uris` argument.</summary>
+    public Task<JsonElement?> PlaylistItemsAddAsync(SpotifyplusPlaylistItemsAddParameters data)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "playlist_items_add", null, data);
+    }
+
+    ///<summary>Add one or more items to a user&apos;s playlist.  Items are added in the order they are listed in the `uris` argument.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="playlistId">The Spotify ID of the playlist (e.g. 5AC9ZXA7nJ7oGWO911FuDG). eg: 5AC9ZXA7nJ7oGWO911FuDG</param>
+    ///<param name="uris">A comma-separated list of Spotify URIs to add; can be track or episode URIs (e.g. spotify:track:4iV5W9uYEdYUVa79Axb7Rh).  A maximum of 100 items can be specified in one request.  If nothing is specified, then the track (or episode) uri currently playing is used. eg: spotify:track:4iV5W9uYEdYUVa79Axb7Rh,spotify:episode:512ojhOuo1ktJprKbVcKyQ</param>
+    ///<param name="position">The position to insert the items, a zero-based index.  For example, to insert the items in the first position use a value of 0; to insert the items in the third position use a value of 2.  Omit the parameter to append the items to the end of the playlist. eg: 0</param>
+    public Task<JsonElement?> PlaylistItemsAddAsync(string entityId, string playlistId, string? uris = null, double? position = null)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "playlist_items_add", null, new SpotifyplusPlaylistItemsAddParameters { EntityId = entityId, PlaylistId = playlistId, Uris = uris, Position = position });
+    }
+
     ///<summary>Removes (clears) all items from a user&apos;s playlist.</summary>
     public void PlaylistItemsClear(SpotifyplusPlaylistItemsClearParameters data)
     {
@@ -6822,6 +7471,20 @@ public partial class SpotifyplusServices
         _haContext.CallService("spotifyplus", "playlist_items_clear", null, new SpotifyplusPlaylistItemsClearParameters { EntityId = entityId, PlaylistId = playlistId });
     }
 
+    ///<summary>Removes (clears) all items from a user&apos;s playlist.</summary>
+    public Task<JsonElement?> PlaylistItemsClearAsync(SpotifyplusPlaylistItemsClearParameters data)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "playlist_items_clear", null, data);
+    }
+
+    ///<summary>Removes (clears) all items from a user&apos;s playlist.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="playlistId">The Spotify ID of the playlist (e.g. 5AC9ZXA7nJ7oGWO911FuDG). eg: 5AC9ZXA7nJ7oGWO911FuDG</param>
+    public Task<JsonElement?> PlaylistItemsClearAsync(string entityId, string playlistId)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "playlist_items_clear", null, new SpotifyplusPlaylistItemsClearParameters { EntityId = entityId, PlaylistId = playlistId });
+    }
+
     ///<summary>Remove one or more items from a user&apos;s playlist.</summary>
     public void PlaylistItemsRemove(SpotifyplusPlaylistItemsRemoveParameters data)
     {
@@ -6832,12 +7495,94 @@ public partial class SpotifyplusServices
     ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
     ///<param name="playlistId">The Spotify ID of the playlist (e.g. 5AC9ZXA7nJ7oGWO911FuDG). eg: 5AC9ZXA7nJ7oGWO911FuDG</param>
     ///<param name="uris">A comma-separated list of Spotify URIs to remove; can be track or episode URIs (e.g. spotify:track:4iV5W9uYEdYUVa79Axb7Rh).  A maximum of 100 items can be specified in one request.  If nothing is specified, then the track (or episode) uri currently playing is used. eg: spotify:track:4iV5W9uYEdYUVa79Axb7Rh,spotify:episode:512ojhOuo1ktJprKbVcKyQ</param>
-    ///<param name="snapshotId">The playlist&apos;s snapshot ID against which you want to make the changes (e.g. `MzgsMWVkNDY3MTQ5YjVjYWE0MzAyNjkyZWMyOThjNjE3YWMwOTY0ZmJjYg==`).  The API will validate that the specified items exist and make the changes, even if more recent changes have been made to the playlist.  If omitted, the current playlist is updated. eg: MzgsMWVkNDY3MTQ5YjVjYWE0MzAyNjkyZWMyOThjNjE3YWMwOTY0ZmJjYg==</param>
+    ///<param name="snapshotId">The playlist&apos;s snapshot ID against which you want to make the changes (e.g. `MzgsMWVkNDY3MTQ5YjVjYWE0MzAyNjkyZWMyOThjNjE3YWMwOTY0ZmJjYg==`).  The API will validate that the specified items exist and make the changes, even if more recent changes have been made to the playlist.  If omitted, the current playlist is updated.</param>
     public void PlaylistItemsRemove(string entityId, string playlistId, string? uris = null, string? snapshotId = null)
     {
         _haContext.CallService("spotifyplus", "playlist_items_remove", null, new SpotifyplusPlaylistItemsRemoveParameters { EntityId = entityId, PlaylistId = playlistId, Uris = uris, SnapshotId = snapshotId });
     }
 
+    ///<summary>Remove one or more items from a user&apos;s playlist.</summary>
+    public Task<JsonElement?> PlaylistItemsRemoveAsync(SpotifyplusPlaylistItemsRemoveParameters data)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "playlist_items_remove", null, data);
+    }
+
+    ///<summary>Remove one or more items from a user&apos;s playlist.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="playlistId">The Spotify ID of the playlist (e.g. 5AC9ZXA7nJ7oGWO911FuDG). eg: 5AC9ZXA7nJ7oGWO911FuDG</param>
+    ///<param name="uris">A comma-separated list of Spotify URIs to remove; can be track or episode URIs (e.g. spotify:track:4iV5W9uYEdYUVa79Axb7Rh).  A maximum of 100 items can be specified in one request.  If nothing is specified, then the track (or episode) uri currently playing is used. eg: spotify:track:4iV5W9uYEdYUVa79Axb7Rh,spotify:episode:512ojhOuo1ktJprKbVcKyQ</param>
+    ///<param name="snapshotId">The playlist&apos;s snapshot ID against which you want to make the changes (e.g. `MzgsMWVkNDY3MTQ5YjVjYWE0MzAyNjkyZWMyOThjNjE3YWMwOTY0ZmJjYg==`).  The API will validate that the specified items exist and make the changes, even if more recent changes have been made to the playlist.  If omitted, the current playlist is updated.</param>
+    public Task<JsonElement?> PlaylistItemsRemoveAsync(string entityId, string playlistId, string? uris = null, string? snapshotId = null)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "playlist_items_remove", null, new SpotifyplusPlaylistItemsRemoveParameters { EntityId = entityId, PlaylistId = playlistId, Uris = uris, SnapshotId = snapshotId });
+    }
+
+    ///<summary>Reorder items in a user&apos;s playlist.</summary>
+    public void PlaylistItemsReorder(SpotifyplusPlaylistItemsReorderParameters data)
+    {
+        _haContext.CallService("spotifyplus", "playlist_items_reorder", null, data);
+    }
+
+    ///<summary>Reorder items in a user&apos;s playlist.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="playlistId">The Spotify ID of the playlist (e.g. 5AC9ZXA7nJ7oGWO911FuDG). eg: 4yptcTKnXjCu3V92tVVafS</param>
+    ///<param name="rangeStart">The position of the first item to be reordered.  This is a one-offset integer (NOT zero-offset). eg: 2</param>
+    ///<param name="insertBefore">The position where the items should be inserted.  To reorder the items to the end of the playlist, simply set `insertBefore` to the position after the last item.  This is a one-offset integer (NOT zero-offset). eg: 1</param>
+    ///<param name="rangeLength">The amount of items to be reordered; defaults to 1 if not set.  The range of items to be reordered begins from the `rangeStart` position, and includes the `rangeLength` subsequent items. eg: 1</param>
+    ///<param name="snapshotId">The playlist&apos;s snapshot ID against which you want to make the changes (e.g. `MzgsMWVkNDY3MTQ5YjVjYWE0MzAyNjkyZWMyOThjNjE3YWMwOTY0ZmJjYg==`).  The API will validate that the specified items exist and make the changes, even if more recent changes have been made to the playlist.  If omitted, the current playlist is updated.</param>
+    public void PlaylistItemsReorder(string entityId, string playlistId, double rangeStart, double insertBefore, double? rangeLength = null, string? snapshotId = null)
+    {
+        _haContext.CallService("spotifyplus", "playlist_items_reorder", null, new SpotifyplusPlaylistItemsReorderParameters { EntityId = entityId, PlaylistId = playlistId, RangeStart = rangeStart, InsertBefore = insertBefore, RangeLength = rangeLength, SnapshotId = snapshotId });
+    }
+
+    ///<summary>Reorder items in a user&apos;s playlist.</summary>
+    public Task<JsonElement?> PlaylistItemsReorderAsync(SpotifyplusPlaylistItemsReorderParameters data)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "playlist_items_reorder", null, data);
+    }
+
+    ///<summary>Reorder items in a user&apos;s playlist.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="playlistId">The Spotify ID of the playlist (e.g. 5AC9ZXA7nJ7oGWO911FuDG). eg: 4yptcTKnXjCu3V92tVVafS</param>
+    ///<param name="rangeStart">The position of the first item to be reordered.  This is a one-offset integer (NOT zero-offset). eg: 2</param>
+    ///<param name="insertBefore">The position where the items should be inserted.  To reorder the items to the end of the playlist, simply set `insertBefore` to the position after the last item.  This is a one-offset integer (NOT zero-offset). eg: 1</param>
+    ///<param name="rangeLength">The amount of items to be reordered; defaults to 1 if not set.  The range of items to be reordered begins from the `rangeStart` position, and includes the `rangeLength` subsequent items. eg: 1</param>
+    ///<param name="snapshotId">The playlist&apos;s snapshot ID against which you want to make the changes (e.g. `MzgsMWVkNDY3MTQ5YjVjYWE0MzAyNjkyZWMyOThjNjE3YWMwOTY0ZmJjYg==`).  The API will validate that the specified items exist and make the changes, even if more recent changes have been made to the playlist.  If omitted, the current playlist is updated.</param>
+    public Task<JsonElement?> PlaylistItemsReorderAsync(string entityId, string playlistId, double rangeStart, double insertBefore, double? rangeLength = null, string? snapshotId = null)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "playlist_items_reorder", null, new SpotifyplusPlaylistItemsReorderParameters { EntityId = entityId, PlaylistId = playlistId, RangeStart = rangeStart, InsertBefore = insertBefore, RangeLength = rangeLength, SnapshotId = snapshotId });
+    }
+
+    ///<summary>Replace one or more items in a user&apos;s playlist. Replacing items in a playlist will overwrite its existing items. This service can also be used to clear a playlist.</summary>
+    public void PlaylistItemsReplace(SpotifyplusPlaylistItemsReplaceParameters data)
+    {
+        _haContext.CallService("spotifyplus", "playlist_items_replace", null, data);
+    }
+
+    ///<summary>Replace one or more items in a user&apos;s playlist. Replacing items in a playlist will overwrite its existing items. This service can also be used to clear a playlist.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="playlistId">The Spotify ID of the playlist (e.g. `3cEYpjA9oz9GiPac4AsH4n`). eg: 3cEYpjA9oz9GiPac4AsH4n</param>
+    ///<param name="uris">A comma-separated list of Spotify URIs to replace; can be track or episode URIs (e.g. `spotify:track:4iV5W9uYEdYUVa79Axb7Rh, spotify:episode:26c0zVyOv1lzfYpBXdh1zC`). A maximum of 100 items can be specified in one request.</param>
+    public void PlaylistItemsReplace(string entityId, string playlistId, string? uris = null)
+    {
+        _haContext.CallService("spotifyplus", "playlist_items_replace", null, new SpotifyplusPlaylistItemsReplaceParameters { EntityId = entityId, PlaylistId = playlistId, Uris = uris });
+    }
+
+    ///<summary>Replace one or more items in a user&apos;s playlist. Replacing items in a playlist will overwrite its existing items. This service can also be used to clear a playlist.</summary>
+    public Task<JsonElement?> PlaylistItemsReplaceAsync(SpotifyplusPlaylistItemsReplaceParameters data)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "playlist_items_replace", null, data);
+    }
+
+    ///<summary>Replace one or more items in a user&apos;s playlist. Replacing items in a playlist will overwrite its existing items. This service can also be used to clear a playlist.</summary>
+    ///<param name="entityId">Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</param>
+    ///<param name="playlistId">The Spotify ID of the playlist (e.g. `3cEYpjA9oz9GiPac4AsH4n`). eg: 3cEYpjA9oz9GiPac4AsH4n</param>
+    ///<param name="uris">A comma-separated list of Spotify URIs to replace; can be track or episode URIs (e.g. `spotify:track:4iV5W9uYEdYUVa79Axb7Rh, spotify:episode:26c0zVyOv1lzfYpBXdh1zC`). A maximum of 100 items can be specified in one request.</param>
+    public Task<JsonElement?> PlaylistItemsReplaceAsync(string entityId, string playlistId, string? uris = null)
+    {
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "playlist_items_replace", null, new SpotifyplusPlaylistItemsReplaceParameters { EntityId = entityId, PlaylistId = playlistId, Uris = uris });
+    }
+
     ///<summary>Remove one or more albums from the current user&apos;s &apos;Your Library&apos;.</summary>
     public void RemoveAlbumFavorites(SpotifyplusRemoveAlbumFavoritesParameters data)
     {
@@ -7299,14 +8044,15 @@ public partial class SpotifyplusServices
     ///<param name="cpath">Spotify Connect Zeroconf API CPath property value (e.g. &apos;/zc&apos;). eg: /zc</param>
     ///<param name="version">Spotify Connect Zeroconf API version number that the device supports (e.g. &apos;1.0&apos;). eg: 1.0</param>
     ///<param name="useSsl">True if the host device utilizes HTTPS Secure Sockets Layer (SSL) support; otherwise, False to utilize HTTP.  Default is False (HTTP). eg: False</param>
-    ///<param name="username">Spotify user name to login with (e.g. &apos;yourusername@mail.com&apos;).  This MUST match the account name (or one of them) that was used to configure Spotify Connect on the manufacturer device. eg: yourusername@mail.com</param>
-    ///<param name="password">Spotify Connect user password to login with. eg: yourpassword</param>
-    ///<param name="loginid">Spotify Connect login id to login with (e.g. &apos;31l77fd87g8h9j00k89f07jf87ge&apos;).  This is also known as the canonical user id value.  This MUST be the value that relates to the `username` argument. eg: 31l77y75hfnhk79f7gk6jkk878mg</param>
+    ///<param name="username">Spotify user name to login with (e.g. &apos;yourusername@mail.com&apos;).  This MUST match the account name (or one of them) that was used to configure Spotify Connect on the manufacturer device. If not specified, the integration options Spotify Connect username value will be used. eg: yourusername@mail.com</param>
+    ///<param name="password">Spotify Connect user password to login with. If not specified, the integration options Spotify Connect password value will be used. eg: yourpassword</param>
+    ///<param name="loginid">Spotify Connect login id to login with (e.g. &apos;31l77fd87g8h9j00k89f07jf87ge&apos;).  This is also known as the canonical user id value.  This MUST be the value that relates to the `username` argument. If not specified, the integration options Spotify Connect loginId value will be used. eg: 31l77y75hfnhk79f7gk6jkk878mg</param>
     ///<param name="preDisconnect">True if a Disconnect should be made prior to the Connect call.  This will ensure that the active user is logged out, which must be done if switching user accounts; otherwise, False to not issue a Disconnect call.  Default is False. eg: False</param>
     ///<param name="verifyDeviceListEntry">True to ensure that the device id is present in the Spotify Connect device list before issuing a call to Connect; Connect will not be called if the device id is already in the list; otherwise, False to always call Connect to add the device.  Default is False. eg: False</param>
-    public void ZeroconfDeviceConnect(string entityId, string hostIpv4Address, double hostIpPort, string cpath, string username, string password, string? version = null, bool? useSsl = null, string? loginid = null, bool? preDisconnect = null, bool? verifyDeviceListEntry = null)
+    ///<param name="delay">Time delay (in seconds) to wait AFTER issuing a command to the device. This delay will give the spotify zeroconf api time to process the change before another command is issued. Default is 0.50; value range is 0 - 10. eg: 0.50</param>
+    public void ZeroconfDeviceConnect(string entityId, string hostIpv4Address, double hostIpPort, string cpath, string? version = null, bool? useSsl = null, string? username = null, string? password = null, string? loginid = null, bool? preDisconnect = null, bool? verifyDeviceListEntry = null, double? delay = null)
     {
-        _haContext.CallService("spotifyplus", "zeroconf_device_connect", null, new SpotifyplusZeroconfDeviceConnectParameters { EntityId = entityId, HostIpv4Address = hostIpv4Address, HostIpPort = hostIpPort, Cpath = cpath, Version = version, UseSsl = useSsl, Username = username, Password = password, Loginid = loginid, PreDisconnect = preDisconnect, VerifyDeviceListEntry = verifyDeviceListEntry });
+        _haContext.CallService("spotifyplus", "zeroconf_device_connect", null, new SpotifyplusZeroconfDeviceConnectParameters { EntityId = entityId, HostIpv4Address = hostIpv4Address, HostIpPort = hostIpPort, Cpath = cpath, Version = version, UseSsl = useSsl, Username = username, Password = password, Loginid = loginid, PreDisconnect = preDisconnect, VerifyDeviceListEntry = verifyDeviceListEntry, Delay = delay });
     }
 
     ///<summary>Calls the `addUser` Spotify Zeroconf API endpoint to issue a call to SpConnectionLoginBlob.  If successful, the associated device id is added to the Spotify Connect active device list for the specified user account.  This will also issue a `resetUsers` call prior to the `addUser` call.</summary>
@@ -7322,14 +8068,15 @@ public partial class SpotifyplusServices
     ///<param name="cpath">Spotify Connect Zeroconf API CPath property value (e.g. &apos;/zc&apos;). eg: /zc</param>
     ///<param name="version">Spotify Connect Zeroconf API version number that the device supports (e.g. &apos;1.0&apos;). eg: 1.0</param>
     ///<param name="useSsl">True if the host device utilizes HTTPS Secure Sockets Layer (SSL) support; otherwise, False to utilize HTTP.  Default is False (HTTP). eg: False</param>
-    ///<param name="username">Spotify user name to login with (e.g. &apos;yourusername@mail.com&apos;).  This MUST match the account name (or one of them) that was used to configure Spotify Connect on the manufacturer device. eg: yourusername@mail.com</param>
-    ///<param name="password">Spotify Connect user password to login with. eg: yourpassword</param>
-    ///<param name="loginid">Spotify Connect login id to login with (e.g. &apos;31l77fd87g8h9j00k89f07jf87ge&apos;).  This is also known as the canonical user id value.  This MUST be the value that relates to the `username` argument. eg: 31l77y75hfnhk79f7gk6jkk878mg</param>
+    ///<param name="username">Spotify user name to login with (e.g. &apos;yourusername@mail.com&apos;).  This MUST match the account name (or one of them) that was used to configure Spotify Connect on the manufacturer device. If not specified, the integration options Spotify Connect username value will be used. eg: yourusername@mail.com</param>
+    ///<param name="password">Spotify Connect user password to login with. If not specified, the integration options Spotify Connect password value will be used. eg: yourpassword</param>
+    ///<param name="loginid">Spotify Connect login id to login with (e.g. &apos;31l77fd87g8h9j00k89f07jf87ge&apos;).  This is also known as the canonical user id value.  This MUST be the value that relates to the `username` argument. If not specified, the integration options Spotify Connect loginId value will be used. eg: 31l77y75hfnhk79f7gk6jkk878mg</param>
     ///<param name="preDisconnect">True if a Disconnect should be made prior to the Connect call.  This will ensure that the active user is logged out, which must be done if switching user accounts; otherwise, False to not issue a Disconnect call.  Default is False. eg: False</param>
     ///<param name="verifyDeviceListEntry">True to ensure that the device id is present in the Spotify Connect device list before issuing a call to Connect; Connect will not be called if the device id is already in the list; otherwise, False to always call Connect to add the device.  Default is False. eg: False</param>
-    public Task<JsonElement?> ZeroconfDeviceConnectAsync(string entityId, string hostIpv4Address, double hostIpPort, string cpath, string username, string password, string? version = null, bool? useSsl = null, string? loginid = null, bool? preDisconnect = null, bool? verifyDeviceListEntry = null)
+    ///<param name="delay">Time delay (in seconds) to wait AFTER issuing a command to the device. This delay will give the spotify zeroconf api time to process the change before another command is issued. Default is 0.50; value range is 0 - 10. eg: 0.50</param>
+    public Task<JsonElement?> ZeroconfDeviceConnectAsync(string entityId, string hostIpv4Address, double hostIpPort, string cpath, string? version = null, bool? useSsl = null, string? username = null, string? password = null, string? loginid = null, bool? preDisconnect = null, bool? verifyDeviceListEntry = null, double? delay = null)
     {
-        return _haContext.CallServiceWithResponseAsync("spotifyplus", "zeroconf_device_connect", null, new SpotifyplusZeroconfDeviceConnectParameters { EntityId = entityId, HostIpv4Address = hostIpv4Address, HostIpPort = hostIpPort, Cpath = cpath, Version = version, UseSsl = useSsl, Username = username, Password = password, Loginid = loginid, PreDisconnect = preDisconnect, VerifyDeviceListEntry = verifyDeviceListEntry });
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "zeroconf_device_connect", null, new SpotifyplusZeroconfDeviceConnectParameters { EntityId = entityId, HostIpv4Address = hostIpv4Address, HostIpPort = hostIpPort, Cpath = cpath, Version = version, UseSsl = useSsl, Username = username, Password = password, Loginid = loginid, PreDisconnect = preDisconnect, VerifyDeviceListEntry = verifyDeviceListEntry, Delay = delay });
     }
 
     ///<summary>Calls the `resetUsers` Spotify Zeroconf API endpoint to issue a call to SpConnectionLogout. The currently logged in user (if any) will be logged out of Spotify Connect, and the device id removed from the active Spotify Connect device list.</summary>
@@ -7345,9 +8092,10 @@ public partial class SpotifyplusServices
     ///<param name="cpath">Spotify Connect Zeroconf API CPath property value (e.g. &apos;/zc&apos;). eg: /zc</param>
     ///<param name="version">Spotify Connect Zeroconf API version number that the device supports (e.g. &apos;1.0&apos;). eg: 1.0</param>
     ///<param name="useSsl">True if the host device utilizes HTTPS Secure Sockets Layer (SSL) support; otherwise, False to utilize HTTP.  Default is False (HTTP). eg: False</param>
-    public void ZeroconfDeviceDisconnect(string entityId, string hostIpv4Address, double hostIpPort, string cpath, string? version = null, bool? useSsl = null)
+    ///<param name="delay">Time delay (in seconds) to wait AFTER issuing a command to the device. This delay will give the spotify zeroconf api time to process the change before another command is issued. Default is 0.50; value range is 0 - 10. eg: 0.50</param>
+    public void ZeroconfDeviceDisconnect(string entityId, string hostIpv4Address, double hostIpPort, string cpath, string? version = null, bool? useSsl = null, double? delay = null)
     {
-        _haContext.CallService("spotifyplus", "zeroconf_device_disconnect", null, new SpotifyplusZeroconfDeviceDisconnectParameters { EntityId = entityId, HostIpv4Address = hostIpv4Address, HostIpPort = hostIpPort, Cpath = cpath, Version = version, UseSsl = useSsl });
+        _haContext.CallService("spotifyplus", "zeroconf_device_disconnect", null, new SpotifyplusZeroconfDeviceDisconnectParameters { EntityId = entityId, HostIpv4Address = hostIpv4Address, HostIpPort = hostIpPort, Cpath = cpath, Version = version, UseSsl = useSsl, Delay = delay });
     }
 
     ///<summary>Calls the `resetUsers` Spotify Zeroconf API endpoint to issue a call to SpConnectionLogout. The currently logged in user (if any) will be logged out of Spotify Connect, and the device id removed from the active Spotify Connect device list.</summary>
@@ -7363,9 +8111,10 @@ public partial class SpotifyplusServices
     ///<param name="cpath">Spotify Connect Zeroconf API CPath property value (e.g. &apos;/zc&apos;). eg: /zc</param>
     ///<param name="version">Spotify Connect Zeroconf API version number that the device supports (e.g. &apos;1.0&apos;). eg: 1.0</param>
     ///<param name="useSsl">True if the host device utilizes HTTPS Secure Sockets Layer (SSL) support; otherwise, False to utilize HTTP.  Default is False (HTTP). eg: False</param>
-    public Task<JsonElement?> ZeroconfDeviceDisconnectAsync(string entityId, string hostIpv4Address, double hostIpPort, string cpath, string? version = null, bool? useSsl = null)
+    ///<param name="delay">Time delay (in seconds) to wait AFTER issuing a command to the device. This delay will give the spotify zeroconf api time to process the change before another command is issued. Default is 0.50; value range is 0 - 10. eg: 0.50</param>
+    public Task<JsonElement?> ZeroconfDeviceDisconnectAsync(string entityId, string hostIpv4Address, double hostIpPort, string cpath, string? version = null, bool? useSsl = null, double? delay = null)
     {
-        return _haContext.CallServiceWithResponseAsync("spotifyplus", "zeroconf_device_disconnect", null, new SpotifyplusZeroconfDeviceDisconnectParameters { EntityId = entityId, HostIpv4Address = hostIpv4Address, HostIpPort = hostIpPort, Cpath = cpath, Version = version, UseSsl = useSsl });
+        return _haContext.CallServiceWithResponseAsync("spotifyplus", "zeroconf_device_disconnect", null, new SpotifyplusZeroconfDeviceDisconnectParameters { EntityId = entityId, HostIpv4Address = hostIpv4Address, HostIpPort = hostIpPort, Cpath = cpath, Version = version, UseSsl = useSsl, Delay = delay });
     }
 
     ///<summary>Calls the `getInfo` Spotify Zeroconf API endpoint to return information about the device.</summary>
@@ -7433,6 +8182,29 @@ public partial class SpotifyplusServices
     }
 }
 
+public partial record SpotifyplusAddPlayerQueueItemsParameters
+{
+    ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
+    [JsonPropertyName("entity_id")]
+    public string? EntityId { get; init; }
+
+    ///<summary>A list of Spotify track or episode URIs to add to the queue (spotify:track:6zd8T1PBe9JFHmuVnurdRp, spotify:track:1kWUud3vY5ij5r62zxpTRy); values can be track or episode URIs.  All URIs must be of the same type - you cannot mix and match tracks and episodes.  An unlimited number of items can be added in one request, but the more items the longer it will take. eg: spotify:track:6zd8T1PBe9JFHmuVnurdRp</summary>
+    [JsonPropertyName("uris")]
+    public string? Uris { get; init; }
+
+    ///<summary>The id or name of the Spotify Connect Player device this command is targeting.  If not supplied, the user&apos;s currently active device is the target.  If no device is active (or an &apos;*&apos; is specified), then the SpotifyPlus default device is activated. eg: 0d1841b0976bae2a3a310dd74c0f337465899bc8</summary>
+    [JsonPropertyName("device_id")]
+    public string? DeviceId { get; init; }
+
+    ///<summary>True to verify a device id is active; otherwise, false to assume that a device id is already active. Default is True. eg: True</summary>
+    [JsonPropertyName("verify_device_id")]
+    public bool? VerifyDeviceId { get; init; }
+
+    ///<summary>Time delay (in seconds) to wait AFTER issuing the add request (if necessary). This delay will give the spotify web api time to process the change before another command is issued.  Default is 0.15; value range is 0 - 10. eg: 0.15</summary>
+    [JsonPropertyName("delay")]
+    public double? Delay { get; init; }
+}
+
 public partial record SpotifyplusCheckAlbumFavoritesParameters
 {
     ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
@@ -7514,6 +8286,17 @@ public partial record SpotifyplusCheckTrackFavoritesParameters
     public string? Ids { get; init; }
 }
 
+public partial record SpotifyplusCheckUsersFollowingParameters
+{
+    ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
+    [JsonPropertyName("entity_id")]
+    public string? EntityId { get; init; }
+
+    ///<summary>A comma-separated list of Spotify user ID&apos;s to check (e.g. `smedjan, 7piUznRWxNyKpaPvmOSdiZ`).  A maximum of 50 ID&apos;s can be specified. eg: smedjan, 7piUznRWxNyKpaPvmOSdiZ</summary>
+    [JsonPropertyName("ids")]
+    public string? Ids { get; init; }
+}
+
 public partial record SpotifyplusFollowArtistsParameters
 {
     ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
@@ -7704,6 +8487,40 @@ public partial record SpotifyplusGetArtistInfoParameters
     public string? ArtistId { get; init; }
 }
 
+public partial record SpotifyplusGetArtistRelatedArtistsParameters
+{
+    ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
+    [JsonPropertyName("entity_id")]
+    public string? EntityId { get; init; }
+
+    ///<summary>The Spotify ID of the artist.  If omitted, the currently playing artist uri id value is used. eg: 6APm8EjxOHSYM5B4i3vT3q</summary>
+    [JsonPropertyName("artist_id")]
+    public string? ArtistId { get; init; }
+
+    ///<summary>True to sort result items by name prior to returning to the caller; otherwise, False to return results in the order that the Spotify Web API returned them. eg: True</summary>
+    [JsonPropertyName("sort_result")]
+    public bool? SortResult { get; init; }
+}
+
+public partial record SpotifyplusGetArtistTopTracksParameters
+{
+    ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
+    [JsonPropertyName("entity_id")]
+    public string? EntityId { get; init; }
+
+    ///<summary>The Spotify ID of the artist.  If omitted, the currently playing artist uri id value is used. eg: 6APm8EjxOHSYM5B4i3vT3q</summary>
+    [JsonPropertyName("artist_id")]
+    public string? ArtistId { get; init; }
+
+    ///<summary>An ISO 3166-1 alpha-2 country code. If a country code is specified, only content that is available in that market will be returned.  The country associated with the user account will take priority over this parameter. eg: ES</summary>
+    [JsonPropertyName("market")]
+    public string? Market { get; init; }
+
+    ///<summary>True to sort result items by name prior to returning to the caller; otherwise, False to return results in the order that the Spotify Web API returned them. eg: True</summary>
+    [JsonPropertyName("sort_result")]
+    public bool? SortResult { get; init; }
+}
+
 public partial record SpotifyplusGetArtistsFollowedParameters
 {
     ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
@@ -7727,6 +8544,21 @@ public partial record SpotifyplusGetArtistsFollowedParameters
     public bool? SortResult { get; init; }
 }
 
+public partial record SpotifyplusGetAudiobookParameters
+{
+    ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
+    [JsonPropertyName("entity_id")]
+    public string? EntityId { get; init; }
+
+    ///<summary>The Spotify ID for the audiobook (e.g. `74aydHJKgYz3AIq3jjBSv1`). If null, the currently playing audiobook uri id value is used. eg: 74aydHJKgYz3AIq3jjBSv1</summary>
+    [JsonPropertyName("audiobook_id")]
+    public string? AudiobookId { get; init; }
+
+    ///<summary>An ISO 3166-1 alpha-2 country code. If a country code is specified, only content that is available in that market will be returned.  The country associated with the user account will take priority over this parameter. eg: ES</summary>
+    [JsonPropertyName("market")]
+    public string? Market { get; init; }
+}
+
 public partial record SpotifyplusGetAudiobookChaptersParameters
 {
     ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
@@ -8013,6 +8845,17 @@ public partial record SpotifyplusGetPlaylistParameters
     public string? AdditionalTypes { get; init; }
 }
 
+public partial record SpotifyplusGetPlaylistCoverImageParameters
+{
+    ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
+    [JsonPropertyName("entity_id")]
+    public string? EntityId { get; init; }
+
+    ///<summary>The Spotify ID of the playlist (e.g. 5v5ETK9WFXAnGQ3MRubKuE).  If omitted, the currently playing playlist uri id value is used. eg: 5v5ETK9WFXAnGQ3MRubKuE</summary>
+    [JsonPropertyName("playlist_id")]
+    public string? PlaylistId { get; init; }
+}
+
 public partial record SpotifyplusGetPlaylistFavoritesParameters
 {
     ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
@@ -8071,6 +8914,33 @@ public partial record SpotifyplusGetPlaylistItemsParameters
     public double? LimitTotal { get; init; }
 }
 
+public partial record SpotifyplusGetPlaylistsForUserParameters
+{
+    ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
+    [JsonPropertyName("entity_id")]
+    public string? EntityId { get; init; }
+
+    ///<summary>The user&apos;s Spotify user ID (e.g. `smedjan`). eg: smedjan</summary>
+    [JsonPropertyName("user_id")]
+    public string? UserId { get; init; }
+
+    ///<summary>The maximum number of items to return in a page of items when manual paging is used.  Default is 20, Range is 1 to 50.  See the limit_total argument for automatic paging option. eg: 20</summary>
+    [JsonPropertyName("limit")]
+    public double? Limit { get; init; }
+
+    ///<summary>The page index offset of the first item to return.  Use with limit to get the next set of items.  Default is 0 (the first item). eg: 0</summary>
+    [JsonPropertyName("offset")]
+    public double? Offset { get; init; }
+
+    ///<summary>The maximum number of items to return for the request.  If specified, this argument overrides the limit and offset argument values and paging is automatically used to retrieve all available items up to the specified limit total. eg: 20</summary>
+    [JsonPropertyName("limit_total")]
+    public double? LimitTotal { get; init; }
+
+    ///<summary>True to sort result items by name prior to returning to the caller; otherwise, False to return results in the order that the Spotify Web API returned them. eg: True</summary>
+    [JsonPropertyName("sort_result")]
+    public bool? SortResult { get; init; }
+}
+
 public partial record SpotifyplusGetShowParameters
 {
     ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
@@ -8499,6 +9369,21 @@ public partial record SpotifyplusPlayerActivateDevicesParameters
     public double? Delay { get; init; }
 }
 
+public partial record SpotifyplusPlayerMediaPauseParameters
+{
+    ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
+    [JsonPropertyName("entity_id")]
+    public string? EntityId { get; init; }
+
+    ///<summary>The id or name of the Spotify Connect Player device this command is targeting.  If not supplied, the user&apos;s currently active device is the target.  If no device is active (or an &apos;*&apos; is specified), then the SpotifyPlus default device is activated. eg: 0d1841b0976bae2a3a310dd74c0f337465899bc8</summary>
+    [JsonPropertyName("device_id")]
+    public string? DeviceId { get; init; }
+
+    ///<summary>Time delay (in seconds) to wait AFTER issuing the final Connect command (if necessary). This delay will give the spotify web api time to process the device list change before another command is issued.  Default is 0.50; value range is 0 - 10. eg: 0.50</summary>
+    [JsonPropertyName("delay")]
+    public double? Delay { get; init; }
+}
+
 public partial record SpotifyplusPlayerMediaPlayContextParameters
 {
     ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
@@ -8580,6 +9465,21 @@ public partial record SpotifyplusPlayerMediaPlayTracksParameters
     public double? Delay { get; init; }
 }
 
+public partial record SpotifyplusPlayerMediaResumeParameters
+{
+    ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
+    [JsonPropertyName("entity_id")]
+    public string? EntityId { get; init; }
+
+    ///<summary>The id or name of the Spotify Connect Player device this command is targeting.  If not supplied, the user&apos;s currently active device is the target.  If no device is active (or an &apos;*&apos; is specified), then the SpotifyPlus default device is activated. eg: 0d1841b0976bae2a3a310dd74c0f337465899bc8</summary>
+    [JsonPropertyName("device_id")]
+    public string? DeviceId { get; init; }
+
+    ///<summary>Time delay (in seconds) to wait AFTER issuing the final Connect command (if necessary). This delay will give the spotify web api time to process the device list change before another command is issued.  Default is 0.50; value range is 0 - 10. eg: 0.50</summary>
+    [JsonPropertyName("delay")]
+    public double? Delay { get; init; }
+}
+
 public partial record SpotifyplusPlayerMediaSeekParameters
 {
     ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
@@ -8603,6 +9503,36 @@ public partial record SpotifyplusPlayerMediaSeekParameters
     public double? RelativePositionMs { get; init; }
 }
 
+public partial record SpotifyplusPlayerMediaSkipNextParameters
+{
+    ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
+    [JsonPropertyName("entity_id")]
+    public string? EntityId { get; init; }
+
+    ///<summary>The id or name of the Spotify Connect Player device this command is targeting.  If not supplied, the user&apos;s currently active device is the target.  If no device is active (or an &apos;*&apos; is specified), then the SpotifyPlus default device is activated. eg: 0d1841b0976bae2a3a310dd74c0f337465899bc8</summary>
+    [JsonPropertyName("device_id")]
+    public string? DeviceId { get; init; }
+
+    ///<summary>Time delay (in seconds) to wait AFTER issuing the final Connect command (if necessary). This delay will give the spotify web api time to process the device list change before another command is issued.  Default is 0.50; value range is 0 - 10. eg: 0.50</summary>
+    [JsonPropertyName("delay")]
+    public double? Delay { get; init; }
+}
+
+public partial record SpotifyplusPlayerMediaSkipPreviousParameters
+{
+    ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
+    [JsonPropertyName("entity_id")]
+    public string? EntityId { get; init; }
+
+    ///<summary>The id or name of the Spotify Connect Player device this command is targeting.  If not supplied, the user&apos;s currently active device is the target.  If no device is active (or an &apos;*&apos; is specified), then the SpotifyPlus default device is activated. eg: 0d1841b0976bae2a3a310dd74c0f337465899bc8</summary>
+    [JsonPropertyName("device_id")]
+    public string? DeviceId { get; init; }
+
+    ///<summary>Time delay (in seconds) to wait AFTER issuing the final Connect command (if necessary). This delay will give the spotify web api time to process the device list change before another command is issued.  Default is 0.50; value range is 0 - 10. eg: 0.50</summary>
+    [JsonPropertyName("delay")]
+    public double? Delay { get; init; }
+}
+
 public partial record SpotifyplusPlayerResolveDeviceIdParameters
 {
     ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
@@ -8827,11 +9757,53 @@ public partial record SpotifyplusPlaylistItemsRemoveParameters
     [JsonPropertyName("uris")]
     public string? Uris { get; init; }
 
-    ///<summary>The playlist&apos;s snapshot ID against which you want to make the changes (e.g. `MzgsMWVkNDY3MTQ5YjVjYWE0MzAyNjkyZWMyOThjNjE3YWMwOTY0ZmJjYg==`).  The API will validate that the specified items exist and make the changes, even if more recent changes have been made to the playlist.  If omitted, the current playlist is updated. eg: MzgsMWVkNDY3MTQ5YjVjYWE0MzAyNjkyZWMyOThjNjE3YWMwOTY0ZmJjYg==</summary>
+    ///<summary>The playlist&apos;s snapshot ID against which you want to make the changes (e.g. `MzgsMWVkNDY3MTQ5YjVjYWE0MzAyNjkyZWMyOThjNjE3YWMwOTY0ZmJjYg==`).  The API will validate that the specified items exist and make the changes, even if more recent changes have been made to the playlist.  If omitted, the current playlist is updated.</summary>
     [JsonPropertyName("snapshot_id")]
     public string? SnapshotId { get; init; }
 }
 
+public partial record SpotifyplusPlaylistItemsReorderParameters
+{
+    ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
+    [JsonPropertyName("entity_id")]
+    public string? EntityId { get; init; }
+
+    ///<summary>The Spotify ID of the playlist (e.g. 5AC9ZXA7nJ7oGWO911FuDG). eg: 4yptcTKnXjCu3V92tVVafS</summary>
+    [JsonPropertyName("playlist_id")]
+    public string? PlaylistId { get; init; }
+
+    ///<summary>The position of the first item to be reordered.  This is a one-offset integer (NOT zero-offset). eg: 2</summary>
+    [JsonPropertyName("range_start")]
+    public double? RangeStart { get; init; }
+
+    ///<summary>The position where the items should be inserted.  To reorder the items to the end of the playlist, simply set `insertBefore` to the position after the last item.  This is a one-offset integer (NOT zero-offset). eg: 1</summary>
+    [JsonPropertyName("insert_before")]
+    public double? InsertBefore { get; init; }
+
+    ///<summary>The amount of items to be reordered; defaults to 1 if not set.  The range of items to be reordered begins from the `rangeStart` position, and includes the `rangeLength` subsequent items. eg: 1</summary>
+    [JsonPropertyName("range_length")]
+    public double? RangeLength { get; init; }
+
+    ///<summary>The playlist&apos;s snapshot ID against which you want to make the changes (e.g. `MzgsMWVkNDY3MTQ5YjVjYWE0MzAyNjkyZWMyOThjNjE3YWMwOTY0ZmJjYg==`).  The API will validate that the specified items exist and make the changes, even if more recent changes have been made to the playlist.  If omitted, the current playlist is updated.</summary>
+    [JsonPropertyName("snapshot_id")]
+    public string? SnapshotId { get; init; }
+}
+
+public partial record SpotifyplusPlaylistItemsReplaceParameters
+{
+    ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
+    [JsonPropertyName("entity_id")]
+    public string? EntityId { get; init; }
+
+    ///<summary>The Spotify ID of the playlist (e.g. `3cEYpjA9oz9GiPac4AsH4n`). eg: 3cEYpjA9oz9GiPac4AsH4n</summary>
+    [JsonPropertyName("playlist_id")]
+    public string? PlaylistId { get; init; }
+
+    ///<summary>A comma-separated list of Spotify URIs to replace; can be track or episode URIs (e.g. `spotify:track:4iV5W9uYEdYUVa79Axb7Rh, spotify:episode:26c0zVyOv1lzfYpBXdh1zC`). A maximum of 100 items can be specified in one request.</summary>
+    [JsonPropertyName("uris")]
+    public string? Uris { get; init; }
+}
+
 public partial record SpotifyplusRemoveAlbumFavoritesParameters
 {
     ///<summary>Entity ID of the SpotifyPlus device that will make the request to the Spotify Web API. eg: media_player.spotifyplus_username</summary>
@@ -9218,15 +10190,15 @@ public partial record SpotifyplusZeroconfDeviceConnectParameters
     [JsonPropertyName("use_ssl")]
     public bool? UseSsl { get; init; }
 
-    ///<summary>Spotify user name to login with (e.g. &apos;yourusername@mail.com&apos;).  This MUST match the account name (or one of them) that was used to configure Spotify Connect on the manufacturer device. eg: yourusername@mail.com</summary>
+    ///<summary>Spotify user name to login with (e.g. &apos;yourusername@mail.com&apos;).  This MUST match the account name (or one of them) that was used to configure Spotify Connect on the manufacturer device. If not specified, the integration options Spotify Connect username value will be used. eg: yourusername@mail.com</summary>
     [JsonPropertyName("username")]
     public string? Username { get; init; }
 
-    ///<summary>Spotify Connect user password to login with. eg: yourpassword</summary>
+    ///<summary>Spotify Connect user password to login with. If not specified, the integration options Spotify Connect password value will be used. eg: yourpassword</summary>
     [JsonPropertyName("password")]
     public string? Password { get; init; }
 
-    ///<summary>Spotify Connect login id to login with (e.g. &apos;31l77fd87g8h9j00k89f07jf87ge&apos;).  This is also known as the canonical user id value.  This MUST be the value that relates to the `username` argument. eg: 31l77y75hfnhk79f7gk6jkk878mg</summary>
+    ///<summary>Spotify Connect login id to login with (e.g. &apos;31l77fd87g8h9j00k89f07jf87ge&apos;).  This is also known as the canonical user id value.  This MUST be the value that relates to the `username` argument. If not specified, the integration options Spotify Connect loginId value will be used. eg: 31l77y75hfnhk79f7gk6jkk878mg</summary>
     [JsonPropertyName("loginid")]
     public string? Loginid { get; init; }
 
@@ -9237,6 +10209,10 @@ public partial record SpotifyplusZeroconfDeviceConnectParameters
     ///<summary>True to ensure that the device id is present in the Spotify Connect device list before issuing a call to Connect; Connect will not be called if the device id is already in the list; otherwise, False to always call Connect to add the device.  Default is False. eg: False</summary>
     [JsonPropertyName("verify_device_list_entry")]
     public bool? VerifyDeviceListEntry { get; init; }
+
+    ///<summary>Time delay (in seconds) to wait AFTER issuing a command to the device. This delay will give the spotify zeroconf api time to process the change before another command is issued. Default is 0.50; value range is 0 - 10. eg: 0.50</summary>
+    [JsonPropertyName("delay")]
+    public double? Delay { get; init; }
 }
 
 public partial record SpotifyplusZeroconfDeviceDisconnectParameters
@@ -9264,6 +10240,10 @@ public partial record SpotifyplusZeroconfDeviceDisconnectParameters
     ///<summary>True if the host device utilizes HTTPS Secure Sockets Layer (SSL) support; otherwise, False to utilize HTTP.  Default is False (HTTP). eg: False</summary>
     [JsonPropertyName("use_ssl")]
     public bool? UseSsl { get; init; }
+
+    ///<summary>Time delay (in seconds) to wait AFTER issuing a command to the device. This delay will give the spotify zeroconf api time to process the change before another command is issued. Default is 0.50; value range is 0 - 10. eg: 0.50</summary>
+    [JsonPropertyName("delay")]
+    public double? Delay { get; init; }
 }
 
 public partial record SpotifyplusZeroconfDeviceGetinfoParameters
@@ -9977,6 +10957,142 @@ public partial class ZoneServices
     }
 }
 
+public static class AndroidtvEntityExtensionMethods
+{
+    ///<summary>Sends an ADB command to an Android / Fire TV device.</summary>
+    public static void AdbCommand(this IMediaPlayerEntityCore target, AndroidtvAdbCommandParameters data)
+    {
+        target.CallService("adb_command", data);
+    }
+
+    ///<summary>Sends an ADB command to an Android / Fire TV device.</summary>
+    public static void AdbCommand(this IEnumerable<IMediaPlayerEntityCore> target, AndroidtvAdbCommandParameters data)
+    {
+        target.CallService("adb_command", data);
+    }
+
+    ///<summary>Sends an ADB command to an Android / Fire TV device.</summary>
+    ///<param name="target">The IMediaPlayerEntityCore to call this service for</param>
+    ///<param name="command">Either a key command or an ADB shell command. eg: HOME</param>
+    public static void AdbCommand(this IMediaPlayerEntityCore target, string command)
+    {
+        target.CallService("adb_command", new AndroidtvAdbCommandParameters { Command = command });
+    }
+
+    ///<summary>Sends an ADB command to an Android / Fire TV device.</summary>
+    ///<param name="target">The IEnumerable&lt;IMediaPlayerEntityCore&gt; to call this service for</param>
+    ///<param name="command">Either a key command or an ADB shell command. eg: HOME</param>
+    public static void AdbCommand(this IEnumerable<IMediaPlayerEntityCore> target, string command)
+    {
+        target.CallService("adb_command", new AndroidtvAdbCommandParameters { Command = command });
+    }
+
+    ///<summary>Downloads a file from your Android / Fire TV device to your Home Assistant instance.</summary>
+    public static void Download(this IMediaPlayerEntityCore target, AndroidtvDownloadParameters data)
+    {
+        target.CallService("download", data);
+    }
+
+    ///<summary>Downloads a file from your Android / Fire TV device to your Home Assistant instance.</summary>
+    public static void Download(this IEnumerable<IMediaPlayerEntityCore> target, AndroidtvDownloadParameters data)
+    {
+        target.CallService("download", data);
+    }
+
+    ///<summary>Downloads a file from your Android / Fire TV device to your Home Assistant instance.</summary>
+    ///<param name="target">The IMediaPlayerEntityCore to call this service for</param>
+    ///<param name="devicePath">The filepath on the Android / Fire TV device. eg: /storage/emulated/0/Download/example.txt</param>
+    ///<param name="localPath">The filepath on your Home Assistant instance. eg: /config/www/example.txt</param>
+    public static void Download(this IMediaPlayerEntityCore target, string devicePath, string localPath)
+    {
+        target.CallService("download", new AndroidtvDownloadParameters { DevicePath = devicePath, LocalPath = localPath });
+    }
+
+    ///<summary>Downloads a file from your Android / Fire TV device to your Home Assistant instance.</summary>
+    ///<param name="target">The IEnumerable&lt;IMediaPlayerEntityCore&gt; to call this service for</param>
+    ///<param name="devicePath">The filepath on the Android / Fire TV device. eg: /storage/emulated/0/Download/example.txt</param>
+    ///<param name="localPath">The filepath on your Home Assistant instance. eg: /config/www/example.txt</param>
+    public static void Download(this IEnumerable<IMediaPlayerEntityCore> target, string devicePath, string localPath)
+    {
+        target.CallService("download", new AndroidtvDownloadParameters { DevicePath = devicePath, LocalPath = localPath });
+    }
+
+    ///<summary>Translates a key press on a remote into ADB &apos;sendevent&apos; commands. You must press one button on the remote within 8 seconds of performing this action.</summary>
+    public static void LearnSendevent(this IMediaPlayerEntityCore target, object? data = null)
+    {
+        target.CallService("learn_sendevent", data);
+    }
+
+    ///<summary>Translates a key press on a remote into ADB &apos;sendevent&apos; commands. You must press one button on the remote within 8 seconds of performing this action.</summary>
+    public static void LearnSendevent(this IEnumerable<IMediaPlayerEntityCore> target, object? data = null)
+    {
+        target.CallService("learn_sendevent", data);
+    }
+
+    ///<summary>Uploads a file from your Home Assistant instance to an Android / Fire TV device.</summary>
+    public static void Upload(this IMediaPlayerEntityCore target, AndroidtvUploadParameters data)
+    {
+        target.CallService("upload", data);
+    }
+
+    ///<summary>Uploads a file from your Home Assistant instance to an Android / Fire TV device.</summary>
+    public static void Upload(this IEnumerable<IMediaPlayerEntityCore> target, AndroidtvUploadParameters data)
+    {
+        target.CallService("upload", data);
+    }
+
+    ///<summary>Uploads a file from your Home Assistant instance to an Android / Fire TV device.</summary>
+    ///<param name="target">The IMediaPlayerEntityCore to call this service for</param>
+    ///<param name="devicePath">The filepath on the Android / Fire TV device. eg: /storage/emulated/0/Download/example.txt</param>
+    ///<param name="localPath">The filepath on your Home Assistant instance. eg: /config/www/example.txt</param>
+    public static void Upload(this IMediaPlayerEntityCore target, string devicePath, string localPath)
+    {
+        target.CallService("upload", new AndroidtvUploadParameters { DevicePath = devicePath, LocalPath = localPath });
+    }
+
+    ///<summary>Uploads a file from your Home Assistant instance to an Android / Fire TV device.</summary>
+    ///<param name="target">The IEnumerable&lt;IMediaPlayerEntityCore&gt; to call this service for</param>
+    ///<param name="devicePath">The filepath on the Android / Fire TV device. eg: /storage/emulated/0/Download/example.txt</param>
+    ///<param name="localPath">The filepath on your Home Assistant instance. eg: /config/www/example.txt</param>
+    public static void Upload(this IEnumerable<IMediaPlayerEntityCore> target, string devicePath, string localPath)
+    {
+        target.CallService("upload", new AndroidtvUploadParameters { DevicePath = devicePath, LocalPath = localPath });
+    }
+}
+
+public static class AssistSatelliteEntityExtensionMethods
+{
+    ///<summary>Let the satellite announce a message.</summary>
+    public static void Announce(this AssistSatelliteEntity target, AssistSatelliteAnnounceParameters data)
+    {
+        target.CallService("announce", data);
+    }
+
+    ///<summary>Let the satellite announce a message.</summary>
+    public static void Announce(this IEnumerable<AssistSatelliteEntity> target, AssistSatelliteAnnounceParameters data)
+    {
+        target.CallService("announce", data);
+    }
+
+    ///<summary>Let the satellite announce a message.</summary>
+    ///<param name="target">The AssistSatelliteEntity to call this service for</param>
+    ///<param name="message">The message to announce. eg: Time to wake up!</param>
+    ///<param name="mediaId">The media ID to announce instead of using text-to-speech.</param>
+    public static void Announce(this AssistSatelliteEntity target, string? message = null, string? mediaId = null)
+    {
+        target.CallService("announce", new AssistSatelliteAnnounceParameters { Message = message, MediaId = mediaId });
+    }
+
+    ///<summary>Let the satellite announce a message.</summary>
+    ///<param name="target">The IEnumerable&lt;AssistSatelliteEntity&gt; to call this service for</param>
+    ///<param name="message">The message to announce. eg: Time to wake up!</param>
+    ///<param name="mediaId">The media ID to announce instead of using text-to-speech.</param>
+    public static void Announce(this IEnumerable<AssistSatelliteEntity> target, string? message = null, string? mediaId = null)
+    {
+        target.CallService("announce", new AssistSatelliteAnnounceParameters { Message = message, MediaId = mediaId });
+    }
+}
+
 public static class AutomationEntityExtensionMethods
 {
     ///<summary>Toggles (enable / disable) an automation.</summary>
@@ -10128,8 +11244,8 @@ public static class CalendarEntityExtensionMethods
     ///<summary>Get events on a calendar within a time range.</summary>
     ///<param name="target">The ICalendarEntityCore to call this service for</param>
     ///<param name="startDateTime">Returns active events after this time (exclusive). When not set, defaults to now. eg: 2022-03-22 20:00:00</param>
-    ///<param name="endDateTime">Returns active events before this time (exclusive). Cannot be used with &apos;duration&apos;. eg: 2022-03-22 22:00:00</param>
-    ///<param name="duration">Returns active events from start_date_time until the specified duration.</param>
+    ///<param name="endDateTime">Returns active events before this time (exclusive). Cannot be used with Duration. eg: 2022-03-22 22:00:00</param>
+    ///<param name="duration">Returns active events from Start time for the specified duration.</param>
     public static Task<JsonElement?> GetEventsAsync(this ICalendarEntityCore target, DateTime? startDateTime = null, DateTime? endDateTime = null, object? duration = null)
     {
         return target.CallServiceWithResponseAsync("get_events", new CalendarGetEventsParameters { StartDateTime = startDateTime, EndDateTime = endDateTime, Duration = duration });
@@ -10150,8 +11266,8 @@ public static class CalendarEntityExtensionMethods
     ///<summary>Get events on a calendar within a time range.</summary>
     ///<param name="target">The ICalendarEntityCore to call this service for</param>
     ///<param name="startDateTime">Returns active events after this time (exclusive). When not set, defaults to now. eg: 2022-03-22 20:00:00</param>
-    ///<param name="endDateTime">Returns active events before this time (exclusive). Cannot be used with &apos;duration&apos;. eg: 2022-03-22 22:00:00</param>
-    ///<param name="duration">Returns active events from start_date_time until the specified duration.</param>
+    ///<param name="endDateTime">Returns active events before this time (exclusive). Cannot be used with Duration. eg: 2022-03-22 22:00:00</param>
+    ///<param name="duration">Returns active events from Start time for the specified duration.</param>
     public static void GetEvents(this ICalendarEntityCore target, DateTime? startDateTime = null, DateTime? endDateTime = null, object? duration = null)
     {
         target.CallService("get_events", new CalendarGetEventsParameters { StartDateTime = startDateTime, EndDateTime = endDateTime, Duration = duration });
@@ -10160,8 +11276,8 @@ public static class CalendarEntityExtensionMethods
     ///<summary>Get events on a calendar within a time range.</summary>
     ///<param name="target">The IEnumerable&lt;ICalendarEntityCore&gt; to call this service for</param>
     ///<param name="startDateTime">Returns active events after this time (exclusive). When not set, defaults to now. eg: 2022-03-22 20:00:00</param>
-    ///<param name="endDateTime">Returns active events before this time (exclusive). Cannot be used with &apos;duration&apos;. eg: 2022-03-22 22:00:00</param>
-    ///<param name="duration">Returns active events from start_date_time until the specified duration.</param>
+    ///<param name="endDateTime">Returns active events before this time (exclusive). Cannot be used with Duration. eg: 2022-03-22 22:00:00</param>
+    ///<param name="duration">Returns active events from Start time for the specified duration.</param>
     public static void GetEvents(this IEnumerable<ICalendarEntityCore> target, DateTime? startDateTime = null, DateTime? endDateTime = null, object? duration = null)
     {
         target.CallService("get_events", new CalendarGetEventsParameters { StartDateTime = startDateTime, EndDateTime = endDateTime, Duration = duration });
@@ -10922,6 +12038,163 @@ public static class NumberEntityExtensionMethods
     }
 }
 
+public static class RemoteEntityExtensionMethods
+{
+    ///<summary>Deletes a command or a list of commands from the database.</summary>
+    public static void DeleteCommand(this IRemoteEntityCore target, RemoteDeleteCommandParameters data)
+    {
+        target.CallService("delete_command", data);
+    }
+
+    ///<summary>Deletes a command or a list of commands from the database.</summary>
+    public static void DeleteCommand(this IEnumerable<IRemoteEntityCore> target, RemoteDeleteCommandParameters data)
+    {
+        target.CallService("delete_command", data);
+    }
+
+    ///<summary>Deletes a command or a list of commands from the database.</summary>
+    ///<param name="target">The IRemoteEntityCore to call this service for</param>
+    ///<param name="device">Device from which commands will be deleted. eg: television</param>
+    ///<param name="command">The single command or the list of commands to be deleted. eg: Mute</param>
+    public static void DeleteCommand(this IRemoteEntityCore target, object command, string? device = null)
+    {
+        target.CallService("delete_command", new RemoteDeleteCommandParameters { Device = device, Command = command });
+    }
+
+    ///<summary>Deletes a command or a list of commands from the database.</summary>
+    ///<param name="target">The IEnumerable&lt;IRemoteEntityCore&gt; to call this service for</param>
+    ///<param name="device">Device from which commands will be deleted. eg: television</param>
+    ///<param name="command">The single command or the list of commands to be deleted. eg: Mute</param>
+    public static void DeleteCommand(this IEnumerable<IRemoteEntityCore> target, object command, string? device = null)
+    {
+        target.CallService("delete_command", new RemoteDeleteCommandParameters { Device = device, Command = command });
+    }
+
+    ///<summary>Learns a command or a list of commands from a device.</summary>
+    public static void LearnCommand(this IRemoteEntityCore target, RemoteLearnCommandParameters data)
+    {
+        target.CallService("learn_command", data);
+    }
+
+    ///<summary>Learns a command or a list of commands from a device.</summary>
+    public static void LearnCommand(this IEnumerable<IRemoteEntityCore> target, RemoteLearnCommandParameters data)
+    {
+        target.CallService("learn_command", data);
+    }
+
+    ///<summary>Learns a command or a list of commands from a device.</summary>
+    ///<param name="target">The IRemoteEntityCore to call this service for</param>
+    ///<param name="device">Device ID to learn command from. eg: television</param>
+    ///<param name="command">A single command or a list of commands to learn. eg: Turn on</param>
+    ///<param name="commandType">The type of command to be learned.</param>
+    ///<param name="alternative">If code must be stored as an alternative. This is useful for discrete codes. Discrete codes are used for toggles that only perform one function. For example, a code to only turn a device on. If it is on already, sending the code won&apos;t change the state.</param>
+    ///<param name="timeout">Timeout for the command to be learned.</param>
+    public static void LearnCommand(this IRemoteEntityCore target, string? device = null, object? command = null, object? commandType = null, bool? alternative = null, long? timeout = null)
+    {
+        target.CallService("learn_command", new RemoteLearnCommandParameters { Device = device, Command = command, CommandType = commandType, Alternative = alternative, Timeout = timeout });
+    }
+
+    ///<summary>Learns a command or a list of commands from a device.</summary>
+    ///<param name="target">The IEnumerable&lt;IRemoteEntityCore&gt; to call this service for</param>
+    ///<param name="device">Device ID to learn command from. eg: television</param>
+    ///<param name="command">A single command or a list of commands to learn. eg: Turn on</param>
+    ///<param name="commandType">The type of command to be learned.</param>
+    ///<param name="alternative">If code must be stored as an alternative. This is useful for discrete codes. Discrete codes are used for toggles that only perform one function. For example, a code to only turn a device on. If it is on already, sending the code won&apos;t change the state.</param>
+    ///<param name="timeout">Timeout for the command to be learned.</param>
+    public static void LearnCommand(this IEnumerable<IRemoteEntityCore> target, string? device = null, object? command = null, object? commandType = null, bool? alternative = null, long? timeout = null)
+    {
+        target.CallService("learn_command", new RemoteLearnCommandParameters { Device = device, Command = command, CommandType = commandType, Alternative = alternative, Timeout = timeout });
+    }
+
+    ///<summary>Sends a command or a list of commands to a device.</summary>
+    public static void SendCommand(this IRemoteEntityCore target, RemoteSendCommandParameters data)
+    {
+        target.CallService("send_command", data);
+    }
+
+    ///<summary>Sends a command or a list of commands to a device.</summary>
+    public static void SendCommand(this IEnumerable<IRemoteEntityCore> target, RemoteSendCommandParameters data)
+    {
+        target.CallService("send_command", data);
+    }
+
+    ///<summary>Sends a command or a list of commands to a device.</summary>
+    ///<param name="target">The IRemoteEntityCore to call this service for</param>
+    ///<param name="device">Device ID to send command to. eg: 32756745</param>
+    ///<param name="command">A single command or a list of commands to send. eg: Play</param>
+    ///<param name="numRepeats">The number of times you want to repeat the commands.</param>
+    ///<param name="delaySecs">The time you want to wait in between repeated commands.</param>
+    ///<param name="holdSecs">The time you want to have it held before the release is send.</param>
+    public static void SendCommand(this IRemoteEntityCore target, object command, string? device = null, double? numRepeats = null, double? delaySecs = null, double? holdSecs = null)
+    {
+        target.CallService("send_command", new RemoteSendCommandParameters { Device = device, Command = command, NumRepeats = numRepeats, DelaySecs = delaySecs, HoldSecs = holdSecs });
+    }
+
+    ///<summary>Sends a command or a list of commands to a device.</summary>
+    ///<param name="target">The IEnumerable&lt;IRemoteEntityCore&gt; to call this service for</param>
+    ///<param name="device">Device ID to send command to. eg: 32756745</param>
+    ///<param name="command">A single command or a list of commands to send. eg: Play</param>
+    ///<param name="numRepeats">The number of times you want to repeat the commands.</param>
+    ///<param name="delaySecs">The time you want to wait in between repeated commands.</param>
+    ///<param name="holdSecs">The time you want to have it held before the release is send.</param>
+    public static void SendCommand(this IEnumerable<IRemoteEntityCore> target, object command, string? device = null, double? numRepeats = null, double? delaySecs = null, double? holdSecs = null)
+    {
+        target.CallService("send_command", new RemoteSendCommandParameters { Device = device, Command = command, NumRepeats = numRepeats, DelaySecs = delaySecs, HoldSecs = holdSecs });
+    }
+
+    ///<summary>Toggles a device on/off.</summary>
+    public static void Toggle(this IRemoteEntityCore target, object? data = null)
+    {
+        target.CallService("toggle", data);
+    }
+
+    ///<summary>Toggles a device on/off.</summary>
+    public static void Toggle(this IEnumerable<IRemoteEntityCore> target, object? data = null)
+    {
+        target.CallService("toggle", data);
+    }
+
+    ///<summary>Turns the device off.</summary>
+    public static void TurnOff(this IRemoteEntityCore target, object? data = null)
+    {
+        target.CallService("turn_off", data);
+    }
+
+    ///<summary>Turns the device off.</summary>
+    public static void TurnOff(this IEnumerable<IRemoteEntityCore> target, object? data = null)
+    {
+        target.CallService("turn_off", data);
+    }
+
+    ///<summary>Sends the power on command.</summary>
+    public static void TurnOn(this IRemoteEntityCore target, RemoteTurnOnParameters data)
+    {
+        target.CallService("turn_on", data);
+    }
+
+    ///<summary>Sends the power on command.</summary>
+    public static void TurnOn(this IEnumerable<IRemoteEntityCore> target, RemoteTurnOnParameters data)
+    {
+        target.CallService("turn_on", data);
+    }
+
+    ///<summary>Sends the power on command.</summary>
+    ///<param name="target">The IRemoteEntityCore to call this service for</param>
+    ///<param name="activity">Activity ID or activity name to be started. eg: BedroomTV</param>
+    public static void TurnOn(this IRemoteEntityCore target, string? activity = null)
+    {
+        target.CallService("turn_on", new RemoteTurnOnParameters { Activity = activity });
+    }
+
+    ///<summary>Sends the power on command.</summary>
+    ///<param name="target">The IEnumerable&lt;IRemoteEntityCore&gt; to call this service for</param>
+    ///<param name="activity">Activity ID or activity name to be started. eg: BedroomTV</param>
+    public static void TurnOn(this IEnumerable<IRemoteEntityCore> target, string? activity = null)
+    {
+        target.CallService("turn_on", new RemoteTurnOnParameters { Activity = activity });
+    }
+}
+
 public static class ScriptEntityExtensionMethods
 {
     ///<summary>Toggle a script. Starts it, if isn&apos;t running, stops it otherwise.</summary>
diff --git a/devices/homie/modules/home-assistant/netdaemon/apps/Spotify/PauseUnpause/PauseUnpause.cs b/devices/homie/modules/home-assistant/netdaemon/apps/Spotify/PauseUnpause/PauseUnpause.cs
new file mode 100644
index 00000000..400b5c9a
--- /dev/null
+++ b/devices/homie/modules/home-assistant/netdaemon/apps/Spotify/PauseUnpause/PauseUnpause.cs
@@ -0,0 +1,48 @@
+using System;
+
+using HomeAssistantGenerated;
+
+using NetDaemon.AppModel;
+using NetDaemon.HassModel;
+using NetDaemon.HassModel.Integration;
+
+
+namespace NetDaemonConfig.Apps.Spotify.PauseUnpause
+{
+    public record PauseUnpauseData(bool pause);
+
+    [NetDaemonApp]
+    public class PlaySong
+    {
+        public PlaySong(IHaContext ha, Services services)
+        {
+            ha.RegisterServiceCallBack<PauseUnpauseData>(
+                "spotify_pause_unpause",
+                (e) =>
+                {
+                    try
+                    {
+                        if (e.pause)
+                        {
+                            services.Spotifyplus.PlayerMediaPause(
+                                entityId: SpotifyTypes.DefaultEntityId,
+                                deviceId: SpotifyTypes.DefaultDevId);
+                        }
+                        else
+                        {
+                            services.Spotifyplus.PlayerMediaResume(
+                                entityId: SpotifyTypes.DefaultEntityId,
+                                deviceId: SpotifyTypes.DefaultDevId);
+                        }
+                    }
+                    catch (Exception error)
+                    {
+                        services.Notify.PersistentNotification(
+                            message: error.Message,
+                            title: "Erreur Spotify");
+                    }
+                }
+            );
+        }
+    }
+}
diff --git a/devices/homie/modules/home-assistant/netdaemon/default.nix b/devices/homie/modules/home-assistant/netdaemon/default.nix
index b873a5e1..ca407fdf 100644
--- a/devices/homie/modules/home-assistant/netdaemon/default.nix
+++ b/devices/homie/modules/home-assistant/netdaemon/default.nix
@@ -92,7 +92,7 @@ in {
         EOF
         )") .
 
-        alejandra .
+        alejandra -q .
         rm -r "$FLAKE/.config"
 
         sed -i "s/finalImageTag = .*/finalImageTag = \"$(cat ./.version)\";/" ./images/netdaemon.nix
diff --git a/devices/homie/modules/home-assistant/spotify-sentences.nix b/devices/homie/modules/home-assistant/spotify-sentences.nix
index cd7d1c14..d782dfbf 100644
--- a/devices/homie/modules/home-assistant/spotify-sentences.nix
+++ b/devices/homie/modules/home-assistant/spotify-sentences.nix
@@ -46,6 +46,23 @@
         slots.artist = "";
       }
     ];
+
+    Pause.data = [
+      {
+        sentences = [
+          "(pause|stop) [the] [(song|track|music)]"
+          "(pause|stop) spotify"
+        ];
+      }
+    ];
+    Unpause.data = [
+      {
+        sentences = [
+          "(unpause|resume) [the] [(song|track|music)]"
+          "(unpause|resume) spotify"
+        ];
+      }
+    ];
   };
 
   lists = {
@@ -79,5 +96,13 @@
       {% endif %}
       on Spotify and playing it.
     '';
+
+    Pause.default = ''
+      Pausing the music.
+    '';
+
+    Unpause.default = ''
+      Resuming the music.
+    '';
   };
 }
diff --git a/devices/homie/modules/home-assistant/spotify.nix b/devices/homie/modules/home-assistant/spotify.nix
index e3255557..75b929d9 100644
--- a/devices/homie/modules/home-assistant/spotify.nix
+++ b/devices/homie/modules/home-assistant/spotify.nix
@@ -24,7 +24,7 @@
 
     config.intent_script = {
       PlayAlbum = {
-        async_action = "false";
+        async_action = false;
         action = [
           {
             service = "netdaemon.spotify_play_album";
@@ -37,7 +37,7 @@
       };
 
       PlayArtist = {
-        async_action = "false";
+        async_action = false;
         action = [
           {
             service = "netdaemon.spotify_play_artist";
@@ -47,7 +47,7 @@
       };
 
       PlayPlaylist = {
-        async_action = "false";
+        async_action = false;
         action = [
           {
             service = "netdaemon.spotify_play_playlist";
@@ -57,7 +57,7 @@
       };
 
       PlaySong = {
-        async_action = "false";
+        async_action = false;
         action = [
           {
             service = "netdaemon.spotify_play_song";
@@ -68,6 +68,26 @@
           }
         ];
       };
+
+      Pause = {
+        async_action = false;
+        action = [
+          {
+            service = "netdaemon.spotify_pause_unpause";
+            data.pause = true;
+          }
+        ];
+      };
+
+      Unpause = {
+        async_action = false;
+        action = [
+          {
+            service = "netdaemon.spotify_pause_unpause";
+            data.pause = false;
+          }
+        ];
+      };
     };
   };
 }