用户脚本中从 MQTT“拉取”消息的正确命令是什么?

问题描述 投票:0回答:1

我有一个朋友设置了一个 MQTT,通过带有某些单词的 Gmail 电子邮件触发,我想用它来设置一个脚本(通过 Chrome 中的用户脚本),并通过 MQTT 触发该脚本。

他设置了 MQTT 部分,但当他尝试将其集成到我们希望它激活的脚本中时,“require”不是正确的命令(错误指出“eslint:no-undef - 'require'未定义。”) 。这是相关的代码:


(function() {
    console.log(`Script started`);

    var mqtt = require('mqtt')
    const client = mqtt.connect('mqtt://broker.hivemq.com');
    console.log(`Script connected`);
    textToSpeech("Starting");

    client.on('connect', function () {
        client.subscribe('thescriptthing/newemail', function (err) {
            if (!err) {
                console.log('Subscribed to topic');
            }
        });
    });

有人有什么建议吗?

mqtt tampermonkey userscripts
1个回答
0
投票

来自 mqtt.js 文档

浏览器支持的唯一协议是基于 WebSockets 的 MQTT,因此 您必须使用

ws://
wss://
协议。

除此之外,您还需要指定正确的端口;来自 mqtt-dashboard.com:

  • 主机:broker.hivemq.com
  • TCP 端口:1883
  • Websocket 端口:8000
  • TLS TCP 端口:8883
  • TLS Websocket 端口:8884

*您还需要使用路径

/mqtt
=>
wss://broker.hivemq.com:8884/mqtt

这是一个示例脚本:

// ==UserScript==
// @name         mqtt
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  mqtt.js test
// @author       You
// @match        https://stackoverflow.com/*
// @require      https://unpkg.com/[email protected]/dist/mqtt.min.js
// @grant        none
// ==/UserScript==

/* globals mqtt */

const client = mqtt.connect("wss://broker.hivemq.com:8884/mqtt");

client.on("connect", () => {
    client.subscribe("thescriptthing/newemail", (err) => {
        if (!err) {
            console.log('Subscribed to topic');
        }
    });
});

client.on("message", (topic, message) => {
    console.log(message.toString());
});
© www.soinside.com 2019 - 2024. All rights reserved.