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())

                                      ));
        }
示例#2
0
        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);
        }
示例#3
0
        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;
        }