Перейти к основному содержимому

Оператору: с чего начать

Этот раздел — для человека, который следит за постаматами и выезжает к ним. Без жаргона: каждое незнакомое слово объясняется там, где встречается первый раз, а всё вместе собрано в словарике.

Что уже работает, а что нет

Панель оператора написана и выложена: карта ячеек, аренды и коды, журнал, тревоги, привязка каналов, объезд, обновления. Сервер работает, пилотный шкаф на связи, и в ночь на 4 сентября сквозной путь пройден целиком — от аренды в панели до щелчка замка.

Три вещи стоит знать заранее:

  • уведомления наружу уходят не всегда, и решает это не панель, а сервер. Он сам объявляет, какими каналами умеет пользоваться сегодня, и панель показывает этот список как есть. Почта и всплывающие сообщения в браузере написаны и работают — но только там, где серверу выданы настройки почты и ключи уведомлений. Если на экране «Доставка уведомлений» канал помечен недоступным, значит по нему не уйдёт ничего, и ночную тревогу увидят утром. Проверяйте этот экран, а не эту страницу: она устаревает, он — нет. 🔴 Но открыть его может только администратор (право alerts.configure): у роли «оператор» этого раздела нет в меню вовсе, а по прямому адресу панель отвечает «Раздел недоступен». Значит вопрос «какими каналами сервер умеет сегодня» дежурный задаёт администратору — один раз, при планировании дежурства, а не в момент происшествия. ✅ Панель при этом молчать не станет: на экране «Уведомления» у дежурного всегда стоит полоса «Проверить, уходят ли уведомления наружу, ваша роль не может — настройки доставки видит только администратор»; ⚠️ и отдельно про почту сегодняшнего сервера: она настроена на приёмник, стоящий на той же машине (127.0.0.1:1025). Письмо формируется, панель говорит «отправлено», а наружу не уходит. Настоящий SMTP — незакрытый шаг владельца, так что на дежурстве считайте письмо проверяемой заготовкой, а не доставкой. ⛔ Здесь стояло: «прочитать его можно по ссылке „открыть ящик“ на том же экране (/mail/, вход тот же, что в панель)». Дежурному это выполнить нечем. Вход действительно тот же — второго пароля нет, — но пускают по правам, и заслона два: ссылка лежит на администраторском экране «Доставка уведомлений», а сам ящик писем с 7 сентября требует права sms.outbox.read, которого у роли «оператор» нет. Причина не в бюрократии: в письме лежит код клиента целиком, то есть тот же класс данных, что и в «SMS (имитации)», и закрыт он так же. По прямому адресу /mail/ дежурный получает страницу «Экран писем закрыт: в письмах лежат коды доступа клиентов». 🔴 Это не поломка входа, и повторный вход её не лечит: отказ по правам намеренно ведёт не на страницу входа, а на этот текст — иначе получился бы круг «вход → снова вход», в котором человек ищет несуществующую поломку входа. Нужно письмо — просите администратора;
  • SMS наружу не уходит ни при каких настройках. Настоящего шлюза у системы нет. Есть режим имитации для показа — «письмо» ложится в ящик внутри системы, и на каждом экране написано, что наружу не ушло ничего;
  • часть возможностей нарисована, но подписана «пока не работает» — так и задумано, честнее, чем прятать.

Названия экранов и кнопок могут отличаться от текста ниже. Смысл действий — нет.

Шесть вещей, которые надо знать сразу​

Их стоит прочитать один раз целиком. Каждая из них иначе выясняется в поле, ночью.

1. Кнопки «закрыть» не существует​

Шкаф умеет только открывать ячейку. Внутри замка пружина: когда приходит команда, язычок убирается примерно на треть секунды, и дверца больше ничем не держится. Закрывает дверцу человек рукой, и язычок защёлкивается сам.

Поэтому в панели никогда не будет кнопки «закрыть ячейку». Если дверца осталась открытой — её надо закрыть руками, командой это не исправить.

2. «Открыто» и «закрыто» — это показания датчика​

В каждом замке есть маленький выключатель: дверца закрыта — он нажат, дверца открыта — отпущен. Шкаф докладывает именно его состояние.

Из этого следует важное: «закрыто» шкаф знает точно, а вот «открыто» у него означает две разные вещи сразу — либо дверца действительно открыта, либо на этом месте вообще нет замка. Различить их шкаф не умеет. Отсюда растёт всё, что написано про карту ячеек.

3. Подтверждение открытия не значит, что дверь открылась​

Когда вы нажимаете «открыть», шкаф отвечает «команду принял». Это подтверждение приёма команды, а не факта открытия. Открылась ли дверца, знает только датчик — и узнаёт он это примерно через полсекунды.

