private Payload BuildDDEATH(Ppuplink.AlarmMessage alarmMessage) { Payload payload = new Payload() { Timestamp = alarmMessage.Timesent, Seq = GetSeq() }; return(payload); }
public void Test_Alarm_PowerFail() { 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 alarmMessage = new Ppuplink.AlarmMessage() { Deviceeui = deviceEUI, Timesent = 1612234855, Alarmtype = "powerfailalarm", Phaseid = 1, Value = 0 }; // trigger DBIRTH and alarm var topic = $"application/powerpilot/uplink/alarm/{deviceEUI}"; inputMqtt.InjectMessage(new MQTTMessageArgs(topic, alarmMessage.ToByteArray())); Thread.Sleep(10); var messages = outputMqtt.GetMessagesReceived(); // expect alarm var alarm = messages.Find(m => m.Topic == $"spBv1.0/DTX/{SparkPlugMessageTypes.DDATA}/PowerPilotCS/{deviceEUI}"); Assert.NotNull(alarm); var payload = Payload.Parser.ParseFrom(alarm.Payload); Assert.Single(payload.Metrics); Assert.Equal($"{Alarm.TYPE}/1/{Alarm.POWER_FAIL}", payload.Metrics[0].Name); // expect DDEATH var ddeath = messages.Find(m => m.Topic == $"spBv1.0/DTX/{SparkPlugMessageTypes.DDEATH}/PowerPilotCS/{deviceEUI}"); Assert.NotNull(ddeath); }
private Payload AddAlarmMetrics(Ppuplink.AlarmMessage alarmMessage, Payload payload, PowerPilotCommon.Models.PostgreSQL.Connection connection) { var phaseID = GetPhase(alarmMessage.Phaseid, connection).ToString(); if (alarmMessage == null) { // DBIRTH var timestamp = (ulong)DataServiceClient.ConvertToTimestamp(DateTime.Now); payload.Metrics.Add(GetMetricInt(Alarm.TYPE, phaseID, Alarm.POWER_FAIL, null, timestamp)); payload.Metrics.Add(GetMetricDouble(Alarm.TYPE, phaseID, Alarm.VOLTAGE_HIGH, null, timestamp)); payload.Metrics.Add(GetMetricDouble(Alarm.TYPE, phaseID, Alarm.VOLTAGE_LOW, null, timestamp)); payload.Metrics.Add(GetMetricDouble(Alarm.TYPE, phaseID, Alarm.VOLTAGE_NORMAL, null, timestamp)); return(payload); } switch (alarmMessage.Alarmtype) { case "powerfailalarm": payload.Metrics.Add(GetMetricInt(Alarm.TYPE, phaseID, Alarm.POWER_FAIL, 0, alarmMessage.Timesent)); break; case "highvoltagealarm": case "veryhighvoltagealarm": payload.Metrics.Add(GetMetricDouble(Alarm.TYPE, phaseID, Alarm.VOLTAGE_HIGH, alarmMessage.Value, alarmMessage.Timesent)); break; case "lowvoltagealarm": case "verylowvoltagealarm": payload.Metrics.Add(GetMetricDouble(Alarm.TYPE, phaseID, Alarm.VOLTAGE_LOW, alarmMessage.Value, alarmMessage.Timesent)); break; case "normalvoltage": payload.Metrics.Add(GetMetricDouble(Alarm.TYPE, phaseID, Alarm.VOLTAGE_NORMAL, alarmMessage.Value, alarmMessage.Timesent)); break; default: throw new Exception($"Unhandled alarm type {alarmMessage.Alarmtype}"); } return(payload); }
public void Test_Alarm_NormalVoltage() { 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 alarmMessage = new Ppuplink.AlarmMessage() { Deviceeui = deviceEUI, Timesent = 1612234855, Alarmtype = "normalvoltage", Phaseid = 1, Value = 237.3 }; // trigger DBIRTH and alarm var topic = $"application/powerpilot/uplink/alarm/{deviceEUI}"; inputMqtt.InjectMessage(new MQTTMessageArgs(topic, alarmMessage.ToByteArray())); Thread.Sleep(10); var messages = outputMqtt.GetMessagesReceived(); // expect alarm var alarm = messages.Find(m => m.Topic == $"spBv1.0/DTX/{SparkPlugMessageTypes.DDATA}/PowerPilotCS/{deviceEUI}"); Assert.NotNull(alarm); var payload = Payload.Parser.ParseFrom(alarm.Payload); Assert.Single(payload.Metrics); Assert.Equal($"{Alarm.TYPE}/1/{Alarm.VOLTAGE_NORMAL}", payload.Metrics[0].Name); // should have extra DBIRTH for coming back to life Assert.Equal(3, outputMqtt.GetNumPublishedMessages()); }
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); }