NEWS
Вопросы по написанию скриптов
-
Проще создать нужные объекты скриптом
CreateState('папка.объект', " ");
Пишу с пульта….
-
@kID:Пытаюсь проделать следующий финт:
На закладке объектов создать в корне папку и наполнить ее разными объектами.
Например создать папку Flags и там различные объекты к которым могу обращаться из различных инстанций Javascript.0 или Javascript.1
Зачем это. Ну просто обособить свои объекты. Насоздавал например объектов в Javascript.1, а затем нечаяно грохнул его и все потерялось. А так все на месте и к ним можно обратиться из Javascript.0. И соответственно скрипты рассчитанные на одновременную работу с данными могут находится в разных инстанциях.
Но почему то не могу создать первоначальную папку в корне, куда потом прятать все содержимое. Позволяет только создать состояние|канал|устройство. Но если создавать любой из этих объектов, то все дочерние визуально лежат рядом.
Чего я неправильно делаю Скриншот 2017-02-25 21.53.53.png `
Создай сразу всю ветку. Например kitchen.flag -
Проще создать нужные объекты скриптом
CreateState('папка.объект', " "); `
Но ведь тогда объект создается в той инстанции откуда скрипт запущент.е скрип
createState('flag.alarm_10min', false);
createState('flag.alarm_10min', false );
запущенный из javascript.0 создаст эти объекты в дереве javascript.0
Создай сразу всю ветку. Например kitchen.flag `
Я чувствую что не догоняю.Только что понял: Корневое название должно состоять из двух частей разделённых точкой. Тогда оно при дальнейшем наполнении становится родителем. Я же просто создавал "Flag" и оно периодами вообще терялось из списка объектов, потом при обновлении появлялось, и главное к нему не цеплялись дочерние объекты, они просто лежали рядом. Хотя к названию дочерних цеплялся Flag.
-
Ну чего-то наворотил, но все же работает как-то не так.
Скрипт
reateState('Flag.0.Alarm_10min', false); createState('Flag.0.Alarm_5min', false); createState('Flag.0.test', 10); setState (("Flag.0.Alarm_5min"), true, true); setState (("Flag.0.test"/*test*/), 20, true); log("Значение" + getState("Flag.0.test").val);Если таких объектов нигде нет, то все создается в дереве javascript.0
И далее с этими объектами работаем как обычно
Но если я заранее в корне создаю эти объекты
то получаю следующее

или так

Т.е создается объект в дереве javascript.0 а работаем уже с объектом из корня.Я так понимаю что ситуация как в анекдоте:
-
Чего-то меня последнее время Гондурас беспокоит
-
А вы его поменьше чешите
Т.е. в корне создавать объекты нельзя!!
-
-
@kID:Ну чего-то наворотил, но все же работает как-то не так.
Скрипт
reateState('Flag.0.Alarm_10min', false); createState('Flag.0.Alarm_5min', false); createState('Flag.0.test', 10); setState (("Flag.0.Alarm_5min"), true, true); setState (("Flag.0.test"/*test*/), 20, true); log("Значение" + getState("Flag.0.test").val);Если таких объектов нигде нет, то все создается в дереве javascript.0
И далее с этими объектами работаем как обычно
Но если я заранее в корне создаю эти объекты
то получаю следующее
полуторный объект.jpg
или так
двойной объект.jpg
Т.е создается объект в дереве javascript.0 а работаем уже с объектом из корня.
Я так понимаю что ситуация как в анекдоте:
-
Чего-то меня последнее время Гондурас беспокоит
-
А вы его поменьше чешите
Т.е. в корне создавать объекты нельзя!! `
Руками можно -
-
Раз вы руками создали в корне, то из скрипта уберите CreateState `
Да я все понял. Я чего хотел показать - что используя одинаковый ID в случае с getState ищется первое вхождение с корня объектова для createState игнорируется все что выше Javascript.X
-
@kID:Раз вы руками создали в корне, то из скрипта уберите CreateState `
Да я все понял. Я чего хотел показать - что используя одинаковый ID в случае с getState ищется первое вхождение с корня объектова для createState игнорируется все что выше Javascript.X `
Это так работает функция createState. Создает переменные в инстанции Javascript драйвера. -
Появилась задача включать выключать драйвер из скрипта. Необходимость возникла по следующей причине - драйвер, работающий с оборудованием, в случае отключения оборудования продолжает пытаться до него достучаться и слать ошибки в логи. Оборудование не всегда должно быть включенным. Поэтому логично с выключением оборудования принудительно отключать и драйвер, занимающийся его опросом.
Управление драйвером пробовал делать через setState, к примеру в тесте управления включением-выключением history:
setState("system.adapter.history.0.alive", true); и setState("system.adapter.history.0.alive", false);
Оно так работает и я получаю желаемое. Но… отключение драйвера - все нормально, а вот включение всякий раз дает ошибку в логе (но в итоге все равно делает что надо):
history.0 2017-04-27 11:22:54.125 info starting. Version 1.6.2 in /opt/iobroker/node_modules/iobroker.history, node: v4.8.2
host.AdavHome 2017-04-27 11:22:53.290 info instance system.adapter.history.0 started with pid 11319
host.AdavHome 2017-04-27 11:22:23.277 info Restart adapter system.adapter.history.0 because enabled
host.AdavHome 2017-04-27 11:22:23.276 error instance system.adapter.history.0 terminated with code 7 (Adapter already running)
host.AdavHome 2017-04-27 11:22:22.402 info instance system.adapter.history.0 started with pid 11285
host.AdavHome 2017-04-27 11:22:22.402 info "system.adapter.history.0" enabled
host.AdavHome 2017-04-27 11:22:22.402 info object change system.adapter.history.0
Такое ощущение, что система думает что драйвер уже запущен и сначала его останавливает и только потом запускает. И всякий раз ошибка в лог. Ну и такое отрабатывает заметно медленнее, чем при включении руками.
Может есть какой-то способ сделать это иначе или я что-то не так делаю?
-
Появилась задача включать выключать драйвер из скрипта. Необходимость возникла по следующей причине - драйвер, работающий с оборудованием, в случае отключения оборудования продолжает пытаться до него достучаться и слать ошибки в логи. Оборудование не всегда должно быть включенным. Поэтому логично с выключением оборудования принудительно отключать и драйвер, занимающийся его опросом.
Управление драйвером пробовал делать через setState, к примеру в тесте управления включением-выключением history:
setState("system.adapter.history.0.alive", true); и setState("system.adapter.history.0.alive", false);
Оно так работает и я получаю желаемое. Но… отключение драйвера - все нормально, а вот включение всякий раз дает ошибку в логе (но в итоге все равно делает что надо):
history.0 2017-04-27 11:22:54.125 info starting. Version 1.6.2 in /opt/iobroker/node_modules/iobroker.history, node: v4.8.2
host.AdavHome 2017-04-27 11:22:53.290 info instance system.adapter.history.0 started with pid 11319
host.AdavHome 2017-04-27 11:22:23.277 info Restart adapter system.adapter.history.0 because enabled
host.AdavHome 2017-04-27 11:22:23.276 error instance system.adapter.history.0 terminated with code 7 (Adapter already running)
host.AdavHome 2017-04-27 11:22:22.402 info instance system.adapter.history.0 started with pid 11285
host.AdavHome 2017-04-27 11:22:22.402 info "system.adapter.history.0" enabled
host.AdavHome 2017-04-27 11:22:22.402 info object change system.adapter.history.0
Такое ощущение, что система думает что драйвер уже запущен и сначала его останавливает и только потом запускает. И всякий раз ошибка в лог. Ну и такое отрабатывает заметно медленнее, чем при включении руками.
Может есть какой-то способ сделать это иначе или я что-то не так делаю? `
alive - это ка бы индикатор для чтенияВ драйвере Javascript включи опцию Разрешить команду "setObject"
var obj = getObject("system.adapter.history.0"); obj.common.enabled = false; //or true setObject("system.adapter.history.0", obj); -
Доброго дня. Поможите советом: как запустить скрипт по нажатию кнопки и то же самое по времени.
-
Доброго дня. Поможите советом: как запустить скрипт по нажатию кнопки и то же самое по времени. `
В vis, виджет кнопка, ID объекта javascript.0.scriptEnabled.scriptnamevar volumeId = "sayit.0.tts.volume"; // Устанавливаем в 6:59 громкость 90 schedule("59 6 * * *", function(){ setState(volumeId,90,function(){ log('Установлена громкость '+ getState(volumeId).val); }); });или так
// Скрипт запускается каждые 10 сек. function temperatur() { сам скрипт } schedule('*/10 * * * * *', temperatur); temperatur(); -
Ага, спасиб. По времени интересует типа отправить в 7, 12 и 17 часов, а еще сообщить о событии через 30 минут после его начала.
Типа включился насос и если через 30 минут он не выключился - ТРЕВОГА…... А если выключился - то молчим в тряпочку.
-
Ага, спасиб. По времени интересует типа отправить в 7, 12 и 17 часов, а еще сообщить о событии через 30 минут после его начала.
Типа включился насос и если через 30 минут он не выключился - ТРЕВОГА…... А если выключился - то молчим в тряпочку. `
Ищи на форуме скрипт часов -
Угум-с и так уже начинаю немецкий изучать :lol: :lol: :lol:
-
Угум-с и так уже начинаю немецкий изучать :lol: :lol: :lol: `
На русском, в немецкой ветке примеров конечно пабольше :) :) -
О как! Использую скрипт от electric69 а вот этот топик как то пропустил… Ща попробуем.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden