/// <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()); }
/// <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)); }