Не, modbus_client же “подерется” за порт с wb-mqtt-serial. В простейшем случае я бы описал каналы в шаблоне китайского устройства для записи и чтения этих регистров. Потом создал бы виртуальное устройство с выключателями, затем в скрипте описал бы правила, отслеживающие изменения контролов виртуального устройства и значений регистров реального, и изменяющих одно в с соответствии с другим.
Если не сложно, ткните туда, как решистры On и off прописать в конфиг. Возможно я их и видел.
Я хотел бы еще раз обратить внимание: в устройстве нет регистров ON и OFF, есть регистры управления реле, а в них записываются команды включения и выключения.
Сделайте для адресов 0x0001 и 0x0002 холдинг-регистров ползунки типа value:
"name" : "Relay1",
"reg_type" : "holding",
"address" : 1,
"type" : "value"
},
{
"name" : "Relay2",
"reg_type" : "holding",
"address" : 2,
"type" : "value"
}
Проверьте, устанавливая ползунок в значения 0x0100 (256) и 0x0200 (512), вы должный включать-выключать реле. Далее в скрипте создаете виртуальный выключатель, в зависимости от положения которого изменяется значение ползунков Relay1 и Relay2. Короче, смело экспериментируйте!
Всех с Новым Годом.
Сделал скрипт управления.
Шаблон устройства (usr/share/wb-mqtt-serial/templates/config-*.json) выглядит так:
{
"device_type": "rs485_2ch_12v",
"device":
{
"name": "rs485_2ch_12v",
"id": "rs485_2ch_12v",
"enabled": true,
"slave_id": 1,
"channels": [
{
"name" : "Relay_1",
"address" : "1",
"reg_type" : "holding",
"type" : "value"
]
}
}
Виртуальное устройство сделал вот так
Read R1 - что бы не бегать смотреть переключение реле.
Значение - 0x0100 - закрыто, только не знаю, кавычки нужны!?
Значение - 0x0300 - переключить состояние реле на обратное.
//
defineVirtualDevice("switch_relay", {
title: "Switch relay",
cells: {
enabled: {
type: "switch",
value: "0x0100"
},
}
});
defineRule("someRule", {
whenChanged: "switch_relay/enabled",
then: function(newValue, devName, cellName){
dev["Relay_rs485_2ch_12v/Relay_1"] = 0x0300; // 0x0300
}
});
defineRule("Read R1", {
whenChanged: "wb-adc/R1",
then: function (newValue, devName, cellName)
{
if ( newValue >= 0.01 )
{
dev.read_r1["R1"] = 1;
}
else
{
dev.read_r1["R1"] = 0;
}
}
});
Добрый вечер.
От чего могут постоянно сыпаться сообщения в /var/log/message:
wirenboard user.notice serial: 1485116066484: Wait until 1485116066583