(хорошо бы нигде не ориентироваться на DNS, везде писать IP)

### superweatherdaemon ###

Все "станции" (* - готово):
- старая метео *
- новая метео *
- датчик дождя *
- датчик грозы (молния <=5км -> FORCEOFF=1; молния >=10км - FORCEOFF=0) 
    поля: LIGTPWR, LIGTDIST, LIGTTIME
- ИБП в стойке (через минуту после выключения света FORCEOFF=1; через пять минут после включения - FORCEOFF=0)
    поля: POWERED (0 - внешнее питание комплекса отключено, 1 - включено) 
- ИК-allsky (как будет готов - получение "процента облачности" и "температуры неба")
    поля: CLOUDS, SKYTEMP 

В выдаваемую клиентам информацию добавить "стандартное" поле FORCEOFF (если ==1 - парковаться, закрываться и выключаться,
в т.ч. компьютер).

Только ИБП и датчик грозы влияют на поле FORCEOFF. FORCEOFF автоматом ставит WEATHER=3.
Флаг FORCEOFF - исключительная прерогатива "супердемона", как и поле WEATHER. Значение флага снимается лишь по устареванию,
как для прочих полей с проверкой на слишком старые данные. Лишь если снят FORCEOFF, поле WEATHER может начать понижать
уровень. Сразу со снятием флага FORCEOFF, снижаем уровень WEATHER до 2. Следовательно, запускать наблюдения можно будет
лишь через 2N секунд (кстати, добавить в конфиг время ожидания понижения уровня погоды) после подачи питания.

??? Добавить "стандартные" поля: LIGTPWR, LIGTDIST, LIGTTIME (например, если гроза еще дальше 5км, писать эти данные 
в FITS-шапку).

Обязательно логгировать источники повышения и понижения уровня погоды, а также источник установки флага FORCEOFF.

В управляющий UNIX-сокет добавить комады:
- forceoff - чтобы можно было вручную ставить/снимать флаг
- weath - вручную сменять уровень погоды
- mute/unmute плагинов (по номеру из list); если плагин mute, то вся информация от него игнорируется
- ?



### Демон общего питания (robometeo) ###

Мониторит FORCEOFF. При ==1 выжидает OFF_T_WAIT секунд, затем начинает проверять все 5 "роботелов": если купол закрыт и не пингуется,
отключаем питание оборудования и питание купола (кроме первого). Через OFF_T_FORCE секунд после сигнала даже если комп пингуется,
но купол закрыт, питание отключаем. Интервалы времени - в конфигурационный файл.

Если все отключено, ждет, пока не наступит 0. Потом выжидает еще ON_WAIT секунд, после чего последовательно подает питание 
на все купола, выжидает ON_FORCE секунд и поочередно включает нагрузку всех ИБП куполов. Проверяет пингуемость компов и 
пишет в лог, во сколько какой запинговался.

Аналогично с приборами в стойке: после OFF_R_WAIT секунд пинговать roboserv, robonas и robostorage; как не пингуются все - 
выключать питание стойки. Либо же принудительно отключать после OFF_R_FORCE секунд. При снятии флага выжидаем ON_WAIT секунд,
затем включаем напряжение стойки и пингуем ее компы, логгируем.

В конфиг-файл: IP-адреса и номера релюшек оборудования телескопов и стойки, например, 

telescopes=Astro-M1, Astro-M2...
Astro-M1=192.168.70.33:1:-1  # Название из telescopes = IP:номер реле оборудования:номер реле питания или -1
Astro-M2=192.168.70.35:2:22
...
equipment=roboserv,robonas,robostorage
roboserv=192.168.70.6:11:-1  # аналогично должен вести себя 192.168.70.6:-1:11
...

(при разборе конфига группировать по номеру реле оборудования и номеру реле питания; не отключать реле питания, пока
не отключены все компы, кроме выхода таймаута)



### weather proxy ###

Добавить флаг forceoff. 



### Clients ###

Все клиентские демоны используют weather_proxy и его библиотеку, чтобы получать из SHM погодные данные.
Демоны купола, телескопа и монтировки обязаны создавать в /tmp файлы с FITS-шапками (по ним "демон питания" узнает, что
можно выключать компьютер).

Клиенты реагируют на WEATHER:
0 - можно работать
1 - нельзя открываться, но можно продолжать работать
2 - форсированное закрывание купола, останов телескопа, остальное без изменений
3 - закрывание всего, парковка телескопа


## Демон купола ##

Форсированное закрывание при WEATHER>1 или FORCEOFF=1.


## Демон телескопа ##

Форсированное закрывание при WEATHER>2 или FORCEOFF=1.


## Демон монтировки ##

Останов при WEATHER=2 или FORCEOFF=1, парковка при WEATHER=3 (в случае FORCEOFF=1 ни в коем случае не парковать).

ДОБАВИТЬ ключ HDRTIME // UNIX-time of last activity   -> в этом ключе содержится sl_dtime() обновления шапки (нужно для
демона питания, чтобы контролировать, когда отмерла монтировка). 


## Демон питания оборудования и компьютера ##

Этот демон запускается из-под рута. Принимает от пользователя команды вклчения-выключения оборудования (сюда же можно
воткнуть управление плоским полем, пинание монтировки на включение, управление светом). 

При получении FORCEOFF=1, сначала щелкается кнопка отключения монтировки. Далее 
проверяются DOMFITSHDR (DOMESTAT= closed), TELFITSHDR (TELSTAT = closed) и MOUNTFITSHDR (HDRTIME должен быть минимум 
на 30 секунд старше текущего времени).
Если все ОК, то выключается навесное оборудование и монтировка, а следом - и сам компьютер получает сигнал poweroff.

sync(); // Flush disk buffer to prevent data loss
reboot(RB_POWER_OFF);
или (правильней?): system("shutdown -P now")

