Rule Examples: различия между версиями
Brainroot (обсуждение | вклад) (Сменил temperature_setpoint) |
Matveevrj (обсуждение | вклад) |
||
Строка 1620: | Строка 1620: | ||
} | } | ||
}); | }); | ||
</syntaxhighlight> | |||
==Чтение и запись регистров Modbus-устройств с помощью wb-rules== | |||
С помощью правил wb-rules можно отправлять запросы Modbus-устройствам, используя драйвер [[Wb-mqtt-serial_driver |wb-mqtt-serial]]. Это может пригодится, когда устройство на шине работает не по стандартному протоколу и не поддерживается драйвером. | |||
Для взаимодействия wb-rules и драйвера wb-mqtt-serial используется сервис [https://github.com/wirenboard/mqtt-rpc RPC-MQTT]. | |||
Сервис создает MQTT-топик для отправки запросов, и топик для чтения ответов от драйвера. Поэтому для его использования достаточно отправить запрос в нужный топик функцией <code>publish()</code> и прочитать ответ функцией <code>trackMqtt()</code>. Как узнать адреса топиков описано в [https://github.com/wirenboard/mqtt-rpc документации]. | |||
В примере реализовано чтение Modbus-регистра устройства на шине RS-485. | |||
<syntaxhighlight lang="bash"> | |||
var pathRPC = "/rpc/v1/wb-mqtt-serial/port/Load/"; //Адрес топика в который отправляется запрос | |||
var modbusPort = "/dev/ttyRS485-1"; | |||
var modbusSpeed = 9600; | |||
var modbusParity = "N"; | |||
var modbusStopbit = 2; | |||
var message = "E0300C8000644C9"; | |||
var clientID = "testRPC"; | |||
function requestRPC(modbusPort, modbusSpeed, modbusParity, modbusStopbit, clientID, requiestID, messageType, message, responseSize){ | |||
var strJson = JSON.stringify({params: {response_size: responseSize, format: messageType, path: modbusPort, baud_rate: modbusSpeed, parity: modbusParity, "data_bits" : 8, "stop_bits" : modbusStopbit, "msg": message}, "id" : requiestID}); | |||
log.info("strJson =", strJson); | |||
publish(pathRPC+clientID, strJson, 2, false) | |||
}; | |||
trackMqtt(pathRPC+clientID+"/reply", function(message){ | |||
log.info("name: {}, value: {}".format(message.topic, message.value)) | |||
}); | |||
requestRPC(modbusPort, modbusSpeed, modbusParity, modbusStopbit, clientID, 1, "HEX", message, 8) | |||
</syntaxhighlight> | |||
Если запрос отправлен без ошибок, то в лог будет выведено сообщение вида: | |||
<syntaxhighlight lang="bash"> | |||
name: /rpc/v1/wb-mqtt-serial/port/Load/testRPC/reply, | |||
value: {"error":null,"id":1,"result":{"response":"0e030400002569df"}} | |||
</syntaxhighlight> | </syntaxhighlight> | ||