printerIp, config('services.mqtt.port'), 'hicklab3d_'.bin2hex(random_bytes(6))); try { $settings = (new ConnectionSettings) ->setUsername(config('services.mqtt.username')) ->setPassword($printer->mqttPassword) ->setConnectTimeout(5) ->setUseTls(true) ->setTlsVerifyPeer(config('services.mqtt.verify_tls')) ->setTlsVerifyPeerName(config('services.mqtt.verify_tls')); $client->connect($settings, true); $received = false; $client->subscribe('device/'.$printer->serialNumber.'/report', function (string $topic, string $message) use ($printer, &$received): void { $telemetry = json_decode($message, true); if (is_array($telemetry)) { PrinterTelemetry::create(['printerId' => $printer->id, 'telemetry' => $telemetry]); $received = true; } }); $started = microtime(true); while (! $received && microtime(true) - $started < 15) { $client->loopOnce($started, true); } $client->disconnect(); $this->line($printer->printerName.($received ? ': received telemetry' : ': no telemetry received')); } catch (Throwable $exception) { report($exception); $this->warn($printer->printerName.': connection failed'); } } return self::SUCCESS; } }