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

Дверной замок SmartLock 0.4

Рекомендуемые сообщения

* * *


Новая версия SmartLock 0.4 в этом посте: ссылка.


* * *


Простая реализация дверного замка на Google Glass из OpenPeripherals и компьютерах из OpenComputers. Образец торчит в дверях моего дома на сервере Computer&Science. Наверняка некоторые уже подходили (знаю всех поименно ;)) и пытались понять, работает мой замок или он просто завис.

Так вот, замок работает. Для того чтобы в дом вошел посторонний человек, хозяин должен находиться на сервере и дать соответствующую команду (при этом он может быть где угодно, хоть в Аду). Кроме того программа ведет два списка: черный и белый. Тем, кто занесен в белый список разрешение на вход не нужно. Они могут войти в любое время, даже если хозяин отсутствует (даже если они не добавлены в приват). Тем, кто внесен в черный список программа мигнет красным сигналом, и отправит уведомление хозяину.

Интерфейс замка выводится на очки "Google Glass" хозяина дома. Его можно упростить, я оставил место под другие фичи. Основной элемент - лог. Программа выводит туда сообщения и предупреждения.
Управление идет командами в чат.

Программа клиент:
http://pastebin.com/9X3u2Z9g
Программа терминал:
http://pastebin.com/KbSmQrcH

Терминал - программа, которая работает с блоком Google Glass Bridge. Она запускается на отдельном компьютере, к которому подключен вышеуказанный блок.

Клиент - программа которая работает на небольшом компьютере дверного замка. Он управляет дисплеем (который по совместительству служит кнопкой звонка) и блоком красного контроллера, который отпирает дверь. Одновременно может быть запущено несколько компьютеров клиентов (если в дом ведет несколько дверей/люков), каждый клиент идентифицируется номером порта (по дефолту - 27) в первой строке кода.

Команды управления (пишутся в чат):
$$show - показать интерфейс замка
$$hide - скрыть интерфейс (он будет показан автоматически, если произойдет какое-нибудь событие)
$$open [port] - команда отпирает дверь. Если указан параметр port - она отопрет указанную дверь. Если не указан - ту дверь с которой связано последнее событие (кто-то позвонил, например в нее).
$$deny <port> - замок указанной двери подает красный сигнал (запрет на вход =)) Чисто косметическая команда.
$$add <port> - команда добавляет в систему новую дверь по указанному порту.
$$whitelist [name] - если указан ник - команда добавляет его в белый список. Если ник не указан, программа выводит белый список в лог.
$$blacklist [name] - если указан ник - команда заносит его в черный список. Если не указан - выводит черный список в лог.
$$remove <name> - удаляет ник из списка (В какой список он внесен - из того и удаляет).

P.S. Забыл написать - терминал ведет лог, и пишет, кто, когда и куда звонил, кого пропустили, кто на улице остался =) Можно почитать его на жестком, в той же папке где сам терминал лежит.

Изменено пользователем Totoro

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Удобная система команд, но что будет если потерять очки? Или их кто-то заберет в темном переулке? Немножко дорогой замочек по ресам, но учень удобный, легкая система выдачи доступа другим игрокам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если потерял очки - не беда. Замок впустит в дом и без очков, просто не будет видно приветствие =)

Можно будет скрафтить новые очки, синхронизировать с Google Bridge и пользоваться дальше.

А вот если сопрут - беда. Придется блок Google Bridge наверное сломать/поставить, чтобы прервать связь злоумышленника с "сервером" =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А вот если сопрут - беда. Придется блок Google Bridge наверное сломать/поставить, чтобы прервать связь злоумышленника с "сервером" =)

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

А как ты говоришь, без очков открыть, команды же в чат не работают тогда?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Замок - сенсорный экран. Он посылает ник того кто "звонит в дверь" на терминал, а тот присылает ответную команду, если звонивший - хозяин, или есть в вайтлисте.

 

Короче - очки нужны только чтобы редактировать списки и видеть лог событий.

А входить/выходить можно и без них.

Команда open нужна в том случае, если звонит кто-то неизвестный. Или отсутствующий с списке доступа. Тогда хозяин решает - впускать или не впускать и дает команду.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если я правильно понял то нету смысла делать эту фигню. Кнопки под приватом работают также. Хотя можно сделать что-то более интересное... например, это уменьшит количество кабелей требуемых для создания звонка. На 100%. Вот такие пироги)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если я правильно понял то нету смысла делать эту фигню. Кнопки под приватом работают также. Хотя можно сделать что-то более интересное... например, это уменьшит количество кабелей требуемых для создания звонка. На 100%. Вот такие пироги)

