From e31bd43eaaf40016b3d01aee121e29ee1a4e99c3 Mon Sep 17 00:00:00 2001 From: Hickmeister <35031453+Hickmeister@users.noreply.github.com> Date: Sat, 4 Jan 2025 21:06:25 +0000 Subject: [PATCH] lazy commit --- assets/images/printer-icon.png | Bin 0 -> 77725 bytes composer.json | 5 + composer.lock | 189 +++++++++++++++++++++++++ public/logout.php | 2 +- public/viewPrinters.php | 249 +++++++++++++++++++++++++++++++++ src/header.php | 2 +- src/login.php | 2 +- src/nav.php | 125 +---------------- src/printers/addPrinter.php | 22 ++- src/printers/getPrinters.php | 79 +++++++++++ src/printers/mqttConnect.php | 105 ++++++++++++++ src/session_check.php | 4 +- template.php | 2 +- 13 files changed, 651 insertions(+), 135 deletions(-) create mode 100644 assets/images/printer-icon.png create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 public/viewPrinters.php create mode 100644 src/printers/getPrinters.php create mode 100644 src/printers/mqttConnect.php diff --git a/assets/images/printer-icon.png b/assets/images/printer-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e5f9b7221c8a9824986587f0dbe7af0da2787334 GIT binary patch literal 77725 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 z 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 bV!RUBDwpqbOmDIQK8Lu7v~Z=Mj_>~fFuHzK literal 0 HcmV?d00001 diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..bed37d9 --- /dev/null +++ b/composer.json @@ -0,0 +1,5 @@ +{ + "require": { + "php-mqtt/client": "^2.2" + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..50aecb7 --- /dev/null +++ b/composer.lock @@ -0,0 +1,189 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "447c16b903c1f7b070e4b4bfb41716da", + "packages": [ + { + "name": "myclabs/php-enum", + "version": "1.8.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/php-enum.git", + "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/php-enum/zipball/a867478eae49c9f59ece437ae7f9506bfaa27483", + "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "1.*", + "vimeo/psalm": "^4.6.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "MyCLabs\\Enum\\": "src/" + }, + "classmap": [ + "stubs/Stringable.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP Enum contributors", + "homepage": "https://github.com/myclabs/php-enum/graphs/contributors" + } + ], + "description": "PHP Enum implementation", + "homepage": "http://github.com/myclabs/php-enum", + "keywords": [ + "enum" + ], + "support": { + "issues": "https://github.com/myclabs/php-enum/issues", + "source": "https://github.com/myclabs/php-enum/tree/1.8.4" + }, + "funding": [ + { + "url": "https://github.com/mnapoli", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum", + "type": "tidelift" + } + ], + "time": "2022-08-04T09:53:51+00:00" + }, + { + "name": "php-mqtt/client", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/php-mqtt/client.git", + "reference": "8042ad93e72da8666e27168dc90670e45bdea274" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-mqtt/client/zipball/8042ad93e72da8666e27168dc90670e45bdea274", + "reference": "8042ad93e72da8666e27168dc90670e45bdea274", + "shasum": "" + }, + "require": { + "myclabs/php-enum": "^1.7", + "php": "^8.0", + "psr/log": "^1.1|^2.0|^3.0" + }, + "require-dev": { + "phpunit/php-invoker": "^3.0", + "phpunit/phpunit": "^9.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "ext-redis": "Required for the RedisRepository" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpMqtt\\Client\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marvin Mall", + "email": "marvin-mall@msn.com", + "role": "developer" + } + ], + "description": "An MQTT client written in and for PHP.", + "keywords": [ + "client", + "mqtt", + "publish", + "subscribe" + ], + "support": { + "issues": "https://github.com/php-mqtt/client/issues", + "source": "https://github.com/php-mqtt/client/tree/v2.2.0" + }, + "time": "2024-11-24T20:54:32+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": false, + "prefer-lowest": false, + "platform": {}, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} diff --git a/public/logout.php b/public/logout.php index 8aed3f1..a027511 100644 --- a/public/logout.php +++ b/public/logout.php @@ -2,6 +2,6 @@ session_start(); session_unset(); session_destroy(); -header("Location: /login.php"); +header("Location: login.php"); exit(); ?> diff --git a/public/viewPrinters.php b/public/viewPrinters.php new file mode 100644 index 0000000..361da5e --- /dev/null +++ b/public/viewPrinters.php @@ -0,0 +1,249 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TOD Dashboard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/header.php b/src/header.php index 028c450..5c2b9fc 100644 --- a/src/header.php +++ b/src/header.php @@ -70,7 +70,7 @@
  • -
  • Logout +
  • Logout
  • diff --git a/src/login.php b/src/login.php index 8904eb1..3a36dfa 100644 --- a/src/login.php +++ b/src/login.php @@ -12,7 +12,7 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') { if ($user && password_verify($password, $user['password']) && !$user['disabled']) { // Store user ID, username, and role in session - $_SESSION['user_id'] = $user['id']; + $_SESSION['userId'] = $user['id']; $_SESSION['username'] = $user['username']; $_SESSION['role'] = $user['role']; // Store user role echo 'success'; diff --git a/src/nav.php b/src/nav.php index 7d05d3c..92f93a1 100644 --- a/src/nav.php +++ b/src/nav.php @@ -28,131 +28,10 @@
  • - -
    -
    - -
    - -
  • - -
  • - -
    -
    - -
    -
  • -
  • - -
    -
    - -
    - -
  • -
  • - -
    -
    - -
    - -
  • -
  • - -
    -
    - -
    - -
  • -
  • - -
    -
    - -
    - -
  • -
  • - +
    - +
  • diff --git a/src/printers/addPrinter.php b/src/printers/addPrinter.php index f5e0c1b..4508111 100644 --- a/src/printers/addPrinter.php +++ b/src/printers/addPrinter.php @@ -1,12 +1,21 @@ 'error', 'message' => 'User not authenticated.']); + exit; +} + +$userId = $_SESSION['userId']; // Retrieve user ID from session + // Handle POST Request if ($_SERVER['REQUEST_METHOD'] === 'POST') { - header('Content-Type: application/json'); // Return JSON response - // Collect and sanitize form data $printerName = filter_input(INPUT_POST, 'printerName', FILTER_SANITIZE_STRING); $printerIp = filter_input(INPUT_POST, 'printerIp', FILTER_VALIDATE_IP); @@ -19,10 +28,10 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { } try { - // Prepare SQL insert statement + // Prepare SQL insert statement with user ID $stmt = $pdo->prepare(" - INSERT INTO bambuPrinters (printerName, printerIp, mqttPassword, serialNumber) - VALUES (:printerName, :printerIp, :mqttPassword, :serialNumber) + INSERT INTO bambuPrinters (printerName, printerIp, mqttPassword, serialNumber, userId) + VALUES (:printerName, :printerIp, :mqttPassword, :serialNumber, :userId) "); // Execute the query with bound parameters @@ -30,7 +39,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { ':printerName' => $printerName, ':printerIp' => $printerIp, ':mqttPassword' => $accessCode, - ':serialNumber' => $serialNumber + ':serialNumber' => $serialNumber, + ':userId' => $userId ]); echo json_encode(['status' => 'success', 'message' => 'Printer successfully added!']); diff --git a/src/printers/getPrinters.php b/src/printers/getPrinters.php new file mode 100644 index 0000000..ddd3be1 --- /dev/null +++ b/src/printers/getPrinters.php @@ -0,0 +1,79 @@ + 'error', 'message' => 'User not authenticated.']); + exit; +} + +$userId = $_SESSION['userId']; + +try { + // Subquery to fetch latest telemetry for each printer + $stmt = $pdo->prepare(" + SELECT p.*, t.telemetry, t.recordedAt + FROM bambuPrinters p + LEFT JOIN printerTelemetry t + ON t.id = ( + SELECT id FROM printerTelemetry + WHERE printerId = p.id + ORDER BY recordedAt DESC + LIMIT 1 + ) + WHERE p.userId = :userId + "); + + $stmt->execute([':userId' => $userId]); + $printers = $stmt->fetchAll(PDO::FETCH_ASSOC); + + $result = []; + foreach ($printers as $printer) { + $telemetry = json_decode($printer['telemetry'], true); + + $bedTemp = isset($telemetry['print']['bed_temper']) ? $telemetry['print']['bed_temper'] : 'N/A'; + $nozzleTemp = isset($telemetry['print']['device']['nozzle']['0']['temp']) + ? $telemetry['print']['device']['nozzle']['0']['temp'] + : 'N/A'; + $jobName = isset($telemetry['subtask_name']) ? $telemetry['subtask_name'] : 'No job running'; + $status = isset($telemetry['print']['gcode_state']) ? $telemetry['print']['gcode_state'] : 'Unknown'; + + // AMS Data + $humidity = isset($telemetry['print']['ams']['ams'][0]['humidity']) + ? $telemetry['print']['ams']['ams'][0]['humidity'] + : 0; + $trays = isset($telemetry['print']['ams']['ams'][0]['tray']) + ? $telemetry['print']['ams']['ams'][0]['tray'] + : []; + + // Structure tray data for direct output + $trayData = []; + foreach ($trays as $tray) { + $trayData[] = [ + 'id' => $tray['id'], + 'color' => isset($tray['tray_color']) ? $tray['tray_color'] : 'ccc' + ]; + } + + $result[] = [ + 'printerId' => $printer['id'], + 'printerName' => $printer['printerName'], + 'serialNumber' => $printer['serialNumber'], + 'printerIp' => $printer['printerIp'], + 'bedTemp' => $bedTemp, + 'nozzleTemp' => $nozzleTemp, + 'jobName' => $jobName, + 'status' => $status, + 'humidity' => $humidity, + 'trays' => $trayData, + 'recordedAt' => $printer['recordedAt'] ?? 'Never' + ]; + } + + echo json_encode(['status' => 'success', 'data' => $result]); + +} catch (PDOException $e) { + echo json_encode(['status' => 'error', 'message' => 'Failed to fetch printers: ' . $e->getMessage()]); +} +?> diff --git a/src/printers/mqttConnect.php b/src/printers/mqttConnect.php new file mode 100644 index 0000000..8da2b2e --- /dev/null +++ b/src/printers/mqttConnect.php @@ -0,0 +1,105 @@ +prepare("SELECT * FROM bambuPrinters"); + $stmt->execute(); + $printers = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (PDOException $e) { + die(json_encode(['status' => 'error', 'message' => 'Failed to fetch printers.'])); +} + +// Process 2 messages per printer +$maxMessagesPerPrinter = 2; + +try { + foreach ($printers as $printer) { + echo "Connecting to " . $printer['printerName'] . " (" . $printer['serialNumber'] . ")...\n"; + echo "IP Address: " . $printer['printerIp'] . "\n"; + echo "MQTT Password: " . $printer['mqttPassword'] . "\n"; + + $mqttPassword = $printer['mqttPassword']; // Use mqttPassword from DB + $printerIp = $printer['printerIp']; // Printer IP from DB + $messageCount = 0; // Reset counter per printer + + $mqtt = new MqttClient($printerIp, $mqttPort, $clientId); + + // Handle SIGINT (CTRL + C) to gracefully exit + pcntl_signal(SIGINT, function () use ($mqtt) { + echo "Interrupt received. Disconnecting MQTT...\n"; + $mqtt->interrupt(); + }); + + $connectionSettings = (new ConnectionSettings()) + ->setUsername($mqttUsername) + ->setPassword($mqttPassword) + ->setKeepAliveInterval(60) + ->setUseTls(true) + ->setTlsVerifyPeer(false) + ->setTlsVerifyPeerName(false); + + // Establish Connection + $mqtt->connect($connectionSettings, true); + + // Subscribe to the printer's report topic + $topic = "device/{$printer['serialNumber']}/report"; + + $mqtt->subscribe($topic, function (string $topic, string $message) use ( + $printer, $pdo, &$messageCount, $maxMessagesPerPrinter, $mqtt + ) { + echo "[" . $printer['printerName'] . "] [$topic] $message\n"; + + // Store full JSON telemetry report + try { + $stmt = $pdo->prepare(" + INSERT INTO printerTelemetry + (printerId, telemetry) + VALUES + (:printerId, :telemetry) + "); + $stmt->execute([ + ':printerId' => $printer['id'], + ':telemetry' => $message + ]); + } catch (PDOException $e) { + error_log("Failed to insert telemetry: " . $e->getMessage()); + } + + $messageCount++; + + // Stop loop after 2 messages for this printer + if ($messageCount >= $maxMessagesPerPrinter) { + echo "Processed $maxMessagesPerPrinter messages for " . $printer['printerName'] . ". Disconnecting...\n"; + $mqtt->interrupt(); + } + }, 0); + + // Start Listening for Messages + $mqtt->loop(true); // Loop until interrupted after processing 2 messages + $mqtt->disconnect(); + } +} catch (Exception $e) { + die(json_encode(['status' => 'error', 'message' => 'MQTT connection failed. ' . $e->getMessage()])); +} +?> diff --git a/src/session_check.php b/src/session_check.php index 5ffae5d..f34a1fb 100644 --- a/src/session_check.php +++ b/src/session_check.php @@ -1,7 +1,7 @@ diff --git a/template.php b/template.php index 33993bc..5537d50 100644 --- a/template.php +++ b/template.php @@ -38,7 +38,7 @@ - +