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