На одном складе работа была организована так, что сотрудники с навыками работы на ПК все время пребывали в режиме "аврал". При отгрузке заказов толпа комплектовщиков стояла в очереди за сверкой и сканированием штрих-кодов. Естественно, поломка одного из двух операторских компьютеров превращала весь процесс в сплошные мучения для самих операторов и радость для остальных (о, чайку можно попить!).
В статье расскажу, как мы испортили людям отдых с помощью бесшовного Wi-Fi.
Для разгрузки операторов установили несколько стационарных терминалов, с которыми смогут справится даже не владеющие магией 1С сотрудники. Но склад еще регулярно навещали ревизоры с беспроводными терминалами сбора данных. Их беда была в том, что приходилось ловить беспроводную сеть лишь в одном складском углу… да-да, именно там, где народу и так было с избытком. В общем, решили заодно опутать весь склад сетями бесшовного Wi-Fi. Именно эта часть проекта получилась любопытнее всего.
Котики-Микротики
Как известно, сейчас в моде минимализм. В том числе и проводной, поэтому оборудование искали с поддержкой PoE (Power Over Ethernet).
Для покрытия всего склада беспроводной сетью понадобились:
-
Точки доступа, умеющие работать с управляющим контроллером и PoE-in;
-
Контроллер для управления точками доступа;
- Коммутатор с поддержкой PoE-out.
Решения Cisco, Zyxel и D-link в бюджет явно не пролезали, поэтому остались Ubiquity UniFi и MikroTik.
Семейство Unifi с программными контроллерами хорошо запомнилось еще по прошлым проектам своей нестабильной связью при перемещениях клиентов между точками. К тому же, у местных админов нашелся MikroTik RB951Ui-2HnD, потерявший два порта после удара молнии. Что ж, это явно судьба, поэтому "инвалиду" решили дать новую жизнь в качестве контроллера Wi-Fi.
В качестве точек доступа изначально планировали MikroTik mAP lite, которые подкупали стоимостью и поддержкой работы с Wi-Fi контроллером – Controlled Access Point system Manager (CAPsMAN) в терминологии MikroTik. Правда, смущало неудобное магнитное крепление на стену, ответная часть которого крепилась на не внушающий доверия скотч. В итоге, купили MikroTik mAP 2nD без всяких магнитов, из-за которых у mAP lite бывают проблемы с сетью при включении.
Заказали всего 9 точек и коммутатор D-link DES-1018MP с поддержкой PoE. Такого набора оказалось достаточно для уверенного приема на всей территории склада.
Кроме использования по назначению, из такой точки можно сделать сетевой тестер. Еще в комплекте нашлись кабели micro-usb OTG, которые мигом разошлись по ИТ-отделу.
Вторая часть квеста
Напомню, что основной проблемой склада была неправильная организация операторских рабочих мест. Поэтому нужно было не только увеличить их количество, но и оптимизировать для использования не искушенными в компьютерах сотрудниками склада. Решили ставить терминалы с сенсорным экраном и сканером штрих-кодов. При максимально упрощенном интерфейсе 1С и отсутствии стандартной оболочки Windows выходило довольно наглядно.
В качестве рабочих станций рассматривали тонких клиентов, моноблоки и даже Raspberry Pi под Linux. Но c Linux у местных специалистов дела шли не так радужно, поэтому все же вернулись к Windows. В конце-концов, там меньше проблем с совместимостью оборудования.
Кстати, вместо моноблока с креплением на стену нашелся INTEL Compute Stick размером с ладонь – подходящая модель выпускается как Lenovo IdeaCentre Stick 300:
-
32 ГБ места на диске;
-
2 ГБ оперативной памяти;
-
Windows 8.1 with Bing;
- Цена вопроса – менее 6 000 ₽.
Выглядит как решение всех проблем. Конечно, было некоторое недоверие к самому формату "флешки с виндой" – особенно смущали перспективы перегрева и вопрос быстродействия. Но пробная “флешка” выдержала все проверки без особых проблем, поэтому махнули рукой и закупили остальные.
К терминалу еще нужен был беспроводной сканер, база которого работала бы по USB с эмуляцией COM – просьба заказчика.
Получился такой набор:
Наименование | Модель | Количество | Цена, шт |
Точка доступа | MikroTik mAP 2nD | 9 | 2 800 ₽ |
Компьютер | Lenovo IdeaCentre Stick 300 | 9 | 5 900 ₽ |
Монитор | Viewsonic TD2220-2 | 9 | 17 000 ₽ |
Переходник | HDMI BURO DVI-D(m) — HDMI19 (f) | 9 | 590 ₽ |
Сканер ШК | Honeywell 1202g | 9 | 21 150 ₽ |
Коммутатор | D-link DES-1018MP | 1 | 15 700 ₽ |
Итого | 442 660 ₽ |
Цены указаны на лето 2016
Примечательно, что сама сеть Wi-Fi стоила менее 50 000 ₽, даже с учетом контроллера.
Часть третья, в которой появляется гик-порно
Про настройку CAPsMAN на MikroTik уже достаточно материала, поэтому больше расскажу о нюансах.
Сеть делали вещью в себе, без лишних пересечений с офисной. От использования VLAN пришлось отказаться, так как сетевое оборудование уже было нагружено сверх меры. На контроллере Wi-Fi подняли NAT с сетевым экраном, за которым разместили точки доступа с клиентами.
В процессе тестирования решения обнаружились несколько проблем:
-
Если точки и клиенты находились в одном сегменте сети, то при подключении клиента контроллер ругался на появление петли и отключал его. Обойти проблему можно было сегментированием сети или явным включением точки доступа в bridge на контроллере. Я выбрал первый вариант, как наиболее простой:
/interface bridge add name=bridge-wifi /caps-man configuration set [find comment="warehouse"] datapath.bridge=bridge-wifi' #настройка адресации и DHCP на bridge-wifi
- Если на точке доступа явно не указать IP-адрес контроллера, то при подключении к сети трех и более точек лишь одна регистрировалась. Решилось указанием адреса контроллера в настройках CAP:
/interface wireless cap set caps-man-addresses=Адрес_контроллера discovery-interfaces=bridge-local enabled=yes interfaces=wlan2
- Некорректно работало разрешение имен офисных серверов и, как следствие, не запускалась база 1С. Настроили выдачу правильного DNS-суффикса службой DHCP на MikroTik:
#Добавляем опцию 15. содержимое - сконвертированый в HEX суффикс. /ip dhcp-server option add code=15 name=dns value=0x57687920616c6c207468697320736869743f #Добавляем опцию к DHCP-серверу для клиентов. /ip dhcp-server network set [find comment="wi-fi client dhcp"] dhcp-option=dns
Схема получившейся сети с двумя бриджами
Интерфейс, который не даст выстрелить в ногу
Новые пользователи не очень дружны с компьютерами, поэтому лишние "соблазны" нужно было убрать. В системе появилась новая учетная запись пользователя с ограниченными правами и автоматическим входом в систему. Кроме того, при загрузке оболочка explorer.exe менялась на скрипт запуска 1С.
Нужно всего лишь создать в реестре строковый параметр с именем "Shell" в ветке HKEY_CURRENT_USERSoftwareMicrosoftWindows NTCurrentVersionWinlogon, а в его значении прописать путь запуска альтернативной оболочки. Для запуска VBS-скрипта это выглядело так:
cscript.exe "Путь к скрипту"
Чтоб не менять скрипт для каждого компьютера, я назвал пользователей в 1С аналогично именам компьютеров.
Скрипт с комментариями предоставляю на ваш суд:
strComputer = "."
strServer="Имя сервера 1С"
strBase="название базы 1С"
Set objShell = CreateObject("Wscript.Shell")
‘ Получаем имя компьютера в переменную
strUsername= objShell.ExpandEnvironmentStrings("%computername%")
‘ Проверяем сервер на доступность несколько раз, на случай поздней инициализации сети.
For iCounter = 1 to 5
If Ping(StrServer) then
Exit For
end If
WScript.Sleep 1000
Next
If iCounter =5 Then
MsgBox ("Сервер не обнаружен, обратитесь в IT-отдел")
objShell.Run("shutdown -s -t 0")
else
‘ Запускаем 1С
objShell.Run("""C:Program Files1cv8common1cestart.exe"" enterprise /s"+strServer+""+strBase+" /N"""+strUsername+"""")
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & "rootcimv2")
Set colProcesses = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = '1cv8.exe'")
‘ Ждем появления основного процесса 1С
Do While colProcesses.Count = 0
Set colProcesses = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = '1cv8.exe'")
WScript.Sleep 1000
Loop
‘ Ждем завершения процесса 1С
Do While colProcesses.Count > 0
Set colProcesses = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = '1cv8.exe'")
WScript.Sleep 1000
Loop
objShell.Run("shutdown -s -t 0")
end if
Function Ping( myHostName )
Dim colPingResults, objPingResult, strQuery
strQuery = "SELECT * FROM Win32_PingStatus WHERE Address = '" & myHostName & "'"
Set colPingResults = GetObject("winmgmts://./root/cimv2").ExecQuery( strQuery )
For Each objPingResult In colPingResults
If Not IsObject( objPingResult ) Then
Ping = False
ElseIf objPingResult.StatusCode = 0 Then
Ping = True
Else
Ping = False
End If
Next
Set colPingResults = Nothing
End Function
Через некоторое время терминалам добавили Bluetooth-колонки, через которые приятный женский голос сообщает об ошибках в работе при помощи Windows Speech.
А теперь про обещанные увольнения
Тестирование роуминга заказчик проводил так: сотрудник отдела ИТ с софтфона на мобильном звонил мне и гулял по складу. Обрывов связи и "заиканий" не было – точки доступа исправно передавали смартфон друг другу.
Позже мне рассказали, что после внедрения новой системы работники склада устроили настоящий саботаж, с возгласами "Так работать невозможно!" и демонстративной работой по-старинке. Видимо, смекнули, что придется работать вместо обсуждения рыбалки в очередях и за чаем. Но пришел большой босс и все наладил волшебной силой убеждения.
Э, насяльнике, помоги! Вайвай поставиль, байтик бегаэт, адинэс считаэт, работник бешельме-мешельме нехочэт
Наша оптимизация для людей имела и побочный эффект. Оказалось, что такая орава на складе не нужна – на волне кризиса в стране это натолкнуло начальство на идею сокращения штата. Теперь изображать бурную деятельность на том складе непросто.
А у вас когда-нибудь случалось так, что внедрение во благо людям оборачивалось неприятностями для них же?
Автор: Сервер Молл