Пример #1
0
        public void Test_VoltageStats()
        {
            var dataService = new MockDataService();
            var spg         = new SparkPlugGenerator(new MockLogger(), dataService, publishTopic);
            var inputMqtt   = new MockMQTTWrapper();
            var outputMqtt  = new MockMQTTWrapper();
            var deviceEUI   = "123";

            inputMqtt.MessageReceived   += spg.ProcessMessage;
            spg.MessageProcessed        += outputMqtt.Publish;
            outputMqtt.MessagePublished += OnMessagePublished;

            var voltageStats = new Ppuplink.VoltageStatsMessage()
            {
                Deviceeui = deviceEUI,
                Timesent  = 1612234855,
                Starttime = "2021/01/01",
                Stoptime  = "2021/01/02",
                Phaseid   = 1,
                H0213     = 1,
                H213215   = 1,
                H215217   = 0,
                H217219   = 10,
                H219221   = 2,
                H221223   = 5,
                H223225   = 0,
                H225227   = 1,
                H227229   = 4,
                H229231   = 0,
                H231233   = 12,
                H233235   = 500,
                H235237   = 2,
                H237239   = 0,
                H239241   = 2,
                H241243   = 0,
                H243245   = 0,
                H245247   = 0,
                H247249   = 0,
                H249300   = 1,
                Mean      = 12.4,
                Variance  = 234.6
            };

            // trigger DBIRTH and voltagestats
            var topic = $"application/powerpilot/uplink/voltagestats/{deviceEUI}";

            inputMqtt.InjectMessage(new MQTTMessageArgs(topic, voltageStats.ToByteArray()));

            Thread.Sleep(10);
            var messages = outputMqtt.GetMessagesReceived();

            // expect voltagestats
            var voltagestats = messages.Find(m => m.Topic == $"spBv1.0/DTX/{SparkPlugMessageTypes.DDATA}/PowerPilotCS/{deviceEUI}");

            Assert.NotNull(voltagestats);
            var payload = Payload.Parser.ParseFrom(voltagestats.Payload);

            Assert.Equal(24, payload.Metrics.Count);
        }
Пример #2
0
        private Payload AddVoltageStatsMetrics(Ppuplink.VoltageStatsMessage vs, Payload payload, PowerPilotCommon.Models.PostgreSQL.Connection connection)
        {
            var   phaseID = GetPhase(vs.Phaseid, connection).ToString();
            ulong timestamp;

            if (vs == null)
            {
                timestamp = (ulong)DataServiceClient.ConvertToTimestamp(DateTime.Now);
            }
            else
            {
                timestamp = vs.Timesent;
            }

            payload.Metrics.Add(GetMetricDouble(VoltageStats.TYPE, phaseID, VoltageStats.MEAN, vs?.Mean, timestamp));
            payload.Metrics.Add(GetMetricDouble(VoltageStats.TYPE, phaseID, VoltageStats.VARIANCE, vs?.Variance, timestamp));
            payload.Metrics.Add(GetMetricString(VoltageStats.TYPE, phaseID, VoltageStats.START_TIME, vs?.Starttime, timestamp));
            payload.Metrics.Add(GetMetricString(VoltageStats.TYPE, phaseID, VoltageStats.STOP_TIME, vs?.Stoptime, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V50_213, (ulong?)vs?.H0213, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V213_215, (ulong?)vs?.H213215, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V215_217, (ulong?)vs?.H215217, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V217_219, (ulong?)vs?.H217219, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V219_221, (ulong?)vs?.H219221, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V221_223, (ulong?)vs?.H221223, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V223_225, (ulong?)vs?.H223225, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V225_227, (ulong?)vs?.H225227, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V227_229, (ulong?)vs?.H227229, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V229_231, (ulong?)vs?.H229231, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V231_233, (ulong?)vs?.H231233, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V233_235, (ulong?)vs?.H233235, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V235_237, (ulong?)vs?.H235237, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V237_239, (ulong?)vs?.H237239, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V239_241, (ulong?)vs?.H239241, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V241_243, (ulong?)vs?.H241243, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V243_245, (ulong?)vs?.H243245, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V245_247, (ulong?)vs?.H245247, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V247_249, (ulong?)vs?.H247249, timestamp));
            payload.Metrics.Add(GetMetricLong(VoltageStats.TYPE, phaseID, VoltageStats.V249_300, (ulong?)vs?.H249300, timestamp));

            return(payload);
        }
