private void timerRapidFire_TickWU(object sender, EventArgs e)
{
int sensor_num;
sensor_num = AppContext.PersistentState.StationSensorIndexWeather;
string str_not_corr_sensor = "Not correct sensor selected!";
try
{
ISensor[] sensors = _deviceConnection.ToArray();
if (sensors[sensor_num].IsValid)
{
if (labelControlPwsStatus.Text == str_not_corr_sensor)
{
//labelControlPwsStatus.Text = "Correct sensor selected";
labelControlPwsStatus.SetPropertyThreadSafe(() => labelControlPwsStatus.Text, "Correct sensor selected");
}
}
else
{
// CancelWindFinder("Not correct sensor selected!");
labelControlPwsStatus.SetPropertyThreadSafe(() => labelControlPwsStatus.Text, str_not_corr_sensor);
return;
}
var reading = sensors[sensor_num].GetCurrentReading();
var id = AppContext.PersistentState.StationNameWeather;
var stationPassword = AppContext.PersistentState.StationPasswordWeather;
Dictionary<string, string> queryParams = new Dictionary<string, string>();
queryParams.Add("action", "updateraw");
queryParams.Add("ID", id);
queryParams.Add("PASSWORD", stationPassword);
//timeActual = DateTime.UtcNow;
timeActual = timeTemp.AddMilliseconds(5000);//pov2500
timeTemp = timeActual;
timerWU.Interval = 5000;//pov2500
// is time to time correction ?
if (++count_to_correction > 100) //2.5*200[s]
{
count_to_correction = 0;
dc = GetTimeCorrection(DateTime.UtcNow);
// Error by time snchronization ?
if (dc == -123456)
{
// timeActual = DateTime.UtcNow.AddMilliseconds(0);
}
else
{
timeActual = DateTime.UtcNow.AddMilliseconds(dc);
}
timeTemp = timeActual;
File.AppendAllText("weatherlog_out.txt", timeTemp +
" - TIME CORRECTION: " + dc.ToString() +
Environment.NewLine);
}
string datetimestr = "";
datetimestr += timeActual.ToString("yyyy-MM-dd+");
datetimestr += timeActual.ToString("HH:");// + "%3A";
datetimestr += timeActual.ToString("mm:");// + "%3A";
datetimestr += timeActual.ToString("ss");
queryParams.Add("dateutc", datetimestr); // format casu: priklad 18:50:20
if (reading.IsWindDirectionValid && reading.WindDirection >= 0 && reading.WindDirection <= 360.0)
{
queryParams.Add("winddir", ((int)(reading.WindDirection)).ToString());
}
if (reading.IsWindSpeedValid)
{
var speedConverter = ReadingValuesConverterCache<Reading>.SpeedCache
.Get(sensors[sensor_num].SpeedUnit, SpeedUnit.MilesPerHour);
var speed = speedConverter.Convert(reading.WindSpeed);
queryParams.Add("windspeedmph", speed.ToString());
}
// queryParams.Add("windgustmph", "0,0");
if (reading.IsWindSpeedValid)
{
queryParams.Add("windgustmph", _advancedSensorValues[sensor_num].m_windgust_WU.ToString() );
}
if (reading.IsTemperatureValid)
{
var tempConverter = ReadingValuesConverterCache<Reading>.TemperatureCache
.Get(sensors[sensor_num].TemperatureUnit, TemperatureUnit.Fahrenheit);
var temperature = tempConverter.Convert(reading.Temperature);
queryParams.Add("tempf", temperature.ToString());
}
// queryParams.Add("rainin", "");
if (reading.IsPressureValid)
{
var pressConverter = ReadingValuesConverterCache<Reading>.PressCache
.Get(sensors[sensor_num].PressureUnit, PressureUnit.InchOfMercury);
var pressure = pressConverter.Convert(reading.Pressure);
queryParams.Add("baromin", pressure.ToString());
}
else
{
// queryParams.Add("baromin", "NaN");
}
if (reading.IsHumidityValid && reading.IsTemperatureValid)
{
var tempConverterCelcius = ReadingValuesConverterCache<Reading>.TemperatureCache
.Get(sensors[sensor_num].TemperatureUnit, TemperatureUnit.Celsius);
var tempConverterCToF = ReadingValuesConverterCache<Reading>.TemperatureCache
.Get(TemperatureUnit.Celsius, TemperatureUnit.Fahrenheit);
var tempC = tempConverterCelcius.Convert(reading.Temperature);
var dewPointC = DewPointCalculator.DewPoint(tempC, reading.Humidity);
var dewPointF = tempConverterCToF.Convert(dewPointC);
queryParams.Add("dewptf", dewPointF.ToString());
}
else
{
// queryParams.Add("dewptf", "NaN");
}
if (reading.IsHumidityValid)
{
queryParams.Add("humidity", (reading.Humidity * 100.0).ToString());
}
else
{
//queryParams.Add("humidity", "NaN");
// queryParams.Add("humidity", "100");
}
// queryParams.Add("weather", "");
// queryParams.Add("clouds", "");
queryParams.Add(
"softwaretype",
"Atmo"
);
queryParams.Add("realtime", "1");
// pokus z pov 2.5
queryParams.Add("rtfreq", "5"); //pov2.5
/* rp
* old
* if (builder_wu == null)
{
builder_wu = new UriBuilder("http://rtupdate.wunderground.com/weatherstation/updateweatherstation.php");
}
*/
UriBuilder builder_wu;
builder_wu = new UriBuilder("http://rtupdate.wunderground.com/weatherstation/updateweatherstation.php");
builder_wu.Query = String.Join(
"&",
queryParams
.Select(kvp => String.Concat(Uri.EscapeDataString(kvp.Key), '=', Uri.EscapeDataString(kvp.Value)))
.ToArray()
);
try
{
var reqSent = HttpWebRequest.Create(builder_wu.Uri);
reqSent.BeginGetResponse(HandleRapidFireResult, reqSent);
//rp
//debug
Log.Warn("WA - sendet packet: " + builder_wu.Uri);
// rp
// for statistic
_internetStreamingStatistics.m_StreamingServers[0].IncrementSendetPacekets();
}
catch (Exception ex)
{
Log.Warn("PWS rapid fire failure.1.", ex);
}
}
catch (Exception ex)
{
Log.Warn("PWS rapid fire failure.2.", ex);
}
}