Entrixy → curl / bash тест-скрипт
Готовый пример подключения к Entrixy. Формат вебхука — entrixy.com/webhook。
Отправляет правильно подписанный запрос вебхука на ваш приёмник. Полезен до подключения приложения: проверить, что приёмник (Flask-пример, собственный код, мост перед Home Assistant) проверяет подпись и принимает команду.
Скрипт
Сохраните текст ниже в файл test-webhook.sh:
#!/usr/bin/env bash
#
# Тестовая отправка вебхука Entrixy на ваш приёмник.
# Подписывает запрос HMAC-SHA256 так же, как это делает приложение.
#
# Использование:
# ./test-webhook.sh https://your-host/webhook YOUR_SECRET
# ./test-webhook.sh https://your-host/webhook YOUR_SECRET 42 close
#
# Аргументы:
# $1 адрес приёмника (обязательный)
# $2 секрет (обязательный)
# $3 object_id — целое число (необязательный, по умолчанию 1)
# $4 action — open или close (необязательный, по умолчанию open)
#
# Зависимости: bash, curl, openssl.
set -e
URL="${1:?Не указан адрес. Пример: $0 https://host/webhook SECRET}"
SECRET="${2:?Не указан секрет}"
OBJECT_ID="${3:-1}"
ACTION="${4:-open}"
case "$OBJECT_ID" in ''|*[!0-9]*) echo "object_id должен быть целым числом" >&2; exit 1;; esac
TIMESTAMP=$(date +%s)
# nonce: 16 шестнадцатеричных символов (8 случайных байт), как у приложения
NONCE=$(openssl rand -hex 8)
BASE="${TIMESTAMP}.${NONCE}.${ACTION}.${OBJECT_ID}"
SIGNATURE=$(printf '%s' "$BASE" | openssl dgst -sha256 -hmac "$SECRET" | sed 's/^.* //')
PAYLOAD=$(printf '{"action":"%s","object_id":%s,"timestamp":%s,"nonce":"%s","signature":"%s"}' \
"$ACTION" "$OBJECT_ID" "$TIMESTAMP" "$NONCE" "$SIGNATURE")
echo "→ POST $URL"
echo "→ $PAYLOAD"
echo
curl -sS -w '\nHTTP %{http_code}\n' \
-H 'Content-Type: application/json' \
-d "$PAYLOAD" \
"$URL"
Запуск
chmod +x test-webhook.sh
./test-webhook.sh https://your-host/webhook YOUR_SECRET
С указанием object_id и action:
./test-webhook.sh https://your-host/webhook YOUR_SECRET 42 close
object_id — целое число, как в запросах приложения. action — open или close。
Что делает скрипт
- Берёт текущее время в секундах (unix-timestamp).
- Создаёт nonce: 16 шестнадцатеричных символов (8 случайных байт) через
openssl rand。 - Считает HMAC-SHA256 секретом от строки
{timestamp}.{nonce}.{action}.{object_id}。 - Отправляет POST с JSON
{action, object_id, timestamp, nonce, signature}на ваш адрес. - Печатает ответ и HTTP-код.
Зависимости
Только bash, curl и openssl. Работает в Linux и macOS без установки дополнительных пакетов.
Что должно получиться
Приёмник принял подпись — HTTP 200. Пример на Flask отвечает {"level":"success"}: так же ответ увидит приложение. Подпись отвергнута — HTTP 401 или 403。
Формат запроса и ответа — entrixy.com/webhook。
Защита от повтора
Скрипт всегда ставит текущее время и новый nonce. Приёмник отвергает запрос старше 5 минут, а пример на Flask ещё и запоминает nonce на эти 5 минут: тот же самый запрос второй раз не пройдёт.