Практически: после команды всегда смотрите на состояние ячейки, а не на сообщение «команда отправлена».

4. Если приложение зависнет, шкаф перезагрузится сам примерно через пять минут​

Так задумано. Внутри платы есть маленький «надзиратель», который перезагружает её, если программа перестала подавать признаки жизни. Постамат стоит без присмотра, и это дешевле, чем присылать человека.

Что из этого следует для вас: увидев «шкаф не отвечает», подождите 5–7 минут. Часто он оживёт сам. Подробнее — почему шкаф перезагружается сам.

5. Карта ячеек задаётся руками — и это не лень разработчиков​

Шкаф не может сам выяснить, в каких его гнёздах есть замки, а какие пустые (см. пункт 2). Поэтому соответствие «ячейка номер 5 — это гнездо номер 12» вносится человеком через мастер привязки. Ошибка в карте означает, что клиенту откроется чужая ячейка, поэтому мастер устроен так, чтобы ошибиться было трудно.

6. Выпущенный код доезжает до шкафа не мгновенно​

Сервер к шкафу никогда не стучится сам: шкаф приходит за новостями по своему такту и в этот же приход забирает новые коды. Пока он не пришёл, код в панели уже «действует», а на клавиатуре шкафа его ещё нет — и клиент получает «код не найден», то есть ровно тот же ответ, что на выдуманный код. Он решает, что его обманули.

С 7 сентября это видно в панели: в таблице кодов (карточка аренды на «Арендах и кодах») есть столбец «У шкафа», а под таблицей — предложение о том коде, с которым дело хуже всего. Разбор всех пяти подписей — код клиента и блокировка.

🔴 Вести клиента к дверце — на подписи «код у шкафа». Это единственная из пяти, за которой стоит подтверждение самого шкафа: «список кодов дочитал, этот у меня есть». Дальше связь ему уже не нужна — коды он проверяет сам.

⚠️ Такт у каждого шкафа свой, он стоит в настройках этого шкафа, и панель называет именно его число. Не считайте «примерно минуту» в уме: на пилоте такт правили.

Если шкафов несколько​

Пока шкаф один, ничего из этого не заметно. Читать всё равно стоит: 6 сентября менялось поведение экранов, а не оформление, и человек, помнящий прежнее, решит, что панель сломалась.

Выбранный шкаф теперь едет с вами по меню​

Выбранный шкаф стоит в адресе страницы (?postamat=…), и пункты меню его дописывают. Так устроены разделы, которые всегда про один шкаф: «Ячейки», «Аренды и коды», «Уведомления», «Журнал», «Объезд», «Привязка каналов», «Настройки». Ссылку из адресной строки можно переслать коллеге — у него откроется тот же шкаф.

⛔ Раньше выбор при переходе по меню терялся, и молча. Ссылки в шапке вели на голый путь, а экран без ?postamat=… берёт первый шкаф из списка и ничем об этом не сообщает — выглядит он совершенно обычно. Дежурный выбирал шкаф Б, смотрел карту, нажимал «Журнал» — и читал журнал шкафа А; дальше он звонил клиенту и рассказывал про события, которых на его шкафу не было.

⚠️ Разделы про весь парк параметр не получают — «Обновления», «Пользователи», «Данные и приватность», «Доставка уведомлений», «SMS (имитация)». Они и так показывают все шкафы; дописанный ?postamat=… там ничего бы не менял, зато залип бы в закладке и в пересланной ссылке, и человек считал бы, что смотрит один шкаф.

⚠️ Сам выбор стоит в адресе, поэтому перезагрузка страницы его не теряет. Отдельно его помнит шапка — чтобы дописывать шкаф в ссылки меню. То есть после перезагрузки шкаф возвращается сам, в том числе на разделах, где его в адресе нет вовсе: обновили страницу на «Обновлениях» — меню всё равно ведёт вас на ваш шкаф.

✅ С 7 сентября эта память переживает и закрытие окна, и выключенный на ночь ноутбук, и принадлежит она тому, кто вошёл. Браузер запоминает выбранный шкаф отдельно для каждого человека: вошли утром — панель открывается на вашем вчерашнем шкафу, а не на первом по порядку.

⛔ Здесь стояло: «эта память лежит в хранилище вкладки». Устарело 7 сентября, и разница не в словах: хранилище вкладки умирало вместе с вкладкой, то есть практически при каждом входе в панель, — человек снова попадал на первый шкаф из списка и снова переключался руками.

