/smart-home-binary

Smart-home problem demo server binary releases

smart-home-binary

Демо-сервер для задачи "умный дом"

Запуск

Перед запуском в Linux или MacOS убедитесь, что файл имеет права на исполнение. Установить их можно с помощью команды:

chmod +x FILE

Всегда используйте самую последнюю версию демо-сервера.

Чтобы посмотреть список доступных опций программы используйте опцию --help.

Запуск в режиме сервера

Для запуска в режиме сервера используется опция -s:

./smarthome -s

Если вы работаете в windows, не указывайте ./ перед командой. Выполняйте команду из командной оболочки, например, cmd.exe.

smarthome.exe -s

Обратите внимание, что имя файла при скачивании содержит название операционной системы, процессора и версию программы. Либо переименуйте скачанный файл, либо измените строку запуска соответствующим образом.

Дополнительно при запуске в режиме сервера можно указать следующие опции:

  • -p PORT - номер порта, на котором сервер будет ожидать подключения. По умолчанию используется порт 9998.
  • -0 TIME - начальное модельное время для симуляции в формате YYYY-MM-DDThh:mm:ss, например, 1984-04-01T13:00:00. По умолчанию - текущее астрономическое время, округленное до секунд.
  • -1 DUR - продолжительность моделирования, по умолчанию 1 час.
  • -S SCENARIO - запустить сценарий с указанным номером. Сценарии описаны далее.
  • -V - выводить принятые и отправленные пакеты в JSON-формате.

Если запуск был успешен, демо-сервер будет ожидать подключения на указанном порту. Проверить это можно, например, с помощью curl

curl -H POST -d "" localhost:9998

В ответ вы должны получить закодированную в base64 строку с сообщением с начальным модельным временем. Ответ сервера может выглядеть примерно так:

DbMG_38BBgaI0Kv6kzGK

Сценарии работы

Версия 0.2.0 поддерживает два сценария работы.

Сценарий 1

В этом сценарии в сети находится единственное устройство - таймер с именем TIMER01. Таймер шлёт сообщения о текущем времени каждые 100мс модельного времени.

Сценарий 2

В этом сценарии в сети находится таймер TIMER01, лампа LAMP02 и выключатель SWITCH03, коммутированный с лампой. Выключатель изначально находится в состоянии "выключен" и периодически меняет свое состояние. Таймер шлет сообщения о текущем времени каждые 100мс модельного времени.

Кодирование и декодирование пакетов

Демо-сервер может использоваться как утилита для кодирования и декодирования пакетов.

Обратите внимание, что JSON-формат используется только для отладочных целей. По сети передаются пакеты в бинарном формате, закодированные в Base64.

Опция -B выполняет декодирование пакета из base64 в JSON-форму, например, если выполнить из командной строки Unix команду

echo 'DbMG_38BBgaI0Kv6kzGK' | ./smarthome -B

на стандартный поток вывода будет напечатано

[
    {
        "length": 13,
        "payload": {
            "src": 819,
            "dst": 16383,
            "serial": 1,
            "dev_type": 6,
            "cmd": 6,
            "cmd_body": {
                "timestamp": 1688984021000
            }
        },
        "crc8": 138
    }
]

Опция -J выполняет преобразование из JSON-представления в base64-представления для отправки. Например, если запустить из командной строки команду

./smarthome -J

и на стандартном потоке ввода ввести

[
    {
        "length": 13,
        "payload": {
            "src": 819,
            "dst": 16383,
            "serial": 1,
            "dev_type": 6,
            "cmd": 6,
            "cmd_body": {
                "timestamp": 1688984021000
            }
        },
        "crc8": 138
    }
]

на стандартный поток вывода будет напечатано

DbMG_38BBgaI0Kv6kzGK

Опция -K выполняет преобразование из JSON-представления в бинарное представление. Так можно посмотреть, как представляется пакет в бинарной форме до его кодирования в Base64. Например, если запустить из командной строки команду

./smarthome -K | hexdump -C

и на стандартном потоке ввода ввести

[
    {
        "length": 13,
        "payload": {
            "src": 819,
            "dst": 16383,
            "serial": 1,
            "dev_type": 6,
            "cmd": 6,
            "cmd_body": {
                "timestamp": 1688984021000
            }
        },
        "crc8": 138
    }
]

на стандартный поток вывода будет напечатано

00000000  0d b3 06 ff 7f 01 06 06  88 d0 ab fa 93 31 8a     |.............1.|

Внимание! Команды даны в предположении, что вы используете Linux или MacOS. В windows соответствующие команды могут быть другими.