private void SkyObservations(string json) { JavaScriptSerializer serializer = new JavaScriptSerializer(); try { SkyObj = serializer.Deserialize <SkyData>(json); SkyObj.valid = true; WFNodeServer.SkyEventArgs evnt = new SkyEventArgs(SkyObj); evnt.SetDaily = CalcDailyPrecipitation(); evnt.Raw = json; try { WeatherFlowNS.NS.RaiseSkyEvent(this, evnt); } catch (Exception ex) { WFLogging.Warning("Failed to process Sky event. " + ex.Message); } WeatherFlowNS.NS.RaiseUpdateEvent(this, new UpdateEventArgs((int)SkyObj.obs[0][0].GetValueOrDefault(), SkyObj.serial_number, DataType.SKY)); } catch (Exception ex) { WFLogging.Error("Deserialization failed for sky data: " + ex.Message); WFLogging.Verbose(json); return; } }
private void AirObservations(string json) { JavaScriptSerializer serializer = new JavaScriptSerializer(); // obs[0][0] = time (seconds) // obs[0][1] = station pressure (MB) // obs[0][2] = air temp (c) // obs[0][3] = humidity (%) // obs[0][4] = lightning count // obs[0][5] = avg lightning dist (km) // obs[0][6] = battery // obs[0][7] = interval (minutes) try { double elevation = 0; AirObj = serializer.Deserialize <AirData>(json); AirObj.valid = true; // Look up elevation StationInfo si = wf_station.FindStationAir(AirObj.serial_number); if (si != null) { elevation = si.elevation; } // Do we just want to raise an event with the data object? AirEventArgs evnt = new AirEventArgs(AirObj); evnt.SetDewpoint = 0; evnt.SetApparentTemp = 0; evnt.SetTrend = 1; evnt.SetSeaLevel = SeaLevelPressure(AirObj.obs[0][(int)AirIndex.PRESSURE].GetValueOrDefault(), elevation); evnt.Raw = json; if (SkyObj.valid) { try { evnt.SetDewpoint = CalcDewPoint(); evnt.SetApparentTemp = FeelsLike(AirObj.obs[0][(int)AirIndex.TEMPURATURE].GetValueOrDefault(), AirObj.obs[0][(int)AirIndex.HUMIDITY].GetValueOrDefault(), SkyObj.obs[0][(int)SkyIndex.WIND_SPEED].GetValueOrDefault()); // Trend is -1, 0, 1 while event wants 0, 1, 2 evnt.SetTrend = PressureTrend() + 1; // Heat index & Windchill ?? } catch { } } else { } try { WeatherFlowNS.NS.RaiseAirEvent(this, evnt); } catch (Exception ex) { WFLogging.Warning("Failed to process Air event. " + ex.Message); } WeatherFlowNS.NS.RaiseUpdateEvent(this, new UpdateEventArgs((int)AirObj.obs[0][0].GetValueOrDefault(), AirObj.serial_number, DataType.AIR)); } catch (Exception ex) { WFLogging.Error("Deserialization failed for air data: " + ex.Message); WFLogging.Verbose(json); } }