NEWS
Видимость переменных. И еще пара вопросов.
-
1. В общем столкнулся с неожиданным.
Пишу скрипт:
var i = 1; exec('какая нибудь команда', function(err,stdout,stderr){ log(i); i = stdout; }) log (i);
Выясняется что внутри exec переменная i видна. Но если её изменить то изменения будут только внутри exec. снаружи она останется без изменений.
Это правильно? Вроде в чистом js все должно меняться если я отдельно внутри exec не объявил переменную с аналогичным именем.
2. Логика работы со скриптами
Написал я некий скрипт.
Есть он у меня в дереве скриптов. и есть у него состояние - запущен или остановлен.
Вопрос - что это состояние означает?
Т.е. например скрипт подписывается на изменение какого то параметра. Тогда логично что когда скрипт запущен то он ждет изменения и при наличии оных делает чтото.
А если скрипт просто выполняет некий набор действий. без подписки. Какое у него должно быть состояние? Просто когда я делаю его запущеным он выполняется как минимум один раз чего мне совершенно не надо.
Хотя может я не правильно понял идиологию?
У меня есть некий набор действий который нужно выполнить в двух случаях:
1. По расписанию
2. По запросу пользователя.
Я предположил что можно написать скрипт "Набор действий" выполнения этих действий. далее пишу ещё два скрипта:
1. По расписанию раз в 20 минут выполнять "Набор действий"
2. В случае нажатия на кнопку выполнить "Набор действий"
Вроде как запуск скрипта возможен - runScript/startScript
Я использовал startScript. и он почемуто не сработал т.е. сперва я неправильно вводил название скрипта и были ошибки. но когда ввел правильно ничего не произошло.
Как такую задачу выполнять?
Есть вариант подписать скрипт на какуюнибудь переменную а других скриптах менять её. Но как то нелогично мне это.
3. вопрос можно ли запустить скрипт из другого скрипта и получить от него ответ? т.е. использовать другой скрипт как функцию?
4. есть ли гдето описание как это все работает? а то случайно наткнулся на доку на гитхабе. но она тоже не раскрывает многих тем.
Пока все ))))
-
> Выясняется что внутри exec переменная i видна. Но если её изменить то изменения будут только внутри exec. снаружи она останется без изменений
она видна и там и там, в не exec выводится быстрее просто
` > 1. В общем столкнулся с неожиданным.Пишу скрипт:
Код:
var i = 1;
exec('какая нибудь команда', function(err,stdout,stderr){
log(i);
i = stdout;
})
log (i);
Выясняется что внутри exec переменная i видна. Но если её изменить то изменения будут только внутри exec. снаружи она останется без изменений.
Это правильно? Вроде в чистом js все должно меняться если я отдельно внутри exec не объявил переменную с аналогичным именем.
2. Логика работы со скриптами
Написал я некий скрипт.
Есть он у меня в дереве скриптов. и есть у него состояние - запущен или остановлен.
Вопрос - что это состояние означает? ` кнопка означает выполнять скрипт или нет. Если отключено то код в скрипте не будет работать
-
Т.е. exec выполняется асинхронно. Соответственно нельзя строить скрипт таким образом как я сперва задумал, а нужно строить на колбэках.
Сперва exec. внутри него основной скрипт. а если exec несколько. то каждый последующий нужно запускать в колбэке предидущего?
-
кнопка означает выполнять скрипт или нет. Если отключено то код в скрипте не будет работать `
Т.е. я должен сделать скрипт запущенным. Соответственно он один раз в момент запуска отработает. А потом из другого скрипта я смогу его запускать?
-
кнопка означает выполнять скрипт или нет. Если отключено то код в скрипте не будет работать `
Т.е. я должен сделать скрипт запущенным. Соответственно он один раз в момент запуска отработает. А потом из другого скрипта я смогу его запускать? ` зачем его запускать если он уже запущен? Опиши алгоритм что хочешь сделать, буду дома отпишуст
-
Т.е. exec выполняется асинхронно. Соответственно нельзя строить скрипт таким образом как я сперва задумал, а нужно строить на колбэках.
Сперва exec. внутри него основной скрипт. а если exec несколько. то каждый последующий нужно запускать в колбэке предидущего? `
Не только exec, все асинхронно. Мысли в правильную сторону, через колбеки -
Хотя может я не правильно понял идиологию?
У меня есть некий набор действий который нужно выполнить в двух случаях:
1. По расписанию
2. По запросу пользователя.
Я предположил что можно написать скрипт "Набор действий" выполнения этих действий. далее пишу ещё два скрипта:
1. По расписанию раз в 20 минут выполнять "Набор действий"
2. В случае нажатия на кнопку выполнить "Набор действий"
Вроде как запуск скрипта возможен - runScript/startScript
Я использовал startScript. и он почемуто не сработал т.е. сперва я неправильно вводил название скрипта и были ошибки. но когда ввел правильно ничего не произошло.
Как такую задачу выполнять?
Есть вариант подписать скрипт на какуюнибудь переменную а других скриптах менять её. Но как то нелогично мне это. `
Ну вот. Т.е. хочется использовать скрипт как функцию. Т.е. это заданный набор действий который нужно производить при возникновении разных условий(запрос пользователя/расписание и т.п.). Скрипт этот анализирует несколько состояний и делает вывод о том какие набор действий ему произвести.
Конкретно мой случай:
Есть датчик температуры, есть текущее время и есть режим работы отопления.
Скрипт в зависимости от этих данных управляет котлом.
Режимы работы отопление:
1. Выключено. тут все понятно
2. Включено. Тут просто включается котел и жарит на все пироги.
3. Поддержка минимальной температуры. Тут вводится зависимость от температуры и времени. Система отопления на основе теплого пола. соответственно инертна. Настройки такие. с 7 утра до 23 вечера включать котел если температура упала ниже 5 градусов. с 23 до 7 утра включать если температура меньше 10. Сейчас этот режим. как правило за день температура падает на 2-3 градуса и становится равной 8. в 23 котел включается и прогревает помещение до 10 градусов и отключается. Т.е. работает ночью по ночному дешевому тарифу. Задача чтоб дом не замерз пока в нем никого нету
4. Поддержка нормальной температуры. Тоже что и пункт 3 только уставки 15 днем и 25 ночью соответственно. При желании приехать в дом - заранее включаю этот режим и дом к приезду должен прогреться.
Все это описано в скрипте. Режим работы - объект enum с соответствующими состояниями
Сейчас скрипт работает по расписанию. каждые 15 минут проверяет состояния и делает выводы включить или отключить котел. Можно было бы повесить на изменение температуры. но как то котел не включился из за того что скрипт почемуто пропустил запуск по расписанию. И у меня возникла мысль что лучше он переодически будет проверять состояние системы и делать выводы. чем пропустит какоето событе и не выполнит их.
Так как у меня пока сложности с доступом к админке из инета я настроил управление режимами через телеграм. посылаю команду на изменение режима. Т.е. решил я в выхи приехать в теплый дом - посылаю команду включить нормальный режим отопления.
И хочу видет реакцию на эту команду сразу а не через 15 минут после команды. соответственно помимо выполнения по расписанию нужно еще и по событию запускать этот скрипт.
Как то так.
-
Хотя может я не правильно понял идиологию?
У меня есть некий набор действий который нужно выполнить в двух случаях:
1. По расписанию
2. По запросу пользователя.
Я предположил что можно написать скрипт "Набор действий" выполнения этих действий. далее пишу ещё два скрипта:
1. По расписанию раз в 20 минут выполнять "Набор действий"
2. В случае нажатия на кнопку выполнить "Набор действий"
Вроде как запуск скрипта возможен - runScript/startScript
Я использовал startScript. и он почемуто не сработал т.е. сперва я неправильно вводил название скрипта и были ошибки. но когда ввел правильно ничего не произошло.
Как такую задачу выполнять?
Есть вариант подписать скрипт на какуюнибудь переменную а других скриптах менять её. Но как то нелогично мне это. `
Ну вот. Т.е. хочется использовать скрипт как функцию. Т.е. это заданный набор действий который нужно производить при возникновении разных условий(запрос пользователя/расписание и т.п.). Скрипт этот анализирует несколько состояний и делает вывод о том какие набор действий ему произвести.
Конкретно мой случай:
Есть датчик температуры, есть текущее время и есть режим работы отопления.
Скрипт в зависимости от этих данных управляет котлом.
Режимы работы отопление:
1. Выключено. тут все понятно
2. Включено. Тут просто включается котел и жарит на все пироги.
3. Поддержка минимальной температуры. Тут вводится зависимость от температуры и времени. Система отопления на основе теплого пола. соответственно инертна. Настройки такие. с 7 утра до 23 вечера включать котел если температура упала ниже 5 градусов. с 23 до 7 утра включать если температура меньше 10. Сейчас этот режим. как правило за день температура падает на 2-3 градуса и становится равной 8. в 23 котел включается и прогревает помещение до 10 градусов и отключается. Т.е. работает ночью по ночному дешевому тарифу. Задача чтоб дом не замерз пока в нем никого нету
4. Поддержка нормальной температуры. Тоже что и пункт 3 только уставки 15 днем и 25 ночью соответственно. При желании приехать в дом - заранее включаю этот режим и дом к приезду должен прогреться.
Все это описано в скрипте. Режим работы - объект enum с соответствующими состояниями
Сейчас скрипт работает по расписанию. каждые 15 минут проверяет состояния и делает выводы включить или отключить котел. Можно было бы повесить на изменение температуры. но как то котел не включился из за того что скрипт почемуто пропустил запуск по расписанию. И у меня возникла мысль что лучше он переодически будет проверять состояние системы и делать выводы. чем пропустит какоето событе и не выполнит их.
Так как у меня пока сложности с доступом к админке из инета я настроил управление режимами через телеграм. посылаю команду на изменение режима. Т.е. решил я в выхи приехать в теплый дом - посылаю команду включить нормальный режим отопления.
И хочу видет реакцию на эту команду сразу а не через 15 минут после команды. соответственно помимо выполнения по расписанию нужно еще и по событию запускать этот скрипт.
Как то так. `
Я бы сделал что то подобное, это не рабочий вариант это как один из вариантовcreateState('Climat.mode', ''); on({id: 'температура', change: 'ne'}, function (obj) { Otoplenie(); }); on({id: 'Climat.mode', change: 'any'}, function (obj) { if (obj.newState.val){ Otoplenie(); } }); function Otoplenie(){ var RealTemp = parseFloat(getState('RealTemp').val).toFixed(2); var SetTemp = parseFloat(getState('SetTemp').val).toFixed(2); var Mode = getState('Climat.mode').val; var newDate = (new Date()).getTime(); var date = new Date(); var day = date.getDay(); // 0-воскр. 6-суббота var hour = date.getHours(); var min = (date.getMinutes()<10?'0':'') + date.getMinutes(); if(Mode === 'OFF'){ log('отопление отключено'); } else if (Mode === 'ON'){ log('включаем котел'); } else if (Mode === 'NORM'){ if (hour >= 8 && hour <= 18){ SetTemp = 15; } else { SetTemp = 25; } if (RealTemp > SetTemp){ log('выключаем котел'); } if (RealTemp < SetTemp){ log('включаем котел'); } } else if (Mode === 'AUTO'){ if (hour > 7 && hour < 23 && RealTemp < 5){ log('включаем котел'); } else if (hour > 23 && hour < 7 && RealTemp < 10){ log('включаем котел'); } else { log('выключаем котел'); } } }
-
Вот что значит отсутствие опыта!
Не думал что в одном скрипте можно несколько подписок сделать!
А функция у меня примерно такая же. ))
Все таки идеология следующая - скрипты используются для выполнения набора действий по подписке?
В качестве глобальной(ну или в пределах одного адаптера) функции, скрипты использовать не принято.
Видимо если уж так хочется то можно сделать свой модуль с нужным набором методов и подключать его в настройках адаптера.
-
Все таки идеология следующая - скрипты используются для выполнения набора действий по подписке? `
Не только, можно сделать по крону -
У меня пока так реализована обратная связь через телеграм
-
Т.е. exec выполняется асинхронно. Соответственно нельзя строить скрипт таким образом как я сперва задумал, а нужно строить на колбэках.
Сперва exec. внутри него основной скрипт. а если exec несколько http://www.comparateur-dependance-senior.com. то каждый последующий нужно запускать в колбэке предидущего? `
Довольно сложно это понятие, но для лучшего понимания требуется небольшое упражнение.