コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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);
            }
        }