Логгер для all-sky и cloud sensor
Mar. 17th, 2017 07:46 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
"Скрестить ужа с ежом" оказалось непросто, учитывая все косяки cfitsio. Но, все-таки, получилось. Я решил этого демона не выносить в отдельную репу, а засунул в директорию внутри репы с болтвудом.
Очень много времени убил, не понимая, какого черта inotify, как только обновится файл, перестает отслеживать. А все оказалось просто: cfitsio вместо того, чтобы сделать truncate имеющегося файла (когда имени файла предваряет "!") делает unlink. Понятно, что тут inotify уже не поможет. Сделал обновление дескрипторов каждый раз, как обновится файл.
Другим косяком cfitsio было то, что целые "записи" она пишет в зипованый фитс (using fits_write_record), а вот fits_write_key не хочет — говорит, что в зипованные файлы не может.
Я все больше и больше склоняюсь к тому, что нужно свою библиотеку писать для работы с фитсами! Как лет 5 (если не больше) назад начал в ней проблемы находить, так все не покидает мысля... А еще добавить туда мой fits_filter… В общем, мечты-мечты! Если клонироваться в 10 раз (и послать половину клонов работать там, где деньги платят), то, возможно, это все и будет реализовано.
Я совсем забыл примеры привести.
Итак, если к демону болтвуда подключиться через браузер, увидим что-то вроде
В его документации названия полей объяснены, в последнем же поле я поместил время измерения (чтобы было понятно, насколько актуальны данные).
Ну, и очень длинная шапка FITS-файла, который получается при сохранении темой этой записи:
Исследовать, как в наших местах из этой кучи данных можно определить процент облачности, я пока не собираюсь — других дел полно. Но, судя по публикациям, это очень неоднозначная зависимость. Обычно в лучшем случае из этих данных можно извлечь характеристики: "сильно облачно", "облачно", "малооблачно". 100% ясного неба гарантировать нельзя. Точно так же, как нельзя гарантировать, что "сильно облачно" означает 100% затянутое небо.
Очень много времени убил, не понимая, какого черта inotify, как только обновится файл, перестает отслеживать. А все оказалось просто: cfitsio вместо того, чтобы сделать truncate имеющегося файла (когда имени файла предваряет "!") делает unlink. Понятно, что тут inotify уже не поможет. Сделал обновление дескрипторов каждый раз, как обновится файл.
Другим косяком cfitsio было то, что целые "записи" она пишет в зипованый фитс (using fits_write_record), а вот fits_write_key не хочет — говорит, что в зипованные файлы не может.
Я все больше и больше склоняюсь к тому, что нужно свою библиотеку писать для работы с фитсами! Как лет 5 (если не больше) назад начал в ней проблемы находить, так все не покидает мысля... А еще добавить туда мой fits_filter… В общем, мечты-мечты! Если клонироваться в 10 раз (и послать половину клонов работать там, где деньги платят), то, возможно, это все и будет реализовано.
Я совсем забыл примеры привести.
Итак, если к демону болтвуда подключиться через браузер, увидим что-то вроде
humidstatTempCode=0 rainCond=1 skyMinusAmbientTemperature=-2.2 ambientTemperature=27.9 windSpeed=0.0 wetState=0 relHumid=26 dewPointTemperature=6.9 caseTemperature=42.0 rainHeaterState=0 powerVoltage=24.4 anemometerTemeratureDiff=24.9 wetnessDrop=2 wetnessAvg=157 wetnessDry=152 daylightADC=443 tmsrment=1489768832
В его документации названия полей объяснены, в последнем же поле я поместил время измерения (чтобы было понятно, насколько актуальны данные).
Ну, и очень длинная шапка FITS-файла, который получается при сохранении темой этой записи:
SIMPLE = T / file does conform to FITS standard BITPIX = 16 / number of bits per data pixel NAXIS = 2 / number of data axes NAXIS1 = 640 / length of data axis 1 NAXIS2 = 480 / length of data axis 2 EXTEND = T / FITS dataset may contain extensions COMMENT FITS (Flexible Image Transport System) format is defined in 'Astronomy COMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H BZERO = 32768 / offset data range to that of unsigned short BSCALE = 1 / default scaling factor FILE = 'output.fits.gz' / Input file original name ORIGIN = 'SAO RAS ' / organization responsible for the data OBSERVAT= 'Special Astrophysical Observatory, Russia' / Observatory name DETECTOR= 'Kodak KAI-340' / Detector model INSTRUME= 'SBIG All-sky 340C' / Instrument PXSIZE = '7.4 x 7.4' / Pixel size in um FIELD = '180 degrees' / Camera field of view IMAGETYP= 'object ' / Image type DATAMAX = 65535 / Max possible pixel value DATAMIN = 0 / Min possible pixel value STATMAX = 63539 / Max pixel value STATMIN = 1585 / Min pixel value STATAVR = 42204 / Average pixel value STATSTD = 17002 / Standart deviation of pixel value EXPTIME = 0.13738 / actual exposition time (sec) DATE = '2017-03-17T16:33:03' / Creation date (YYYY-MM-DDThh:mm:ss, UTC) UNIXTIME= 1489768349 / exposition starts at 17/03/2017, 16:32:29 (UTC) DATE-OBS= '2017/03/17' / DATE OF OBS. (YYYY/MM/DD, local) START = '19:32:29' / Measurement start time (hh:mm:ss, local) OBJECT = 'sky ' / Object name HSCODE = 0 / hum. and ambient temp. sensor code (0 - OK) RAINCOND= 1 / rain sensor conditions (1 - no, 2 - rain) TSKYAMB = -2 / Tsky-Tamb (degrC) TAMB = 27.7 / ambient temperature (degrC) WIND = 0 / wind speed (m/s) WETSTATE= 0 / wet sensor value (0 - dry, 1 - wet) HUMIDITY= 27 / relative humidity in % DEWPOINT= 7.1 / dew point temperature (degrC) TCASE = 42.9 / thermopile case temperature (degrC) RHTRSTAT= 0 / state of rain sensor heater (1 - OK) PWRVOLT = 24.4 / power voltage value (V) ANEMTDIF= 24.9 / anemometer tip temperature difference(degrC) WETDROP = 2 / rain drops count for this cycle WETAWG = 157 / wetness osc. count diff. from base dry value WETDRY = 152 / wetness osc. dry count diff. from base value DAYADC = 445 / daylight photodiode raw A/D output TBOLTWD = 1489768366 / Boltwood's sensor measurement time (UNIX TIME)
Исследовать, как в наших местах из этой кучи данных можно определить процент облачности, я пока не собираюсь — других дел полно. Но, судя по публикациям, это очень неоднозначная зависимость. Обычно в лучшем случае из этих данных можно извлечь характеристики: "сильно облачно", "облачно", "малооблачно". 100% ясного неба гарантировать нельзя. Точно так же, как нельзя гарантировать, что "сильно облачно" означает 100% затянутое небо.