Обрати внимание, что программа сохраняет на диск ники игроков, которые попытались войти на базу! Ну и также прога позволяет легко добавлять и убирать игроков. А в-третьих, сайт и сервер в частности посвящены компьютерным модам и Луа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Программа позволяет осуществлять удаленный контроль. Где бы ни находился хозяин - он знает кто к нему пришел и может его впустить.

Плюс программа работает независимо от привата. Если человек добавлен в белый список - он может пройти. Если не добавлен - на усмотрение хозяина.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Замок - сенсорный экран.

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

 

П.С. Я правда не понял, игрок в вайтлисте сразу ко всем портам имеет доступ? У портов нет уровней? Допустим добавили игрока Васю и дали ему уровень доступа=2. Порты у которых уровень доступа выше, он или не видит, или не может открыть? Просто давать Васе какие-то только выборочные порты хлопотно же. А доступ ко всем дать тоже опасно и не принято так в системе безопасности делать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хорошая идея насчет уровней доступа. Попробую реализовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Итак, тотальная творческая переработка, с учетом полученных отзывов. Встречайте! Новый, ослепительный, потрясающий возможностями

 

https://lh3.googleusercontent.com/XgSiLi-8zYrO6XaP1IjTDg0m9TdnHM_wOOJZWTOuRoU=w895-h513

SmartLock 0.3

by Totoro

 

1) Для тех, кто не хочет ждать

Ссылка на установку: http://pastebin.com/nQHbskwP

Если у вас есть интернет-плата, откройте каталог, доступный для записи и наберите: "pastebin get nQHbskwP lock".

Теперь программу можно запустить простой командой "lock".

 

2) Что оно умеет?

Итак, список основных фич:

  • Централизованное управление множеством замков (в лице компьютера из OC)
  • Управление правами доступа (черный/белый список), независимое от привата территории

  • Настройка уровней доступа

  • Лог на жестком диске (вам не нужно присутствовать на сервере, чтобы знать все обо всех)
  • Управление через очки "Google Glass" или встроенный терминал
  • Управление по сети
  • Веселые смайлики
3) Как оно устроено?

По сравнению с первой версией, все стало намного проще и дешевле. Основа - компьютер из мода OpenComputers. На нем запущена программа SmartLock.

Дверные замки - это пары сенсорный монитор + красный контроллер. Все соединяются вместе кабелями и присоединяются к центральному компьютеру.

 

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

Замки - это мониторы второго или третьего уровня и красные контроллеры, расположенные так, чтобы сигнал редстоуна от блока открывал дверь.

По желанию можно добавить Terminal Glasses Bridge и модем.

 

4) Как этим управлять?

Управление осуществляется командами из консоли. Вот они:

  • door <адрес монитора замка> <адрес красного контроллера> <название без пробелов> <уровень доступа> - записывает новый замок в таблицу
  • door <адрес монитора> <название/уровень> - изменяет уже существующую запись
  • list doors - выводит список всех дверей в системе
  • get <адрес монитора> - выводит данные одного конкресного замка

  • remove <адрес монитора замка> - удаляет запись из системы
  • open [адрес монитора замка] - отпирает указанный замок. Если адрес не указан, отпирает последний активный замок. Например тот, в который только что позвонил гость.
  • user <ник> <уровень доступа> - создает или изменяет пользователя

  • list [users] - выводит список всех зарегистрированных пользователей
  • get <ник игрока> - показывает уровень доступа конкретного игрока

  • remove <ник игрока> - удаляет пользователя из таблицы
  • log - показывает последние непрочитанные события
  • log all - покасывает весь список лога с самого начала
  • log clear - очищает лог в терминале (при этом все данные на жестком диске сохраняются)
  • exit или quit или просто q - выход из программы
Примечание: Важно! Адреса не нужно указывать полностью. Достаточно первых четырех-пяти символов.

 

4) Настройка программы

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

  • OWNER - ник владельца. Поменяйте на свой.

  • DEFAULT_USER - ник пользователя по умолчанию.

  • DEFAULT_LEVEL - уровень по умолчанию. Присваивается новым пользователям, если не указан другой.

  • DEFAULT_DOOR - дефолтное название для новой двери

  • OPEN_TIME - время на которое открывается дверь, в секундах

  • RED_STRENGTH - сила редстоун-сигнала из красного контроллера

  • PORT - порт для взаимодействия по сети

  • ALLOW = "。◕‿◕。"
  • WAIT = "(⊙_◎)" - набор смайликов для различных состояний замка

  • DENY = "(¬_¬)"
  • GLASSX - горизонтальная координата для интерфейса GoogleGlass

  • GLASSY - вертикальная координата
  • GLASS_TIME - время на которое появляются сообщения на очках GoogleGlass, в секундах
