Системный администратор
0,1
рейтинг
6 мая 2015 в 12:58

Определяем, свободен ли туалет, и выводим статус в web

1. Intro

В нашем офисе порядка 30 человек, и на всех нас приходится 1 туалет, чтобы посетить который нужно пройти коридор, дёрнуть ручку и, если не открывается дверь — смириться и ждать, когда освободится.

Включенный свет — это не показатель свободности данного объекта, т.к. рядом с ним ещё есть раковина, которая может быть занята, а сам туалет нет.

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

2. Цель

Пока я работаю в этом офисе (почти 4 года), эта проблема назрела достаточно сильно, и поэтому нужно было очевидное и простое решение, дабы узнавать, свободен ли туалет или нет.

3. Простейшая схема

Простая схема всей конструкции выглядит так:
Закрыта дверь — горит красная лампочка
Открытая дверь — горит зелёная лампочка

4. Начинаем добавлять элементы

Наша компания занимается разработкой и внедрением ПО, поэтому все за компьютерами сидят почти весь день, значит, нужно вывести на веб-страничку статус свободности туалета. Наиболее надёжным и простым в реализации показалось взять концевик от автомобиля, витую пару и сервер с двумя сетевыми картами.

4.1. Как узнать, что закрыта дверь или нет

Самое простое — это сходить и посмотреть
Bryulchik предложил использовать концевик от автомобиля (Концевик Россия PS-116 R (PS 2B, AU-30B)) для определения статуса двери.

image

У него достаточная простая схема — если дверь закрыта, то он размыкает цепь, в обратном случае — цепь замкнута и дверь открыта, а значит всё свободно.

4.2. Тянем витую пару и подсоединяем

Есть такая штука, называется RJ-45 Loopback, она нужна для тестирования, и нет необходимости использовать вторую сетевую карту или тестер, чтобы, например, проверить, не перебит ли кабель.

image

Мы эти знания будем использовать для нашего проекта.
Протянули витую пару ко входу, другой конец обжали и вставили в сервер.

Линка, разумеется, нет пока что.
Берем 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. Демонстрация

