Home assistant + wb-mrps6

Добрый вечер.
Есть home assistant на контроллере jethome d1, к которому напрямую подключено реле wb-mrps6.
Нужно в интерфейсе HA управлять реле. Что я сделал? Установил Mosquitto broker и аддон HASSIO-WB-MQTT (GitHub - egor-romanko/hassio-addons: Custom addons for Hassio (https://www.home-assistant.io/addons/)).
В журнале аддона HASSIO-WB-MQTT данные от реле поступают:

new val for <modbus:64:input: 121>: 2ff0
register value change: <modbus:64:input: 121> ← 12.272
channel Supply voltage device id: wb-mrps6_64 – topic: /devices/wb-mrps6_64/controls/Supply voltage ← 12.272

В журнале MQTT брокера инфа о устройстве wb есть (вроде бы как):

1646784764: New client connected from 172.30.33.2 as wb-modbus (p2, c1, k60, u’mqtt’).

Как мне теперь эти данные по состоянию реле вывести в карточку в интерфейс HA?
Не пинайте с такой задачей сталкиваюсь первый раз.

Добрый день.
Посмотрите тему:

Вкратце - надо топики устройства описать в формате понятном HA. Там и примеры есть.

Еще вот так можно: Home assistant mqtt autodiscovery
Но для начала - лучше руками, чтобы осознавать что-откуда-как.

Спасибо за советы, с топиками чуть разобрался.
Но есть ещё вопрос. Как добавить ещё одно устройство WB-MAP6S в файл конфигурации wb-mqtt-serial.conf?
Сейчас с одним устройством WB конфиг такой:

{
“debug”: true,
“ports”: [
{
“path”: “/dev/ttyUSB0”,
“baud_rate”: 9600,
“parity”: “N”,
“data_bits”: 8,
“stop_bits”: 2,
“poll_interval”: 100,
“enabled”: true,
“devices”: [
{
“device_type”: “WB-MRPS6”,
“name”: “WB-MRPS6”,
“enabled”: true,
“slave_id”: “64”
}
]
}
]
}

Точно счетчик?
У вас добавлено реле Модуль Modbus-реле WB-MRPS6 — Wiren Board
Проще всего - церез веб-интерфейс, в настроках wb-mqtt-serial нажать кнопку Screenshot from 2022-03-09 19-25-10
и выбрать шаблон и адрес.

На странице реле есть описание:
https://wirenboard.com/wiki/WB-MRPS6_Modbus_Relay_Modules#Представление_в_веб-интерфейсе_контроллера_WB

Но можно добавить и редактированием файлап, конечно, добавав (скопировав) еще одну секцию с текущего реле.
Имею в виду секцию

{
“device_type”: “WB-MRPS6”,
“name”: “WB-MRPS6”,
“enabled”: true,
“slave_id”: “64”
}

У меня нет контроллера WB, есть контроллер jethome d1 с home assistent? к нему подключено реле wb-mrps6. С одним устройством процесс настройки движется. Теперь нужно добавить ещё счётчик WB-MAP6S. Как ещё одно устройство прописать в файл в файл конфигурации wb-mqtt-serial.conf?

               {
                    "device_type": "WB-MAP6S",
                    "name": "WB-MAP6S",
                    "enabled": true,
                    "slave_id": "19"
                }

Как этот блок правильно вставить?

Вообще лицензия прямо запрещает использование ПО на сторонних устройствах.

Просто через запятую:

{
"debug": false,
"ports": [
{
"path": "/dev/ttyUSB0",
"baud_rate": 9600,
"parity": "N",
"data_bits": 8,
"stop_bits": 2,
"poll_interval": 100,
"enabled": true,
"devices": [
  {
  "device_type": "WB-MRPS6",
  "name": "WB-MRPS6",
  "enabled": true,
  "slave_id": "64"
  },
  {
    "device_type": "WB-MAP6S",
    "name": "WB-MAP6S",
    "enabled": true,
    "slave_id": "19"
  }
]
}
]
}
1 Like

У меня Home Assistant. Или по лицензии, я что-то не понял?
И по счётчику WB-MAP6S есть вопрос, в логах есть параметр @ 4317. При считывании ошибка. я так понимаю это из-за версии по на счётчике. Как мне обновить по до актуальной версии?
По этой инструкции Обновление прошивки Modbus-устройств Wiren Board — Wiren Board “ручное обновление”?

ModbusRTU::ReadRegisterRange(): failed to read 3 input(s) @ 4317 of device modbus:19: Serial protocol error: illegal data value

Имеется в виду что ПО Wirenboard - открытое, но допускается к использовнию только на оборудовании производства WB.
Кстати, HA умеет сам опрашивать Modbus устройства: Modbus - Home Assistant

4317 (0x10dd) это старший регистр на старой прошивке и отсутствует на новой. Если у вас на счетчике новая прошивка - то использовать шаблон надо “fw2”

Добрый день, снова.
Шаблон “fw2” решает вопрос. Но теперь вопрос по прямому опросу modbus из home assistant.
В configuration.yaml modbus я добавил, в sensor.yaml и switch.yaml объекты добавил, но sensor и switch в объектах не появляются.

modbus:
  - name: modbus_hub1
    type: serial
    baudrate: 9600
    bytesize: 8
    method: rtu
    parity: N
    port: /dev/ttyUSB0
    stopbits: 2

Вот пример конфигурации сенсора и переключателя

  - platform: modbus
    scan_interval: 100
    registers:
      name: "Sensor1!"
      hub: modbus_hub1
      unit_of_measurement: V
      slave: 64
      register: 121
      register_type: input
 - platform: modbus
   scan_interval: 10
   registers:
     name: light1
     hub: modbus_hub1
     slave: 64
     register: 0
     command_on: 1
     command_off: 0    

Именно по конфигурации - не подскажу, я так подключать не пробовал. А опрос идет? Светодиод “Status” на устройствах мигает?

Циклического опроса нет, но если через службу “Modbus: Write coil” выполнить запись какого нибудь регистра, то опрос и запись работает.

А остановка-запуск modbus не запускает опрос?

Остановка/запуск не запускает опрос.
“Modbus: Write coil” отрабатывает, например делаю запрос на: Address 1, slave 64, state 1 или 0 реле срабатывает. Получается, я как-то неправильно создаю sensor/switch? Соединение с самим mrps6 есть, параметры регистров получается записывать.

По логам вот, что есть:

2022-03-15 16:02:23 INFO (MainThread) [homeassistant.setup] Setting up modbus
2022-03-15 16:02:23 INFO (MainThread) [homeassistant.setup] Setting up history
2022-03-15 16:02:23 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event panels_updated[L]>
2022-03-15 16:02:23 INFO (MainThread) [homeassistant.setup] Setup of domain history took 0.0 seconds
2022-03-15 16:02:23 INFO (SyncWorker_3) [homeassistant.components.modbus.modbus] modbus modbus_hub1 communication open
2022-03-15 16:02:24 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event service_registered[L]: domain=modbus, service=write_register>
2022-03-15 16:02:24 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event service_registered[L]: domain=modbus, service=write_coil>
2022-03-15 16:02:24 DEBUG (SyncWorker_2) [paho.mqtt.client] Sending CONNECT (u1, p1, wr0, wq0, wf1, c1, k60) client_id=b'2LAD6vBX8RdZlP0m0H8E8n'
2022-03-15 16:02:24 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event service_registered[L]: domain=modbus, service=stop>
2022-03-15 16:02:24 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event service_registered[L]: domain=modbus, service=restart>
2022-03-15 16:02:24 INFO (MainThread) [homeassistant.setup] Setup of domain modbus took 0.5 seconds
2022-03-15 16:02:24 INFO (MainThread) [homeassistant.components.switch] Setting up switch.modbus
2022-03-15 16:02:25 INFO (MainThread) [homeassistant.components.sensor] Setting up sensor.modbus

И снова вопрос по топикам. Например по напряжению или частоте эти самые топики есть и понятно, что “описывать”. Как описать те топики (считать значения) параметры которых не меняются? У реле это Serial NO и uptime.

Serial - оно вообще, как правило, нужно только для диагностики.
uptime - в общем тоже, (и оно меняется) просто состоит из двух регистров, из младшей и старшей части.

Читаются они так:

ключевое тут count: , количество читаемых регистров.

А сенсоры в списках появились?
Потому как именно такое поведение не гуглится, как примеры

Сенсоры с платформы modbus нет, не появляются. С сенсорами с других платформ всё ок, например mqtt и systemmonitor, все появляются. Такое ощущение, что баг или “фича” конкретно с modbus, ну или я олень.

И поэтому можно ещё раз, для особо так одарённых. Если будет такой сенсор:

sensor:
- platform: modbus
  scan_interval: 2
  registers:
  # Holding Registers
    - name: SolaX Serial Number
      hub: SolaX
      register: 0
      count: 7
      data_type: string

То считано будет всего 7 регистров, с 0 по 6?

Надо воспроизвести, попробую, но задача не в приоритете.

Да, верно.

Всё нормально это я олень, сенсоры и тд. для modbus нужно прописывать в configuration.yaml. Те файлы/папки которые используются для sensor и switch, модбасом как бы не читаются. У меня для датчиков такой путь:

sensor: !include_dir_merge_list myconfig/sensor

Но теперь следующие вопросы: У счётчика WB-MAP6S в регистрах есть формат/тип данных “s32”, но в описании modbus такого input_type нет

data_type string (optional, default: int16)
Response representation (int8, int16, int32, int64, uint8, uint16, uint32, uint64, float16, float32, float64, string). int/uintare silently converted to int16/uint16.

Какой тип данных нужно указывать?

И ещё, может подскажите как можно реализовать такую задачу. Сейчас есть автоматизация, которая запускает скрипт с такой логикой: активировать канал1 - ждать 2 часа - выключить канал 1 - активировать канал2 - ждать 2 часа - выключить канал2 и так по кругу. Ещё нужно понимать есть ли потребление на канале1, когда этот канал1 активен и если потребления нет, то активировать канал2 и со вторым каналом точно так же, если канал2 активен а потребления нет, активировать канал1. В потребителях насосы, один 2 часа работает, второй выключен, потом второй 2 часа работает, а первый выключен, ну и так по кругу + нужно понимать, что когда насос должен работать, а потребления нет должен запускаться другой насос.
Home assistant + wb-mrps6 + WB-MAP6S

Если не предполагаются отрицательные значения по этим регистрам (если все энергии положительные) - то можно использовать uint32.

Нет, я автоматизации не делаю на HA, нет опыта работы с временными промежутками в нем.