Встроенный mqtt в Home Assistant работает нормально до теста JS

avatar
Khronos
8 апреля 2018 в 10:16
282
0
2

У меня установлен Home Assistant, и у меня есть ESP-модуль, который может подключаться к wi-fi и серверу MQTT (который встроен в HA через порт 1883). Вот код из configuration.yaml:

mqtt:
    username: "homeassistant"
    password: ""
light:
  - platform: mqtt_json
    name: mqtt_json_light_2
    state_topic: "home/rgb1"
    command_topic: "home/rgb1/set"
    brightness: true
    rgb: true
    effect: true
    effect_list: [colorfade_slow, colorfade_fast, flash]
    optimistic: false
    qos: 0

Все работает нормально, подключение к MQTT (192.168.43.184:1883) с именем пользователя и паролем в порядке.

После этого я создаю страницу для тестирования на этом сервере, используя paho-mqtt.js. Я могу запустить эту страницу с помощью http://192.168.43.184:8123/local/index.html. Итак ... тот же сервер, но не https, так что, мб, это основная причина отсутствия соединения на этой странице.

простой код для теста:

    <!DOCTYPE html>
    <html>
      <head>
      <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
      <script src="js/paho-mqtt.js" type="text/javascript"></script>
      <script type="text/javascript">
        //sample HTML/JS script that will publish/subscribe to topics in the Google Chrome Console
        //by Matthew Bordignon @bordignon on twitter.
        var wsbroker = "127.0.0.1";  //mqtt websocket enabled brokers
        var wsport = 1883; // or for above
        var client = new Paho.MQTT.Client(wsbroker, wsport,
            "myclientid_" + parseInt(Math.random() * 100, 10));
        client.onConnectionLost = function (responseObject) {
          console.log("connection lost: " + responseObject.errorMessage);
        };
        client.onMessageArrived = function (message) {
          console.log(message.destinationName, ' -- ', message.payloadString);
        };
        var options = {
          timeout: 3,
          userName: "homeassistant",
          password: "",
          onSuccess: function () {
            console.log("mqtt connected");
          },
          onFailure: function (message) {
            console.log("Connection failed: " + message.errorMessage);
          }
        };
      function init() {
          client.connect(options);
      }
        </script>
      </head>
      <body onload="init();">
      </body>
    </html>

Страница запущена на сервере HA, поэтому адрес может быть локальным, 127.0.0.1 или 192.168.43.184 - это не работает, и у меня есть только это:

Ошибка подключения: AMQJSC0001E Время ожидания подключения истекло.

Но я могу подключиться для прослушивания через ESP/rasberi и т. д. Я даже могу отправлять сообщения с помощью http://192.168.43.184:8123/dev-mqtt. Мой js неправильный или что-то в этом роде?

Источник
Khronos
8 апреля 2018 в 12:16
0

Теперь соединение в порядке (порт 8080 решает проблему). Но когда я пытаюсь отправить сообщение, я получаю сообщение об ошибке и теряю соединение: «AMQJS0005E Внутренняя ошибка. Сообщение об ошибке: не определено». Это означает, что мой JSON плохой, но я скопировал это из dev -mqtt страница Home Assistant, так что все в порядке. Я не знаю, почему я не могу отправить сообщение в MQTT через js.

Ответы (0)