Всё, что мы сделали, можно увидеть на видео:
Andrey Esin @la_stik
карма
19,0
рейтинг 0,1
Системный администратор
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (46)

  • +6
    За RJ-45 Loopback спасибо, интересное решение! А то некоторые целую raspberry pii на такую задачу вешают.
    • +12
      теперь для умного дома будут использовать старые 48-портовые управляемые 100мбит-свитчи :)
  • +3
    Огромное спасибо за RJ-45 Loopback, никогда не знал об этом, вечером буду тестировать. Попытаюсь разобраться с проблемой в пункте 4.4.
  • 0
    Я правильно понял, что если кто-то выйдет из кабинки и прикроет за собой дверь она будет в занятом статусе?
    • 0
      Увы, нет.
      У концевика пружина достаточно сильная, она сможет дверь оттолкнуть и дверь старая советская, у которой только ручка и щеколда.
      • 0
        Вы недостаточно тестировали систему… А если замок сменят на захлопывающийся? PIR датчик стоит копейки
        • +2
          Мы исходили из того, что у нас есть, а у нас есть дверь, без язычка и ручки и 1 шпингалет, который всего лишь раз меняли за 4 года.
          Это дверь, как в сельском туалете.
          • +11
            У нас был один туалет, замок без язычка, ручка, шпингалет, пара PIR датчиков, полсотни пользователей, несколько концевиков, камера и raspberry pi. Не ничего ужаснее, чем контроль сортира обработкой изображений с камеры на raspberry, но рано или поздно мы дойдем и до этой дури… =)
      • 0
        Почему «увы»? Пружина это хорошо.
  • +3
    Вариант. Но ворованный пешеходный светофор я бы все же повесил на видном месте. Иногда все же голову поднять проще.
    Но здесь все зависит от геометрии пространства.
  • +1
    Как показала практика, пока нет адекватного объяснения почему так происходит, но суть в том, что если взяться за открытые участки меди пальцами (за конец 2ой и 6ой жил), то появится линк (!), а если отпустить жилы, то линк не пропадёт (!!!). Это мы не смогли никак объяснить, но если не трогать ничего своими жирными пальцами, то всё будет работать как задумывалось.
    Моя Arduino тоже себя так вела, пока я не повесил подтягивающий резистор.
  • +16
    Осталось доделать статистику. Количество посещений, средний вес, количество метана…
  • +5
    Автомобильный концевик, наверное, несколько проще достать, но смонтировать проще герконовый датчик открытия двери.
  • +14
    Естественное развитие системы — организация очереди и выдача номерков. Фидбяк, отзывы, учет метража тбумаги. Это же поле непаханое.
    • 0
      Аха, и автоинформатов «Иван Сергеевич, пройдите в кабинку М» )
    • 0
      Анализатор всего, что люди туда выпускают, и личная учетная запись пользователя, где видны данные о том, как он питается и советы по улучшению питания.
  • +11
    Как сложно все. Веб-камеру туда и вопрос решен — туалет всегда свободен ;)
    • 0
      Где то это было уже было )) веб камера использовалась для определения, есть ли человек внутри или нет, без трансляции естественно.
      • +1
        Гораздо проще датчик движения повесить. Правда на унитазе шевелиться придётся, хотя бы освежитель взять почитать…
        • 0
          Откройте для себя датчик присутствия
  • +4
    «Предыдущий пользователь системы — Иван Пупкин. Поставьте лайк или напишите комментарий»
  • +1
    > на 30 человек 1 туалет, и так уже 4 года (как минимум).

    А может уже пора второй туалет открыть?

    • +6
      Или народ поувольнять
  • 0
    Как показала практика, пока нет адекватного объяснения, почему так происходит, но суть в том, что если взяться за открытые участки меди пальцами (за конец 2-ой и 6-ой жил), то появится линк (!), а если отпустить жилы, то линк не пропадёт (!!!). Это мы не смогли никак объяснить, но если не трогать ничего своими жирными пальцами, то всё будет работать как задумывалось.


    Похоже на то, что на входе сетевой карты сигнал попадает на триггеры Шмитта (частое решение) или другую подобную схему с гистерезисом.

    Одно из возможных объяснений может быть таким: на длинный кабель наводится помеха. Когда вы берете его пальцами, ее уровень растет и выводит входные цепи из области гистерезиса в, например, лог. 1 (условно) — карта регистрирует линк. Вы отпускаете провод, уровень помехи падает, но, видимо потому, что провод длинный, уровень помехи велик настолько, чтобы находиться в области гистерезиса входной цепи — карта продолжает регистрировать линк, т.к. до того он был зарегистрирован, а обратного перехода через зону гистерезиса не произошло из-за помех.

    Попробуйте включить между проблемными линиями резистор, например, на 100 кОм. Может помочь.
  • +1
    Забавное совпадение — только сегодня решил у себя на офисе похожую задачу, только немного другими средствами. В качестве признака «занятости» использовал включенный свет — если он включен, то занято, если выключен — свободно. Есть вероятность, что свет забудут выключить, но тогда срабатывает «напоминалка». А реализовано было с помощью беспроводного модуля Ноолайт и фоторезистора на 1МОм. Провода тянуть не надо было, на сборку, монтаж и подключение к системе Умного Офиса ушло минут 15 не больше. Подробности по ссылке
  • 0
    Следующее решение — определять, кто сколько сидит и в конце месяца рассылать статистику по почте)
    • +1
      … определять, кто сколько сидит и в конце месяца рассылать счета на оплату по почте ))
  • 0
    Отличная идея. Мы на работе поступили ещё проще. У нас на этаже один служебный туалет, и около пары сотен человек (а может больше) на четырёх этажах здания.
    Туалет закрывается на ключ, внутри есть металлическая щеколда и выключатель света. Проблемы были следующие:
    1. Занятость туалета определялась тщательным изучением щели между дверью и полом;
    2. Включенный свет в туалете не гарантия того что в нём кто-то есть;
    3. Периодически закрытый изнутри занятый туалет пытались открыть снаружи ключом.
    В итоге вывели светодиод выпаянный из старой мышки, батарейный блок (внутри туалета прилепили на двухсторонний скотч) на 4 АА батарейки. Как выяснилось единственным гарантированным детектором статуса туалета является задвинутая щеколда — вот в неё мы и засунули металлическую пластинку к которой подведен тоненький проводок, второй проводок к этой фиговине в которую задвигается щеколда. Теперь когда щеколда задвигается — снаружи светиться светодиод. Все довольны ))
  • 0
    Нужно еще сделать систему бронирования — чтобы туалет не оказался занятым за время прохода по коридору )
    • +1
      А я в основном мечтаю о watchdog-таймере и катапульте для выкидываня особенно задумчивых посетителей.
  • 0
    Делали подобную систему у себя в офисе. У нас использовалась связка: беспроводной PIR-датчик + RaspberryPi + Win/Android клиент. Пришлось так изгаляться, что бы не испортить ремонт в офисе.
  • 0
    Не дай бог случиться поносу…
  • 0
    Что мелочиться-то, сразу бы электронную очередь в туалет, запись через web-интерфейс.
    • 0
      Вы будете смеяться, но реализацию электронной очереди в туалет я видел своими глазами. Запись в неё происходила из местного АРМа, в одном списке с электронной очередью на обед и перекур.
    • 0
      В случае, когда требуется максимальное присутствие сотрудника на месте и заблаговременное планирование времени его отсутствия, то оно так и есть. Помнится на предыдущем месте работы видел веб-морду сотрудников колл-цента. Вот у них кроме очереди входящих звонков ещё были кнопки «Встать в очередь на обед» и «Вставь в очередь в туалет». Очереди работали в автоматическом режиме, но начальник отдела так же мог ими управлять.
  • +1
    Что-то подобное кстати уже было: habrahabr.ru/post/216059

    Но пора систему усовершенствовать: интеграция со Slack, пуши в YO!, статус туалета в конфе Telegram и т.д. и т.п. :)
    Ну и конечно же регистрацию, чекины, статистику, комментарии, лайки :d
  • 0
    Осталось выяснить, что делать с теми, кто не закрывает за собой дверь.
    А также доработать устройство входной двери, чтобы нельзя было выйти, не помыв руки.
  • 0
    Ох ТЫЖ блин, ну вы софтовые ГИГАНТЫ. Хотя я бы не очень желал работать в коллективе где 30 чел на место. Пришлось бы, читерить и иногда делать прогой захват очереди.

    Пива точно не выпьешь. (
    • 0
      Тариф «Управляй очередью» от 1000 руб./мес.
  • 0
    Осталось запилить определение посетителя в выгребной яме и можно автоматизировать российские туалеты.

    www.youtube.com/watch?v=HxklYqPdiIY
  • 0
    Гипотетически, у г-на N появилась необходимость исследовать вашу сеть на предмет наличия некоторой информации. «Из вне» пробиться ему — не удалось по ряду каких либо причин. Он берет ноутбук, и пытается найти беспроводные сети или еще что, ходя вокруг да около вашей организации. Прикидывается случайным посетителем, но терпит неудачу. Задача защиты доступа ко внутренней сети реализована должным образом, не зря безопасники получают свою премию! Г-н N расстраивается, и заходит в туалет по нужде. Закрыв щеколду, с ноутбуком подмышкой он видит витуху. Витуху, с кнопкой-датчиком. Витуху, подключенную к кнопке в сортире, ведущую к ближайшему от сервера свичу в обход систем безопасности. Г-н N невольно улыбается :)
    • +1
      Витая пара подключена напрямую к сетевой карте (без каких либо маршрутизаторов по дороге) и у интерфейса сетевой карты нет IP.
      Маловероятно, даже если кто-либо решить с ноутбуком и обжимкой засесть в туалете, что у него удастся провернуть свой коварный план, хотя его скорее охранники вынесут из «кабинета» :)
      • 0
        Г-н N настроит DHCP. На Windows по дефолту подключение примет IP. Но в корпоративную сеть он все равно не попадет
        (без каких либо маршрутизаторов по дороге)

        и если нет уязвимостей на туалетном сервере.

        ПО может анализировать не выдал ли кто IP, и если выдал то бить тревогу! Ему «достанется» за оборванную «кнопку датчик». И улыбка невольно спадет с лица г-на N.
    • 0
      От этого есть хорошая встроенная защита. Контроллер туалета начнет не верно отображать статус и туалет сразу забьется кучей народа, желающего сходить «журнал почитать». Хакера линчует разъяренная толпа.
      • 0
        Наоборот верный. Он же быстро обожмет и подключит с буку. Линк = закрыто = занято.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.