private IDisposable BindObserver( IOutboundMqttMessageBusPublisher target, TEntity entity, TEntityDefinition entityDefinition, MqttQualityOfServiceLevel?qualityOfServiceLevel, bool retainMessages) => GetStateChangeDetector(entity) .Subscribe( state => { var payload = GetStateMessagePayload(entityDefinition, entity); var messageBuilder = new MqttApplicationMessageBuilder() .WithTopic(entityDefinition.StateTopic) .WithPayload(payload) .WithRetainFlag(retainMessages); if (qualityOfServiceLevel.HasValue) { messageBuilder = messageBuilder.WithQualityOfServiceLevel(qualityOfServiceLevel.Value); } var message = messageBuilder.Build(); target.PublishMessage(message); } );
public IDisposable Bind( IOutboundMqttMessageBusPublisher target, TEntity entity, TEntityDefinition entityDefinition, MqttQualityOfServiceLevel?qualityOfServiceLevel, bool retainMessages ) => BindObserver( target, entity, entityDefinition, qualityOfServiceLevel, retainMessages );
// TODO: IEnumerable<IClimateMqttEntityConfiguration> climateEntityConfigurations, public MqttEntityControlPanel( IEnumerable <IAlarmControlPanelMqttEntityConfiguration> alarmControlPanelMqttEntityConfigurations, IEnumerable <IBinarySensorMqttEntityConfiguration> binarySensorEntityConfigurations, IEnumerable <ICoverMqttEntityConfiguration> coverEntityConfigurations, IEnumerable <IFanMqttEntityConfiguration> fanEntityConfigurations, IEnumerable <ILightMqttEntityConfiguration> lightEntityConfigurations, IEnumerable <ILockMqttEntityConfiguration> lockEntityConfigurations, IEnumerable <ISensorMqttEntityConfiguration> sensorEntityConfigurations, IEnumerable <ISwitchMqttEntityConfiguration> switchEntityConfigurations, IEnumerable <IVacuumMqttEntityConfiguration> vacuumEntityConfigurations, IOutboundMqttMessageBusPublisher messageBusPublisher, ILogger <MqttEntityControlPanel> logger ) { MessageBusPublisher = messageBusPublisher; Logger = logger; EventSubscriptions.Add(ObserveCollectionChanges <IAlarmControlPanelMqttEntityConfiguration, IAlarmControlPanel, IAlarmControlPanelEntityDefinition>(_alarmControlPanels)); EventSubscriptions.Add(ObserveCollectionChanges <IBinarySensorMqttEntityConfiguration, IBinarySensor, IBinarySensorEntityDefinition>(_binarySensors)); // TODO: EventSubscriptions.Add(ObserveCollectionChanges<IClimateMqttEntityConfiguration, IClimate, IClimateEntityDefinition>(_climate)); EventSubscriptions.Add(ObserveCollectionChanges <ICoverMqttEntityConfiguration, ICover, ICoverEntityDefinition>(_covers)); EventSubscriptions.Add(ObserveCollectionChanges <IFanMqttEntityConfiguration, IFan, IFanEntityDefinition>(_fans)); EventSubscriptions.Add(ObserveCollectionChanges <ILightMqttEntityConfiguration, ILight, ILightEntityDefinition>(_lights)); EventSubscriptions.Add(ObserveCollectionChanges <ILockMqttEntityConfiguration, ILock, ILockEntityDefinition>(_locks)); EventSubscriptions.Add(ObserveCollectionChanges <ISensorMqttEntityConfiguration, ISensor, ISensorEntityDefinition>(_sensors)); EventSubscriptions.Add(ObserveCollectionChanges <ISwitchMqttEntityConfiguration, ISwitch, ISwitchEntityDefinition>(_switches)); EventSubscriptions.Add(ObserveCollectionChanges <IVacuumMqttEntityConfiguration, IVacuum, IVacuumEntityDefinition>(_vacuums)); foreach (var alarmControlPanelMqttEntityConfiguration in alarmControlPanelMqttEntityConfigurations) { _alarmControlPanels.Add(alarmControlPanelMqttEntityConfiguration); } foreach (var binarySensorMqttEntityConfiguration in binarySensorEntityConfigurations) { _binarySensors.Add(binarySensorMqttEntityConfiguration); } // TODO: foreach (var climateEntityConfiguration in climateEntityConfigurations) { _climate.Add(climateEntityConfiguration); } foreach (var coverEntityConfiguration in coverEntityConfigurations) { _covers.Add(coverEntityConfiguration); } foreach (var fanEntityConfiguration in fanEntityConfigurations) { _fans.Add(fanEntityConfiguration); } foreach (var lightEntityConfiguration in lightEntityConfigurations) { _lights.Add(lightEntityConfiguration); } foreach (var lockEntityConfiguration in lockEntityConfigurations) { _locks.Add(lockEntityConfiguration); } foreach (var sensorEntityConfiguration in sensorEntityConfigurations) { _sensors.Add(sensorEntityConfiguration); } foreach (var switchEntityConfiguration in switchEntityConfigurations) { _switches.Add(switchEntityConfiguration); } foreach (var vacuumEntityConfiguration in vacuumEntityConfigurations) { _vacuums.Add(vacuumEntityConfiguration); } }