Подключение кондиционера через MQTT

Здравствуйте. Подскажите, подключил кондиционер к MQTT по данной инструкции GitHub - Links2004/arduinoMideaAC: hack job for decoding and sending Midea AC Serial commands через ESP32. Все хорошо, читает статусы, управляется через MQTT но в формате JSON. Направьте, подскажите что нужно сделать чтобы топики “красиво” заходили в WB или Sprut Hub для дальнейшего управления из оболочки. Думаю таких кондиционеров уйма, много кому пригодится.
Сейчас управление и чтение приходит в подобном виде.
Subscribe to “esp32/acbureau/state” and you will see some data coming.
if you want to control it, send to “esp32/acbureau/command” and send :
{“on”:true,“turbo”:false,“eco”:false,“soll”:23,“lamelle”:false,“mode”:4,“fan”:0}

Добрый день.
Json например используется и в z2m. Нужен, собственно, шлюз, который разбирает сообщения от модуля и пишет в виртуальное устройство. В качестве примера можно посмотреть Использование ESPHome-устройств с контроллером Wiren Board — Wiren Board
Ну и существует второй путь, с моей точки зрения правильный: переписать прошивку для того чтобы она создавала топики MQTT сразу в соответствии с конвенцией.
Покажите, что за топики сейчас создает модуль?

Приходит в таком виде
devices/kentatsu/state
State = [{“ist”:26,“aussen”:102.5,“conf”:{“on”:false,“turbo”:false,“eco”:false,“soll”: 24,“lamelle”:false, “mode”:5, “fan”:1}}]

Управление идет путем публикации строки command
{“on”:false,“turbo”:false,“eco”:false,“soll”: 24,“lamelle”:false, “mode”:5, “fan”:1}

То есть способ “в лоб” - подписаться на топик trackMqtt, получив новое значение - пройтись по нему
Эмулирую событие так:

mosquitto_pub -t /devices/kentatsu/state -m '{"ist":26,"aussen":102.5,"conf":{"on":false,"turbo":false,"eco":false,"soll": 24,"lamelle":false, "mode":5, "fan":1}}'

Обрабатываю так:

//01_26_test_01.js

var sourceTopick = "/devices/kentatsu/state";

trackMqtt(sourceTopick, function(message){
  log.info("name: {}, value: {}".format(message.topic, message.value))//Просто для отладки
  //Разберем json
  if (message.value != '') {
    JSON.parse(message.value, function(n, p) {
      if (n == 'ist') {
        log.info("temperature=", p);
      }
     log.info("name=", n, "parameter=", p);  
    });
  }
});

Получаю:

2023-01-26 12:43:10name: /devices/kentatsu/state, value: {"ist":26,"aussen":102.5,"conf":{"on":false,"turbo":false,"eco":false,"soll": 24,"lamelle":false, "mode":5, "fan":1}}
2023-01-26 12:43:10temperature= 26
2023-01-26 12:43:10name= ist parameter= 26
2023-01-26 12:43:10name= aussen parameter= 102.5
2023-01-26 12:43:10name= on parameter= false
2023-01-26 12:43:10name= turbo parameter= false
2023-01-26 12:43:10name= eco parameter= false
2023-01-26 12:43:10name= soll parameter= 24
2023-01-26 12:43:10name= lamelle parameter= false
2023-01-26 12:43:10name= mode parameter= 5
2023-01-26 12:43:10name= fan parameter= 1
2023-01-26 12:43:10name= conf parameter= [object Object]
2023-01-26 12:43:10name= parameter= [object Object]

Ну и соответственно для “объектов” надо вызвать (если нужно!) разбор рекурсивно.
Со значениями уже можно делать что угодно - присваивать их контролам виртуального устройства, например.

Ну и “управление” - сложности не составляет - собираем json из контролов, публикуем.

1 лайк

Спасибо!

1 лайк