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

Карта ячеек и почему её задают руками

Карта ячеек — это список: какая дверца шкафа к какому гнезду платы подключена. Например: «ячейка 1 — гнездо CH01, ячейка 2 — гнездо CH07». Без этого списка программа не знает, что открывать, когда клиент вводит код.

Почему её нельзя определить автоматически​

Разумный вопрос: пусть программа опросит все 27 гнёзд и сама поймёт, где есть замки. Так не получится, и вот почему.

На запрос «что у тебя на гнезде номер 5?» плата отвечает одним из двух:

Ответ платыЧто он значит
«нажат»дверца закрыта. Значит замок и датчик здесь точно есть
«отпущен»либо дверца открыта, либо на этом гнезде вообще ничего нет

Второй ответ приходит байт в байт одинаковым в обоих случаях. Плата сообщает, что у неё на входе, и не знает, подключено к нему что-нибудь или нет. Различить это опросом невозможно — не «трудно», а невозможно в принципе.

Значит, если бы программа строила карту по опросу, распахнутая дверца выглядела бы как отсутствующая ячейка, а пустое гнездо — как открытая ячейка. Клиента отправили бы к дверце, которой нет.

Единственное, что можно узнать наверняка

Если гнездо хоть раз ответило «нажат», значит на нём точно есть живой замок с датчиком: пустое гнездо так ответить не может никогда.

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

На этом одностороннем доказательстве и построен мастер привязки.

Чем грозит ошибка в карте​

Стоит держать в голове до того, как заполнять её в спешке.

ОшибкаЧто увидит операторЧто увидит клиент
в карте есть ячейка, которой нет в шкафуячейка вечно «датчик не подтверждён», тревоги при этом НЕ будеткод ему выпустят, а шкаф откажет прямо у клавиатуры
в карте перепутаны номеравсё выглядит нормальнооткроется чужая ячейка — с чужой вещью внутри
ячейка есть в шкафу, но не внесена в картуеё просто нет в системеона никогда не будет предложена, место простаивает

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

⚠️ В первой строке здесь стояло «постоянная тревога» — это неверно, и ошибка была в опасную сторону. По гнезду, с которого «закрыто» не приходило ни разу, система тревогу не поднимает намеренно (packages/domain/src/cell-state.ts, ветка sensor_unproven: alarm: false): иначе шкаф, где заведены все 27 гнёзд, а замков двенадцать, поднимал бы полтора десятка тревог на каждый опрос — и на тревоги перестали бы смотреть вообще. Значит лишнюю строку в карте никто вам не подсветит: она выяснится тем, что клиент с верным кодом получит отказ у клавиатуры. Проверять её надо самим — колонкой «датчик» на экране «Ячейки»: там у такой дверцы написано «НЕ доказан — выдача не пройдёт».

Правила заполнения​

  1. Номер на дверце и номер гнезда — разные вещи. Совпадать они не обязаны: как подключили провода при сборке шкафа, так и будет. Карта существует именно для того, чтобы связать одно с другим.
  2. Гнёзд всегда 27, даже если дверец меньше. Незанятые гнёзда в карту не вносятся. ✅ Последние три гнезда (25, 26, 27) можно использовать наравне с остальными — это проверено на живом железе. Раньше они были под вопросом: шкаф опрашивает их немного иначе, чем первые двадцать четыре, и проверить это было не на чем. Теперь проверено: замок открыли, дверцу закрыли рукой, шкаф увидел закрытие. Для вас разницы нет никакой — мастер привязки работает со всеми 27 одинаково. ⛔ Прежняя запись «гнездо 27 открыли» неверна: номер в том опыте назвали не тот. Живой опрос платы отдал «закрыто» ровно по четырём гнёздам — 2, 3, 4 и 26, — и крайнее из проверенных 26-е, а на 27-м замка нет вовсе. На вывод про опрос это не влияет: 25, 26 и 27 читаются одним и тем же отдельным запросом, и доказан именно он. Практическое следствие одно: если вам говорили «замок на 27-м» — это про 26-й.
  3. Заполняется по одной ячейке, мастером, у открытого шкафа, с проверкой каждой.
  4. Карта хранится в панели, а не в шкафу. Замена планшета её не теряет; замена платы замков — тоже, если провода вернули на те же гнёзда. ⚠️ Если провода при ремонте переставили, карту надо перепроверить целиком, а не «поправить одну строчку».
  5. Выведенная из работы ячейка (сломанный замок, повреждённая дверца) не удаляется из карты, а помечается как выведенная: тогда система перестанет её предлагать и перестанет тревожиться из-за неё. ⚠️ Вывести и вернуть может только администратор (право cells.edit; у роли operator его нет — packages/contracts/src/panel.ts). И пока дверца выведена, кнопка «Открыть удалённо» по ней не работает — открыть её умеет только мастер привязки.
  6. Номер на дверце — один на весь шкаф. Дать двум дверцам одинаковый номер система не даст и объяснит, у какой он сейчас: клиент читает наклейку глазами и пошёл бы не к той дверце. Меняя номер, сначала освободите его у прежней дверцы. ⚠️ Регистр и лишние пробелы значения не имеют: «A-07», «a-07» и «A-07 » — это один и тот же номер, потому что на железной дверце он один и тот же.
  7. Карта пишется целиком и ровно в один шкаф — тот, что выбран наверху. Номер на дверце («26») есть у каждого шкафа парка, поэтому по нему одному отличить карты нельзя: отличает их только выбранный шкаф.

Если шкаф переключили посреди правки​

Экран «Ячейки» показывает карту выбранного шкафа, и пока приезжает новая, он пишет «Ждём карту шкафа «имя»», а дверцы прежнего убирает.

⛔ Раньше он в эти доли секунды показывал заголовок нового шкафа и дверцы прежнего — с их номерами, состояниями и кнопками. Нажатие в этот момент меняло карту не того шкафа, и заметить это было нечем.

Что вы можете увидеть, если всё-таки нажали в этот момент:

На экранеЧто произошлоЧто делать
«Карта НЕ записана: шкаф переключился»панель отменила запись сама, до отправки. Ничего не записанодождитесь карты выбранного шкафа и повторите
«Ячейка из карты другого шкафа — так выходит, если нажать сразу после переключения шкафа. Ничего не записано»запрос ушёл, и его отверг сервер: в карте оказалась ячейка соседнего шкафаподождите, карта перечитается сама, и повторите
«Страница назвала сразу два разных шкафа… Ничего не записано»в запросе разошлись шкаф в адресе страницы и шкаф в теле запросаперезагрузите страницу и повторите

🔴 Во всех трёх случаях не записано НИЧЕГО — ни одной строки. Так сделано намеренно: записать половину и ответить «сохранено» — худший из исходов, потому что оператор уходит с уверенностью, что карта такая, какой он её оставил, и расходится с ней надолго.

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