Советую для начала посмотреть - есть ли что-нибудь в банках команд.
Пример тут:
Добрый день!
При перепрошивке ИК-сигналы в памяти не сохраняются.
Это несвязанная ошибка. Чтобы её устранить, нужно отредактировать правила, чтобы типы совпадали: Новая версия движка правил - #26 от пользователя WierdBytes
Проверил банки пусты:
Data: 0x0000
Data: 0x0000
Data: 0x0000
Попытался записать ранее сохраненные команды через скрипт mir_banks, но получаю ошибку:
->1ERROR Connection timed out: select
ERROR Connection timed out: select
ERROR Connection timed out: select
ERROR Connection timed out: select
<–>2ERROR Connection timed out: select
ERROR Connection timed out: select
ERROR Connection timed out: select
ERROR Connection timed out: select
<–>3ERROR Connection timed out: select
ERROR Connection timed out: select
ERROR Connection timed out: select
ERROR Connection timed out: select
Наверное что-то поменялось в структуре регистров? Может есть обновленный скрипт?
И вообще возможно ли откатить прошивку до версии 4.13.0?
Подскажите, что тут нужно подправить?
function conditioner_status(name, conditioner_id, virtualDevice) {
defineRule(name, {
whenChanged: [ // Когда изменяется состояние входа на датчике WB-MIRv2
conditioner_id + "/Input 1-wire",
],
then: function(newValue, devName, cellName) {
if (dev[conditioner_id]["Input 1-wire"] == 1) { // Если вход замкнут, значит кондиционер выключен (шторки закрыты)
dev[virtualDevice]["enabled"] = false;
} else {
dev[virtualDevice]["enabled"] = true;
}
}
});
}
defineVirtualDevice("conditioner_mansard", { // Виртуальный выключатель кондиционера Мансарда
title: "Кондиционер Мансарда",
cells: {
enabled: {
type: "switch",
value: false,
readonly: true
},
}
});
conditioner_status("conditioner_status_mansard", "IR_94_Mansard", "conditioner_mansard"); // Кондиционер мансарда
Давайте этот скрипт, посмотрю. Нет, карта регистров и методы работы с IR не менялись.
заменить на
if (dev[conditioner_id]["Input 1-wire"]) { // Если вход замкнут, значит кондиционер выключен (шторки закрыты)
А понизить версию прошивки с 4.16.7 до 4.13.0 возможно?
Да, конечно.
https://wirenboard.com/wiki/WB_Modbus_Devices_Firmware_Update#.D0.A0.D1.83.D1.87.D0.BD.D0.B0.D1.8F_.D0.BF.D1.80.D0.BE.D1.88.D0.B8.D0.B2.D0.BA.D0.B0_.D1.83.D1.81.D1.82.D1.80.D0.BE.D0.B9.D1.81.D1.82.D0.B2
Но очень не советую, так как в прошивках правятся баги.
А устройство на порту /dev/ttyRS485-1 c дефолтной скоростью, четностью и стопбитами? Покажите просто запрос какого-то регистра с помощью modbus_client.
modbus_client -mrtu /dev/ttyRS485-1 -s2 -pnone --debug -a94 -t3 -r250 -c19
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2)
[5E][03][00][FA][00][13][28][99]
Waiting for a confirmation…
<5E><03><26><00><34><00><2E><00><31><00><36><00><2E><00><37><00><00><00><00><00><00><00><00><00><00><00><00><00><00><00><00><00><00><00><00><00><00><00><01><68><27><2C>
SUCCESS: read 19 of elements:
Data: 0x0034 0x002e 0x0031 0x0036 0x002e 0x0037 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0001 0x6827
Опрашиваю проблемый модуль WB-MIR
А дайте пожалуйста фтнвуыл - сам гляну.
Ответил в личные сообщения
Автор скрипта не учел что в некоторх случаях длина RTU пакета может быть превышена.
foreach $i (2000, 2121, 2242, 2363) {
$data="@buff[$i-2000..$i-2000+120]";
#print "modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a$ARGV[1] -t0x10 -r$i $data \n";
`modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a$ARGV[1] -t0x10 -r$i $data`;
}
$i=2484;
$data="@buff[$i-2000..$i-2000+22]";
Пересчитал смещения в putbuffer.pl
diff’ом проверил считанное после записи доработанным скриптом - файлы сошлись. Кажется в смещениях не напутал.
Спасибо, теперь заработало, проверил на двух кондиционерах.
Выкладываю финальную версию скрипта для считывания и записи команд модуля. Редактировал под себя поэтому уменьшил число считываемых и записываемых команд до 4х. Кому нужно больше, редактируйте цикл foreach до нужного вам количества команд:
foreach $i (0…4)
Обновил архив, добавил readmi файл.
get_ROM_IR.zip (2.9 КБ)
Доброго дня!
Второй день пытаюсь осилить перенос команд с одного устройства WB-MIR v2 на другое с помощью этого скрипта.
У меня получилось считать команды с одного устройства, но записать на другое не получается. В командной строке всё идёт гладко якобы, ошибок нет, но команды в итоге не записываются на устройство. При попытке их считать снова скриптом - там пусто (нули).
Не могу понять что я делаю не так. Не подскажете в чём может быть проблема?
Либо он из файлов не читает, либо не записывает. Если бы содержимое putbuffer было бы в основном скрипте - можно было выводить логи, но принты внутри putbuffer не работают…
Скорость, адрес - всё указано верно. Скрипт якобы выполняет работу.
Если бы я понимал этот perl, перенёс бы содержимое putbuffer в основной скрипт write_roms.pl, чтобы работал вывод в консоль логов, но не хватает знаний…
Заранее спасибо за помощь!
Добрый день. А в сохраненных в файлы командах - последние два значения нулевые?
Добрый! Спасибо за ответ!
Да, файлы с командой выглядят так:
А после записи на новое устройство и чтения файла скриптом там все нули.
Вручную записывается всё нормально такими командами:
Выложите файл с сохраненной командой, проверю. С виду все хорошо.