Syberia 5

Выглядит конечно странно. Wirenboard корректно работает с этим? Т.е. если уже стоит выкл в кнопке, а фактически включено, можно ли будет выключить просто отправив еще раз выкл? Или нужно обязательно поменять состояние?

Я правильно понимаю, что 10й бит забыли указать?

Снимок экрана от 2022-06-28 14-07-10

Wiren просто отправляет команду. В этой ветке есть 3 разных способа решения этой проблемы :wink:
Как вариант, просто пишите напрямую в MQTT единицу в топик ON_OFF и система включится. Пишите 0 - выключится но…
…учитывайте что при включении и выключении запускается циклограмма запуска, которая отключает внешнее управление на время работы этой циклограммы. на 40 секунд примерно контроллер не восприимчив к командам.

1 Like

Либо зарезервирован под что то, либо служебный, либо описан в другом топике, либо 9й бит имеет длину 2 бита.

дни ждал, не появляется больше :slight_smile:

А есть ли смысл использовать MGE если Syberia 5 штатно умеет Modbus_tcp? Кабель проложен Ethernet есть. Рассматривали такой вариант?

А как можно подключить по другому? Модуля с rj45 разъемом на контроллере нету

Увы, в таком случае один вариант, кропотливо настраивать RS485.

1 Like

Здравствуйте, Александр!
По MQTT у меня установка выключается, но не включается. То есть я включаю установку с пульта, затем когда я в топик devices/syberia5_1/controls/Power_ON_OFF/on посылаю 0 то State меняется на 0 и установка выключается. Если же для выключенной установки послать в топик 1, то запускается циклограмма, State меняется на 1, но через 2 секунды State изменяется обратно на ноль. Циклограмма отрабатывает но установка не включается. В общем ситуация очень похожа на то что ранее описывал PavelChernov.
P.S. Заметил такую вещь, что если установка включена и послать в топик 1, то она выключается.

Связался с производителем автомтики GTC их ответ:
В контроллере реализован вариант Protocol Addresses. Адресация регистров имеет смещение на 1! Для адресации в контроллере регистра 1 нужно в команде установить адрес 0. Пример команды включения установки (адрес устройства - 01, функциональный код команды - 06, регистр - 03): 01 06 00 02 00 01 E9 CA
Это modbus команда, где 01 адрес устройства в modbus сети, 06 команда записи, 02 - регистр, 0001 данные для записи а E9CA контрольная сумма CRC16. Вот например отправка команды на включение с помощью linux утилиты:

Таким образом у меня все включается и работает. Но почему не работает из MQTT?

@igest Для диагностики проблемы пришлите, пожалуйста, архив с диагностической информацией контроллера. Создание архива описано в инструкции.

Проверьте, что у вас установлен пакет wb-mqtt-homeui версии 2.34.1 или новее командой:

apt policy wb-mqtt-homeui

Спасибо! У меня сейчас установлено 2.26
Имеет ли смысл обновить до последней версии wb-mqtt-homeui перед сбором диагностической информации?

Думаю, что лучше обновить все ПО контроллера до актуальных версий (Обновление прошивки контроллера Wiren Board — Wiren Board), перезагрузить контроллер и еще раз проверить управление. Если проблема сохранится, то прислать диагностический архив.

Ваш Wirenboard ни в чем не виноват, он работает как нужно. Прошивка ничего не изменит. Эта проблема известна. Она исходит из поведения Holding регистра 0x03 (03) поскольку нулевой бит этого регистра не сохраняет своего значения после его установки. (сохраняет только на 3-4 секунды) Я неоднократно об этом писал выше в этой теме.

Explain: Когда вы выполняете эту команду вручную посредством modbus_client то вы не считываете текущего состояния этого регистра - вы указываете ему каким он должен быть!. по этому все работает.
Через MQTT посылка в топик происходит только в том случае если новое значение ОТЛИЧАЕТСЯ от текущего. Соответственно происходит следующее:
Установка выключена. в регистре включения - 0. Вы отсылаете в топик единицу. Установка включается. Контроллер меняет значение регистра включения сразу же в 0. и все.
При попытке отправить команду на выключение через MQTT - изменение топика не происходит поскольку там УЖЕ 0. В итоге установку выключить невозможно. Я вновь отправил запрос разработчикам прошивки запрос на устранение этой ошибки ради совместимости с MQTT. Ждемс…

пока пользуйтесь двойной отправкой команды.

  1. Для включения (если установка выключена):
    отсылаем единицу в топик. Установка включится.
  2. Для выключения (если установка включена):
    отсылаем единицу в топик И СРАЗУ ЖЕ отсылаем ноль в топик. Установка выключится.

P/S Прошу прощения за неоперативный ответ. Дела.с.

2 Likes

Спасибо, но выключить установку я могу. Я не могу ее ВКЛЮЧИТЬ: для выключенной установки я посылаю в топик 1, запускается циклограмма, State меняется на 1, но через 2 секунды State изменяется обратно на ноль. Циклограмма отрабатывает но установка не включается.

Для проверки - сделайте это же с помощью modbus_client, напримерж. Ну и с подобными симптомами, думаю, надо написать производителям.

Уже связался - см. мое сообщение ранее: 65 от 14 июля. Если писать в регистры напрямую с помощью modbus_client все работает корректно. Включается и выключается, а вот с mqtt засада… Пока углублённо не разбирался. Порхпробую обновить ПО контрллера и если не поможет, то видимо попробовать как то включить трассировку что бы понять что именно уходит из mqtt в modbus.

https://wirenboard.com/wiki/Wb-mqtt-serial_driver#Включение_отладки

После обновления прошивки контролёра до версии Wiren Board 6.6.0 release wb-2204(до этого был release wb-2201 (as stable)) все заработало. В частности обновилось wb-mqtt-homeui до 2.35 (было 2.26) Создал виртуальную кнопку и с ее помощью включаю и выключаю установку:

defineVirtualDevice("ventmachine", {
    title: "Power Ventmachine",
    cells: {
	enabled: {
	    type: "switch",
	    value: false
	},
    }
});

defineRule("poweron_ventmachine", {
    whenChanged: "ventmachine/enabled", //при изменении состояния кнопки выключателя 
    then: function(newValue, devName, cellName) { //выполняем следующие действия
        if (newValue == true) { 
          log.info("ventmachine power on", newValue); //для записи в лог
          dev["syberia5_1"]["Power_ON_OFF"] = true; 
        } else {
          log.info("ventmachine power off", newValue); //для записи в лог
          dev["syberia5_1"]["Power_ON_OFF"] = false; 
        }
    }
});
defineRule("status_ventmachine", {
    whenChanged: "syberia5_1/Status", //при изменении статуса вентмашины 
    then: function(newValue, devName, cellName) { //выполняем следующие действия
        if (newValue == true) { 
          log.info("ventmachine power on", newValue); //для записи в лог
          dev["ventmachine"]["enabled"] = true; 
        } else {
          log.info("ventmachine power off", newValue); //для записи в лог
          dev["ventmachine"]["enabled"] = false; 
        }
    }
});

Александр, спасибо за шаблон и данную тему!

Добавил ваше правило, вначале вроде даже исправно работало, а сейчас чёт не фунциклирует. В чём может быть дело?