Modbus Uponor X-148

Здравствуйте! Имеется контроллер отопления uponor x-148, у которого есть modbus шина. Хотел подключить его в wirenboard, чтобы выводить показания. Нашел подобную тему: Написание функции, высчитывающей корректную температуру, шаблон Uponor Smatrix Base PRO Controller X-147.
Однако, у меня возникла проблема еще на этапе подключения контроллера uponor по modbus. Никак не получается получить с него хоть какие-то данные. Официальный гайд: https://www.uponor.com/getmedia/bb95eecf-5c04-4114-a46b-210ac9f76309/Uponor-IM-Smatrix-Base-PRO-Modbus-RTU-X-148-EN-1090255.pdf?sitename=UponorInternational
Есть ли у кого опыт подключения его к wirenboard?

Добрый день.
На самом деле мало информации для того, чтобы оперативно вам помочь. Опишите подробнее, что делаете, что получаете.
И лучше начать с чтения какого-либо регистра с контроллера отопления с помощью modbus_client и прислать запрос и вывод.
Также пришлите фото подключения нашего контроллера к контроллеру отопления.

1 лайк

Всем добрый день! Удалось решить проблему связи, поэтому выложу все данные здесь, может кому пригодится. Для связи по Modbus, на micro sd карте uponor должен находится файл: U_BMS.TXT. Если его нет, надо создать вручную.

Содержимое файла:

1
19200
even
off
0
0
0
c

// Setting ranges:
// Row 1: BMS Slave address = [1..247]
//
// Row 2: BMS Baud rate = [19200 or 9600]
//
// Row 3: BMS Parity = [even, odd or no]
//
// Row 4: HP integration via BMS = [on or off]
//        Example: on = enables dynamic heat curve offset in integrated heat pump, and integrated heat pump defrost state
//
// Row 5: Exclude zone from heat curve offset calculation = [1,2,3,4,5,6,7,8,9,10,11,12, or 0=no channels]
//        Select master channels of the zones (lowest numbered channel in the zone) to exclude.
//        The zone subchannels follow the state of the master channel.
//        Example: 3,5,12 = exludes channels with master channels 3, 5 and 12
//
// Row 6: Bypass zone = [1,2,3,4,5,6,7,8,9,10,11,12 or 0=no channels]
//        Select master channels of the zones (lowest numbered channel in the zone) to bypass, MAXIMUM 2 channels.
//        The zone subchannels follow the state of the master channel.
//        Example: 4,12 = bypasses zones with master channels 4 and 12
//
// Row 7: Ceiling Cooling channel = [1,2,3,4,5,6,7,8,9,10,11,12 or 0=no channels]
//        The zone subchannels will NOT follow the state of the master channel.
//        Example: 1,4,10 = set ceiling cooling to channels 1, 4 and 10
//
// Row 8: BMS Temperature format = [c or f]
//        c = Celsius, or f = Fahrenheit.

U_BMS.TXT (1,4 КБ)

У меня по каким-то непонятным причинам, компьютер подключенный через usb-rs485 переходник находил uponor крайне нестабильно, то читается 5 регистров, то 15, то ничего (хотя конвертер, провода и программа проверенные). Поэтому лучше проверять через wirenboard modbus_client, там как-то стабильнее все находится.
Выкладываю также шаблон для работы:
uponor.json (9,6 КБ)

