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); }
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); }
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); }
// 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()); }