public HomeAssistantOutboundMqttDispatcher(
     IManagedMqttClient managedMqttClient,
     IMqttEntityControlPanel mqttEntityControlPanel,
     IOutboundMqttMessageBusConsumer messageBusConsumer
     )
 {
     ManagedMqttClient      = managedMqttClient;
     MqttEntityControlPanel = mqttEntityControlPanel;
     MessageBusConsumer     = messageBusConsumer;
 }
 public HomeAssistantOutboundMqttDispatcher(
     IManagedMqttClient managedMqttClient,
     IMqttApplicationProvider mqttApplicationProvider,
     IMqttEntityControlPanel mqttEntityControlPanel,
     IMqttMessageBus messageBus
     )
 {
     ManagedMqttClient       = managedMqttClient;
     MqttApplicationProvider = mqttApplicationProvider;
     MqttEntityControlPanel  = mqttEntityControlPanel;
     MessageBus = messageBus;
 }
 public static IMqttEntityControlPanel AddSensor(this IMqttEntityControlPanel controlPanel, ISensorMqttEntityConfiguration configuration)
 {
     controlPanel.AddStatefulEntity <ISensorMqttEntityConfiguration, ISensor, ISensorEntityDefinition>(configuration);
     return(controlPanel);
 }
 public static IMqttEntityControlPanel AddLock(this IMqttEntityControlPanel controlPanel, ILockMqttEntityConfiguration configuration)
 {
     controlPanel.AddStatefulEntity <ILockMqttEntityConfiguration, ILock, ILockEntityDefinition>(configuration);
     return(controlPanel);
 }
 public static IMqttEntityControlPanel AddFan(this IMqttEntityControlPanel controlPanel, IFanMqttEntityConfiguration configuration)
 {
     controlPanel.AddStatefulEntity <IFanMqttEntityConfiguration, IFan, IFanEntityDefinition>(configuration);
     return(controlPanel);
 }
        // TODO: Camera?

        public static IMqttEntityControlPanel AddClimate(this IMqttEntityControlPanel controlPanel, IClimateMqttEntityConfiguration configuration)
        {
            controlPanel.AddEntity <IClimateMqttEntityConfiguration, IClimate, IClimateEntityDefinition>(configuration); // TODO: Not stateful?!
            return(controlPanel);
        }
 public static IMqttEntityControlPanel AddAlarmControlPanel(this IMqttEntityControlPanel controlPanel, IAlarmControlPanelMqttEntityConfiguration configuration)
 {
     controlPanel.AddStatefulEntity <IAlarmControlPanelMqttEntityConfiguration, IAlarmControlPanel, IAlarmControlPanelEntityDefinition>(configuration);
     return(controlPanel);
 }
 public static IMqttEntityBindingManager <IVacuumMqttEntityConfiguration, IVacuum, IVacuumEntityDefinition> Vacuums(this IMqttEntityControlPanel controlPanel) => controlPanel.StatefulEntitiesOfType <IVacuumMqttEntityConfiguration, IVacuum, IVacuumEntityDefinition>();
 public static IMqttEntityBindingManager <ISwitchMqttEntityConfiguration, ISwitch, ISwitchEntityDefinition> Switches(this IMqttEntityControlPanel controlPanel) => controlPanel.StatefulEntitiesOfType <ISwitchMqttEntityConfiguration, ISwitch, ISwitchEntityDefinition>();
 public static IMqttEntityBindingManager <ISensorMqttEntityConfiguration, ISensor, ISensorEntityDefinition> Sensors(this IMqttEntityControlPanel controlPanel) => controlPanel.StatefulEntitiesOfType <ISensorMqttEntityConfiguration, ISensor, ISensorEntityDefinition>();
 public static IMqttEntityBindingManager <ILockMqttEntityConfiguration, ILock, ILockEntityDefinition> Locks(this IMqttEntityControlPanel controlPanel) => controlPanel.StatefulEntitiesOfType <ILockMqttEntityConfiguration, ILock, ILockEntityDefinition>();
 // TODO: Device Trigger?
 public static IMqttEntityBindingManager <IFanMqttEntityConfiguration, IFan, IFanEntityDefinition> Fans(this IMqttEntityControlPanel controlPanel) => controlPanel.StatefulEntitiesOfType <IFanMqttEntityConfiguration, IFan, IFanEntityDefinition>();
        // TODO: Camera?

        public static IMqttEntityBindingManager <IClimateMqttEntityConfiguration, IClimate, IClimateEntityDefinition> Climate(this IMqttEntityControlPanel controlPanel) => controlPanel.EntitiesOfType <IClimateMqttEntityConfiguration, IClimate, IClimateEntityDefinition>(); // TODO: Not stateful?!
 public static IMqttEntityBindingManager <IAlarmControlPanelMqttEntityConfiguration, IAlarmControlPanel, IAlarmControlPanelEntityDefinition> AlarmControlPanels(this IMqttEntityControlPanel controlPanel) => controlPanel.StatefulEntitiesOfType <IAlarmControlPanelMqttEntityConfiguration, IAlarmControlPanel, IAlarmControlPanelEntityDefinition>();
 public static IMqttEntityControlPanel AddVacuum(this IMqttEntityControlPanel controlPanel, IVacuumMqttEntityConfiguration configuration)
 {
     controlPanel.AddStatefulEntity <IVacuumMqttEntityConfiguration, IVacuum, IVacuumEntityDefinition>(configuration);
     return(controlPanel);
 }
 public static IMqttEntityControlPanel AddSwitch(this IMqttEntityControlPanel controlPanel, ISwitchMqttEntityConfiguration configuration)
 {
     controlPanel.AddStatefulEntity <ISwitchMqttEntityConfiguration, ISwitch, ISwitchEntityDefinition>(configuration);
     return(controlPanel);
 }