diff --git a/devices/homie/modules/home-assistant/netdaemon/.gitignore b/devices/homie/modules/home-assistant/netdaemon/.gitignore
index 7de5508b..ee601ae0 100644
--- a/devices/homie/modules/home-assistant/netdaemon/.gitignore
+++ b/devices/homie/modules/home-assistant/netdaemon/.gitignore
@@ -1,2 +1,3 @@
obj
bin
+NetDaemonCodegen
diff --git a/devices/homie/modules/home-assistant/netdaemon/HomeAssistantGenerated.cs b/devices/homie/modules/home-assistant/netdaemon/HomeAssistantGenerated.cs
new file mode 100644
index 00000000..b5bd7153
--- /dev/null
+++ b/devices/homie/modules/home-assistant/netdaemon/HomeAssistantGenerated.cs
@@ -0,0 +1,10560 @@
+//------------------------------------------------------------------------------
+//
+// Generated using NetDaemon CodeGenerator nd-codegen v24.37.1.0
+// At: 2024-10-05T16:11:38.2552699-04:00
+//
+// *** Make sure the version of the codegen tool and your nugets Joysoftware.NetDaemon.* have the same version.***
+// You can use following command to keep it up to date with the latest version:
+// dotnet tool update NetDaemon.HassModel.CodeGen
+//
+// To update this file with latest entities run this command in your project directory:
+// dotnet tool run nd-codegen
+//
+// In the template projects we provided a convenience powershell script that will update
+// the codegen and nugets to latest versions update_all_dependencies.ps1.
+//
+// For more information: https://netdaemon.xyz/docs/user/hass_model/hass_model_codegen
+// For more information about NetDaemon: https://netdaemon.xyz/
+//
+//------------------------------------------------------------------------------
+#nullable enable
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using NetDaemon.HassModel;
+using NetDaemon.HassModel.Entities;
+using NetDaemon.HassModel.Entities.Core;
+
+namespace HomeAssistantGenerated;
+public static class GeneratedExtensions
+{
+ ///Registers all injectable generated types in the serviceCollection
+ public static IServiceCollection AddHomeAssistantGenerated(this IServiceCollection serviceCollection)
+ {
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
+ return serviceCollection;
+ }
+}
+
+public interface IEntities
+{
+ LightEntities Light { get; }
+
+ MediaPlayerEntities MediaPlayer { get; }
+
+ AutomationEntities Automation { get; }
+
+ BinarySensorEntities BinarySensor { get; }
+
+ ButtonEntities Button { get; }
+
+ CalendarEntities Calendar { get; }
+
+ ConversationEntities Conversation { get; }
+
+ DeviceTrackerEntities DeviceTracker { get; }
+
+ InputBooleanEntities InputBoolean { get; }
+
+ InputTextEntities InputText { get; }
+
+ LockEntities Lock { get; }
+
+ NumberEntities Number { get; }
+
+ PersonEntities Person { get; }
+
+ RemoteEntities Remote { get; }
+
+ ScriptEntities Script { get; }
+
+ SelectEntities Select { get; }
+
+ SensorEntities Sensor { get; }
+
+ SttEntities Stt { get; }
+
+ SunEntities Sun { get; }
+
+ SwitchEntities Switch { get; }
+
+ TimerEntities Timer { get; }
+
+ TodoEntities Todo { get; }
+
+ TtsEntities Tts { get; }
+
+ WakeWordEntities WakeWord { get; }
+
+ WeatherEntities Weather { get; }
+
+ ZoneEntities Zone { get; }
+}
+
+public partial class Entities : IEntities
+{
+ private readonly IHaContext _haContext;
+ public Entities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ public LightEntities Light => new(_haContext);
+ public MediaPlayerEntities MediaPlayer => new(_haContext);
+ public AutomationEntities Automation => new(_haContext);
+ public BinarySensorEntities BinarySensor => new(_haContext);
+ public ButtonEntities Button => new(_haContext);
+ public CalendarEntities Calendar => new(_haContext);
+ public ConversationEntities Conversation => new(_haContext);
+ public DeviceTrackerEntities DeviceTracker => new(_haContext);
+ public InputBooleanEntities InputBoolean => new(_haContext);
+ public InputTextEntities InputText => new(_haContext);
+ public LockEntities Lock => new(_haContext);
+ public NumberEntities Number => new(_haContext);
+ public PersonEntities Person => new(_haContext);
+ public RemoteEntities Remote => new(_haContext);
+ public ScriptEntities Script => new(_haContext);
+ public SelectEntities Select => new(_haContext);
+ public SensorEntities Sensor => new(_haContext);
+ public SttEntities Stt => new(_haContext);
+ public SunEntities Sun => new(_haContext);
+ public SwitchEntities Switch => new(_haContext);
+ public TimerEntities Timer => new(_haContext);
+ public TodoEntities Todo => new(_haContext);
+ public TtsEntities Tts => new(_haContext);
+ public WakeWordEntities WakeWord => new(_haContext);
+ public WeatherEntities Weather => new(_haContext);
+ public ZoneEntities Zone => new(_haContext);
+}
+
+public partial class LightEntities
+{
+ private readonly IHaContext _haContext;
+ public LightEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all light entities currently registered (at runtime) in Home Assistant as LightEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("light.")).Select(e => new LightEntity(e));
+ ///M5Stack Atom Echo 31196c
+ public LightEntity M5stackAtomEcho31196cM5stackAtomEcho31196c => new(_haContext, "light.m5stack_atom_echo_31196c_m5stack_atom_echo_31196c");
+}
+
+public partial class MediaPlayerEntities
+{
+ private readonly IHaContext _haContext;
+ public MediaPlayerEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all media_player entities currently registered (at runtime) in Home Assistant as MediaPlayerEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("media_player.")).Select(e => new MediaPlayerEntity(e));
+ ///UE Boom 2
+ public MediaPlayerEntity MusicPlayerDaemon => new(_haContext, "media_player.music_player_daemon");
+ ///onn. 4K Streaming Box
+ public MediaPlayerEntity Onn4kStreamingBox => new(_haContext, "media_player.onn_4k_streaming_box");
+ ///onn. 4K Streaming Box
+ public MediaPlayerEntity Onn4kStreamingBox2 => new(_haContext, "media_player.onn_4k_streaming_box_2");
+ ///Spotify matt
+ public MediaPlayerEntity SpotifyMatt => new(_haContext, "media_player.spotify_matt");
+ ///SpotifyPlus matt
+ public MediaPlayerEntity Spotifyplus => new(_haContext, "media_player.spotifyplus");
+}
+
+public partial class AutomationEntities
+{
+ private readonly IHaContext _haContext;
+ public AutomationEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all automation entities currently registered (at runtime) in Home Assistant as AutomationEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("automation.")).Select(e => new AutomationEntity(e));
+ ///Assist - TimerFinished
+ public AutomationEntity AssistTimerfinished => new(_haContext, "automation.assist_timerfinished");
+ ///Assist - TimerReached
+ public AutomationEntity AssistTimerreached => new(_haContext, "automation.assist_timerreached");
+ ///Turn On UE
+ public AutomationEntity TurnOnUe => new(_haContext, "automation.turn_on_ue");
+}
+
+public partial class BinarySensorEntities
+{
+ private readonly IHaContext _haContext;
+ public BinarySensorEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all binary_sensor entities currently registered (at runtime) in Home Assistant as BinarySensorEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("binary_sensor.")).Select(e => new BinarySensorEntity(e));
+ ///CODA-4680-FIZ WAN status
+ public BinarySensorEntity Coda4680FizWanStatus => new(_haContext, "binary_sensor.coda_4680_fiz_wan_status");
+ ///M5Stack Atom Echo 31196c Assist in progress
+ public BinarySensorEntity M5stackAtomEcho131196cAssistInProgress => new(_haContext, "binary_sensor.m5stack_atom_echo_1_31196c_assist_in_progress");
+ ///M5Stack Atom Echo 31196c Button
+ public BinarySensorEntity M5stackAtomEcho131196cButton => new(_haContext, "binary_sensor.m5stack_atom_echo_1_31196c_button");
+ ///Pixel 8 Bluetooth state
+ public BinarySensorEntity Pixel8BluetoothState => new(_haContext, "binary_sensor.pixel_8_bluetooth_state");
+ ///Pixel 8 Headphones
+ public BinarySensorEntity Pixel8Headphones => new(_haContext, "binary_sensor.pixel_8_headphones");
+ ///Pixel 8 Hotspot state
+ public BinarySensorEntity Pixel8HotspotState => new(_haContext, "binary_sensor.pixel_8_hotspot_state");
+ ///Pixel 8 Is charging
+ public BinarySensorEntity Pixel8IsCharging => new(_haContext, "binary_sensor.pixel_8_is_charging");
+ ///Pixel 8 Mic muted
+ public BinarySensorEntity Pixel8MicMuted => new(_haContext, "binary_sensor.pixel_8_mic_muted");
+ ///Pixel 8 Mobile data
+ public BinarySensorEntity Pixel8MobileData => new(_haContext, "binary_sensor.pixel_8_mobile_data");
+ ///Pixel 8 Mobile data roaming
+ public BinarySensorEntity Pixel8MobileDataRoaming => new(_haContext, "binary_sensor.pixel_8_mobile_data_roaming");
+ ///Pixel 8 Music active
+ public BinarySensorEntity Pixel8MusicActive => new(_haContext, "binary_sensor.pixel_8_music_active");
+ ///Pixel 8 NFC state
+ public BinarySensorEntity Pixel8NfcState => new(_haContext, "binary_sensor.pixel_8_nfc_state");
+ ///Pixel 8 Speakerphone
+ public BinarySensorEntity Pixel8Speakerphone => new(_haContext, "binary_sensor.pixel_8_speakerphone");
+ ///Pixel 8 WiFi state
+ public BinarySensorEntity Pixel8WifiState => new(_haContext, "binary_sensor.pixel_8_wifi_state");
+}
+
+public partial class ButtonEntities
+{
+ private readonly IHaContext _haContext;
+ public ButtonEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all button entities currently registered (at runtime) in Home Assistant as ButtonEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("button.")).Select(e => new ButtonEntity(e));
+ ///M5Stack Atom Echo 31196c Factory reset
+ public ButtonEntity M5stackAtomEcho131196cFactoryReset => new(_haContext, "button.m5stack_atom_echo_1_31196c_factory_reset");
+ ///M5Stack Atom Echo 31196c Safe Mode Boot
+ public ButtonEntity M5stackAtomEcho31196cSafeModeBoot => new(_haContext, "button.m5stack_atom_echo_31196c_safe_mode_boot");
+}
+
+public partial class CalendarEntities
+{
+ private readonly IHaContext _haContext;
+ public CalendarEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all calendar entities currently registered (at runtime) in Home Assistant as CalendarEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("calendar.")).Select(e => new CalendarEntity(e));
+ ///Canada, QC
+ public CalendarEntity CanadaQc => new(_haContext, "calendar.canada_qc");
+ ///Contact birthdays
+ public CalendarEntity ContactBirthdays => new(_haContext, "calendar.contact_birthdays");
+ ///Personal
+ public CalendarEntity Personal => new(_haContext, "calendar.personal");
+}
+
+public partial class ConversationEntities
+{
+ private readonly IHaContext _haContext;
+ public ConversationEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all conversation entities currently registered (at runtime) in Home Assistant as ConversationEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("conversation.")).Select(e => new ConversationEntity(e));
+ ///Home Assistant
+ public ConversationEntity HomeAssistant => new(_haContext, "conversation.home_assistant");
+}
+
+public partial class DeviceTrackerEntities
+{
+ private readonly IHaContext _haContext;
+ public DeviceTrackerEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all device_tracker entities currently registered (at runtime) in Home Assistant as DeviceTrackerEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("device_tracker.")).Select(e => new DeviceTrackerEntity(e));
+ ///Pixel 8
+ public DeviceTrackerEntity Pixel8 => new(_haContext, "device_tracker.pixel_8");
+}
+
+public partial class InputBooleanEntities
+{
+ private readonly IHaContext _haContext;
+ public InputBooleanEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all input_boolean entities currently registered (at runtime) in Home Assistant as InputBooleanEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("input_boolean.")).Select(e => new InputBooleanEntity(e));
+ ///netdaemon_app_model_test_script
+ public InputBooleanEntity NetdaemonAppModelTestScript => new(_haContext, "input_boolean.netdaemon_app_model_test_script");
+}
+
+public partial class InputTextEntities
+{
+ private readonly IHaContext _haContext;
+ public InputTextEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all input_text entities currently registered (at runtime) in Home Assistant as InputTextEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("input_text.")).Select(e => new InputTextEntity(e));
+ ///Assist - Timer 1 Location
+ public InputTextEntity AssistTimer1Location => new(_haContext, "input_text.assist_timer1_location");
+ ///Assist - Timer 2 Location
+ public InputTextEntity AssistTimer2Location => new(_haContext, "input_text.assist_timer2_location");
+ ///Assist - Timer 3 Location
+ public InputTextEntity AssistTimer3Location => new(_haContext, "input_text.assist_timer3_location");
+}
+
+public partial class LockEntities
+{
+ private readonly IHaContext _haContext;
+ public LockEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all lock entities currently registered (at runtime) in Home Assistant as LockEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("lock.")).Select(e => new LockEntity(e));
+ ///Smartplug 1 Child lock
+ public LockEntity Smartplug1ChildLock => new(_haContext, "lock.smartplug_1_child_lock");
+ ///Smartplug2 Child lock
+ public LockEntity Smartplug2ChildLock => new(_haContext, "lock.smartplug2_child_lock");
+ ///Smartplug3 Child lock
+ public LockEntity Smartplug3ChildLock => new(_haContext, "lock.smartplug3_child_lock");
+}
+
+public partial class NumberEntities
+{
+ private readonly IHaContext _haContext;
+ public NumberEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all number entities currently registered (at runtime) in Home Assistant as NumberEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("number.")).Select(e => new NumberEntity(e));
+ ///Smartplug 1 Timer
+ public NumberEntity Smartplug1Timer => new(_haContext, "number.smartplug_1_timer");
+ ///Smartplug2 Timer
+ public NumberEntity Smartplug2Timer => new(_haContext, "number.smartplug2_timer");
+ ///Smartplug3 Timer
+ public NumberEntity Smartplug3Timer => new(_haContext, "number.smartplug3_timer");
+}
+
+public partial class PersonEntities
+{
+ private readonly IHaContext _haContext;
+ public PersonEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all person entities currently registered (at runtime) in Home Assistant as PersonEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("person.")).Select(e => new PersonEntity(e));
+ ///Mathis Hurtubise
+ public PersonEntity MathisHurtubise => new(_haContext, "person.mathis_hurtubise");
+}
+
+public partial class RemoteEntities
+{
+ private readonly IHaContext _haContext;
+ public RemoteEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all remote entities currently registered (at runtime) in Home Assistant as RemoteEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("remote.")).Select(e => new RemoteEntity(e));
+ ///onn. 4K Streaming Box
+ public RemoteEntity Onn4kStreamingBox => new(_haContext, "remote.onn_4k_streaming_box");
+}
+
+public partial class ScriptEntities
+{
+ private readonly IHaContext _haContext;
+ public ScriptEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all script entities currently registered (at runtime) in Home Assistant as ScriptEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("script.")).Select(e => new ScriptEntity(e));
+ ///Assist - TimerPause
+ public ScriptEntity AssistTimerpause => new(_haContext, "script.assist_timerpause");
+ ///Assist - TimerStart
+ public ScriptEntity AssistTimerstart => new(_haContext, "script.assist_timerstart");
+ ///Assist - TimerStop
+ public ScriptEntity AssistTimerstop => new(_haContext, "script.assist_timerstop");
+ ///Spotify - Play Artist
+ public ScriptEntity PlayArtist => new(_haContext, "script.play_artist");
+ ///Music - TurnOnUE
+ public ScriptEntity TurnOnUe => new(_haContext, "script.turn_on_ue");
+}
+
+public partial class SelectEntities
+{
+ private readonly IHaContext _haContext;
+ public SelectEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all select entities currently registered (at runtime) in Home Assistant as SelectEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("select.")).Select(e => new SelectEntity(e));
+ ///M5Stack Atom Echo 31196c Assist pipeline
+ public SelectEntity M5stackAtomEcho131196cAssistPipeline => new(_haContext, "select.m5stack_atom_echo_1_31196c_assist_pipeline");
+ ///M5Stack Atom Echo 31196c Finished speaking detection
+ public SelectEntity M5stackAtomEcho131196cFinishedSpeakingDetection => new(_haContext, "select.m5stack_atom_echo_1_31196c_finished_speaking_detection");
+ ///M5Stack Atom Echo 31196c Wake word engine location
+ public SelectEntity M5stackAtomEcho131196cWakeWordEngineLocation => new(_haContext, "select.m5stack_atom_echo_1_31196c_wake_word_engine_location");
+ ///Smartplug 1 Initial state
+ public SelectEntity Smartplug1InitialState => new(_haContext, "select.smartplug_1_initial_state");
+ ///Smartplug 1 Light mode
+ public SelectEntity Smartplug1LightMode => new(_haContext, "select.smartplug_1_light_mode");
+ ///Smartplug2 Initial state
+ public SelectEntity Smartplug2InitialState => new(_haContext, "select.smartplug2_initial_state");
+ ///Smartplug2 Light mode
+ public SelectEntity Smartplug2LightMode => new(_haContext, "select.smartplug2_light_mode");
+ ///Smartplug3 Initial state
+ public SelectEntity Smartplug3InitialState => new(_haContext, "select.smartplug3_initial_state");
+ ///Smartplug3 Light mode
+ public SelectEntity Smartplug3LightMode => new(_haContext, "select.smartplug3_light_mode");
+}
+
+public partial class SensorEntities
+{
+ private readonly IHaContext _haContext;
+ public SensorEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all sensor entities currently registered (at runtime) in Home Assistant as SensorEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("sensor.")).Select(e => new SensorEntity(e));
+ /// Enumerates all non-numeric sensor entities currently registered (at runtime) in Home Assistant as SensorEntity
+ public IEnumerable EnumerateAllNonNumeric() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("sensor.") && !(e.EntityState?.AttributesJson?.TryGetProperty("unit_of_measurement", out _) ?? false)).Select(e => new SensorEntity(e));
+ /// Enumerates all numeric sensor entities currently registered (at runtime) in Home Assistant as NumericSensorEntity
+ public IEnumerable EnumerateAllNumeric() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("sensor.") && (e.EntityState?.AttributesJson?.TryGetProperty("unit_of_measurement", out _) ?? false)).Select(e => new NumericSensorEntity(e));
+ ///CODA-4680-FIZ External IP
+ public SensorEntity Coda4680FizExternalIp => new(_haContext, "sensor.coda_4680_fiz_external_ip");
+ ///Pixel 8 Audio mode
+ public SensorEntity Pixel8AudioMode => new(_haContext, "sensor.pixel_8_audio_mode");
+ ///Pixel 8 Battery health
+ public SensorEntity Pixel8BatteryHealth => new(_haContext, "sensor.pixel_8_battery_health");
+ ///Pixel 8 Battery state
+ public SensorEntity Pixel8BatteryState => new(_haContext, "sensor.pixel_8_battery_state");
+ ///Pixel 8 Beacon monitor
+ public SensorEntity Pixel8BeaconMonitor => new(_haContext, "sensor.pixel_8_beacon_monitor");
+ ///Pixel 8 BLE transmitter
+ public SensorEntity Pixel8BleTransmitter => new(_haContext, "sensor.pixel_8_ble_transmitter");
+ ///Pixel 8 Charger type
+ public SensorEntity Pixel8ChargerType => new(_haContext, "sensor.pixel_8_charger_type");
+ ///Pixel 8 Current version
+ public SensorEntity Pixel8CurrentVersion => new(_haContext, "sensor.pixel_8_current_version");
+ ///Pixel 8 Do Not Disturb sensor
+ public SensorEntity Pixel8DoNotDisturbSensor => new(_haContext, "sensor.pixel_8_do_not_disturb_sensor");
+ ///Pixel 8 Last notification
+ public SensorEntity Pixel8LastNotification => new(_haContext, "sensor.pixel_8_last_notification");
+ ///Pixel 8 Last reboot
+ public SensorEntity Pixel8LastReboot => new(_haContext, "sensor.pixel_8_last_reboot");
+ ///Pixel 8 Last removed notification
+ public SensorEntity Pixel8LastRemovedNotification => new(_haContext, "sensor.pixel_8_last_removed_notification");
+ ///Pixel 8 Last update trigger
+ public SensorEntity Pixel8LastUpdateTrigger => new(_haContext, "sensor.pixel_8_last_update_trigger");
+ ///Pixel 8 Last used app
+ public SensorEntity Pixel8LastUsedApp => new(_haContext, "sensor.pixel_8_last_used_app");
+ ///Pixel 8 Media session
+ public SensorEntity Pixel8MediaSession => new(_haContext, "sensor.pixel_8_media_session");
+ ///Pixel 8 Network type
+ public SensorEntity Pixel8NetworkType => new(_haContext, "sensor.pixel_8_network_type");
+ ///Pixel 8 Next alarm
+ public SensorEntity Pixel8NextAlarm => new(_haContext, "sensor.pixel_8_next_alarm");
+ ///Pixel 8 OS version
+ public SensorEntity Pixel8OsVersion => new(_haContext, "sensor.pixel_8_os_version");
+ ///Pixel 8 Public IP address
+ public SensorEntity Pixel8PublicIpAddress => new(_haContext, "sensor.pixel_8_public_ip_address");
+ ///Pixel 8 Ringer mode
+ public SensorEntity Pixel8RingerMode => new(_haContext, "sensor.pixel_8_ringer_mode");
+ ///Pixel 8 Screen brightness
+ public SensorEntity Pixel8ScreenBrightness => new(_haContext, "sensor.pixel_8_screen_brightness");
+ ///Pixel 8 Volume level accessibility
+ public SensorEntity Pixel8VolumeLevelAccessibility => new(_haContext, "sensor.pixel_8_volume_level_accessibility");
+ ///Pixel 8 Volume level alarm
+ public SensorEntity Pixel8VolumeLevelAlarm => new(_haContext, "sensor.pixel_8_volume_level_alarm");
+ ///Pixel 8 Volume level call
+ public SensorEntity Pixel8VolumeLevelCall => new(_haContext, "sensor.pixel_8_volume_level_call");
+ ///Pixel 8 Volume level DTMF
+ public SensorEntity Pixel8VolumeLevelDtmf => new(_haContext, "sensor.pixel_8_volume_level_dtmf");
+ ///Pixel 8 Volume level music
+ public SensorEntity Pixel8VolumeLevelMusic => new(_haContext, "sensor.pixel_8_volume_level_music");
+ ///Pixel 8 Volume level notification
+ public SensorEntity Pixel8VolumeLevelNotification => new(_haContext, "sensor.pixel_8_volume_level_notification");
+ ///Pixel 8 Volume level ringer
+ public SensorEntity Pixel8VolumeLevelRinger => new(_haContext, "sensor.pixel_8_volume_level_ringer");
+ ///Pixel 8 Volume level system
+ public SensorEntity Pixel8VolumeLevelSystem => new(_haContext, "sensor.pixel_8_volume_level_system");
+ ///Pixel 8 WiFi BSSID
+ public SensorEntity Pixel8WifiBssid => new(_haContext, "sensor.pixel_8_wifi_bssid");
+ ///Pixel 8 WiFi connection
+ public SensorEntity Pixel8WifiConnection => new(_haContext, "sensor.pixel_8_wifi_connection");
+ ///Pixel 8 WiFi IP address
+ public SensorEntity Pixel8WifiIpAddress => new(_haContext, "sensor.pixel_8_wifi_ip_address");
+ ///Sun Next dawn
+ public SensorEntity SunNextDawn => new(_haContext, "sensor.sun_next_dawn");
+ ///Sun Next dusk
+ public SensorEntity SunNextDusk => new(_haContext, "sensor.sun_next_dusk");
+ ///Sun Next midnight
+ public SensorEntity SunNextMidnight => new(_haContext, "sensor.sun_next_midnight");
+ ///Sun Next noon
+ public SensorEntity SunNextNoon => new(_haContext, "sensor.sun_next_noon");
+ ///Sun Next rising
+ public SensorEntity SunNextRising => new(_haContext, "sensor.sun_next_rising");
+ ///Sun Next setting
+ public SensorEntity SunNextSetting => new(_haContext, "sensor.sun_next_setting");
+ ///CODA-4680-FIZ Download speed
+ public NumericSensorEntity Coda4680FizDownloadSpeed => new(_haContext, "sensor.coda_4680_fiz_download_speed");
+ ///CODA-4680-FIZ Upload speed
+ public NumericSensorEntity Coda4680FizUploadSpeed => new(_haContext, "sensor.coda_4680_fiz_upload_speed");
+ ///Pixel 8 Battery level
+ public NumericSensorEntity Pixel8BatteryLevel => new(_haContext, "sensor.pixel_8_battery_level");
+ ///Pixel 8 Battery power
+ public NumericSensorEntity Pixel8BatteryPower => new(_haContext, "sensor.pixel_8_battery_power");
+ ///Pixel 8 Battery temperature
+ public NumericSensorEntity Pixel8BatteryTemperature => new(_haContext, "sensor.pixel_8_battery_temperature");
+ ///Pixel 8 Bluetooth connection
+ public NumericSensorEntity Pixel8BluetoothConnection => new(_haContext, "sensor.pixel_8_bluetooth_connection");
+ ///Pixel 8 IPv6 addresses
+ public NumericSensorEntity Pixel8Ipv6Addresses => new(_haContext, "sensor.pixel_8_ipv6_addresses");
+ ///Pixel 8 Light sensor
+ public NumericSensorEntity Pixel8LightSensor => new(_haContext, "sensor.pixel_8_light_sensor");
+ ///Pixel 8 Remaining charge time
+ public NumericSensorEntity Pixel8RemainingChargeTime => new(_haContext, "sensor.pixel_8_remaining_charge_time");
+ ///Pixel 8 WiFi frequency
+ public NumericSensorEntity Pixel8WifiFrequency => new(_haContext, "sensor.pixel_8_wifi_frequency");
+ ///Pixel 8 WiFi link speed
+ public NumericSensorEntity Pixel8WifiLinkSpeed => new(_haContext, "sensor.pixel_8_wifi_link_speed");
+ ///Pixel 8 WiFi signal strength
+ public NumericSensorEntity Pixel8WifiSignalStrength => new(_haContext, "sensor.pixel_8_wifi_signal_strength");
+}
+
+public partial class SttEntities
+{
+ private readonly IHaContext _haContext;
+ public SttEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all stt entities currently registered (at runtime) in Home Assistant as SttEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("stt.")).Select(e => new SttEntity(e));
+ ///faster-whisper
+ public SttEntity FasterWhisper => new(_haContext, "stt.faster_whisper");
+}
+
+public partial class SunEntities
+{
+ private readonly IHaContext _haContext;
+ public SunEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all sun entities currently registered (at runtime) in Home Assistant as SunEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("sun.")).Select(e => new SunEntity(e));
+ ///Sun
+ public SunEntity Sun => new(_haContext, "sun.sun");
+}
+
+public partial class SwitchEntities
+{
+ private readonly IHaContext _haContext;
+ public SwitchEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all switch entities currently registered (at runtime) in Home Assistant as SwitchEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("switch.")).Select(e => new SwitchEntity(e));
+ ///M5Stack Atom Echo 31196c Use listen light
+ public SwitchEntity M5stackAtomEcho131196cUseListenLight => new(_haContext, "switch.m5stack_atom_echo_1_31196c_use_listen_light");
+ ///M5Stack Atom Echo 31196c Use wake word
+ public SwitchEntity M5stackAtomEcho31196cUseWakeWord => new(_haContext, "switch.m5stack_atom_echo_31196c_use_wake_word");
+ ///Salon Lamp
+ public SwitchEntity Smartplug1 => new(_haContext, "switch.smartplug1");
+ ///Smartplug2 None
+ public SwitchEntity Smartplug2None => new(_haContext, "switch.smartplug2_none");
+ ///Office Lamp
+ public SwitchEntity Smartplug3 => new(_haContext, "switch.smartplug3");
+}
+
+public partial class TimerEntities
+{
+ private readonly IHaContext _haContext;
+ public TimerEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all timer entities currently registered (at runtime) in Home Assistant as TimerEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("timer.")).Select(e => new TimerEntity(e));
+ ///Assist - Timer 1
+ public TimerEntity AssistTimer1 => new(_haContext, "timer.assist_timer1");
+ ///Assist - Timer 2
+ public TimerEntity AssistTimer2 => new(_haContext, "timer.assist_timer2");
+ ///Assist - Timer 3
+ public TimerEntity AssistTimer3 => new(_haContext, "timer.assist_timer3");
+}
+
+public partial class TodoEntities
+{
+ private readonly IHaContext _haContext;
+ public TodoEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all todo entities currently registered (at runtime) in Home Assistant as TodoEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("todo.")).Select(e => new TodoEntity(e));
+ ///Shopping List
+ public TodoEntity ShoppingList => new(_haContext, "todo.shopping_list");
+}
+
+public partial class TtsEntities
+{
+ private readonly IHaContext _haContext;
+ public TtsEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all tts entities currently registered (at runtime) in Home Assistant as TtsEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("tts.")).Select(e => new TtsEntity(e));
+ ///piper
+ public TtsEntity Piper => new(_haContext, "tts.piper");
+}
+
+public partial class WakeWordEntities
+{
+ private readonly IHaContext _haContext;
+ public WakeWordEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all wake_word entities currently registered (at runtime) in Home Assistant as WakeWordEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("wake_word.")).Select(e => new WakeWordEntity(e));
+ ///openwakeword
+ public WakeWordEntity Openwakeword => new(_haContext, "wake_word.openwakeword");
+}
+
+public partial class WeatherEntities
+{
+ private readonly IHaContext _haContext;
+ public WeatherEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all weather entities currently registered (at runtime) in Home Assistant as WeatherEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("weather.")).Select(e => new WeatherEntity(e));
+ ///Forecast Home
+ public WeatherEntity ForecastHome => new(_haContext, "weather.forecast_home");
+}
+
+public partial class ZoneEntities
+{
+ private readonly IHaContext _haContext;
+ public ZoneEntities(IHaContext haContext)
+ {
+ _haContext = haContext;
+ }
+
+ /// Enumerates all zone entities currently registered (at runtime) in Home Assistant as ZoneEntity
+ public IEnumerable EnumerateAll() => _haContext.GetAllEntities().Where(e => e.EntityId.StartsWith("zone.")).Select(e => new ZoneEntity(e));
+ ///Home
+ public ZoneEntity Home => new(_haContext, "zone.home");
+}
+
+public partial record LightEntity : Entity, LightAttributes>, ILightEntityCore
+{
+ public LightEntity(IHaContext haContext, string entityId) : base(haContext, entityId)
+ {
+ }
+
+ public LightEntity(IEntityCore entity) : base(entity)
+ {
+ }
+}
+
+public partial record LightAttributes
+{
+ [JsonPropertyName("supported_color_modes")]
+ public IReadOnlyList? SupportedColorModes { get; init; }
+
+ [JsonPropertyName("supported_features")]
+ public double? SupportedFeatures { get; init; }
+
+ [JsonPropertyName("color_mode")]
+ public string? ColorMode { get; init; }
+
+ [JsonPropertyName("min_color_temp_kelvin")]
+ public double? MinColorTempKelvin { get; init; }
+
+ [JsonPropertyName("max_color_temp_kelvin")]
+ public double? MaxColorTempKelvin { get; init; }
+
+ [JsonPropertyName("min_mireds")]
+ public double? MinMireds { get; init; }
+
+ [JsonPropertyName("max_mireds")]
+ public double? MaxMireds { get; init; }
+
+ [JsonPropertyName("brightness")]
+ public double? Brightness { get; init; }
+
+ [JsonPropertyName("color_temp_kelvin")]
+ public double? ColorTempKelvin { get; init; }
+
+ [JsonPropertyName("color_temp")]
+ public double? ColorTemp { get; init; }
+
+ [JsonPropertyName("hs_color")]
+ public IReadOnlyList? HsColor { get; init; }
+
+ [JsonPropertyName("rgb_color")]
+ public IReadOnlyList? RgbColor { get; init; }
+
+ [JsonPropertyName("xy_color")]
+ public IReadOnlyList? XyColor { get; init; }
+
+ [JsonPropertyName("entity_id")]
+ public IReadOnlyList? EntityId { get; init; }
+
+ [JsonPropertyName("effect_list")]
+ public IReadOnlyList? EffectList { get; init; }
+
+ [JsonPropertyName("color")]
+ public object? Color { get; init; }
+
+ [JsonPropertyName("friendly_name")]
+ public string? FriendlyName { get; init; }
+}
+
+public partial record MediaPlayerEntity : Entity, MediaPlayerAttributes>, IMediaPlayerEntityCore
+{
+ public MediaPlayerEntity(IHaContext haContext, string entityId) : base(haContext, entityId)
+ {
+ }
+
+ public MediaPlayerEntity(IEntityCore entity) : base(entity)
+ {
+ }
+}
+
+public partial record MediaPlayerAttributes
+{
+ [JsonPropertyName("app_id")]
+ public string? AppId { get; init; }
+
+ [JsonPropertyName("app_name")]
+ public string? AppName { get; init; }
+
+ [JsonPropertyName("device_class")]
+ public string? DeviceClass { get; init; }
+
+ [JsonPropertyName("entity_picture_local")]
+ public string? EntityPictureLocal { get; init; }
+
+ [JsonPropertyName("entity_picture")]
+ public string? EntityPicture { get; init; }
+
+ [JsonPropertyName("icon")]
+ public string? Icon { get; init; }
+
+ [JsonPropertyName("friendly_name")]
+ public string? FriendlyName { get; init; }
+
+ [JsonPropertyName("supported_features")]
+ public double? SupportedFeatures { get; init; }
+
+ [JsonPropertyName("volume_level")]
+ public double? VolumeLevel { get; init; }
+
+ [JsonPropertyName("is_volume_muted")]
+ public bool? IsVolumeMuted { get; init; }
+
+ [JsonPropertyName("media_content_id")]
+ public string? MediaContentId { get; init; }
+
+ [JsonPropertyName("media_content_type")]
+ public string? MediaContentType { get; init; }
+
+ [JsonPropertyName("media_duration")]
+ public double? MediaDuration { get; init; }
+
+ [JsonPropertyName("media_position")]
+ public double? MediaPosition { get; init; }
+
+ [JsonPropertyName("media_position_updated_at")]
+ public string? MediaPositionUpdatedAt { get; init; }
+
+ [JsonPropertyName("media_title")]
+ public string? MediaTitle { get; init; }
+
+ [JsonPropertyName("media_album_name")]
+ public string? MediaAlbumName { get; init; }
+
+ [JsonPropertyName("media_image_url")]
+ public string? MediaImageUrl { get; init; }
+
+ [JsonPropertyName("media_artist")]
+ public string? MediaArtist { get; init; }
+
+ [JsonPropertyName("sound_mode_list")]
+ public IReadOnlyList? SoundModeList { get; init; }
+
+ [JsonPropertyName("media_track")]
+ public object? MediaTrack { get; init; }
+
+ [JsonPropertyName("shuffle")]
+ public bool? Shuffle { get; init; }
+
+ [JsonPropertyName("repeat")]
+ public string? Repeat { get; init; }
+
+ [JsonPropertyName("source_list")]
+ public IReadOnlyList? SourceList { get; init; }
+
+ [JsonPropertyName("source")]
+ public string? Source { get; init; }
+
+ [JsonPropertyName("adb_response")]
+ public object? AdbResponse { get; init; }
+
+ [JsonPropertyName("hdmi_input")]
+ public object? HdmiInput { get; init; }
+
+ [JsonPropertyName("sound_mode")]
+ public string? SoundMode { get; init; }
+
+ [JsonPropertyName("sound_mode_raw")]
+ public string? SoundModeRaw { get; init; }
+
+ [JsonPropertyName("assumed_state")]
+ public bool? AssumedState { get; init; }
+
+ [JsonPropertyName("sp_device_id")]
+ public object? SpDeviceId { get; init; }
+
+ [JsonPropertyName("sp_device_name")]
+ public object? SpDeviceName { get; init; }
+
+ [JsonPropertyName("sp_device_is_brand_sonos")]
+ public bool? SpDeviceIsBrandSonos { get; init; }
+
+ [JsonPropertyName("sp_item_type")]
+ public string? SpItemType { get; init; }
+
+ [JsonPropertyName("sp_user_country")]
+ public string? SpUserCountry { get; init; }
+
+ [JsonPropertyName("sp_user_display_name")]
+ public string? SpUserDisplayName { get; init; }
+
+ [JsonPropertyName("sp_user_email")]
+ public string? SpUserEmail { get; init; }
+
+ [JsonPropertyName("sp_user_id")]
+ public string? SpUserId { get; init; }
+
+ [JsonPropertyName("sp_user_product")]
+ public string? SpUserProduct { get; init; }
+
+ [JsonPropertyName("sp_user_uri")]
+ public string? SpUserUri { get; init; }
+}
+
+public partial record AutomationEntity : Entity, AutomationAttributes>, IAutomationEntityCore
+{
+ public AutomationEntity(IHaContext haContext, string entityId) : base(haContext, entityId)
+ {
+ }
+
+ public AutomationEntity(IEntityCore entity) : base(entity)
+ {
+ }
+}
+
+public partial record AutomationAttributes
+{
+ [JsonPropertyName("last_triggered")]
+ public string? LastTriggered { get; init; }
+
+ [JsonPropertyName("mode")]
+ public string? Mode { get; init; }
+
+ [JsonPropertyName("current")]
+ public double? Current { get; init; }
+
+ [JsonPropertyName("friendly_name")]
+ public string? FriendlyName { get; init; }
+
+ [JsonPropertyName("id")]
+ public string? Id { get; init; }
+
+ [JsonPropertyName("max")]
+ public double? Max { get; init; }
+}
+
+public partial record BinarySensorEntity : Entity, BinarySensorAttributes>, IBinarySensorEntityCore
+{
+ public BinarySensorEntity(IHaContext haContext, string entityId) : base(haContext, entityId)
+ {
+ }
+
+ public BinarySensorEntity(IEntityCore entity) : base(entity)
+ {
+ }
+}
+
+public partial record BinarySensorAttributes
+{
+ [JsonPropertyName("device_class")]
+ public string? DeviceClass { get; init; }
+
+ [JsonPropertyName("friendly_name")]
+ public string? FriendlyName { get; init; }
+
+ [JsonPropertyName("icon")]
+ public string? Icon { get; init; }
+}
+
+public partial record ButtonEntity : Entity, ButtonAttributes>, IButtonEntityCore
+{
+ public ButtonEntity(IHaContext haContext, string entityId) : base(haContext, entityId)
+ {
+ }
+
+ public ButtonEntity(IEntityCore entity) : base(entity)
+ {
+ }
+}
+
+public partial record ButtonAttributes
+{
+ [JsonPropertyName("device_class")]
+ public string? DeviceClass { get; init; }
+
+ [JsonPropertyName("icon")]
+ public string? Icon { get; init; }
+
+ [JsonPropertyName("friendly_name")]
+ public string? FriendlyName { get; init; }
+}
+
+public partial record CalendarEntity : Entity, CalendarAttributes>, ICalendarEntityCore
+{
+ public CalendarEntity(IHaContext haContext, string entityId) : base(haContext, entityId)
+ {
+ }
+
+ public CalendarEntity(IEntityCore entity) : base(entity)
+ {
+ }
+}
+
+public partial record CalendarAttributes
+{
+ [JsonPropertyName("message")]
+ public string? Message { get; init; }
+
+ [JsonPropertyName("all_day")]
+ public bool? AllDay { get; init; }
+
+ [JsonPropertyName("start_time")]
+ public string? StartTime { get; init; }
+
+ [JsonPropertyName("end_time")]
+ public string? EndTime { get; init; }
+
+ [JsonPropertyName("location")]
+ public string? Location { get; init; }
+
+ [JsonPropertyName("description")]
+ public string? Description { get; init; }
+
+ [JsonPropertyName("friendly_name")]
+ public string? FriendlyName { get; init; }
+}
+
+public partial record ConversationEntity : Entity, ConversationAttributes>
+{
+ public ConversationEntity(IHaContext haContext, string entityId) : base(haContext, entityId)
+ {
+ }
+
+ public ConversationEntity(IEntityCore entity) : base(entity)
+ {
+ }
+}
+
+public partial record ConversationAttributes
+{
+ [JsonPropertyName("friendly_name")]
+ public string? FriendlyName { get; init; }
+
+ [JsonPropertyName("supported_features")]
+ public double? SupportedFeatures { get; init; }
+}
+
+public partial record DeviceTrackerEntity : Entity, DeviceTrackerAttributes>, IDeviceTrackerEntityCore
+{
+ public DeviceTrackerEntity(IHaContext haContext, string entityId) : base(haContext, entityId)
+ {
+ }
+
+ public DeviceTrackerEntity(IEntityCore entity) : base(entity)
+ {
+ }
+}
+
+public partial record DeviceTrackerAttributes
+{
+ [JsonPropertyName("source_type")]
+ public string? SourceType { get; init; }
+
+ [JsonPropertyName("friendly_name")]
+ public string? FriendlyName { get; init; }
+}
+
+public partial record InputBooleanEntity : Entity, InputBooleanAttributes>, IInputBooleanEntityCore
+{
+ public InputBooleanEntity(IHaContext haContext, string entityId) : base(haContext, entityId)
+ {
+ }
+
+ public InputBooleanEntity(IEntityCore entity) : base(entity)
+ {
+ }
+}
+
+public partial record InputBooleanAttributes
+{
+ [JsonPropertyName("editable")]
+ public bool? Editable { get; init; }
+
+ [JsonPropertyName("friendly_name")]
+ public string? FriendlyName { get; init; }
+}
+
+public partial record InputTextEntity : Entity, InputTextAttributes>, IInputTextEntityCore
+{
+ public InputTextEntity(IHaContext haContext, string entityId) : base(haContext, entityId)
+ {
+ }
+
+ public InputTextEntity(IEntityCore entity) : base(entity)
+ {
+ }
+}
+
+public partial record InputTextAttributes
+{
+ [JsonPropertyName("editable")]
+ public bool? Editable { get; init; }
+
+ [JsonPropertyName("min")]
+ public double? Min { get; init; }
+
+ [JsonPropertyName("max")]
+ public double? Max { get; init; }
+
+ [JsonPropertyName("pattern")]
+ public object? Pattern { get; init; }
+
+ [JsonPropertyName("mode")]
+ public string? Mode { get; init; }
+
+ [JsonPropertyName("icon")]
+ public string? Icon { get; init; }
+
+ [JsonPropertyName("friendly_name")]
+ public string? FriendlyName { get; init; }
+}
+
+public partial record LockEntity : Entity, LockAttributes>, ILockEntityCore
+{
+ public LockEntity(IHaContext haContext, string entityId) : base(haContext, entityId)
+ {
+ }
+
+ public LockEntity(IEntityCore entity) : base(entity)
+ {
+ }
+}
+
+public partial record LockAttributes
+{
+ [JsonPropertyName("friendly_name")]
+ public string? FriendlyName { get; init; }
+
+ [JsonPropertyName("supported_features")]
+ public double? SupportedFeatures { get; init; }
+}
+
+public partial record NumberEntity : NumericEntity, NumberAttributes>, INumberEntityCore
+{
+ public NumberEntity(IHaContext haContext, string entityId) : base(haContext, entityId)
+ {
+ }
+
+ public NumberEntity(IEntityCore entity) : base(entity)
+ {
+ }
+}
+
+public partial record NumberAttributes
+{
+ [JsonPropertyName("min")]
+ public double? Min { get; init; }
+
+ [JsonPropertyName("max")]
+ public double? Max { get; init; }
+
+ [JsonPropertyName("step")]
+ public double? Step { get; init; }
+
+ [JsonPropertyName("mode")]
+ public string? Mode { get; init; }
+
+ [JsonPropertyName("unit_of_measurement")]
+ public string? UnitOfMeasurement { get; init; }
+
+ [JsonPropertyName("friendly_name")]
+ public string? FriendlyName { get; init; }
+}
+
+public partial record PersonEntity : Entity, PersonAttributes>, IPersonEntityCore
+{
+ public PersonEntity(IHaContext haContext, string entityId) : base(haContext, entityId)
+ {
+ }
+
+ public PersonEntity(IEntityCore entity) : base(entity)
+ {
+ }
+}
+
+public partial record PersonAttributes
+{
+ [JsonPropertyName("editable")]
+ public bool? Editable { get; init; }
+
+ [JsonPropertyName("id")]
+ public string? Id { get; init; }
+
+ [JsonPropertyName("device_trackers")]
+ public IReadOnlyList? DeviceTrackers { get; init; }
+
+ [JsonPropertyName("user_id")]
+ public string? UserId { get; init; }
+
+ [JsonPropertyName("icon")]
+ public string? Icon { get; init; }
+
+ [JsonPropertyName("friendly_name")]
+ public string? FriendlyName { get; init; }
+}
+
+public partial record RemoteEntity : Entity, RemoteAttributes>, IRemoteEntityCore
+{
+ public RemoteEntity(IHaContext haContext, string entityId) : base(haContext, entityId)
+ {
+ }
+
+ public RemoteEntity(IEntityCore entity) : base(entity)
+ {
+ }
+}
+
+public partial record RemoteAttributes
+{
+ [JsonPropertyName("activity_list")]
+ public IReadOnlyList