Beispiel #1
0
        /// <inheritdoc />
        public IObservable <bool> GetAndObserveIsEnabled(Automation automation)
        {
            var isClientEnabled     = _mqtt.GetAndObserveIsEnabled();
            var isAutomationEnabled = IsAutomationEnabled(automation);

            return(Observable
                   .CombineLatest(isClientEnabled, isAutomationEnabled, (c, a) => c & a)
                   .DistinctUntilChanged());
        }
        /// <inheritdoc />
        public IObservable <bool> GetAndObserveIsEnabled(Automation automation)
        {
            var isClientEnabled = _mqtt
                                  .GetAndObserveIsEnabled();
            var isAutomationEnabled = _mqtt
                                      .GetAndObserveTopic(GetTopic(automation))
                                      .Select(topic =>
            {
                var s = topic.Values.GetValueOrDefault("state");

                return(s == null || s == "enabled");                        // If not configured, we assumed enabled
            });

            return(Observable
                   .CombineLatest(isClientEnabled, isAutomationEnabled, (c, a) => c & a)
                   .DistinctUntilChanged());
        }
Beispiel #3
0
        /// <inheritdoc />
        public IObservable <SceneCommand> ObserveCommands(Scene scene)
        {
            // When client is being disabled, send a 'Stop' command
            var clientDisabled = _mqtt
                                 .GetAndObserveIsEnabled()
                                 .Where(isEnabled => !isEnabled)
                                 .Select(_ => SceneCommand.Stop);

            // The actual commands from the mqtt topic state
            var commands = _mqtt
                           .ObserveTopic(GetControlTopic(scene))
                           .Select(evt => evt.Equals("start", StringComparison.OrdinalIgnoreCase)
                                        ? SceneCommand.Start
                                        : SceneCommand.Stop);

            return(Observable.Merge(clientDisabled, commands));
        }