[
    {
        "id": "e970d5dc70d18347",
        "type": "tab",
        "label": "СОП",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "e62ac17e6b1c9dfc",
        "type": "modbus-write",
        "z": "e970d5dc70d18347",
        "name": "СОП. Температура в баке",
        "showStatusActivities": false,
        "showErrors": false,
        "showWarnings": true,
        "unitid": "1",
        "dataType": "HoldingRegister",
        "adr": "1110",
        "quantity": "1",
        "server": "dca8f54c186084c0",
        "emptyMsgOnFail": false,
        "keepMsgProperties": false,
        "delayOnStart": false,
        "startDelayTime": "",
        "x": 660,
        "y": 340,
        "wires": [
            [],
            []
        ]
    },
    {
        "id": "508420e43be333ce",
        "type": "function",
        "z": "e970d5dc70d18347",
        "name": "increment register",
        "func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_T_TANK') || 50;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 50 ? 40 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_T_TANK', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n    value: v,\n    register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6;       // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1;   // Идентификатор устройства\nmsg.address = 1100;  // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 410,
        "y": 340,
        "wires": [
            [
                "e62ac17e6b1c9dfc"
            ]
        ]
    },
    {
        "id": "2d17db7509e196c3",
        "type": "inject",
        "z": "e970d5dc70d18347",
        "name": "tick",
        "props": [],
        "repeat": "1",
        "crontab": "",
        "once": true,
        "onceDelay": 1,
        "topic": "",
        "x": 210,
        "y": 340,
        "wires": [
            [
                "508420e43be333ce",
                "f6c0bd60f7ccd6ef",
                "db13f2e72e433d76",
                "4ab024b1aff02ed1",
                "56c8dc122932bed2",
                "3a020fc62ad49e57",
                "074962eb71d9e17b",
                "d6138c7ab7ea1ab2"
            ]
        ]
    },
    {
        "id": "7e1660490b2d2753",
        "type": "modbus-server",
        "z": "e970d5dc70d18347",
        "name": "",
        "logEnabled": true,
        "hostname": "0.0.0.0",
        "serverPort": 10502,
        "responseDelay": 100,
        "delayUnit": "ms",
        "coilsBufferSize": 10000,
        "holdingBufferSize": 10000,
        "inputBufferSize": 10000,
        "discreteBufferSize": 10000,
        "showErrors": true,
        "showStatusActivities": true,
        "x": 200,
        "y": 120,
        "wires": [
            [],
            [],
            [],
            [],
            []
        ]
    },
    {
        "id": "9be14f7aeb1445fc",
        "type": "modbus-write",
        "z": "e970d5dc70d18347",
        "name": "СОП. Температура после т/об",
        "showStatusActivities": false,
        "showErrors": false,
        "showWarnings": true,
        "unitid": "1",
        "dataType": "HoldingRegister",
        "adr": "1111",
        "quantity": "1",
        "server": "dca8f54c186084c0",
        "emptyMsgOnFail": false,
        "keepMsgProperties": false,
        "delayOnStart": false,
        "startDelayTime": "",
        "x": 670,
        "y": 400,
        "wires": [
            [],
            []
        ]
    },
    {
        "id": "f6c0bd60f7ccd6ef",
        "type": "function",
        "z": "e970d5dc70d18347",
        "name": "increment register",
        "func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_T_OUT') || 50;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 50 ? 40 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_T_OUT', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n    value: v,\n    register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6;       // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1;   // Идентификатор устройства\nmsg.address = 1111;  // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 410,
        "y": 400,
        "wires": [
            [
                "9be14f7aeb1445fc"
            ]
        ]
    },
    {
        "id": "7c0b98f0d6da4d67",
        "type": "modbus-write",
        "z": "e970d5dc70d18347",
        "name": "СОП. Температура внешнего контура",
        "showStatusActivities": false,
        "showErrors": false,
        "showWarnings": true,
        "unitid": "1",
        "dataType": "HoldingRegister",
        "adr": "1112",
        "quantity": "1",
        "server": "dca8f54c186084c0",
        "emptyMsgOnFail": false,
        "keepMsgProperties": false,
        "delayOnStart": false,
        "startDelayTime": "",
        "x": 700,
        "y": 460,
        "wires": [
            [],
            []
        ]
    },
    {
        "id": "db13f2e72e433d76",
        "type": "function",
        "z": "e970d5dc70d18347",
        "name": "increment register",
        "func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_T_REC') || 50;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 50 ? 40 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_T_REC', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n    value: v,\n    register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6;       // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1;   // Идентификатор устройства\nmsg.address = 1112;  // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 410,
        "y": 460,
        "wires": [
            [
                "7c0b98f0d6da4d67"
            ]
        ]
    },
    {
        "id": "4fed1bc2370508fb",
        "type": "modbus-write",
        "z": "e970d5dc70d18347",
        "name": "СОП. Давление после насоса",
        "showStatusActivities": false,
        "showErrors": false,
        "showWarnings": true,
        "unitid": "1",
        "dataType": "HoldingRegister",
        "adr": "1113",
        "quantity": "1",
        "server": "dca8f54c186084c0",
        "emptyMsgOnFail": false,
        "keepMsgProperties": false,
        "delayOnStart": false,
        "startDelayTime": "",
        "x": 670,
        "y": 520,
        "wires": [
            [],
            []
        ]
    },
    {
        "id": "4ab024b1aff02ed1",
        "type": "function",
        "z": "e970d5dc70d18347",
        "name": "increment register",
        "func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_P_PUMP') || 50;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 50 ? 40 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_P_PUMP', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n    value: v,\n    register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6;       // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1;   // Идентификатор устройства\nmsg.address = 1113;  // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 430,
        "y": 520,
        "wires": [
            [
                "4fed1bc2370508fb"
            ]
        ]
    },
    {
        "id": "126135a5c0a3e97b",
        "type": "modbus-write",
        "z": "e970d5dc70d18347",
        "name": "СОП. Давление в контуре",
        "showStatusActivities": false,
        "showErrors": false,
        "showWarnings": true,
        "unitid": "1",
        "dataType": "HoldingRegister",
        "adr": "1114",
        "quantity": "1",
        "server": "dca8f54c186084c0",
        "emptyMsgOnFail": false,
        "keepMsgProperties": false,
        "delayOnStart": false,
        "startDelayTime": "",
        "x": 660,
        "y": 580,
        "wires": [
            [],
            []
        ]
    },
    {
        "id": "56c8dc122932bed2",
        "type": "function",
        "z": "e970d5dc70d18347",
        "name": "increment register",
        "func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_P_OUT') || 50;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 50 ? 40 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_P_OUT', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n    value: v,\n    register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6;       // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1;   // Идентификатор устройства\nmsg.address = 1114;  // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 430,
        "y": 580,
        "wires": [
            [
                "126135a5c0a3e97b"
            ]
        ]
    },
    {
        "id": "7254c3bb1d448b39",
        "type": "modbus-write",
        "z": "e970d5dc70d18347",
        "name": "СОП. Уровень в баке",
        "showStatusActivities": false,
        "showErrors": false,
        "showWarnings": true,
        "unitid": "1",
        "dataType": "HoldingRegister",
        "adr": "1115",
        "quantity": "1",
        "server": "dca8f54c186084c0",
        "emptyMsgOnFail": false,
        "keepMsgProperties": false,
        "delayOnStart": false,
        "startDelayTime": "",
        "x": 640,
        "y": 640,
        "wires": [
            [],
            []
        ]
    },
    {
        "id": "3a020fc62ad49e57",
        "type": "function",
        "z": "e970d5dc70d18347",
        "name": "increment register",
        "func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_L') || 50;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 50 ? 40 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_L', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n    value: v,\n    register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6;       // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1;   // Идентификатор устройства\nmsg.address = 1115;  // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 430,
        "y": 640,
        "wires": [
            [
                "7254c3bb1d448b39"
            ]
        ]
    },
    {
        "id": "a35cf32802b244bd",
        "type": "modbus-write",
        "z": "e970d5dc70d18347",
        "name": "СОП. WS_RESERVE1",
        "showStatusActivities": false,
        "showErrors": false,
        "showWarnings": true,
        "unitid": "1",
        "dataType": "Coil",
        "adr": "1116",
        "quantity": "1",
        "server": "dca8f54c186084c0",
        "emptyMsgOnFail": false,
        "keepMsgProperties": false,
        "delayOnStart": false,
        "startDelayTime": "",
        "x": 660,
        "y": 800,
        "wires": [
            [],
            []
        ]
    },
    {
        "id": "3271b1ce681c99a9",
        "type": "modbus-write",
        "z": "e970d5dc70d18347",
        "name": "СОП. WS_RESERVE2",
        "showStatusActivities": false,
        "showErrors": false,
        "showWarnings": true,
        "unitid": "1",
        "dataType": "Coil",
        "adr": "1117",
        "quantity": "1",
        "server": "dca8f54c186084c0",
        "emptyMsgOnFail": false,
        "keepMsgProperties": false,
        "delayOnStart": false,
        "startDelayTime": "",
        "x": 660,
        "y": 880,
        "wires": [
            [],
            []
        ]
    },
    {
        "id": "074962eb71d9e17b",
        "type": "function",
        "z": "e970d5dc70d18347",
        "name": "increment register",
        "func": "// Получаем текущее состояние, по умолчанию 0\nlet state = flow.get('WS_DSC1') || 0;\n\n// Гарантируем, что state — это строго 0 или 1 (на случай мусора в контексте)\nstate = (state === 1) ? 1 : 0;\n\n// Переключаем 0 <-> 1\nstate = (state === 0) ? 1 : 0;\n\n// Сохраняем новое состояние\nflow.set('WS_DSC1', state);\n\n// Жёстко привязываем payload к state (только 0 или 1)\n// Жёсткое условие через if/else\nif (state === 0) {\n    msg.payload = 0;\n} else {\n    msg.payload = 1;\n}\n\nreturn msg;\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 350,
        "y": 960,
        "wires": [
            [
                "402b15cf9cc8430d",
                "2382660d4ddd0147",
                "a35cf32802b244bd",
                "3271b1ce681c99a9"
            ]
        ]
    },
    {
        "id": "d6138c7ab7ea1ab2",
        "type": "function",
        "z": "e970d5dc70d18347",
        "name": "increment register",
        "func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('LIION_U') || 60;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 60 ? 40 : v + 2);\n\n// Сохраняем обновленное значение в поток\nflow.set('LIION_U', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n    value: v,\n    register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6;       // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1;   // Идентификатор устройства\nmsg.address = 1100;  // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v*10];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 410,
        "y": 260,
        "wires": [
            [
                "4f8c16d6f02ebe0c"
            ]
        ]
    },
    {
        "id": "4f8c16d6f02ebe0c",
        "type": "modbus-write",
        "z": "e970d5dc70d18347",
        "name": "LIION_U",
        "showStatusActivities": false,
        "showErrors": false,
        "showWarnings": true,
        "unitid": "1",
        "dataType": "HoldingRegister",
        "adr": "91",
        "quantity": "1",
        "server": "dca8f54c186084c0",
        "emptyMsgOnFail": false,
        "keepMsgProperties": false,
        "delayOnStart": false,
        "startDelayTime": "",
        "x": 560,
        "y": 160,
        "wires": [
            [],
            []
        ]
    },
    {
        "id": "ca4aa3c10d91cadf",
        "type": "inject",
        "z": "e970d5dc70d18347",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "0",
        "payloadType": "num",
        "x": 990,
        "y": 760,
        "wires": [
            [
                "d6b2b79bd3900995"
            ]
        ]
    },
    {
        "id": "d6b2b79bd3900995",
        "type": "modbus-write",
        "z": "e970d5dc70d18347",
        "name": "1",
        "showStatusActivities": false,
        "showErrors": false,
        "showWarnings": true,
        "unitid": "1",
        "dataType": "Coil",
        "adr": "1118",
        "quantity": "1",
        "server": "dca8f54c186084c0",
        "emptyMsgOnFail": false,
        "keepMsgProperties": false,
        "delayOnStart": false,
        "startDelayTime": "",
        "x": 1230,
        "y": 760,
        "wires": [
            [],
            []
        ]
    },
    {
        "id": "e4c8d4dd168e0307",
        "type": "inject",
        "z": "e970d5dc70d18347",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "1",
        "payloadType": "num",
        "x": 990,
        "y": 840,
        "wires": [
            [
                "045d9a6b99355d8f"
            ]
        ]
    },
    {
        "id": "045d9a6b99355d8f",
        "type": "modbus-write",
        "z": "e970d5dc70d18347",
        "name": "1",
        "showStatusActivities": false,
        "showErrors": false,
        "showWarnings": true,
        "unitid": "1",
        "dataType": "Coil",
        "adr": "1118",
        "quantity": "1",
        "server": "dca8f54c186084c0",
        "emptyMsgOnFail": false,
        "keepMsgProperties": false,
        "delayOnStart": false,
        "startDelayTime": "",
        "x": 1230,
        "y": 840,
        "wires": [
            [],
            []
        ]
    },
    {
        "id": "2382660d4ddd0147",
        "type": "debug",
        "z": "e970d5dc70d18347",
        "name": "debug 3",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 560,
        "y": 1200,
        "wires": []
    },
    {
        "id": "402b15cf9cc8430d",
        "type": "modbus-write",
        "z": "e970d5dc70d18347",
        "name": "СОП. Дискретные сигналы водяной станции",
        "showStatusActivities": false,
        "showErrors": false,
        "showWarnings": true,
        "unitid": "1",
        "dataType": "Coil",
        "adr": "1118",
        "quantity": "1",
        "server": "dca8f54c186084c0",
        "emptyMsgOnFail": false,
        "keepMsgProperties": false,
        "delayOnStart": false,
        "startDelayTime": "",
        "x": 740,
        "y": 960,
        "wires": [
            [],
            []
        ]
    },
    {
        "id": "dca8f54c186084c0",
        "type": "modbus-client",
        "name": "",
        "clienttype": "tcp",
        "bufferCommands": true,
        "stateLogEnabled": false,
        "queueLogEnabled": false,
        "failureLogEnabled": true,
        "tcpHost": "0.0.0.0",
        "tcpPort": "10502",
        "tcpType": "DEFAULT",
        "serialPort": "/dev/ttyUSB",
        "serialType": "RTU-BUFFERD",
        "serialBaudrate": "9600",
        "serialDatabits": "8",
        "serialStopbits": "1",
        "serialParity": "none",
        "serialConnectionDelay": "100",
        "serialAsciiResponseStartDelimiter": "0x3A",
        "unit_id": 1,
        "commandDelay": 1,
        "clientTimeout": 1000,
        "reconnectOnTimeout": true,
        "reconnectTimeout": 2000,
        "parallelUnitIdsAllowed": true,
        "showErrors": false,
        "showWarnings": true,
        "showLogs": true
    }
]