Ватчдог 220В. Клиент-сервер (Win)

sirota
Offline
Зарегистрирован: 18.08.2015

Суть такая. Имеется в хозяйстве пяток серверов. ну и столько же ИБП. Но проблема в том что ИБП изначально в старотовой комплектации, т.е. без ethernet плат расширения. Все они имею RS-232 порты и USB. Но по каким-то не ведомым причинам все они успешно отваливаются от своих серверов. Eaton'ы вообще могут неделю молчать, а потом подключиться... Ну и денег пока не дают (да я и сам как-то не очень, по 10-ке за плату считай). Родилась мысль. Ардуина с детектором 220В. С нее серверная часть читает (она же и клиент на этом компе) данные и в случае определенного отсутствия напряжения на линии отправляет в сеть сообщение об этом и тушит сам сервер.

Требования:

- PowerShell и установленная роль Hyper-V. Если сильно будет надо, добавлю возможность исключения части PowerShell с Hyper-V. Но скорее всего это будет уже полностью сетевая версия программы, без подключения ватчдога к какому-то ПК.

- Папка с программой должна иметь разрешение на запись. В частности файл tmp.txt должен быть перезаписываемым.

https://www.dropbox.com/s/tyvfe9w1z6jocqn/usb-220watchdog.7z?dl=0

Это без малого не альфа версия. Но глубоая бетка.

В аттаче скетч для ардуины. Эта часть подчерпнута от сюда: http://arduino.ru/forum/apparatnye-voprosy/nuzhno-otslezhivat-nalichie-220-volt-na-linii#comment-237580 и схема тут: http://arduino.ru/forum/apparatnye-voprosy/nuzhno-otslezhivat-nalichie-220-volt-na-linii#comment-237805

В UART шлется или 1 или 0. Остальное программа не принимает.

Программная часть:

1. Как клиентская так и серверная часть не имеют интерфейса настроек. Параметры хранятся в INI файлах (чтобы удобно было переносить). При запуске приложение сразу сворачиваются в трей. На данный момент проверено на Win 2018, 2008, 10, 7.

2. Настройки (setting.ini)

[Parameters]
ComPort=9
UDPPort=4545
ServerIP=192.168.0.255
PowerOff=1
PowerOffLimit=10

По порядку:

а) ComPort - Номер порта на котором висит дуня

б) UDPPort - UDP порт (для клиентского! приложения нужно добавить его в исключения) на котором будет вестись общение

в) ServerIP - IP адрес. Тут есть разница. Для клиентского приложения указывается IP адрес сервера к которому подключена дуня. Это нужно для того что к примеру у Вас 2 фазы и девайсы питаются от разных фаз и соответственно у вас несколько ватчдогов. Для серверной части указываем широковещательный адрес в вашей подсети. Если у вас стандартно маска 255.255.255.0, то вы последний актет адреса меняете на 255. К примеру у вас сервер ватчдога имеет адрес 192.168.0.10, а клиент 192.168.0.220 и маска подсети 255.255.255.0, то у сервера IP будет указан как 192.168.0.255. Для остальных размерностей есть онлайн калькуляторы.

г) PowerOff - Завешать ли работу ПК при определенном времени отсутствия напряжения. 1 - да. 0 - нет.

д) PowerOffLimit - Время - количество проверок отсутствия напряжения в сети. По факту это секунды. Т.е. к примеру при PowerOffLimit=10 после 10 секунд отсутствия напряжения в сети серверная часть выдаст сообщение о том что будет заверша работа ПК с возможностью отмены (тогда закрывается и монитор, в том числе и серверная часть (конечно если отменить выключение на клиентской части серверная не закроется), будьте внимательны), и через 10 секунд будет запущно выключение виртуальных машин Hyper-V, а по их завершении будет подана команда на выключение самого ПК. Процедура выключения кстати работает и на WinXP.

Именно Hyper-V и станет камнем предкновения для многих и он же и побудил меня на это дело. Дело в том что с PowerShell очень трудно перенаправить вывод STDOUT и перехватить его. По сему я пользуюсь выводом стандартным в файл и уже читаю в файл. Т.к. пока особого времени у меня не было (да и желания нет, лично у меня все работает и меня более чем устраивает на данный момент), то я просто измеряю размер выходного файла. Когда все виртуалки выключены возвращается пустой ответ. Иначе возвращается список запущенных виртуалок и их статус. Именно по этому при отсутствии hyper-v вы скорее всего получите ошибку в вывод, а следовательно приложение будет ожидать их завершения. Опять же идеи есть как все более правильно реализовать, но надо ли оно мне... вот тут вопрос )

Немногим позже как удалю отладочные строки выложу исходники. Win приложения написаны на архаичном уже Delphi 7.

Если отключен датчик (или нет ответа от сервера) то приложение не завершает работу. На случай скажем если забыл про приложение и ПК на котором сервер выключил для проф работ.

 

sirota
Offline
Зарегистрирован: 18.08.2015

Конечно печально, но пока времени уделить проекту не выходит. Выкладываю всю папку с проектом

https://www.dropbox.com/s/4741p3jdc3isqfd/win.7z?dl=0

Первым делом надо ввести логирование. Как на стороне клиента, так и сервера. На днях вдруг обнаружил упавшую серверную часть. Просто так без алертом и прочего. Навел на иконку в трее развернуть приложение, а она скрылась. Что свидетельствует о том что приложение упало. Причины пока не обнаружил. Запустил повторно, слежу.

За это время была одна сработка, сервер был успешно выключен.