1. Intro
В нашем офисе порядка 30 человек, и на всех нас приходится 1 туалет, чтобы посетить который нужно пройти коридор, дёрнуть ручку и, если не открывается дверь — смириться и ждать, когда освободится.
Включенный свет — это не показатель свободности данного объекта, т.к. рядом с ним ещё есть раковина, которая может быть занята, а сам туалет нет.
1.1 Если нет желания читать весь текст, то можно сразу перейти к демонстрации
2. Цель
Пока я работаю в этом офисе (почти 4 года), эта проблема назрела достаточно сильно, и поэтому нужно было очевидное и простое решение, дабы узнавать, свободен ли туалет или нет.
3. Простейшая схема
Простая схема всей конструкции выглядит так:
Закрыта дверь — горит красная лампочка
Открытая дверь — горит зелёная лампочка
4. Начинаем добавлять элементы
Наша компания занимается разработкой и внедрением ПО, поэтому все за компьютерами сидят почти весь день, значит, нужно вывести на веб-страничку статус свободности туалета. Наиболее надёжным и простым в реализации показалось взять концевик от автомобиля, витую пару и сервер с двумя сетевыми картами.
4.1. Как узнать, что закрыта дверь или нет
Самое простое — это сходить и посмотреть
Bryulchik предложил использовать концевик от автомобиля (Концевик Россия PS-116 R (PS 2B, AU-30B)) для определения статуса двери.
У него достаточная простая схема — если дверь закрыта, то он размыкает цепь, в обратном случае — цепь замкнута и дверь открыта, а значит всё свободно.
4.2. Тянем витую пару и подсоединяем
Есть такая штука, называется RJ-45 Loopback, она нужна для тестирования, и нет необходимости использовать вторую сетевую карту или тестер, чтобы, например, проверить, не перебит ли кабель.
Мы эти знания будем использовать для нашего проекта.
Протянули витую пару ко входу, другой конец обжали и вставили в сервер.
Линка, разумеется, нет пока что.
Берем 1-ую и 3-ю жилы и смыкаем, со -2ой и 6-ой жилой поступаем так же.
Через секунду появляется линк на порту у сервера, теперь размыкаем 2 и 6, линк пропал, в целом, это то, что нам нужно.
4.3. Крепим
Берем концевик и вешаем его на косяк у двери, смотрим, чтобы его не вырвали наши могущественные охранники, прижав дверь вплотную к косяку, но в то же время был контакт, когда дверь открыта.
1-ую и 3-ю жилы так и оставляем скрученными, прячем их под обналичник двери, на 2-ую жилу и крепим движущуюся часть концевика, 6-ую жилу на сам концевик и всё аккуратно обматываем изолентой.
4.4. Нужно больше изоленты
Как показала практика, пока нет адекватного объяснения, почему так происходит, но суть в том, что если взяться за открытые участки меди пальцами (за конец 2-ой и 6-ой жил), то появится линк (!), а если отпустить жилы, то линк не пропадёт (!!!). Это мы не смогли никак объяснить, но если не трогать ничего своими жирными пальцами, то всё будет работать как задумывалось.
5. ПО
Самая увлекательная (для меня) часть это написание ПО.
Весь комплекс разделён на 2 части — сервер, который опрашивает датчик и веб страничка.
Раз в 3 секунды mii-tool, на сервере с датчиком и двумя сетевухами, смотрит на интерфейс и его статус, а потом сбрасывает этот статус опцией -R
Если статус сменился с предыдущего, то делает простой HTTP GET запрос на сервер с веб-страничкой.
В свою очередь, на сервере с веб страничкой висит скрипт, который пишет изменённый статус в файл, а уже обычная html-страничка опрашивает этот файл и выводит на экран зелёную лампочку или красную.
6. Демонстрация
Всё, что мы сделали, можно увидеть на видео: