public async Task GpioValueChangedAsync(ToggleChangedModel data) { if (OnGpioValueChangedAsync != null) { await OnGpioValueChangedAsync.Invoke(data); } }
public async Task ToggleGpioAsync(ToggleChangedModel data) { if (OnToggleGpioAsync != null) { await OnToggleGpioAsync.Invoke(data); } }
public void GpioValueChanged(ToggleChangedModel data) { if (OnGpioValueChanged != null) { OnGpioValueChanged.Invoke(data); } }
private async Task notifyFrontend(ToggleType toggleType, bool onoff) { var model = new ToggleChangedModel { ToggleType = toggleType, NewValue = onoff }; await _appState.GpioValueChangedAsync(model); }
public void ToggleGpio(ToggleChangedModel data) { if (OnToggleGpio != null) { OnToggleGpio.Invoke(data); } }
private async Task appState_OnGpioValueChanged(ToggleChangedModel data) { await InvokeAsync(() => { if (data.ToggleType == ToggleType.PUMP) { PumpEnabled = data.NewValue; StateHasChanged(); } }); }
private async Task appState_OnToggleGpioAsync(ToggleChangedModel arg) { await Task.Run(async() => { var pin = getGpioPin(_gpioSettings, arg.ToggleType); _logger.LogDebug($"Change {arg.ToggleType} to {arg.NewValue} on pin {pin}..."); #if Linux _gpioController.Write(pin, arg.NewValue ? PinValue.High : PinValue.Low); #else _gpioController.Write(pin, arg.NewValue ? PinValue.High : PinValue.Low); #endif await _appState.GpioValueChangedAsync(arg); }); }
public async Task RunSprinklerSequence(ToggleChangedModel toggleChangedModel) { _logger.LogDebug($"Running sequence for sprinkler {toggleChangedModel.ToggleType}..."); if (toggleChangedModel.NewValue) { //Einschalten _logger.LogDebug($"Sequence is for activating {toggleChangedModel.ToggleType}!"); await activationSequence(toggleChangedModel); } else { //Ausschalten _logger.LogDebug($"Sequence is for deactivating {toggleChangedModel.ToggleType}!"); await deactivationSequence(toggleChangedModel); } }
private async Task appState_OnGpioValueChangedAsync(ToggleChangedModel arg) { await InvokeAsync(() => { switch (arg.ToggleType) { case ToggleType.WERFER: WerferEnabled = arg.NewValue; break; case ToggleType.SPRUEHER: SprueherEnabled = arg.NewValue; break; case ToggleType.TROPFER: TropferEnabled = arg.NewValue; break; case ToggleType.POWER: PowerEnabled = arg.NewValue; break; case ToggleType.PUMP: PumpOn = arg.NewValue; break; case ToggleType.VALVE: ValveEnabled = arg.NewValue; break; case ToggleType.WATERLEVEL: WaterLevelOk = arg.NewValue; break; default: break; } StateHasChanged(); }); }
private async Task activationSequence(ToggleChangedModel toggleChanged) { try { var sPin = GpioService.getGpioPin(_gpioSettings, toggleChanged.ToggleType); //Sequence is; // Power on -> Valve in correct position -> Sprinkler on -> Pump on _logger.LogDebug("Checking if ports are ready..."); if (_gpioController.IsPinOpen(_gpioSettings.PowerPin) && _gpioController.IsPinOpen(_gpioSettings.ValvePin) && _gpioController.IsPinOpen(sPin) && _gpioController.IsPinOpen(_gpioSettings.PumpPin)) { _logger.LogDebug("Power on..."); #if Linux _gpioController.Write(_gpioSettings.PowerPin, PinValue.High); #endif await notifyFrontend(ToggleType.POWER, true); _logger.LogDebug("Power is on! Checking for valve..."); await _appState.SprinklerMessageAsync(toggleChanged.ToggleType, "Power on"); var val = _gpioController.Read(_gpioSettings.WaterLevelPin); if (val == PinValue.High) { _logger.LogDebug("Waterlevel is good! Switching to reservoir..."); #if Linux _gpioController.Write(_gpioSettings.ValvePin, PinValue.High); #endif await notifyFrontend(ToggleType.VALVE, true); _logger.LogDebug("Valve switched! Waiting until valve is in position..."); await _appState.SprinklerMessageAsync(toggleChanged.ToggleType, "Switching valve..."); await Task.Delay(Convert.ToInt32(TimeSpan.FromSeconds(Convert.ToDouble(_gpioSettings.ValveDelay)).TotalMilliseconds)); await _appState.SprinklerMessageAsync(toggleChanged.ToggleType, "Valve on"); _logger.LogDebug("Valve is in position! Switching sprinkler on..."); #if Linux _gpioController.Write(sPin, PinValue.High); #endif await notifyFrontend(toggleChanged.ToggleType, true); await _appState.SprinklerMessageAsync(toggleChanged.ToggleType, $"Sprinkler {toggleChanged.ToggleType} on"); _logger.LogDebug("Sprinkler is on! Activating pump..."); #if Linux _gpioController.Write(_gpioSettings.PumpPin, PinValue.High); #endif await notifyFrontend(ToggleType.PUMP, true); await _appState.SprinklerMessageAsync(toggleChanged.ToggleType, "Pump on"); _logger.LogDebug("Pump is on!"); } else { _logger.LogDebug("Waterlevel is bad! Switching to water pipe..."); #if Linux _gpioController.Write(_gpioSettings.ValvePin, PinValue.Low); #endif _logger.LogDebug("Valve switched! Waiting until valve is in position..."); await _appState.SprinklerMessageAsync(toggleChanged.ToggleType, "Switching valve..."); await notifyFrontend(ToggleType.VALVE, false); await Task.Delay(Convert.ToInt32(TimeSpan.FromSeconds(Convert.ToDouble(_gpioSettings.ValveDelay)).TotalMilliseconds)); await _appState.SprinklerMessageAsync(toggleChanged.ToggleType, "Valve off"); _logger.LogDebug("Valve is in position! Switching sprinkler on..."); #if Linux _gpioController.Write(sPin, PinValue.High); #endif await notifyFrontend(toggleChanged.ToggleType, true); await _appState.SprinklerMessageAsync(toggleChanged.ToggleType, $"Sprinkler {toggleChanged.ToggleType} on"); _logger.LogDebug("Sprinkler is on!"); } } else { var msg = $"Error a pin is not open: \n\tPower: {_gpioController.IsPinOpen(_gpioSettings.PowerPin)}"; msg = $"{msg}\n\tValve: {_gpioController.IsPinOpen(_gpioSettings.ValvePin)}"; msg = $"{msg}\n\tSprinkler: {_gpioController.IsPinOpen(sPin)}"; msg = $"{msg}\n\tPumpe: {_gpioController.IsPinOpen(_gpioSettings.PumpPin)}"; throw new Exception(msg); } } catch (Exception ex) { _logger.LogError(ex, $"Error activating sequence for {toggleChanged.ToggleType}: {ex.Message}!"); } }
private async Task deactivationSequence(ToggleChangedModel toggleChanged) { try { var sPin = GpioService.getGpioPin(_gpioSettings, toggleChanged.ToggleType); //Sequence is; // Pump off and wait until pressure is gone -> Sprinkler off -> Valve to water pipe and wait until in position -> Power off _logger.LogDebug("Checking if ports are ready..."); if (_gpioController.IsPinOpen(_gpioSettings.PowerPin) && _gpioController.IsPinOpen(_gpioSettings.ValvePin) && _gpioController.IsPinOpen(sPin) && _gpioController.IsPinOpen(_gpioSettings.PumpPin)) { _logger.LogDebug("Pump off and wait until pressure is gone..."); #if Linux _gpioController.Write(_gpioSettings.PumpPin, PinValue.Low); #endif await _appState.SprinklerMessageAsync(toggleChanged.ToggleType, "Pump off! Waiting..."); await notifyFrontend(ToggleType.PUMP, false); await Task.Delay(Convert.ToInt32(TimeSpan.FromSeconds(Convert.ToDouble(_gpioSettings.PumpDelay)).TotalMilliseconds)); await _appState.SprinklerMessageAsync(toggleChanged.ToggleType, "Pump off"); _logger.LogDebug("Pump is off! Setting valve to water pipe..."); #if Linux _gpioController.Write(_gpioSettings.ValvePin, PinValue.Low); #endif await notifyFrontend(toggleChanged.ToggleType, false); await _appState.SprinklerMessageAsync(toggleChanged.ToggleType, "Switching valve..."); _logger.LogDebug("Valve switched! Waiting until valve is in position..."); await Task.Delay(Convert.ToInt32(TimeSpan.FromSeconds(Convert.ToDouble(_gpioSettings.ValveDelay)).TotalMilliseconds)); await notifyFrontend(ToggleType.VALVE, false); await _appState.SprinklerMessageAsync(toggleChanged.ToggleType, "Valve off"); _logger.LogDebug("Valve is in position! Switching power off..."); #if Linux _gpioController.Write(_gpioSettings.PowerPin, PinValue.Low); #endif await notifyFrontend(ToggleType.POWER, false); await _appState.SprinklerMessageAsync(toggleChanged.ToggleType, "Power off"); _logger.LogDebug("Sprinkler is off!"); } else { var msg = $"Error a pin is not open: \n\tPower: {_gpioController.IsPinOpen(_gpioSettings.PowerPin)}"; msg = $"{msg}\n\tValve: {_gpioController.IsPinOpen(_gpioSettings.ValvePin)}"; msg = $"{msg}\n\tSprinkler: {_gpioController.IsPinOpen(sPin)}"; msg = $"{msg}\n\tPumpe: {_gpioController.IsPinOpen(_gpioSettings.PumpPin)}"; throw new Exception(msg); } } catch (Exception ex) { _logger.LogError(ex, $"Error deactivating sequence for {toggleChanged.ToggleType}: {ex.Message}!"); } }