Вне зависимости от того, как контрол описан в виртуальном устройстве, в системном журнале всегда предупреждения о преобразовании из “пустого” в boolean с присвоением false.
[wb-mqtt-db.service] WARNING: [conventions] converting empty value to boolean "false"
[wb-mqtt-db.service] WARNING: [conventions] converting empty value to boolean "false"
При этом сами контролы создаются, даже значения, вроде, присваиваются исходя из заданного, а не false как в журнале:
Далее, при попытке изменить, исходя из конвенции dev["test/C4"] = 0, получаем ошибку [wb-rules] ERROR: control test/C4 SetValue() error: can't convert control value '0' (type float64) to datatype '1'
Всё таки: с типом switch надо работать именно как с boolean? Что тогда [wb-mqtt-db.service] не нравится?
Как же неверно? Как я ранее указал - в полном соответствии с конвенцией. А вот то, что switch по мнению wb-mqtt-db.service - boolean в конвенции не указано.
В конвенции описано как значения хранятся в MQTT. В JS работа с типами, несмотря не приведение все же подразумевает булевы типы.
Если пиете что-то в топики - да, надо пользоваться конвенцией.
В соответствии с конвенцией - 0 или 1. А не true|false. А я пишу в соответствии с конвенцией. Пишу в топик - ругается wb-mqtt-db.service. Пишу в JS - ругается wb-rules. В чём Я не прав?..
Ну, не подменяются а выводятся в том виде что описан в meta/type.
В mqtt только строки, там нет типов. Поэтому обошли таким способом, тип хранится рядом.
А вот за то что делитесь - отдельная благодарность.
Самое ценное - это как раз мнение специалиста, которыый явно имеет опыт но видит нашу документацию в первый раз.
Что можно сделать лучше?
В meta/type - switch, в брокере хранится, соответственно, значение 0|1. В web-интерфейсе выводится “значение MQTT-топика” не в том виде, как хранится, а в том виде, как его интерпретируют wb-rules.
Я не писатель - я читатель ) Обратив внимание на предупреждения wb-mqtt-db.service в журнале, я полез именно в описание MQTT конвенции (меня ведь предупреждают о конверсии в boolean и ссылаются на конвенции: WARNING: [conventions] converting empty value to boolean "false"). Как по мне - прямое и явное указание на соответствие хранимых (0|1) и воспринимаемых (false|true) значений типов switch и alarm в описании движка правил И в конвенции. Т.е. буквально: “true храним в mqtt как 1, false - как 0”.
Но главное, конечно, разобраться с ошибочными предупреждениями в журнале.
Как раз в этот момент когда сообщение выводится - в топике вообще ничего нет, он (только что) создан без значения, возвращается null. Переходный проуцесчс при запуске сервиса или создании топиков.
И это повод выводить предупреждения? При отладке сервиса - пожалуй. При стабильной работе - нет. Ну или это вопрос восприятия - системный журнал НЕ для пользователей или часть “продвинутых” решит свои проблемы самостоятельно с его помощью? Если НЕ для пользователей, то и просмотр журнала пользователям нужно закрывать. А поскольку просмотр есть, то понимающие в нём ищут возможные ошибки. Красный - явная ошибка. Желто-коричневый - повод задуматься и проанализировать суть происходящего, чёрный - штатная работа.
В текущей ситуации - при создании виртуального устройства (топика как следствие) в полном соответствии с wb-rules (switch - это boolean) и с присваиванием начального значения при создании (value: false|true). Что ожидаю? Ни один сервис НЕ должен рапортовать в журнал никаких предупреждений.
Что имеем - некий сервис предупреждает WARNING: 1) с совершенно неуместной ссылкой [conventions] на какие-то там “конвенции” (ведь, как мы выяснили - неважно как данные хранятся в MQTT - создаем то мы виртуальное устройство в движке правил); 2) о конвертации converting to boolean того, что (по описанию движка правил) и так является boolean; 3) и принудительно присваивает empty value to "false", несмотря на то, что при определении виртуального устройства, конкретному топику явно присваивается начальное значение (ну разве не напрашивается аналогия с условным var topic = true?).
Ну, перезапуск сервиса - это совсем не рядовое событие.
То есть они не перзапускаются, типично - месяцами.
Не совсем понимаю. Интерфейс “администратор” - вообще не для пользователей, а журналом пользуются при наладке и отладке.
А для чего его пользователям вообще смотреть?
Публикация топиков - не транзакция, создаются сначала одни а затем другие. СМтруктура в момент публикации неконсистентна.