Демо-сервер для задачи "умный дом"
Перед запуском в 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 поддерживает два сценария работы.
В этом сценарии в сети находится единственное устройство - таймер с именем TIMER01
. Таймер шлёт сообщения о текущем времени каждые 100мс модельного времени.
В этом сценарии в сети находится таймер 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 соответствующие команды могут быть другими.