5) Сетевой интерфейс

Он пока очень простой. (Если надо что-то расширить - пишите)

Программа передает инфопакет, когда кто-то стучит в дверь. Это сериализованная таблица вида:

{date, player, doorname, address}

Дата/время события, ник игрока который вошел (или пытался), название двери и ее адрес.

 

Программа принимает только один управляющий пакет - сериализованную таблицу вида:

{command = 'open', address}

Где command равно 'open', т.е. - открыть дверь, а address - необязательный параметр. Если адрес не указан, программа откроет последнюю активную дверь.

 

6) Возможные конфликты

Компьютер оказывается подключен сразу к N-ому количеству мониторов - и естественно может забиндить не тот монитор в качестве основного.

Добавьте в корень своего диска файл autorun такого содержания:

require('component').setPrimary('screen', 'XXXX')
Где XXXX - это адрес вашего главного монитора.

 

Вы можете также объединить сеть дверных замков с сетью сенсоров движения SpiderEye. Зачем опутывать дом проводами дважды?

В это случае вам будет необходимо создать такой же файл autorun на жестком диске компьютера SpiderEye. И проставить в нем адрес основного монитора SpiderEye соответственно.

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

 

Совет: если вы используете сетевой интерфейс программы, вы можете подключить свой компьютер через свитч OC. Это позволит пропускать беспрепятственно сетевые пакеты, и при этом не создавать путаницы компонентов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тоторо, поставил себе на дом этот замок. Впечатлений куча, в основном хорошие, очень удобная штука.

Но хотел бы обратить твоё внимание на следующие вещи:

1) Указал свой ник в массиве переменных в графах OWNER и DEFAULT_USER, после чего мне всё равно потребовалось вносить себя в вайт лист через команду user. По сему напрашивается вопрос, зачем нужны выше указанные переменные?

2) Уж не знаю, лаги это сервера или программы, но дверной звонок иногда начинает меня игнорировать. Другие люди занесённые в вайт лист зайти могут (и на очках у меня всплывает соответствующее предупреждение), а меня он не воспринимает.

Пожелания:

1)Можно сделать время и дату заносящиеся в лог файл и высвечивающиеся в терминале не игровыми, а реальными?

2)Хотелось бы иметь возможность закрепить за 1 дверью 1 красный контролер и 2 монитора (чтоб с каждой стороны был дверной звонок.

3)Возможность настройки "Инвертнутых" дверей (это когда при подаче ред стоун сигнала дверь закрыта, а не открыта. Собственно этот пункт возможен только при выполнении п.2.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тоторо, поставил себе на дом этот замок. Впечатлений куча, в основном хорошие, очень удобная штука...

Ура-а-а! Кто-то скачал мою программу! :D Спасибо за положительный отзыв!

 

1) Извиняюсь, просто забыл сделать автоматическое добавление OWNER'а в вайтлист. Пока отлаживал программу - вылетело из головы. DEFAULT_USER - это заглушка для программы. В ситуации, когда программе нужен ник, а она его не получила, программа возьмет дефолтный. Не критически важная фича.

2) Вот насчет этого не знаю. Скорее всего лаги на твоей стороне, если у других проблем нет, ибо все пользователи обрабатываются одинаково быстро.

 

а) С реальным временем надо будет разобраться. Sangar переопределил системные функции для получения времени на внутриигровые.

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

в) "Инвертированная дверь" - это когда надо поддерживать сигнал редстоуна для того, чтобы она была закрытой, а чтобы открыть, этот сигнал надо гасить? Можно сделать.

г) И еще один вопрос - надо ли добавлять настройку стороны, на которую контроллер дает сигнал? Сейчас он излучает всеми своими сторонами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

в) "Инвертированная дверь" - это когда надо поддерживать сигнал редстоуна для того, чтобы она была закрытой, а чтобы открыть, этот сигнал надо гасить? Можно сделать.

Да ты всё верно понял.

 

г) И еще один вопрос - надо ли добавлять настройку стороны, на которую контроллер дает сигнал? Сейчас он излучает всеми своими сторонами.

Думаю это уже лишнее.

 

 

За сегодняшний день подумав, понял что нужно ещё несколько дополнений.

 

1) Функция включения сигнализации (теслы там и всё такое).

2) Функция игнорирующая персонажа некоторое время после многократных звонков за короткий период времени, возможность игнорировать персонажа некоторое время (в минутах). [Дело в том, что я поставил этот замок на свой дом в городе, и ещё не было ни кого, кто бы просто прошёл мимо не потыкав по звонку 100500 раз.]

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1) Функция включения сигнализации (теслы там и всё такое).

