www/api/mqtt_publish.php

47 lines
1.2 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
header('Content-Type: application/json');
require_once __DIR__ . '/protecao.php';
require __DIR__ . '/../vendor/autoload.php';
use PhpMqtt\Client\MqttClient;
use PhpMqtt\Client\ConnectionSettings;
$uid = trim($_POST['uid'] ?? '');
$payload = trim($_POST['payload'] ?? '');
if ($uid === '' || $payload === '') {
http_response_code(400);
echo json_encode(['ok' => false, 'error' => 'parametros invalidos']);
exit;
}
// Validar JSON
if (json_decode($payload) === null) {
http_response_code(400);
echo json_encode(['ok' => false, 'error' => 'payload invalido']);
exit;
}
try {
$settings = (new ConnectionSettings())
->setUsername('xupa')
->setPassword('xupa')
->setUseTls(true)
->setTlsSelfSignedAllowed(true)
->setConnectTimeout(5)
->setSocketTimeout(3);
$mqtt = new MqttClient('mqtt.xupas.mywire.org', 8883, 'web-pub-' . getmypid());
$mqtt->connect($settings, false);
$mqtt->publish("esp/$uid/cmd", $payload, 1, false);
$mqtt->disconnect();
echo json_encode(['ok' => true, 'uid' => $uid]);
} catch (Throwable $e) {
http_response_code(500);
echo json_encode(['ok' => false, 'error' => $e->getMessage()]);
}