Advertisement
Guest User

Untitled

a guest
Feb 25th, 2025
477
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.16 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="en">
  3.  
  4. <head>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Matrix MQTT</title>
  8. <script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
  9. <style>
  10. body {
  11. margin: 0;
  12. background: black;
  13. overflow: hidden;
  14. }
  15.  
  16. canvas {
  17. display: block;
  18. }
  19. </style>
  20. </head>
  21.  
  22. <body>
  23. <canvas id="matrixCanvas"></canvas>
  24. <script>
  25. const MQTT_BROKER = "ws://192.168.1.2:1884";
  26. const MQTT_TOPIC = "#";
  27. const fontSize = 16, maxMessages = 100;
  28.  
  29. let messages = [], columns, drops;
  30. const client = mqtt.connect(MQTT_BROKER);
  31. client.on("connect", () => client.subscribe(MQTT_TOPIC));
  32. client.on("message", (topic, contents) => {
  33. const message = ` ${topic}:${contents.toString()} `;
  34. if (!messages.includes(message)) messages.push(message);
  35. if (messages.length > maxMessages) messages.shift();
  36. });
  37.  
  38. const canvas = document.getElementById('matrixCanvas');
  39. const ctx = canvas.getContext('2d');
  40.  
  41.  
  42. function resizeCanvas() {
  43. canvas.width = window.innerWidth;
  44. canvas.height = window.innerHeight;
  45. columns = Math.floor(canvas.width / fontSize);
  46. drops = Array(columns).fill(1 + (canvas.height / fontSize));
  47. }
  48.  
  49. window.addEventListener('resize', resizeCanvas);
  50. resizeCanvas();
  51.  
  52. function draw() {
  53. ctx.fillStyle = 'rgba(0, 0, 0, 0.05)';
  54. ctx.fillRect(0, 0, canvas.width, canvas.height);
  55.  
  56. ctx.fillStyle = '#0F0';
  57. ctx.font = `${fontSize}px monospace`;
  58.  
  59. for (message of messages) for (let i = 0; i < drops.length; i++) {
  60. ctx.fillText(message[drops[i] % message.length], i * fontSize, drops[i] * fontSize);
  61. if (drops[i] * fontSize > canvas.height && Math.random() > 0.975) drops[i] = 0;
  62. drops[i]++;
  63. }
  64. }
  65.  
  66. setInterval(draw, 40);
  67. </script>
  68. </body>
  69.  
  70. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement