NEWS
Вопросы по написанию скриптов
-
И на последок, в какое место вставить cron для строки setState("mqtt.0.beeiot.Bee-RGB.lcd.line3", "Громкость " + getState("squeezebox.0.Children.volume").val + " %"); чтобы она выполнялась каждые 2 секунды?
Скрипт on({id: 'mqtt.0.beeiot.Bee-RGB.gpioint1', change: 'any'}, function (obj) {
setState("squeezebox.0.Children.volume", getState("squeezebox.0.Children.volume").val + 1);
}); - работает безупречно!!! `
А зачем? согласно документации на https://github.com/ioBroker/ioBroker.javascript
Функция "on" запускает "слушатель" на изменение или обновления состояния.
Соответственно если запустить в "Скриптах" 1 раз - будет слушать и реагировать всегда.
-
А зачем? согласно документации на https://github.com/ioBroker/ioBroker.javascript
Функция "on" запускает "слушатель" на изменение или обновления состояния.
Соответственно если запустить в "Скриптах" 1 раз - будет слушать и реагировать всегда. `
Согласно ТЗ человека.
@MSapogov:А так -же при появлении события mqtt.0.beeiot.Bee-RGB.gpioint1 неважно какое, главное новое событие - изменить значение squeezebox.0.Children.volume на +1 `
И на последок, в какое место вставить cron для строки setState("mqtt.0.beeiot.Bee-RGB.lcd.line3", "Громкость " + getState("squeezebox.0.Children.volume").val + " %"); чтобы она выполнялась каждые 2 секунды? `
schedule("*/2 * * * * *", function () {
setState("mqtt.0.beeiot.Bee-RGB.lcd.line3", "Громкость " + getState("squeezebox.0.Children.volume").val + " %");
});
-
Проблема - если в скрипте ошибка, драйвер Javascript начинает бесконечно перезапускаться, в лог пишет одно и то же:
host-home 2016-09-14 12:36:08.572 info Restart adapter system.adapter.javascript.0 because enabled host-home 2016-09-14 12:36:08.571 error instance system.adapter.javascript.0 terminated with code 0 (OK) javascript-0 2016-09-14 12:36:08.563 info terminating Error: 2016-09-14 12:36:08.559 error at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:78:26) Error: 2016-09-14 12:36:08.559 error at errnoException (dns.js:27:10) Error: 2016-09-14 12:36:08.559 error getaddrinfo ENOTFOUND 192.168.2.10:8088 192.168.2.10:8088:80при этом зайти в "Скрипты" и исправить её невозможно - страница "Скрипты" не загружается.
Что в таких случаях делать?
-
Проблема - если в скрипте ошибка, драйвер Javascript начинает бесконечно перезапускаться
при этом зайти в "Скрипты" и исправить её невозможно - страница "Скрипты" не загружается.
Что в таких случаях делать? `
Можно попробовать остановить неработающий скрипт и перезапустить драйвер.Вкладка "Объекты" - далее раскрываем список с нужным экземпляром драйвера (к примеру javascript.0), далее "scriptEnabled" - группа скриптов с искомым и значение true меняем на false.
Перезапускаем драйвер, смотрим где ошибка.
-
Пытаюсь написать скрипт включения света, все вроде работает но он сам по себе включается каждые 30сек (я так понимаю время опроса Меги) как это обойти?
сам скрипт:
on({id: "megad.1.p1_Движение_гостинная"/*Движение_гостинная*/, change: 'ne'}, function (obj) { if (getState('onSensor').val === 1 && getState('svetOn').val === 0){ log(getState('svetOn').val); clearTimeout(timer); var lux_kitchen = getState("megad.1.p10_Свет_гостинная"/*Свет_гостинная*/).val; log(lux_kitchen); if (getState('svetOn').val === 0){flag_motion_kitchen = true;} if (flag_motion_kitchen){ log('запускаем таймер отключения на 30000'); timer = setTimeout(function() { setState("megad.1.p10_Свет_гостинная"/*Свет_гостинная*/, 0); flag_motion_kitchen = false; setState('svetOn',0); log("выкл свет по таймеру"); }, 30000 );} if (obj.newState.val === true && flag_motion_kitchen){ setState("megad.1.p10_Свет_гостинная"/*Свет_гостинная*/, 255); setState('svetOn',3); log("вкл свет"); } } }); -
Пытаюсь написать скрипт включения света, все вроде работает но он сам по себе включается каждые 30сек (я так понимаю время опроса Меги) как это обойти?
сам скрипт:
on({id: "megad.1.p1_Движение_гостинная"/*Движение_гостинная*/, change: 'ne'}, function (obj) { if (getState('onSensor').val === 1 && getState('svetOn').val === 0){ log(getState('svetOn').val); clearTimeout(timer); var lux_kitchen = getState("megad.1.p10_Свет_гостинная"/*Свет_гостинная*/).val; log(lux_kitchen); if (getState('svetOn').val === 0){flag_motion_kitchen = true;} if (flag_motion_kitchen){ log('запускаем таймер отключения на 30000'); timer = setTimeout(function() { setState("megad.1.p10_Свет_гостинная"/*Свет_гостинная*/, 0); flag_motion_kitchen = false; setState('svetOn',0); log("выкл свет по таймеру"); }, 30000 );} if (obj.newState.val === true && flag_motion_kitchen){ setState("megad.1.p10_Свет_гостинная"/*Свет_гостинная*/, 255); setState('svetOn',3); log("вкл свет"); } } }); ```` `Просто добавь первой строчкой
перед "if (getState('onSensor').val ==…."
if (obj.state.ack) return; -
я сделал так:
var timer; var flag_motion_kitchen = false; on({id: "megad.1.p1_Движение_гостинная"/*Движение_гостинная*/, change: 'ne'}, function (obj) { console.log("до"); if (obj.state.ack) return; console.log("после"); if (getState('onSensor').val === 1 && getState('svetOn').val === 0){ log(getState('svetOn').val); clearTimeout(timer); var lux_kitchen = getState("megad.1.p10_Свет_гостинная"/*Свет_гостинная*/).val; log(lux_kitchen); if (getState('svetOn').val === 0){flag_motion_kitchen = true;} if (flag_motion_kitchen){ log('запускаем таймер отключения на 30000'); timer = setTimeout(function() { setState("megad.1.p10_Свет_гостинная"/*Свет_гостинная*/, 0); flag_motion_kitchen = false; setState('svetOn',0); log("выкл свет по таймеру"); }, 30000 );} if (obj.newState.val === true && flag_motion_kitchen){ setState("megad.1.p10_Свет_гостинная"/*Свет_гостинная*/, 255); setState('svetOn',3); log("вкл свет хуй знает"); } } });console.log("после"); - не работает
-
Вариант с заменой === на == не помог. Все равно самопроизвольно через каждые 30 сек свет зажигается. Какие есть ещё варианты? `
Самопроизвольно он включается потому что объект обновляется каждые 30 секунд -
Вариант с заменой === на == не помог. Все равно самопроизвольно через каждые 30 сек свет зажигается. Какие есть ещё варианты? `
Значит ты шлёшь каждые 30 секунд "1".Так чего же удивляться?
Выведи значение в лог
console.log(typeof getState('onSensor').val + ' - ' + getState('onSensor').val);
-
Так он и должен срабатывать, я тогда не пойму почему если я подписался на событие датчика движения
on({id: "megad.1.p1_Движение_гостинная"/*Движение_гостинная*/, change: 'ne'}, function (obj) {почему он вызывается каждые 30 сек даже когда не приходит ни какого события от самого датчика (когда событие приходит срабатывает как нужно)
-
Так он и должен срабатывать, я тогда не пойму почему если я подписался на событие датчика движения
on({id: "megad.1.p1_Движение_гостинная"/*Движение_гостинная*/, change: 'ne'}, function (obj) {почему он вызывается каждые 30 сек даже когда не приходит ни какого события от самого датчика (когда событие приходит срабатывает как нужно) ` значит прилетают разные состояния, выведи в лог и помониторь
-
так как? вариантов больше нет? `
Скрипт не работает пока нет изменений на megad.1.p1_Движение_гостинная,так что самопроизвольно он мигает видимо по другой причине. Попробуй останови скрипт.
-
Написал на Blockly программу, первая строка кода:
on({id: 'javascript\\.0\\.gsm7_1_статус', change: "any"}, function (obj) {Этот код не срабатывает, наверно из-за неверного экранирования точек.
На js программа работает с таким кодом:
on({id: "javascript.0.gsm7_1_статус", change: "any"}, function (obj) {
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