Этот небольшой PHP-скрипт позволяет отправлять сообщения в MQTT-брокер через HTTP-запрос (например, из браузера или другого веб-приложения). Он принимает два параметра через GET-запрос:
topic — MQTT-топик, в который нужно отправить сообщение.payload — содержимое сообщения (по умолчанию {"command":"toggle"}).Если не указан хотя бы один из параметров, скрипт выдаст ошибку.
Скрипт использует системную команду mosquitto_pub — стандартный клиент MQTT из проекта Eclipse Mosquitto. Он запускается на сервере и публикует сообщение в локальный MQTT-брокер (localhost).
Пример вызова из браузера:
http://ваш-сервер/mqtt_send.php?topic=zigbee2mqtt/kitchen_light/set&payload={"state":"ON"}
Это отправит команду включения света на кухне в систему Zigbee2MQTT.
Скрипт содержит простую проверку: если в топике встречается символ % (что часто бывает при некорректной URL-кодировке, например, %2F вместо /), он отклоняет запрос. Это предотвращает отправку битых топиков, которые могут нарушить работу MQTT-системы.
payload корректен.exec(), поэтому не рекомендуется использовать в публичных проектах без дополнительной фильтрации (например, по белому списку топиков).Такой скрипт удобно использовать в веб-панели управления умным домом: кнопки на HTML-странице при клике делают AJAX-запрос или переход по ссылке, и сразу отправляют команду устройству через MQTT — без необходимости писать сложный бэкенд или использовать WebSocket.
<?php
$topic = $_GET['topic'] ?? '';
$payload = $_GET['payload'] ?? '{"command":"toggle"}';
if (!$topic || !$payload) {
die('Не хватает параметров');
}
// Проверка: если топик содержит %, то ошибка
if (strpos($topic, '%') !== false) {
die('Ошибка: неверная кодировка топика');
}
exec("mosquitto_pub -h localhost -t '$topic' -m '$payload'", $output, $return_code);
if ($return_code === 0) {
echo "Отправлено в $topic: $payload";
} else {
echo "Ошибка отправки";
}
?>
Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
Пока нет комментариев. Будьте первым!