MqttController.php 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. <?php
  2. namespace plugin\saiadmin\app\controller\tool;
  3. use app\service\MqttPublisher;
  4. use plugin\saiadmin\basic\BaseController;
  5. use plugin\saiadmin\service\Permission;
  6. use support\Request;
  7. use support\Response;
  8. class MqttController extends BaseController
  9. {
  10. #[Permission('MQTT message publish', 'tool:mqtt:publish')]
  11. public function publish(Request $request): Response
  12. {
  13. try {
  14. $topic = trim((string) $request->post('topic', ''));
  15. $payload = $request->post('payload', '');
  16. $qos = (int) $request->post('qos', 1);
  17. $retain = filter_var($request->post('retain', false), FILTER_VALIDATE_BOOL);
  18. if (is_array($payload)) {
  19. $payload = json_encode($payload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_THROW_ON_ERROR);
  20. }
  21. $traceId = MqttPublisher::publish($topic, (string) $payload, $qos, $retain);
  22. return $this->success(['trace_id' => $traceId], 'MQTT message queued.');
  23. } catch (\Throwable $exception) {
  24. return $this->fail($exception->getMessage());
  25. }
  26. }
  27. }