Exemplo n.º 1
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            var station = new WS2300(Environment.GetEnvironmentVariable("WEATHERBOT_SERIAL_PORT"));

            var sensors = new List <Sensor>
            {
                WS2300.AvailableSensors.WindDirectionCardinal,
                WS2300.AvailableSensors.WindSpeedKnots,
                WS2300.AvailableSensors.OutdoorTemperature,
                WS2300.AvailableSensors.OutdoorHumidity,
                WS2300.AvailableSensors.RelativePressure,
                WS2300.AvailableSensors.Tendency,
                WS2300.AvailableSensors.RainfallPerImpulse,
                WS2300.AvailableSensors.RainCount,
                WS2300.AvailableSensors.RainCount2,
                WS2300.AvailableSensors.RainTotal,
                WS2300.AvailableSensors.LastTotalRainCount,
            };

            var results = station.GetSensors(sensors);

            foreach (var result in results)
            {
                Console.WriteLine(result);
            }

            for (int i = 0; i < 15; i++)
            {
                var s = new List <Sensor> {
                    new Sensor("4m", RawDataType.U32, new LinearConverter(0, 1m, Units.MetresPerSecond), 0x479 + i * 2, DataReaderBcd2),
                };
                results = station.GetSensors(s);
                Console.WriteLine(result);
            }
        }
Exemplo n.º 2
0
        static async Task Main(string[] args)
        {
            var customCulture = new System.Globalization.CultureInfo("en-NZ");

            customCulture.DateTimeFormat.ShortDatePattern        = "yyyy-MM-dd";
            System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;

            TwitterCredentials creds = TwitterCredentials.GetFromEnvironment();

            var userClient = new TwitterClient(creds.ConsumerKey, creds.ConsumerSecret, creds.AccessToken, creds.AccessSecret);

            var station = new WS2300(Environment.GetEnvironmentVariable("WEATHERBOT_SERIAL_PORT"));

            var sensors = new List <Sensor>
            {
                WS2300.AvailableSensors.WindDirectionCardinal,
                WS2300.AvailableSensors.WindSpeedKnots,
                WS2300.AvailableSensors.OutdoorTemperature,
                WS2300.AvailableSensors.OutdoorHumidity,
                WS2300.AvailableSensors.RelativePressure,
                WS2300.AvailableSensors.Tendency,
                WS2300.AvailableSensors.RainTotal,
            };

            List <DateTime> timeHistory  = new List <DateTime>();
            List <double>   temperatures = new List <double>();
            List <double>   barometers   = new List <double>();
            DateTime        startTime    = DateTime.Now;

            decimal lastRain = -1m;

            while (true)
            {
                var timeUntilTopOfMinute = TimeSpan.FromSeconds(60 - DateTime.Now.TimeOfDay.TotalSeconds % 60);
                System.Threading.Thread.Sleep(timeUntilTopOfMinute);

                DateTime now = DateTime.Now;


                try
                {
                    var res = station.GetSensors(sensors);

                    timeHistory.Add(now);
                    temperatures.Add(Decimal.ToDouble((decimal)res[2].Item2));
                    barometers.Add(Decimal.ToDouble((decimal)res[4].Item2));


                    if (now.Hour != startTime.Hour)
                    {
                        decimal elapsedRain = 0m;
                        if (lastRain >= 0m)
                        {
                            elapsedRain = (decimal)res[6].Item2 - lastRain;
                        }

                        var resultString = $"It's currently {((decimal)res[2].Item2).ToString("F1")}°C with {((decimal)res[3].Item2).ToString("F0")}% humidity.\nThe wind is {((decimal)res[1].Item2).ToString("F1")} kts from {res[0].Item2}\nAir pressure is {((decimal)res[4].Item2).ToString("F1")} hPa and {res[5].Item2.ToString().ToLower()}, {elapsedRain:0.#}mm rain";

                        lastRain = (decimal)res[6].Item2;
                        //int width = 1280;
                        //int height = 720;
                        //var plot = new Plot(width, height);

                        //double[] dataX = timeHistory.Select(x => x.ToOADate()).ToArray();
                        //plot.XAxis.DateTimeFormat(true);
                        //plot.YAxis.Label("°C");
                        //plot.YAxis.Color(Color.Red);

                        //plot.SetAxisLimitsY(0, 45);

                        //var tempScatter = plot.AddScatter(dataX, temperatures.ToArray());
                        //tempScatter.LineWidth = 2;
                        //tempScatter.Color = Color.Red;

                        //var baroScatter = plot.AddScatter(dataX, barometers.ToArray());
                        //baroScatter.LineWidth = 2;
                        //baroScatter.Color = Color.DodgerBlue;

                        //var yAxis3 = plot.AddAxis(ScottPlot.Renderable.Edge.Left, axisIndex: 2);
                        //baroScatter.YAxisIndex = 2;
                        //yAxis3.Label("hPa");
                        //yAxis3.Color(baroScatter.Color);

                        //var image = ImageToPngByte(plot.Render());
                        //var uploadedImage = await userClient.Upload.UploadTweetImageAsync(image);
                        //var tweetParams = new PublishTweetParameters(resultString)
                        //{
                        //    Medias = { uploadedImage }
                        //};
                        //var tweet = await userClient.Tweets.PublishTweetAsync(tweetParams);

                        startTime    = now;
                        timeHistory  = new List <DateTime>();
                        temperatures = new List <double>();
                        barometers   = new List <double>();

                        var tweet = await userClient.Tweets.PublishTweetAsync(resultString);

                        Console.WriteLine("published the tweet: " + tweet);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
            }
        }