Example #1
0
        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);
        }
            );
Example #2
0
 public IDisposable Bind(
     IOutboundMqttMessageBusPublisher target,
     TEntity entity,
     TEntityDefinition entityDefinition,
     MqttQualityOfServiceLevel?qualityOfServiceLevel,
     bool retainMessages
     ) =>
 BindObserver(
     target,
     entity,
     entityDefinition,
     qualityOfServiceLevel,
     retainMessages
     );
Example #3
0
        // 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);
            }
        }