{
    "device_type": "uponor_x148",
    "title": "Uponor X-148",
    "device": {
        "name": "uponor_x148",
        "id": "uponor_x148",
        "groups": [
            {
                "title": "Channels",
                "id": "channels",
                "order": 0
            },
            {
                "title": "Settings",
                "id": "settings",
                "order": 1
            }
        ],
        "channels": [
        {
          "name": "Actuator 1",
          "type": "switch",
          "reg_type": "discrete",
          "address": 0,
          "format": "s16",
          "scale": 1,
          "offset": 0
        },
        {
          "name": "Actuator 2",
          "type": "switch",
          "reg_type": "discrete",
          "address": 1,
          "format": "s16",
          "scale": 1,
          "offset": 0
        },
        {
          "name": "Actuator 3",
          "type": "switch",
          "reg_type": "discrete",
          "address": 2,
          "format": "s16",
          "scale": 1,
          "offset": 0
        },
        {
          "name": "Actuator 4",
          "type": "switch",
          "reg_type": "discrete",
          "address": 3,
          "format": "s16",
          "scale": 1,
          "offset": 0
        },
        {
          "name": "Actuator 5",
          "type": "switch",
          "reg_type": "discrete",
          "address": 4,
          "format": "s16",
          "scale": 1,
          "offset": 0
        },
        {
          "name": "Actuator 6",
          "type": "switch",
          "reg_type": "discrete",
          "address": 5,
          "format": "u16",
          "scale": 1,
          "offset": 0
        },
        {
          "name": "Actuator 7",
          "type": "switch",
          "reg_type": "discrete",
          "address": 6,
          "format": "s16",
          "scale": 1,
          "offset": 0
        },
        {
          "name": "Actuator 8",
          "type": "switch",
          "reg_type": "discrete",
          "address": 7,
          "format": "s16",
          "scale": 1,
          "offset": 0
        },
        {
          "name": "Actuator 9",
          "type": "switch",
          "reg_type": "discrete",
          "address": 8,
          "format": "s16",
          "scale": 1,
          "offset": 0
        },
        {
          "name": "Actuator 10",
          "type": "switch",
          "reg_type": "discrete",
          "address": 9,
          "format": "s16",
          "scale": 1,
          "offset": 0
        },
        {
          "name": "Actuator 11",
          "type": "switch",
          "reg_type": "discrete",
          "address": 10,
          "format": "s16",
          "scale": 1,
          "offset": 0
        },
        {
          "name": "Actuator 12",
          "type": "switch",
          "reg_type": "discrete",
          "address": 11,
          "format": "s16",
          "scale": 1,
          "offset": 0
        },
        {
          "name": "Room Temperature 1",
          "type": "value",
          "reg_type": "input",
          "address": 1,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Temperature 2",
          "type": "value",
          "reg_type": "input",
          "address": 2,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Temperature 3",
          "type": "value",
          "reg_type": "input",
          "address": 3,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Temperature 4",
          "type": "value",
          "reg_type": "input",
          "address": 4,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Temperature 5",
          "type": "value",
          "reg_type": "input",
          "address": 5,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Temperature 6",
          "type": "value",
          "reg_type": "input",
          "address": 6,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Temperature 7",
          "type": "value",
          "reg_type": "input",
          "address": 7,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Temperature 8",
          "type": "value",
          "reg_type": "input",
          "address": 8,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Temperature 9",
          "type": "value",
          "reg_type": "input",
          "address": 9,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Temperature 10",
          "type": "value",
          "reg_type": "input",
          "address": 10,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Temperature 11",
          "type": "value",
          "reg_type": "input",
          "address": 11,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Temperature 12",
          "type": "value",
          "reg_type": "input",
          "address": 12,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Set Temperature 1",
          "type": "value",
          "reg_type": "holding_multi",
          "address": 0,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Set Temperature 2",
          "type": "value",
          "reg_type": "holding_multi",
          "address": 1,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Set Temperature 3",
          "type": "value",
          "reg_type": "holding_multi",
          "address": 2,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Set Temperature 4",
          "type": "value",
          "reg_type": "holding_multi",
          "address": 3,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Set Temperature 5",
          "type": "value",
          "reg_type": "holding_multi",
          "address": 4,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Set Temperature 6",
          "type": "value",
          "reg_type": "holding_multi",
          "address": 5,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Set Temperature 7",
          "type": "value",
          "reg_type": "holding_multi",
          "address": 6,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Set Temperature 8",
          "type": "value",
          "reg_type": "holding_multi",
          "address": 7,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Set Temperature 9",
          "type": "value",
          "reg_type": "holding_multi",
          "address": 8,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Set Temperature 10",
          "type": "value",
          "reg_type": "holding_multi",
          "address": 9,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Set Temperature 11",
          "type": "value",
          "reg_type": "holding_multi",
          "address": 10,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        },
        {
          "name": "Room Set Temperature 12",
          "type": "value",
          "reg_type": "holding_multi",
          "address": 11,
          "format": "s16",
          "scale": 0.1,
          "offset": 0.01,
          "round_to": 0.1
        }
        ],
        "translations": {
            "ru": {
                "Channels": "Каналы",
                "Settings": "Настройки",
                "Input 1": "Вход 1",
                "Input 1 Counter": "Вход 1 счетчик",
                "Relay 1": "Реле 1",
                "Input Mode": "Режим входа"
            }
        }
    }
}
1 лайк

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.