public Measurement GetWeight(bool single = false) { try { if (clockPin == null || dataPin == null) { return(null); } // TODO: sample sensors and report weight -- mocked for now //return new Measurement(165.0f, Measurement.UnitsOfMeasure.Pounds); device = new HX711(clockPin, dataPin); var w = _GetOutputData(); Debug.WriteLine($"Single:{w}"); var c = Calibrated(w); if (!CheckAnomaly(c)) { PriorMeasurements.Enqueue(new Measurement(c, Measurement.UnitsOfMeasure.Ounces)); } Debug.WriteLine($"Current Avg:{PriorMeasurements.Average(i => i.Amount)}"); #if DEBUG foreach (var item in PriorMeasurements) { Debug.WriteLine($" {item.Amount}"); } #endif if (single) { return(new Measurement(w, Measurement.UnitsOfMeasure.Ounces)); } else { return(new Measurement(PriorMeasurements.Average(i => i.Amount), Measurement.UnitsOfMeasure.Ounces)); } } catch (Exception ex) { Debug.WriteLine($"Error,{ex.Message}"); KegLogger.KegLogException(ex, "Weight:GetWeight", SeverityLevel.Critical); KegLogger.KegLogTrace(ex.Message, "Weight:GetWeight", SeverityLevel.Warning, new Dictionary <string, string>() { { "ClockPin", CalibrationSettings[WeightClockGpioPinNumberSetting].ToString() }, { "DataPin", CalibrationSettings[WeightDataGpioPinNumberSetting].ToString() } }); } return(null); }
private bool CheckAnomaly(float newValue) { if (PriorMeasurements.Count > 2 && newValue > PriorMeasurements.Average(i => i.Amount) * 2) { Debug.WriteLine($" Anomaly: {newValue}"); KegLogger.KegLogTrace("Anomaly Detected!", "Weight:GetWeight", SeverityLevel.Error, new Dictionary <string, string>() { { "Weight", newValue.ToString() } }); return(true); } else { return(false); } }
public void Initialize() { if (IsInitialized) { return; } //IsInitialized = true; int pinNumber = Int32.Parse(CalibrationSettings[FlowGPIOPinNumberSetting].ToString()); var c = GpioController.GetDefault(); if (c != null) { try { _pin = c.OpenPin(pinNumber); if (_pin != null) { if (_pin.IsDriveModeSupported(GpioPinDriveMode.InputPullUp)) { _pin.SetDriveMode(GpioPinDriveMode.InputPullUp); } _pin.ValueChanged += _pin_ValueChanged; } } catch (Exception ex) { Debug.WriteLine($"Exception:{ex.Message}"); KegLogger.KegLogException(ex, "Flow:Initialize", SeverityLevel.Critical); KegLogger.KegLogTrace(ex.Message, "Flow:Initialize", SeverityLevel.Error, new Dictionary <string, string>() { { "PinNumber", CalibrationSettings[FlowGPIOPinNumberSetting].ToString() } }); //Pin used exception //TODO } } IsInitialized = true; }
public void Initialize() { var gpio = GpioController.GetDefault(); if (gpio == null) { _pin = null; Debug.WriteLine("Flow Control:Unable to initialize, no GPIO controller."); KegLogger.KegLogTrace("Custom: Flow Control:Unable to initialize, no GPIO controller.", "FlowControl:Initialize", SeverityLevel.Error, new Dictionary <string, string>() { { "PinNumber", CalibrationSettings[FlowControlGpioPinNumberSetting].ToString() }, { "IsActive", _isActive.ToString() } }); return; } if (_pin == null) { try { _pin = gpio.OpenPin(Int32.Parse(CalibrationSettings[FlowControlGpioPinNumberSetting].ToString()), GpioSharingMode.Exclusive); _pin.Write(_isActive); _pin.SetDriveMode(GpioPinDriveMode.Output); } catch (Exception ex) { Debug.WriteLine($"Flow Control:Unable to initialize, PIN Null.{ex.Message}"); KegLogger.KegLogException(ex, "FlowControl:Initialize", SeverityLevel.Critical); KegLogger.KegLogTrace(ex.Message, "FlowControl:Initialize", SeverityLevel.Critical, new Dictionary <string, string>() { { "PinNumber", CalibrationSettings[FlowControlGpioPinNumberSetting].ToString() }, { "IsActive", _isActive.ToString() } }); } } }