diff --git a/Daemons/2DO.txt b/Daemons/2DO.txt new file mode 100644 index 0000000..00ffdef --- /dev/null +++ b/Daemons/2DO.txt @@ -0,0 +1,117 @@ +(хорошо бы нигде не ориентироваться на 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") +