• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопросы по Blockly

PeterPK

Active member
1) Так и не разобрался с получением значений переменных других устройств, очень часто получаю NaN, особенно на старте.
Валерий писал, что там что-то надо делать с LifeTime и, что он что-то собирается исправлять.

Как писать сейчас и что будет в будущем?

2) Что происходит при делении на ноль?

3) Если в какой-то переменной, например "Var" содержится NaN, то что выдадут следующие выражения:

If (Var > X)
If (Var < X)
Repeat (Var)
Pause (Var)

?
 

valeraba

Moderator
Команда форума
Точно не могу сказать, но в любом случае, для пользователя это будет бессмыслица.
Сигнал удалённого устройства может быть недоступен физически, поэтому проверка на NAN нужна в любом случае.
Проверяйте значение сигнала всегда.
А исправлять я собирался ровно одно, чтобы устройство инициировало чтение сигнала удалённого устройства, а не ожидало бы циклическую отправку в сеть этого сигнала (раз в минуту или по изменению). Но это никак не отменяет необходимость проверки значения сигнала на NAN.
 

PeterPK

Active member
2) Что происходит при делении на ноль?
Проверил в сценарии сам.
При делении на ноль получается значение "Infinity" (я привычно думал что будет NaN).
Потом с этим "Infinity" можно оперировать как с нормальным с числом, во всяком случае при делении на него получаешь честный 0.
Видимо и сравнивать можно, и тд.

Остался вопрос 3).
 

valeraba

Moderator
Команда форума
Остался вопрос 3).
Можете проверить на практике, можете исходники посмотреть. И даже если сейчас получите ответ, то завтра его можно забыть. Всё это зависит от реализации виртуальной машины (смотрите исходники), лучше не использовать недокументированные механизмы.
 

PeterPK

Active member
Можете проверить на практике, можете исходники посмотреть. И даже если сейчас получите ответ, то завтра его можно забыть. Всё это зависит от реализации виртуальной машины (смотрите исходники), лучше не использовать недокументированные механизмы.
Как я понимаю NaN и особенно Infinity это некие стандартные значения и логика должна уметь их обрабатывать по стандарту, и это не должно меняться от реализации виртуальной машины. В чем я не прав?
 

valeraba

Moderator
Команда форума
Как я понимаю NaN и особенно Infinity это некие стандартные значения и логика должна уметь их обрабатывать по стандарту, и это не должно меняться от реализации виртуальной машины. В чем я не прав?
Мне не известны эти стандарты, вероятно они есть, я же просто предпочитаю обходить такие углы. Если найдете что-нибудь на этот счёт, то я подправлю реализацию виртуальной машины (если будет несоответствие).
 

PeterPK

Active member
Мне не известны эти стандарты, вероятно они есть, я же просто предпочитаю обходить такие углы. Если найдете что-нибудь на этот счёт, то я подправлю реализацию виртуальной машины (если будет несоответствие).
IEEE754 - пишут что это стандарт для большинства языков программирования.
3.1 Специальные числа: ноль, бесконечность и неопределенность
 

PeterPK

Active member
Вопрос не совсем по Blockly, но тем не менее.
В случае аварии (например датчик отрубился) можно из сценария выключить сценарий? Чтоб он не начал чудить.

SET "Работа по сценарию" = 0
?
 

PeterPK

Active member
Проверил, не работает.
"SET "Работа по сценарию" = 0 " - ничего не происходит. А жаль.
 

glory24

Member
Датчик нужно сравнивать с самим собой, а не с 0 или 1 (во всяком случае датчик температуры), но в общем я это и имел в виду.
Да, Вы правы, это я сморозил 🤭
Вот Валера мне модуль собрал на случай если датчик отвалится.
1594446955231.png
Но с другой стороны, отключать сценарий в таком случае совсем не правильно. Ведь отключение сценария не означает отключение нагревательного элемента, к примеру, а значит скорее ведет к аварии, чем к безопасности.
Может все же правильнее при отваливании датчика, отключать нагрев?
 

PeterPK

Active member
Но с другой стороны, отключать сценарий в таком случае совсем не правильно. Ведь отключение сценария не означает отключение нагревательного элемента, к примеру, а значит скорее ведет к аварии, чем к безопасности.
Может все же правильнее при отваливании датчика, отключать нагрев?
Не хотелось бы чтобы зимой, в -20°, при аварии датчика отключался нагрев.
У меня котел работает постоянно, без выключений (уже 7 лет), а сценарий регулирует поворот клапана - больше или меньше тепла забирать от котла в дом.
Мне не грозит перегрев или остывание котла, мне грозит перегрев или остывание дома. Перегрев дома - это всего лишь +30° в комнатах, а остывание дома - это лопнувшие трубы водопровода.
Поэтому если датчик сломался, то мне видится разумным замереть в последней осмысленной позиции, когда датчик еще работал.
Но это можно отработать и сценарно, просто чуть сложнее.
 

antenna-krsk

Active member
Не хотелось бы чтобы зимой, в -20°, при аварии датчика отключался нагрев.
У меня котел работает постоянно, без выключений (уже 7 лет), а сценарий регулирует поворот клапана - больше или меньше тепла забирать от котла в дом.
Мне не грозит перегрев или остывание котла, мне грозит перегрев или остывание дома. Перегрев дома - это всего лишь +30° в комнатах, а остывание дома - это лопнувшие трубы водопровода.
Поэтому если датчик сломался, то мне видится разумным замереть в последней осмысленной позиции, когда датчик еще работал.
Но это можно отработать и сценарно, просто чуть сложнее.
Мне кажется тебе как и раньше не хватает обратной связи по положению заслонки. Ты бы мог ее открыть наполовину или полностью при аварии. А после отключения света вообще жесть
 

glory24

Member
Ты бы мог ее открыть наполовину или полностью при аварии.
Если под "аварией" подразумевается отказ датчика, то вполне разумно.
А после отключения света
Неплохо бы предусмотреть аварийное питание.
У меня, к примеру, на первое время на этот случай:
аккумулятор и инвертор 12-220В
И это пока не запустится генератор.
И автоматический запуск генератора. Что-то вроде такого
 

PeterPK

Active member
Мне кажется тебе как и раньше не хватает обратной связи по положению заслонки.
Это да. Но для этого нужно покупать сервопривод, который бы давал такую обратную связь или имел бы прямое позиционирование. А они не дешевые.
А этот мне на халяву достался, с чего все собственно и началось.

А после отключения света вообще жесть
А что после отключения света? Котел включается сам, автоматика тоже, и поехали себе спокойно.

Неплохо бы предусмотреть аварийное питание.
У меня, к примеру, на первое время на этот случай:
аккумулятор и инвертор 12-220В
И это пока не запустится генератор.
И автоматический запуск генератора. Что-то вроде такого
У нас свет отключается 1-2 раза в год (тьфу-тьфу) и чинят довольно оперативно.
А тут столько городить, а потом еще этот генератор нужно хотя бы раз в год запускать, аккумуляторы тренировать и тд.
И потом все равно, после длительного простоя, когда понадобится это все с большой вероятностью не запуститься.
Только геморрой и денег куча.
Если раз в неделю обрывы электричества - тогда да, а так ну его нафиг.

Но это же совсем оффтопик для темы про блокли.
 

glory24

Member
Обратил внимание на не соответствие отображения значка сценария на страничке "локального" и "облачного" сервисов MGT24, одного из моих устройств.
Облачный выглядит так
1598850076378.png
Локальный так
1598850155489.png
Отчего бы это могло быть?
 
Сверху Снизу