public EnergyReading ParseAsEnergyReading(string readingData)
        {
            var energyReading = new EnergyReading
            {
                TimeStamp   = DateTime.MinValue,
                Energy      = float.NaN,
                Temperature = float.NaN,
                IsValid     = false,
                Source      = "energymonitor"
            };

            try
            {
                // parse the xml based reading
                XmlDocument xDoc = new XmlDocument();
                xDoc.LoadXml(readingData);

                energyReading.RawData = xDoc.OuterXml;

                XmlNode xNode = xDoc.SelectSingleNode("/msg/time");
                energyReading.TimeStamp = XmlConvert.ToDateTime(xNode.InnerText);
                xNode = xDoc.SelectSingleNode("/msg/tmpr");
                if (null == xNode)
                {
                    // try the tmprF element instead
                    xNode = xDoc.SelectSingleNode("/msg/tmprF");
                }
                if (xNode != null)
                {
                    energyReading.Temperature = System.Xml.XmlConvert.ToSingle(xNode.InnerText);
                }
                xNode = xDoc.SelectSingleNode("/msg/ch1/watts");
                if ((null != xNode) && (string.Empty != xNode.InnerText))
                {
                    energyReading.Energy = System.Xml.XmlConvert.ToInt32(xNode.InnerText);
                }

                xNode = xDoc.SelectSingleNode("/msg/ch2/watts");
                if ((null != xNode) && (string.Empty != xNode.InnerText))
                {
                    energyReading.Energy += System.Xml.XmlConvert.ToInt32(xNode.InnerText);
                }

                xNode = xDoc.SelectSingleNode("/msg/ch3/watts");
                if ((null != xNode) && (string.Empty != xNode.InnerText))
                {
                    energyReading.Energy += System.Xml.XmlConvert.ToInt32(xNode.InnerText);
                }

                energyReading.IsValid = true;
            }
            catch (Exception ex)
            {
                // invalid reading
                Debug.WriteLine("Error parsing xml data to create EnergyReading: " + ex.Message);
            }

            return(energyReading);
        }
        protected virtual void OnReadingReceived(EnergyReading rdg)
        {
            var handler = this.ReadingReceived;

            if (handler != null)
            {
                handler(this, rdg);
            }
        }
        void energyReader_ReadingReceived(object sender, EnergyReading energyReading)
        {
            string rawData = energyReading.RawData;

            if (!string.IsNullOrWhiteSpace(rawData) && rawData.Length >= 40)
            {
                rawData = rawData.Substring(0, 40);
            }

            Console.WriteLine("{0} {1} {2} {3}", energyReading.TimeStamp, energyReading.Temperature, energyReading.Energy, rawData);
            eventHubWriter.SendToEventHub(energyReading);
        }
 private void SerialDataReceived(object sender, SerialDataReceivedEventArgs e)
 {
     this.rxBuffer += this.comm.ReadExisting();
     while (this.IsReading(this.rxBuffer))
     {
         // we have a reading (or partial reading), so let's process
         EnergyReading rdg = this.ExtractReading(ref this.rxBuffer);
         if (rdg.IsValid)
         {
             this.OnReadingReceived(rdg);
         }
     }
 }
Exemple #5
0
        private void Timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            var energyReading = new EnergyReading
            {
                Energy    = random.Next(19, 21),
                RawData   = string.Empty,
                TimeStamp = DateTime.UtcNow,
                Source    = "fake",
                IsValid   = true
            };

            OnReadingReceived(energyReading);
        }
Exemple #6
0
        public static async Task <HttpResponseMessage> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequestMessage req,
            [Table("readings", Connection = "FNEMS")] CloudTable tableBinding,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");

            EnergyReading reading = new EnergyReading()
            {
                RowKey      = DateTime.Now.ToString() + DateTime.Now.Millisecond,
                Electricity = ParseDoubleOrDefault(GetParameter(req, "elec")),
                Gas         = ParseDoubleOrDefault(GetParameter(req, "gas")),
                Office      = ToAzureKeyString(GetParameter(req, "office")),
                ReadingDate = ParseDateOrDefault(GetParameter(req, "date")),
                Comment     = ToAzureKeyString(GetParameter(req, "comment"))
            };
            TableOperation updateOperation = TableOperation.Insert(reading);
            TableResult    result          = tableBinding.Execute(updateOperation);

            return(req.CreateResponse(HttpStatusCode.OK, reading));
        }
 public void SendToEventHub(EnergyReading e)
 {
     eventHubClient.Send(new EventData(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(e))));
 }
        private EnergyReading SetupNewReading(FeatureType featureType, uint featureId, DateTime curTime, DeviceDetailPeriods_EnergyMeter days)
        {
            EnergyReading reading = new EnergyReading();

            if (LastRecordTime.HasValue)
                reading.Initialise(days, curTime, LastRecordTime.Value, false);
            else
                reading.Initialise(days, curTime, TimeSpan.FromSeconds(DeviceInterval), false);

            return reading;
        }