WB-MIR WB-MSW скрипт для сохранения и записи команд ИК (IR)

Советую для начала посмотреть - есть ли что-нибудь в банках команд.
Пример тут:

Добрый день!

При перепрошивке ИК-сигналы в памяти не сохраняются.

Это несвязанная ошибка. Чтобы её устранить, нужно отредактировать правила, чтобы типы совпадали: Новая версия движка правил - #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"]) {  // Если вход замкнут, значит кондиционер выключен (шторки закрыты)

Скрипты приложил, запускаю вот так:

./write_rom.pl newcommands 94

get_ROM_IR.zip (4.2 КБ)

А понизить версию прошивки с 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

1 лайк

diff’ом проверил считанное после записи доработанным скриптом - файлы сошлись. Кажется в смещениях не напутал.

Спасибо, теперь заработало, проверил на двух кондиционерах.

Выкладываю финальную версию скрипта для считывания и записи команд модуля. Редактировал под себя поэтому уменьшил число считываемых и записываемых команд до 4х. Кому нужно больше, редактируйте цикл foreach до нужного вам количества команд:

foreach $i (0…4)

Обновил архив, добавил readmi файл.

get_ROM_IR.zip (2.9 КБ)

1 лайк

Доброго дня!

Второй день пытаюсь осилить перенос команд с одного устройства WB-MIR v2 на другое с помощью этого скрипта.
У меня получилось считать команды с одного устройства, но записать на другое не получается. В командной строке всё идёт гладко якобы, ошибок нет, но команды в итоге не записываются на устройство. При попытке их считать снова скриптом - там пусто (нули).
Не могу понять что я делаю не так. Не подскажете в чём может быть проблема?
Либо он из файлов не читает, либо не записывает. Если бы содержимое putbuffer было бы в основном скрипте - можно было выводить логи, но принты внутри putbuffer не работают…
Скорость, адрес - всё указано верно. Скрипт якобы выполняет работу.
Если бы я понимал этот perl, перенёс бы содержимое putbuffer в основной скрипт write_roms.pl, чтобы работал вывод в консоль логов, но не хватает знаний…

Заранее спасибо за помощь!

Добрый день. А в сохраненных в файлы командах - последние два значения нулевые?

Добрый! Спасибо за ответ!
Да, файлы с командой выглядят так:


А после записи на новое устройство и чтения файла скриптом там все нули.

Вручную записывается всё нормально такими командами:

Выложите файл с сохраненной командой, проверю. С виду все хорошо.

Файл с сохранённой командой вот:
rom_1.ir (1.2 КБ)