Changeset 18339


Ignore:
Timestamp:
Sep 30, 2015, 4:47:02 PM (4 years ago)
Author:
tbretz
Message:
Moved seeing to its own service.
Location:
trunk/FACT++/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/src/HeadersTNGWeather.h

    r18338 r18339  
    1919
    2020        float  fTemperature;
     21        float  fTempTrend;
    2122        float  fDewPoint;
    2223        float  fHumidity;
    2324        float  fAirPressure;
    24         float  fTrend;
    2525        float  fWindSpeed;
    2626        float  fWindDirection;
    2727        float  fDustTotal;
    28         double fSeeingMjd;
     28        float  fSolarimeter;
     29
     30    } __attribute__((__packed__));
     31
     32    struct DimSeeing
     33    {
     34        DimSeeing() { memset(this, 0, sizeof(DimSeeing)); }
     35
    2936        float  fSeeing;
    3037        float  fSeeingMed;
    3138        float  fSeeingStdev;
    32         float  fSolarimeter;
    3339
    3440    } __attribute__((__packed__));
  • trunk/FACT++/src/tngweather.cc

    r18338 r18339  
    4343    }
    4444
     45    virtual void UpdateSeeing(const Time &, const DimSeeing &)
     46    {
     47    }
     48
    4549    virtual void UpdateDust(const Time &, const float &)
    4650    {
     
    5660    Time fLastReport;
    5761    Time fLastReception;
     62
     63    Time fLastSeeing;
    5864
    5965    void HandleRead(const boost::system::error_code& err, size_t bytes_received)
     
    168174
    169175        DimWeather w;
    170         w.fSeeingMjd     = Time(mjd.text().toStdString()).Mjd();
    171         w.fSeeing        = see  .text().toFloat();
    172         w.fSeeingMed     = med  .text().toFloat();
    173         w.fSeeingStdev   = sdev .text().toFloat();
    174176        w.fDustTotal     = dust .text().toFloat();
    175         w.fTrend         = trend.text().toFloat();
     177        w.fTempTrend     = trend.text().toFloat();
    176178        w.fAirPressure   = pres .text().toFloat();
    177179        w.fDewPoint      = dew  .text().toFloat();
     
    182184        w.fSolarimeter   = solar.text().toFloat();
    183185
    184         const string obj = date.text().toStdString();
    185 
    186         Time time(obj);
    187         if (!time.IsValid())
     186        DimSeeing s;
     187        s.fSeeing        = see  .text().toFloat();
     188        s.fSeeingMed     = med  .text().toFloat();
     189        s.fSeeingStdev   = sdev .text().toFloat();
     190
     191        const string dateObj = date.text().toStdString();
     192        const string dateSee = mjd .text().toStdString();
     193
     194        Time timeObj(dateObj);
     195        Time timeSee(dateSee);
     196        if (!timeObj.IsValid())
    188197        {
    189198            struct tm tm;
    190199
    191200            vector<char> buf(255);
    192             if (strptime(obj.c_str(), "%c", &tm))
    193                 time = Time(tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday,
    194                             tm.tm_hour,      tm.tm_min,   tm.tm_sec);
    195         }
    196 
    197         if (!time.IsValid())
    198             throw runtime_error("time invalid");
    199 
    200         if (time!=fLastReport && fIsVerbose)
     201            if (strptime(dateObj.c_str(), "%c", &tm))
     202                timeObj = Time(tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday,
     203                               tm.tm_hour,      tm.tm_min,   tm.tm_sec);
     204        }
     205
     206        if (!timeSee.IsValid())
     207        {
     208            struct tm tm;
     209
     210            vector<char> buf(255);
     211            if (strptime(dateSee.c_str(), "%c", &tm))
     212                timeSee = Time(tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday,
     213                               tm.tm_hour,      tm.tm_min,   tm.tm_sec);
     214
     215            Warn("Seeing time invalid ["+dateObj+"]");
     216        }
     217
     218        if (!timeObj.IsValid())
     219            throw runtime_error("object time invalid");
     220
     221        if (timeObj!=fLastReport && fIsVerbose)
    201222        {
    202223            Out() << endl;
    203             Out() << "Date:           " << time             << endl;
    204             Out() << "Seeing:         " << w.fSeeing << " [" << Time(w.fSeeingMjd) << "]" << endl;
    205             Out() << "Seeing:         " << w.fSeeingMed << " +- " << w.fSeeingStdev << endl;
    206             Out() << "DustTotal:      " << w.fDustTotal     << endl;
    207             Out() << "AirPressure:    " << w.fAirPressure   << endl;
    208             Out() << "Trend:          " << w.fTrend         << endl;
    209             Out() << "DewPoint:       " << w.fDewPoint      << endl;
    210             Out() << "WindDirection:  " << w.fWindDirection << endl;
    211             Out() << "WindSpeed:      " << w.fWindSpeed     << endl;
    212             Out() << "Humidity:       " << w.fHumidity      << endl;
    213             Out() << "Temperature:    " << w.fTemperature   << endl;
    214             Out() << "Solarimeter:    " << w.fSolarimeter   << endl;
     224            Out() << "Date:           " << timeObj          << endl;
     225            Out() << "DustTotal:      " << w.fDustTotal     << " ugr/m^2" << endl;
     226            Out() << "AirPressure:    " << w.fAirPressure   << " mbar"    << endl;
     227            Out() << "DewPoint:       " << w.fDewPoint      << " deg C"   << endl;
     228            Out() << "WindDirection:  " << w.fWindDirection << " deg"     << endl;
     229            Out() << "WindSpeed:      " << w.fWindSpeed     << " m/s"     << endl;
     230            Out() << "Humidity:       " << w.fHumidity      << "%"        << endl;
     231            Out() << "Temperature:    " << w.fTemperature   << " deg C"   << endl;
     232            Out() << "TempTrend 24h:  " << w.fTempTrend     << " deg C"   << endl;
     233            Out() << "Solarimeter:    " << w.fSolarimeter   << " W/m^2"   << endl;
    215234            Out() << endl;
    216         }
    217 
    218         fLastReport = time;
    219 
    220         UpdateWeather(time, w);
     235            Out() << "Seeing:         " << s.fSeeing << " arcsec [" << timeSee << "]" << endl;
     236            Out() << "Seeing:         " << s.fSeeingMed << " +- " << s.fSeeingStdev << endl;
     237            Out() << endl;
     238        }
     239
     240        fLastReport = timeObj;
     241
     242        UpdateWeather(timeObj, w);
     243
     244        if (timeSee.IsValid() && fLastSeeing!=timeSee)
     245        {
     246            UpdateSeeing(timeSee, s);
     247            fLastSeeing = timeSee;
     248        }
    221249
    222250        if (fDust==w.fDustTotal)
    223251            return;
    224252
    225         UpdateDust(time, w.fDustTotal);
     253        UpdateDust(timeObj, w.fDustTotal);
    226254        fDust = w.fDustTotal;
    227255
    228256        ostringstream out;
    229         out << setprecision(3) << "Dust: " << fDust << "ug/m^3 [" << time << "]";
     257        out << setprecision(3) << "Dust: " << fDust << "ug/m^3 [" << timeObj << "]";
    230258        Message(out);
    231259    }
     
    246274            "User-Agent: FACT tngweather\r\n"
    247275            "Accept: */*\r\n"
    248             "Host: "+Address()+"\r\n"
     276            "Host: "+URL()+"\r\n"
    249277            "Connection: close\r\n"//Keep-Alive\r\n"
    250278            "Content-Type: application/rss+xml\r\n"
     
    315343    ConnectionWeather(ba::io_service& ioservice, MessageImp &imp) : Connection(ioservice, imp()),
    316344        fIsVerbose(true), fDust(-1),
    317         fLastReport(Time::none), fLastReception(Time::none),
     345        fLastReport(Time::none), fLastReception(Time::none), fLastSeeing(Time::none),
    318346        fKeepAlive(ioservice)
    319347    {
     
    360388    DimDescribedService fDimWeather;
    361389    DimDescribedService fDimAtmosphere;
     390    DimDescribedService fDimSeeing;
    362391
    363392    virtual void UpdateWeather(const Time &t, const DimWeather &data)
     
    371400        fDimAtmosphere.setData(&dust, sizeof(float));
    372401        fDimAtmosphere.Update(t);
     402    }
     403
     404    virtual void UpdateSeeing(const Time &t, const DimSeeing &see)
     405    {
     406        fDimSeeing.setData(&see, sizeof(DimSeeing));
     407        fDimSeeing.Update(t);
    373408    }
    374409
     
    376411    ConnectionDimWeather(ba::io_service& ioservice, MessageImp &imp) :
    377412        ConnectionWeather(ioservice, imp),
    378         fDimWeather("TNG_WEATHER/DATA", "F:1;F:1;F:1;F:1;F:1;F:1;F:1;F:1;D:1;F:1;F:1;F:1;F:1",
     413        fDimWeather("TNG_WEATHER/DATA", "F:1;F:1;F:1;F:1;F:1;F:1;F:1;F:1;F:1",
    379414                     "|T[deg C]:Temperature"
     415                     "|DeltaT[deg C]:Temperature trend 24h"
    380416                     "|T_dew[deg C]:Dew point"
    381417                     "|H[%]:Humidity"
    382418                     "|P[mbar]:Air pressure"
    383                      "|Trend"
    384419                     "|v[km/h]:Wind speed"
    385420                     "|d[deg]:Wind direction (N-E)"
    386421                     "|Dust[ug/m^3]:Dust (total)"
    387                      "|SeeingDate[mjd]:Seeing MJD"
    388                      "|Seeing[arcsec]:Seeing"
    389                      "|Seeing[arcsec]:Seeing Median"
    390                      "|SeeingStdev[arcsec]:Seeing Stdev"
    391422                     "|Solarimeter[W/m^2]:Solarimeter"),
    392423        fDimAtmosphere("TNG_WEATHER/DUST", "F:1",
    393                        "|Dust[ug/m^3]:Dust (total)")
     424                       "|Dust[ug/m^3]:Dust (total)"),
     425        fDimSeeing("TNG_WEATHER/SEEING", "F:1;F:1;F:1",
     426                   "|Seeing[arcsec]:Seeing"
     427                   "|Seeing[arcsec]:Seeing Median"
     428                   "|SeeingStdev[arcsec]:Seeing Stdev")
    394429    {
    395430    }
Note: See TracChangeset for help on using the changeset viewer.