RPC-запросы

Описание

RPC API позволяет выполнять команды Modbus Write, Bacnet Write

Для того чтобы выполнить команду, надо отправить POST на адрес https:://ruleengine:5554 (не всегда именно такой адрес)

curl -k -H "Content-Type: application/json" -X POST -d '
<body>
` http://ruleengine:5554/api/rpc

в Body отправляется JSON следующего формата:

Modbus

ModbusWrite.cpp

{
    "jsonrpc": "2.0",
    "protocol":"modbus",
    "params":[
        {
            "device_ip": "192.168.1.129",
            "device_port": 1502,
            "object_type": "holding register",
            "object_address": 0,
            "data_type": "int16",
            "order": "LE",
            "scale": 1,
            "value": [41, 22]
        },
        {
            "device_ip": "192.168.1.129",
            "device_port": 1502,
            "object_type": "holding register",
            "object_address": 2,
            "data_type": "float32",
            "order": "LE",
            "scale": 1,
            "value": 20.2
        }
    ]
}
  • jsonrpc : 2.0 - обязательное поле str

  • protocol : modbus или modbus-rtu для модбаса тср или рту соответственно str

  • params[] - массив с регистрами которые надо записать array

    • device_ip - указываем ип адрес в формате 192.168.1.129 str

    • object_type: holding register или coil, 06 и 05 команды модбаса соответственно, и если в поле value будет array, то пишем командами 16 и 15 соответственно str

    • object_address: - адрес модбас регистра number

    • data_type: - могут быть следующие форматы: (int16, uint16, bool [0,1] - занимают 1 регистр), (int32, uint32, float32 - занимают 1 регистр), (float64 - занимают 4 регистр) number

    • order: - порядок байт в посылке LE - старший вперед, BE -младший вперед str

    • scale: - множитель для запиcываемых данных number

    • value: - данные для записи в регистры, тип поля number или array, если array то пишем в регистры последовательно, начиная с адреса object_address

Пример RPC-запроса

{
    "jsonrpc": "2.0",
    "protocol":"modbus",
    "params":[
        {
            "device_ip": "192.168.1.194",
            "device_port": 21502,
            "object_type": "coil",
            "object_address": 1,
            "order": "BE",
            "scale": 1,
            "value": 1
        }
    ]
}' http://127.0.0.1:5554/api/rpc

BacNet write property

{
    "jsonrpc": "2.0",
    "protocol":"bacnet",
    "params":[
        {
            "device_instance": 260001,
            "object_type": 2,
            "object_instance": 1,
            "property": 85,
            "priority": 16,
            "tag": 4,
            "value": 100
        },
        {
            "device_instance": 260001,
            "object_type": 2,
            "object_instance": 2,
            "property": 85,
            "priority": 16,
            "tag": 4,
            "value": 99
        }
    ]
}

BacNet write property multiple

{
    "jsonrpc": "2.0",
    "protocol": "bacnet_m",
    "params": [
        {
            "device_instance": 260001,
            "array": [
                {
                    "object_type": 2,
                    "object_instance": 1,
                    "property": 85,
                    "priority": 16,
                    "index": -1,
                    "tag": 4,
                    "value": 100
                },
                {
                    "object_type": 2,
                    "object_instance": 2,
                    "property": 85,
                    "priority": 16,
                    "index": -1,
                    "tag": 4,
                    "value": 333
                }
            ]
        }
    ]
}

Ответы:

  • 200 -Ok. Команда выполнена.

  • [“Error write bit ip:port addr:1 Illegal function”] - Отсутсвует регистр по указанному адресу

  • [“Connection refused ip:port addr:1”] - возможно, отсутсвует устройство по данному адресу