public static XElement MeterValuesRequestXML(String ChargeBoxIdentity, UInt16 ConnectorId, UInt16 TransactionId, IEnumerable <MeterValue> MeterValues = null) { if (MeterValues == null) { MeterValues = new MeterValue[0]; } return(SOAP.Encapsulation(SOAPHeaders: new XElement[] { new XElement(OCPPNS.OCPPv1_5_CS + "chargeBoxIdentity", ChargeBoxIdentity) }, SOAPBody: new XElement(OCPPNS.OCPPv1_5_CS + "meterValuesRequest", new XElement(OCPPNS.OCPPv1_5_CS + "connectorId", ConnectorId), new XElement(OCPPNS.OCPPv1_5_CS + "transactionId", TransactionId), MeterValues.Select(value => new XElement(OCPPNS.OCPPv1_5_CS + "values", new XElement(OCPPNS.OCPPv1_5_CS + "timestamp", value.Timestamp), new XElement(OCPPNS.OCPPv1_5_CS + "value", new XAttribute(OCPPNS.OCPPv1_5_CS + "context", value.Context), new XAttribute(OCPPNS.OCPPv1_5_CS + "format", value.Format), new XAttribute(OCPPNS.OCPPv1_5_CS + "measurand", value.Measurand), new XAttribute(OCPPNS.OCPPv1_5_CS + "location", value.Location), new XAttribute(OCPPNS.OCPPv1_5_CS + "unit", value.Unit), value.Value) )).ToArray()) )); }
private void DrawMeterValue(Graphics graphics, Rectangle rectangle, MeterValues meter, Orientation orientation) { if (!meter.ShowLevels) { return; } var text = meter.RequestedScale == Scale.Logarithmic ? DecibelText(meter.Peak) : LinearText(meter.Peak); DrawValueText(graphics, rectangle, text, orientation); }
private void DrawAlias(Graphics graphics, Rectangle rectangle, MeterValues meter, Orientation orientation) { var text = meter.Alias; if (string.IsNullOrWhiteSpace(text)) { return; } using (var font = new Font("Tahoma", 10, FontStyle.Regular)) using (var brush = new SolidBrush(Color.FromArgb(0xB0, 0x00, 0x00, 0x00))) { var color = Brushes.White; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; var indent = !meter.ShowLevels ? 0 : orientation == Orientation.Horizontal ? 48 : 20; //Always along the bar: var measure = graphics.MeasureString(text, font); var xPosition = rectangle.Y + indent; var yPosition = (rectangle.Width - measure.Height) / 2; var textRectangle = new RectangleF(new PointF(xPosition, rectangle.X + yPosition), measure); //Basically moves bar: // | // | // | // | // to become: ---- graphics.RotateTransform(-90); // move x,-h: ---- graphics.TranslateTransform(-rectangle.Height, 0); graphics.FillRectangle(brush, textRectangle); graphics.DrawString(text, font, color, textRectangle); graphics.ResetTransform(); } }
private void UpdateSources() { _logger.LogInformation("Updating sources."); //Do it simple for now, clear and dispose all: foreach (var sessionsValue in _sessions) { sessionsValue.Dispose(); } _sessions.Clear(); //Then re-add all: var sources = _appSettings.CurrentValue.Devices ?? Array.Empty <AppSettings.Capture.Device>(); foreach (var source in sources) { var mmDevice = GetDevice(source); if (mmDevice is null) { var meterValues = new MeterValues(null, source); _sessions.Add(meterValues); } else { var captureSession = mmDevice.DataFlow == DataFlow.Render ? CaptureSession.FromAudioOutput(mmDevice) : CaptureSession.FromAudioInput(mmDevice); var meterValues = new MeterValues(captureSession, source); _sessions.Add(meterValues); } } _dirtySources = false; }