Работа GSM замка-невидимки с ПК

Дмитрий Денисов | Программное обеспечение

В этом топике речь пойдет о некоторых функциях нового GSM замка-невидимки (реализацией занимается фирма Меттэм), которые недостаточно освещены в руководстве по эксплуатации. К этим фукциям относятся: управление замком с помощью ПК, передача в ПК различных информационных сообщений о текущем состоянии блока управления замком, двери и самого электромеханического замка, отправка в ПК всех принятых радио-посылок. По умолчанию все эти функции блока управления выключены. Включить их можно с помощью программы конфигурирования блока управления (входит в комплект поставки замка).
Далее обо всех этих функциях более подробно…

Сначала я опишу структуру протокола обмена с блоком управления замком. Все данные представляют собой строки в формате ASCII. Формат строки следующий:
[prefix][address][cmd][data][checksum][end]
где:
[prefix] – префикс (начало строки, символ с кодом 0×1F)
[address] – адрес устройства (в данном случае всегда = 0xFF – два символа “F”)
[cmd] – код команды (один символ)
[data] – данные (могут отсутствовать)
[checksum] – простая однобайтовая контрольная сумма (сумма все предыдущих полей)
[end] – признак конца строки (символ с кодом 0×0D)

В зависимости от используемой комнады, в ответ от блока управления придет либо код ошибки, либо код подтверждения, либо запрашиваемые данные. До получения ответа на предыдущую команду, отправлять следующую команду не рекомендуется.
Формат ответа подтверждения или кода ошибки:
[prefix][address]R[код ошибки, 1 символ][checksum][end]
Если код ошибки равен 0, значит ошибок нет, команда принята.
Пример: <0×1F>FFR02D<0×0D>
здесь и далее в <> указаны коды непечатных символов

Функция управления замком с помощью ПК
С помощью ПК можно открывать и закрывать замок, ставить и снимать с охраны.
[cmd] = А
[data] = {0,1,2,3} (может принемать одно из указанных в скобках значение)
0 – закрыть замок (при этом автопостановка под охрану, если она разрешена, происходить не будет)
1 – открыть замок (если автоснятие с охраны включено, то будет происходить автоматическое снятие с охраны)
2 – поставить под охрану
3 – снять с охраны
Пример: <0×1F>FFA01C<0×0D> – команда на закрытие замка
Если команда прошла, то от блока управления придет ответ: <0×1F>FFR02D<0×0D>

Информационные сообщения
Блок управления может передавать информацию в ПК о различных событиях.
[cmd] = I
[data] = [код сообщения, 1 символ][код источника сообщения, 1 символ][серийный номер, 8 символов]
Возможные коды сообщений:
0 – замок закрыт
1 – замок открыт
2 – поставлено под охрану
3 – снято с охраны
4 – дверь открыта (если подключен датчик двери)
5 – дверь закрыта (если подключен датчик двери)
6 – нажата кнопка выхода (если подключена)
7 – тревога!
8 – пропадание питания от сети
9 – появление питания от сети
A – вход в режим программирования
Возможные источники сообщения:
0 – брелок
1 – автоматическая функция блока управления
2 – ПК
3 – SMS
4 – DTMF
5 – входящий звонок без “подъема трубки”
Серийный номер – серийный номер использованного для управления брелка, во всех остальных случаях равен 0
Пример: <0×1F>FFI0200000000D6<0×0D> – замок закрыт, команда поступила от ПК