⛔ Здесь стояло: «эта память живёт только до перезагрузки: перезагрузите страницу на разделе, у которого шкафа в адресе нет, — и меню перестанет дописывать шкаф, а следующий раздел откроется на первом по порядку». Так больше не происходит — выбор откладывается в браузере и после перезагрузки возвращается. Оставлять эту запись было опасно ровно наоборот тому, как кажется: человек, ждущий, что панель «забудет» шкаф после F5, перезагружал бы страницу вместо того, чтобы выбрать шкаф руками, — и оставался бы на прежнем, будучи уверен, что сбросил выбор.

⛔ Здесь стояло: «Чего эта память не переживает — новой вкладки. Хранилище у каждой вкладки своё: открыли панель во второй вкладке или в новом окне — там ещё ничего не выбирали, и раздел откроется на первом шкафу по порядку». С 7 сентября это неверно: новая вкладка и новое окно открываются на вашем шкафу.

Опасение, ради которого так было сделано, никуда не делось — за одним ноутбуком работают посменно. Но караулит его теперь не срок жизни вкладки, а имя вошедшего:

  • пока в панель никто не вошёл, браузер не помнит ничего: ни пишет, ни читает;
  • вход другого человека стирает память страницы целиком — и шкаф, и парковый счёт тревог — и поднимает его собственную. Это закрывает дыру, которой хранилище вкладки не мешало вовсе: предыдущий не вышел, а ушёл на страницу входа, второй вошёл под собой в той же вкладке — и получал в ссылках меню чужой шкаф, ничего об этом не зная;
  • выход из панели стирает запись вошедшего — про это следующий абзац.

⚠️ Чего это стоит, сказано прямо. Запись живёт в профиле браузера этой машины и попадает в его резервную копию. В ней два внутренних номера — ваш и шкафа; ни имени, ни входа, ни почты, ни единого следа клиента постамата там нет. Человек, который не вышел из панели, оставляет свою запись на этой машине до следующего входа: своего (шкаф вернётся) или чужого (чужому она не видна — запись именная).

⚠️ Выход из панели стирает и память о шкафе (вместе с именной записью в браузере), и парковый счёт тревог — как и любое «сессия кончилась». За одним ноутбуком меняются люди, и следующий не должен получить в ссылках меню чужой шкаф, ничего об этом не зная.

🔴 Ссылка на забытый шкаф — тупик, и выход из него один​

Шкаф отозвали и забыли, а ссылка на него осталась — в закладке, в письме коллеге, в открытой вкладке. Такая ссылка сильнее всего остального: ?postamat= в адресе главнее и памяти, и порядка списка, поэтому все семь разделов про один шкаф отвечают «не найдено», а перезагрузка не помогает — она сохраняет и адрес.

Панель это распознаёт и вместо названия шкафа рисует красную метку «шкафа из ссылки нет в парке», а рядом — выход:

  • шкаф в парке остался один — кнопка «Открыть «имя»», одно нажатие;
  • шкафов несколько — выпадающий список со строкой «выберите шкаф».

⚠️ Нажать на метку и «переключиться как обычно» не получится, и это не придирка. Когда шкаф в парке один, привычного выпадающего списка нет вовсе — на его месте подпись с названием, нажимать не на что. Ровно поэтому выход и сделан отдельной кнопкой.

«Первый шкаф» — больше не «тот, кого завели раньше»​

Раз экран без явного выбора берёт первый шкаф из списка, порядок списка — это поведение, а не оформление. Порядок теперь задан:

  1. состояние: сначала работающие, потом ожидающие регистрации, потом отозванные — отозванный шкаф не должен оказаться тем самым «первым»: открыть он ничего не откроет, а выглядеть будет как выбранный вами;
  2. название, латышской сверкой (по ней Ā стоит рядом с A, а не после Z);
  3. внутренний номер — на случай двух шкафов-тёзок, чтобы порядок не «плавал».

⛔ Прежде порядок не был задан вовсе. Обычно он совпадал с порядком заведения, но это не обещание, а совпадение: база вправе вернуть строки как ей удобнее, и «первый шкаф» мог смениться сам по себе — без единой правки в панели.

⚠️ Практический вывод: не полагайтесь на то, что панель откроется на нужном шкафу. После входа выберите его в списке наверху — дальше он поедет с вами по меню и вернётся сам в следующий раз. Первый шкаф из списка вы увидите там, где выбирать было ещё некому: первый вход с этого браузера, первый вход после чужого, чужой ноутбук.

Состояние шкафа названо словами, и молчаний три​

В выборе шкафа рядом с названием пишется, что с ним не так: «· зарегистрирован, но сейчас не на связи», «· ожидает регистрации — планшет о нём ещё не знает», «· отозван — доступ платы прекращён». У исправного шкафа не пишется ничего — иначе в списке из десяти строк подпись «на связи» у каждой заглушила бы единственную строку, требующую внимания.