1) Надо определить условие активации сигнализации. Сигнализация - это будет отдельный контроллер. Активировать при попытке войти любого юзера с недостаточными правами? Или разница между уровнем двери и юзера должна достичь определенного размера, для включения сирены? (Например - грифер Вася с уровнем -9000 звонит в Дверь (10) - срабатывает, а если Петя с уровнем 8 звонит в ту же дверь - не срабатывает.)

В принципе, можно просто вынести этот параметр как настройку. Если 1 - срабатывает на любого. Если больше - при соотв. разнице.

 

2) Добавлю кулдаун после N повторяющихся звонков.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ок, после основательной переработки и дополнения кода - новая версия!

 

SmartLock 0.4

by Totoro

1) Установка

Новая версия: http://pastebin.com/udqgd6yS

 

Внимание: удалите файл doorlist.txt, если он у вас есть! Базу дверей вам придется создать заново, т.к. поменялся формат. Но это единственная печальная новость.

 

2) Что нового?

  • Переработана система дверей. Теперь ключевой параметр - ID двери (или ее название). Каждая дверь может иметь любое количество экранов-сенсоров и контроллеров-излучателей. Они даже могут совпадать у разных дверей.
  • Инверсный редстоун-режим дверей (если ваша дверь закрывается при подаче сигнала, а открывается от его отсутствия).
  • Система триггеров тревоги.
  • OWNER автоматически получает уровень 9000, если у вас еще нет таблицы юзеров. Если есть - все остается как есть.
  • Теперь сторона (или стороны) для излучения сигнала редстоуна настраиваюся обязательно. Это сделано для повышения быстродействия, ибо активация всех сторон сразу создавала паузу программы примерно на секунду. Значения сторон - текстом на англ. языке. См. здесь.

  • Программа теперь использует реальное время. (Можно переключить обратно на игровое по желанию.). Поддерживаются часовые пояса, високосные года и т.д.!
  • При запуске, программа автоматически закрывает все двери. Вам не нужно беспокоиться, что после запуска где-то осталась незапертая вами дверь.
  • Бан за флуд! Чем больше раз игрок нажмет на звонок подряд - тем дольше игнор. На OWNER'а не распространяется.

  • Команда checkup - проверяет систему на конфликты и неправильные адреса.
  • Команда set - редактирует параметры дверей (уровни, экраны, контроллеры, инверсный режим)
  • Команда alarm - создает триггер тревоги. Срабатывает при заданной разнице между уровнями звонящего и двери.
  • Команда help - краткая справка по всем командам.
  • Ключ ? добавленый к любой команде покажет справку по ее синтаксису.
Новые константы:

  • ALARM_TIME - продолжительность тревоги в секундах
  • REALTIME - использовать реальное время. По умолчанию - true
  • TIMEZONE - часовой пояс (-1, +3 и т.п.)
3) FAQ

Q: Что делать если "звонок" не нажимается?

A: Убедитесь, что консоль не находится в режиме ввода команды. Если это так - нажмите Enter (консоль скажет, что команда незнакома - не обращайте внимания).

Звоня, постарайтесь нажимать на сам "смайлик" посередине экрана. В силу текущего разрешения черные полоски выше и ниже - мертвая зона. Я могу это пофиксить, но придется либо сдвинуть смайлик вверх/вниз, либо сделать его поменьше.

 

4) Гибкость

С каждой версией, программа становится все гибче. И растет количество способов работы с ней. Например:

  • Кроме дверей, сигналами редстоуна можно открывать/обезвреживать ловушки.
  • Можно сделать авторизованный запуск какого-либо процесса, или машины.
  • Можно сделать несколько дверей с одним дисплеем. В зависимости от уровня того, кто "звонит", откроется одна из связанных с сенсором дверей. Или несколько.

  • Можно создать триггер с условием 100, который будет включать катушки Теслы. Тогда любой ваш недруг, которого вы занесете в базу с уровнем <= -100 будет испепелен на месте при попытке войти.
  • Можно построить двустворчатые двери из поршней управляемые двумя контроллерами. Дверь может оперировать любым количеством контроллеров одновременно.

Итак, что думаете? Пишите отзывы, пожелания, багрепорты. Буду рад всему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 
Totoro

Подскажи нубу что используется в качестве контроллера?

 

Если ты имеешь "красный контроллер", то это Redstone I/O (хз, как его переводить, если честно).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Redstone input output.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Redstone input output.

Это понятно, сам знаю. Я имею в виду, как его адекватно перевести на русский язык?

...

Наверное, контроллер редстоуна.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...