示例#1
0
        private Payload BuildDDEATH(Ppuplink.AlarmMessage alarmMessage)
        {
            Payload payload = new Payload()
            {
                Timestamp = alarmMessage.Timesent,
                Seq       = GetSeq()
            };

            return(payload);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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());
        }
示例#5
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);
        }