Перейти к содержанию

Навигация

Rule Examples: различия между версиями

2712 байт добавлено ,  5 месяцев назад
(Сменил temperature_setpoint)
Строка 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>


translator, wb_editors
4218

правок