Пример #3
0
        private async Task <Payload> GetPhaseMessages(PowerPilotCommon.Models.PostgreSQL.Connection connection, Payload payload, uint line)
        {
            int phase = GetPhase(line, connection);
            var pq    = await _dataService.GetPQ(connection.DeviceEUI, phase);

            if (pq == null)
            {
                pq = new Ppuplink.PQMessage()
                {
                    Phaseid  = line,
                    Timesent = (ulong)DataServiceClient.ConvertToTimestamp(DateTime.Now),
                };
            }
            payload = AddPQMetrics(pq, payload, connection);

            var voltagestats = await _dataService.GetVoltageStats(connection.DeviceEUI, phase);

            if (voltagestats == null)
            {
                voltagestats = new Ppuplink.VoltageStatsMessage()
                {
                    Phaseid  = line,
                    Timesent = (ulong)DataServiceClient.ConvertToTimestamp(DateTime.Now),
                };
            }
            payload = AddVoltageStatsMetrics(voltagestats, payload, connection);

            // alarms
            var highvoltage = new Ppuplink.AlarmMessage()
            {
                Timesent  = (ulong)DataServiceClient.ConvertToTimestamp(DateTime.Now),
                Phaseid   = line,
                Alarmtype = "highvoltagealarm"
            };

            payload = AddAlarmMetrics(highvoltage, payload, connection);

            var lowvoltage = new Ppuplink.AlarmMessage()
            {
                Timesent  = (ulong)DataServiceClient.ConvertToTimestamp(DateTime.Now),
                Phaseid   = line,
                Alarmtype = "lowvoltagealarm"
            };

            payload = AddAlarmMetrics(lowvoltage, payload, connection);

            var powerfail = new Ppuplink.AlarmMessage()
            {
                Timesent  = (ulong)DataServiceClient.ConvertToTimestamp(DateTime.Now),
                Phaseid   = line,
                Alarmtype = "powerfailalarm"
            };

            payload = AddAlarmMetrics(powerfail, payload, connection);

            var normalvoltage = new Ppuplink.AlarmMessage()
            {
                Timesent  = (ulong)DataServiceClient.ConvertToTimestamp(DateTime.Now),
                Phaseid   = line,
                Alarmtype = "normalvoltage"
            };

            payload = AddAlarmMetrics(normalvoltage, payload, connection);

            return(payload);
        }
Пример #4
0
        // Test that a DBIRTH can be sent if there ARE existing messages in the db
        public void Test_DBIRTH_ExistingValues()
        {
            var dataService = new MockDataService();
            var spg         = new SparkPlugGenerator(new MockLogger(), dataService, publishTopic);
            var inputMqtt   = new MockMQTTWrapper();
            var outputMqtt  = new MockMQTTWrapper();
            var deviceEUI   = "123";

            inputMqtt.MessageReceived   += spg.ProcessMessage;
            spg.MessageProcessed        += outputMqtt.Publish;
            outputMqtt.MessagePublished += OnMessagePublished;

            var energyMsg = new Ppuplink.EnergyMessage()
            {
                Deviceeui            = deviceEUI,
                Phaseid              = 1,
                Timesent             = 1612234855,
                Energyexportreactive = 1,
                Energyexportreal     = 1,
                Energyimportreactive = 1,
                Energyimportreal     = 1
            };

            dataService.Energy = energyMsg;

            var pqMsg = new Ppuplink.PQMessage()
            {
                Deviceeui  = deviceEUI,
                Timesent   = 1612234855,
                Currentmax = 10,
                Voltagemax = 250.0,
                Phaseid    = 1
            };

            dataService.PQ = pqMsg;

            var uplinkMsg = new Ppuplink.UplinkMessage()
            {
                Deviceeui   = deviceEUI,
                Timesent    = 1612234855,
                Fctn        = 1,
                Messageid   = 1,
                Rssi        = 10,
                Snr         = -10,
                Frequency   = 8000,
                Messagetype = 32
            };

            dataService.Uplink = uplinkMsg;

            var voltageStats = new Ppuplink.VoltageStatsMessage()
            {
                Deviceeui = deviceEUI,
                Timesent  = 1612234855,
                Starttime = "2021/01/01",
                Stoptime  = "2021/01/02",
                H0213     = 1,
                H213215   = 1
            };

            dataService.Uplink = uplinkMsg;

            // trigger DBIRTH and energy
            var topic = $"application/powerpilot/uplink/energy/{deviceEUI}";

            inputMqtt.InjectMessage(new MQTTMessageArgs(topic, energyMsg.ToByteArray()));

            Thread.Sleep(10);
            var messages = outputMqtt.GetMessagesReceived();

            // expect DBIRTH
            var dbirth = messages.Find(m => m.Topic == $"spBv1.0/DTX/{SparkPlugMessageTypes.DBIRTH}/PowerPilotCS/{deviceEUI}");

            Assert.NotNull(dbirth);
            var payload = Payload.Parser.ParseFrom(dbirth.Payload);

            Assert.Equal(53, payload.Metrics.Count);

            // expect energy
            var energy = messages.Find(m => m.Topic == $"spBv1.0/DTX/{SparkPlugMessageTypes.DDATA}/PowerPilotCS/{deviceEUI}");

            Assert.NotNull(energy);
            payload = Payload.Parser.ParseFrom(energy.Payload);
            Assert.Equal(4, payload.Metrics.Count);

            Assert.Equal(2, outputMqtt.GetNumPublishedMessages());
        }