Запрос текущего состояния блока управления
[cmd] = I
[data] = ?
Пример запроса: <0×1F>FFI?33<0×0D>
Фомат ответа на запрос:
[cmd] = I
[data] = [isLock][isSecurity][isDoorClose] (каждый из параметров – это символ 0 или 1; 0 – означает “открыто” или “снято”; 1 – означает “закрыто” или “поставлено”
[isLock] – текущее состояние замка (открыт или закрыт); фактически – это последняя выполненная команда по управлению замком, так как замок в некоторых случаях может быть открыт вручную.
[isSecurity] – поставлено или снято с охраны
[isDoorClose] – текущее состояние двери (если датчик двери не подключен, то будет равно символу “*”)
Пример: <0×1F>FFI10186<0×0D> – замок закрыт, снято с охраны, дверь закрыта

Формат сообщения о принятой радиопосылке
[cmd] = S
[data] = 18 символов (9 байт) принятой от радиобрелка посылки
О формате поля [data] можно почитать в документации на keeloq кодер HCS200 или HCS300. Общую информацию можно найти здесь.

9 комменатриев »

  1. Добрый день!
    А как с помощью компьютера можно управлять дополнительным реле (свет/тревога)? Это могло бы очень пригодиться! :)

    Комментарий от _Pavel_ — 27.05.2013 @ 19:37

  2. Павел, в настоящее время таких команд не существует. Управление реле происходит автоматически в зависимости от выбранного режима работы. Ну, еще его можно совсем отключить с помощью дип-переключателя №5.

    Комментарий от Дмитрий Денисов — 27.05.2013 @ 19:46

  3. А можно ждать в новой прошивке?

    Комментарий от _Pavel_ — 28.05.2013 @ 12:55

  4. Добавить такую команду не сложно. Надо подумать, как сохранить (и сохранять ли вообще) логику автоматического управления, если пришла команда извне.

    Комментарий от Дмитрий Денисов — 28.05.2013 @ 14:20

  5. Доброй ночи.

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

    Пара вопросов.
    1. Правильно ли я понимаю, что для того, чтобы замок не только отправлял данные, но и принимал команды, нужно выставить специальную опцию в конфигураторе?
    2. Информационные сообщения приходят вот в таком виде:
    FFI51000000000006A
    FFI410000000000069
    Кажется, что здесь три лишних нуля. Так и должно быть?

    P.S.: мысли в слух.
    1. Пользователи MacOS плачут при запуске конфигуратора (даже, если им удаётся его запустить). Благо потребности в его постоянном использовании нте.
    2. Не то, чтобы минус, но всё-таки. При взаимодействии с управляющим блоком для меня совсем не очевидна была такая штука как baud rate. Сначала пробовал методом тыка, а потом погуглил по запросу avr default baud rate. Собственно не зная его это как пытаться созвониться с кем-то не зная его номера телефона.

    Комментарий от sergey — 30.03.2016 @ 00:41

  6. Приветствую.
    Спасибо за хороший отзыв!
    Далее попытаюсь ответить по пунктам:
    1. Да это так. Нужно разрешить управление замком из ПК.
    2. Начиная с октября 2013 года в формат немного изменился: поле [серийный номер, 8 символов] стало длиной 11 символов и в нем может быть передан как серийный номер брелка, так и номер телефона. Были добавлены следующие коды сообщений:
    B – выход из режима программирования
    C – произошла блокировка телефона
    D – произошла разблокировка телефона
    E – произошла блокировка ключа
    F – произошла разблокировка ключа
    G – сработка на Линии (появилась единица)
    H – вход 1 логический ноль
    I – вход 1 логическая единица
    J – вход 2 логический ноль
    K – вход 2 логическая единица

    Немного изменился и формат команды управления замком. С помощью нее можно управлять несколькими замками.
    A[cmd 1b]{[номер замка от 1 до 9 1b]} – управление замком с ПК
    номер замка может отсутствовать, в этом случае команда будет принята к замку 0 (он же 1)
    cmd = 0 – закрыть (возможна автопостановка под охрану, если разрешена)
    cmd = 1 – открыть (возможно автоснятие с охраны, если разрешено)
    cmd = 2 – поставить под охрану
    cmd = 3 – снять с охраны

    Эту команду можно использовать и без явного указания номера замка – по умолчанию он равен 1.

    Мне жаль пользователей маков. В будущем некоторые настройки можно будет менять через смс-сообщения.
    Понятие boud rate – это скорость работы по интерфейсу. Аналогия, которая вы придумали, вполне уместна)

    Комментарий от Дмитрий Денисов — 30.03.2016 @ 10:51

  7. Дмитрий, спасибо за пояснения, буду экспериментировать.
    Подскажите, пожалуйста, еще один момент. В ответ на запрос о текущем состоянии блока (FFI?33) ) – тишина, при этом команды на закрытие, открытие и т.д (в новом формате, учитывающем номер замка) проходят. Формат данного запроса не менялся?

    Комментарий от sergey — 30.03.2016 @ 23:37

  8. И ещё один вопрос.
    Вы не могли бы прислать коды ошибок?
    К примеру, я отправляю запрос FFA31, в ответ приходит FFRJ47, где J -явно не ноль, а значит ошибка, но какая неизвестно.

    Комментарий от sergey — 30.03.2016 @ 23:42

  9. Таблица кодов ответов на команду (в начале идет символ ‘R’):
    ‘0′ – ошибок НЕТ
    ‘5′ – некорректная длина принятых данных
    ‘6′ – переполнение входного буфера
    ‘7′ – переполнение выходного буфера
    ‘8′ – один или более символов не могут быть преобразованы в цифры
    ‘9′ – отсутствует адресуемый элемент
    ‘A’ – неизвестная команда
    ‘B’ – неизвестная ошибка
    ‘C’ – неверный номер строки
    ‘D’ – неверный номер колонки
    ‘E’ – ошибка CRC
    ‘F’ – принят не печатный ASCII символ
    ‘G’ – превышен таймаут ожидания следующего символа
    ‘H’ – ошибка доступа к внешней памяти при записи в нее из ПК
    ‘I’ – принятое для сохранения сообщение слишком большое
    ‘J’ – функции охраны отключены
    ‘K’ – ошибка доступа к внешней памяти при чтении из нее из ПК
    ‘L’ – ошибка доступа к внешней памяти (шина I2C занята)
    ‘M’ – замок не закрыт из-за разряда акк. ниже 25%
    ‘N’ – управление замком с ПК запрещено
    ‘O’ – питание платы выключить нельзя, плата подключена к питанию от сети 220В
    ‘P’ – замка с таким номером не существует

    // коды внутренних ошибок (в начале идет символ ‘E’)
    ‘1′ – не верный ответ на команду ATE
    ‘2′ – не верный ответ на команду AT+CPIN, модем не готов к работе
    ‘3′ – не верный ответ на команду AT+CSCA
    ‘4′ – не верный ответ на команду AT+CMGF
    ‘5′ переполнение буфера фифо приема по RS232
    ‘6′ – ошибка при чтении из внешней памяти
    ‘7′ – ошибка при записи во внешнюю память
    ‘8′ – не печатный ASCII символ (в длине сообщения)
    ‘9′ – ошибка при инициализации
    ‘:’ сброс по включению питания Power-On Reset
    ‘;’ переполнение буфера фифо для передачи в SIM900
    ‘< ' переполнение буфера фифо для приема из SIM900
    '=' все ключи производителя повреждены
    '>‘ ошибка записи нового брелка в еепром
    ‘?’ ошибка перезаписи существующего брелка в еепром (после обнаружения ошибки при обновлении синхронизации)
    ‘@’ ошибка обновления величины синхронизации
    ‘A’ ошибка при чтении из внешней еепром информации о получателе
    ‘B’ ошибка при чтении из внешней еепром требуемого сообщения
    ‘C’ ошибка при чтении из внешней еепром номера телефона
    ‘D’ ошибка при чтении из внешней еепром управляющего слова
    ‘E’ ошибка при поиске нового получателя во внешней памяти
    ‘F’ ошибка при загрузке конфига из внешней памяти
    ‘G’ переполнение буфера фифо информационных сообщений
    ‘H’ переполнение буфера слотов входящих смс-сообщений
    ‘I’ ошибка преобразования кода сообщения в адрес во флеш
    ‘J’ ошибка при попытке чнтения мс
    ‘K’ переполнение буфера фифо для запросных сообщений
    ‘L’ ошибка доступа к шине I2C (внешняя память) в операциях чтения/записа
    ‘M’ переполнение буфера фифо для USSD-запросов
    ‘N’ сброс процесса отправки USSD-запроса
    ‘O’ oшибка при загрузке из внешней памяти строки запроса баланса
    ‘P’ сброс процесса отправки SMS-сообщения
    ‘Q’ ошибка длины строки запрос баланса
    ‘R’ строка запроса баланса не задана
    ‘S’ сообщение модема об ошибке при отправке USSD-запроса
    ‘T’ ответ на запрос баланса пришел испорченный (не найдена двойная кавычка)
    ‘U’ ошибка при преобразовании из USC2 в str (при работе с модемом)
    ‘V’ ошибка при преобразовании из STR в BIN (при работе с модемом)
    ‘W’ загружен конфиг по-умолчанию
    ‘X’ повторное включение модема (эта ошибка может возникать при повторном включении модема после посадки питания)
    ‘Y’ повторное выключение модема
    ‘Z’ ошибка при определении длины полученного смс сообщения или оно слишком длинное (больше 99)
    ‘a’ сброс приема от ПК из-за таймаута ожидания следующего символа
    ‘b’ сброс приема от SIM900 из-за таймаута ожидания следующего символа
    ‘c’ принято сообщение на латинице (пока не поддерживаются)
    ‘d’ принудительный сброс модема по питанию, выключение питания модема
    ‘e’ принудительный сброс модема по питанию, включение питания модема
    ‘f’ модем так и не прошел начальную инициализацию
    ‘g’ переполнение буферов телефонов входящих звонков
    ‘h’ переполнение очереди задач
    ‘i’ переполнение очереди таймеров
    ‘j’ неизвестный режим работы после проврки ПИН-кода
    ‘k’ сброс по WDT-таймеру Watchdog Reset
    ‘l’ сбой загрузки пароля DTMF из внешней памяти
    ‘m’ сброс приема от LOCK из-за таймаута ожидания следующего символа
    ‘n’ сброс приема от RS485 из-за таймаута ожидания следующего символа
    ‘o’ сброс приема от MAIN из-за таймаута ожидания следующего символа
    ‘p’ переполнение буфера фифо для передачи в LOCK
    ‘q’ переполнение буфера фифо для приема из LOCK
    ‘r’ переполнение буфера фифо для передачи в RS485
    ’s’ переполнение буфера фифо для приема из RS485
    ‘t’ переполнение буфера фифо для передачи в MAIN
    ‘u’ переполнение буфера фифо для приема из MAIN
    ‘v’ переполнение буфера фифо имен входных буферов фифо
    ‘w’ ошибка оунера при приеме данных (это критическая ошибка!)
    ‘x’ ошибка оунера при передаче данных (это критическая ошибка!)
    ‘y’ сброс процесса чтения SMS-сообщения
    ‘z’ ссылка на нулевой указатель
    ‘{‘ повреждение конфигурации, будет произведена перезагрузка системы
    ‘|’ произошел внешний сброс External Reset
    ‘}’ софтверный сброс Software reset
    ‘~’ сброс от BOR Brown-Out Reset

    Что касается команды запроса, то она не изменялась – это заглавная буква ‘i’

    Комментарий от Дмитрий Денисов — 31.03.2016 @ 13:53

RSS-канал комментариев этого поста.

Оставить комментарий

Необходимо авторизоваться, чтобы комментировать.

Материалы сайта являются авторскими. Копирование и публикация материалов без активной ссылки на первоисточник запрещено.