⛔ Раньше подпись была одна на все три случая — «· не на связи». Стоила она выезда: оператор читал «не на связи» и ехал чинить связь у шкафа, у которого её и не было. Разбор — тревоги, раздел «Шкаф офлайн».

Значок тревог в шапке считает весь парк​

Число в кружке рядом с «Тревогами» — это непогашенные тревоги по всем шкафам, а не по выбранному. Наведите на кружок — всплывёт подсказка «неразобранные уведомления по всем шкафам, а не только по выбранному».

⚠️ Одно исключение, и подпись про него честно меняется. Если панель открыли сразу на разделе без выбора шкафа — «Обновления», «Пользователи», «Данные и приватность», «Доставка уведомлений», «SMS (имитация)», — списка шкафов панель ещё не получала, и в кружке стоит счёт выбранного шкафа. Подсказка тогда так и говорит: «неразобранные уведомления выбранного шкафа». Стоит один раз зайти в раздел с выбором шкафа — и число становится парковым.

⛔ Раньше он считал только выбранный шкаф, и критическая тревога на шкафу Б была не видна оператору, работавшему со шкафом А: о ней узнавали от клиента.

🔴 А сам список тревог — по-прежнему про выбранный шкаф, и это не противоречие: в кружке видно, что где-то ещё горит, а в таблице — что горит здесь. Числа сходиться не обязаны, и расхождение как раз и означает «есть тревоги на других шкафах».

Поиск аренд идёт по всем шкафам​

Звонящий обычно не знает, у какого шкафа он стоял, поэтому поиск на «Арендах и кодах» по умолчанию идёт по всему парку. У каждой находки первым полем написано, какого она шкафа. Подробнее — опознание звонящего и ошиблись в аренде.

Экран говорит, к какому шкафу применится действие​

Обряд привязки, объезд и настройки принадлежат одному шкафу, и переключение шкафа посреди дела больше не проходит молча:

  • обряд привязки и объезд останавливаются, а на экране остаётся красная строка, которая не гаснет сама, — в ней сказано, что успело уйти на шкаф (то есть какие дверцы откроются) и что делать дальше. Разбор — мастер привязки и словарик, статья «Объезд»;
  • настройки просто не сохранятся: панель отвечает «Настройки НЕ сохранены: шкаф переключился» и объясняет, что в форме были значения другого постамата — код клиента и блокировка;
  • карта ячеек и журнал ждут данных выбранного шкафа и честно пишут, чего ждут, вместо того чтобы показывать чужие строки под новым именем.

Куда идти​

ЗадачаСтраница
понять, из чего состоит шкафКак устроен шкаф
настроить новый шкафКарта ячеек, Мастер привязки
понять, что показывает панельСостояния ячейки
открыть ячейкуКак открыть ячейку
опознать человека перед открытием (это обязательно всегда, не только по звонку)Опознание звонящего
разобраться с тревогойТревоги: что делать
клиент не может ввести кодКод клиента и блокировка
ошиблись при заведении арендыОшиблись в аренде
ничего не помогаетКогда ничего не помогает

Адреса​

КудаАдрес
панель оператораpanel.1.router.thepragmaticdev.support
эта документацияdocs.1.router.thepragmaticdev.support

Два других адреса (api.… и ota.…) — для самих постаматов, человеку там смотреть нечего: они специально устроены так, чтобы ничего, кроме служебного обмена, не отдавать.

Почему адресов несколько

Так сделано ради безопасности: постаматы ходят только на свои два адреса, и страница входа в панель для них недоступна вовсе. Раньше адрес был один, и разрешение шкафу «ходить к серверу» заодно открывало ему и вход в панель.

Практическое следствие для вас: если на объекте попробовать открыть панель через сеть постамата — она не откроется. Это не поломка сети и не сбой, а так и задумано. Панель открывают с обычного компьютера или телефона.

День установки​

Порядок дня установки нового постамата описан отдельно — в файле COMMISSIONING.md в репозитории проекта: что взять с собой, в каком порядке делать шаги и по какому списку подписывать приёмку.

🔴 Половина шагов там необратима (код регистрации гасится при первом использовании), поэтому документ читают до выезда, а не на месте. Здесь он намеренно не пересказан: две копии одного порядка действий разъедутся, а расходиться им нельзя.

⚠️ Один шаг оттуда с тех пор изменился. Инфракрасный приёмник — глазок, который понимает пульты от телевизора, — теперь выключен в самой прошивке: проверено на живой плате, что он больше не числится устройством ввода, то есть нажимать с пульта попросту некуда. Шаг «заклеить приёмник лентой» в COMMISSIONING.md при этом оставлен: он бесплатный, занимает полминуты и продолжает работать на шкафах, залитых старой прошивкой.