Движок правил: примеры кода

Страно, что tyt работает вообще никак. Вот смотрите, фрагмент кода вашего, с добавками.

        var lat = 56.06;
  	var lng = 92.52;
        var date = new Date();

times =SunCalc.getTimes(date, lat, lng);
var sunrise = times.sunrise;
var sunset  = times.sunset;
now1 = new Date(); 
now= dateAdd(now1, 'hour', 0);
log ("Заданная дата\t", now);
log ("Восход\t\t", sunrise);
log ("Закат\t\t", sunset);
var darkness = 1;
    if (now < sunset)
{
    dev["wb-gpio"]["EXT1_R3A1"] = 1;
  	log (1);
}
else 
{
    dev["wb-gpio"]["EXT1_R3A1"] = 0;
   log (0);
}

Добавляя в dateAdd часы вы можете убедиться, что в лог пишется то 1, то 0. Вот честно, ставьте везде логгирование, сразу все становится на порядок понятнее.

Добрый день.
Как-то можно добавить окно для ввода параметров или сделать “ползунок” для выбора в определенном диапазоне, например для отслеживания определенной температуры?

Как-то можно добавить окно для ввода параметров или сделать “ползунок” для выбора в определенном диапазоне, например для отслеживания определенной температуры?

Ползунок сделать легко :

defineVirtualDevice("yourNameDevice", {
	title : "Название ползунка",
	cells : {
		testRange : {
			type : "range",
			value : 0,
			max : 30
		}
	}

А вот поля для ввода нет, что является очень большим косяком.

Ползунок сделать легко :slight_smile:

Спасибо.

И не будет его или это не известно?

Поле будет в новой версии веб-интерфейса. Срок его выхода точно не скажу, но не ранее, чем через пару месяцев

Добрый вечер.
Как минимум поставить?

defineVirtualDevice("auto_heated_home", {
    title: "Автоматический подогрев дома",
    cells: {
        'Включить подогрев': { // Кнопка, включить подогрев всегда в автоматического режиме
            type: "switch",
            value: false
        },
        'Включить с 23-7': { // Кнопка, включить автоматический подогрев только с 23 до 7
            type: "switch",
            value: false
        },
      	"Inside_Temperature": {
			type : "range",
			value: inside_temp,
          	max : 8,
			max : 30
		},
    }
});

– Inside_Temperature - это название ползунка, как его сделать на русском, но при этом присвоить ему “правильное” латинское имя в коде?

  1. в текущей стабильной версии интерфейса - никак.
var channel_name = "auto_heated_home/Inside_Temperature";
...
dev[channel_name] = 123;

Друзья, подскажите, можно ли через dev['foo/bar'] отправлять retained-значения? Или только через publish?

Хочу чтобы при перезагрузке значения контроллов виртуальных девайсов сохранялись.

Поле будет в новой версии веб-интерфейса. Срок его выхода точно не скажу, но не ранее, чем через пару месяцев

К сожалению, те-же слова звучали ещё год назад…

Теперешние пару месяцев будут гораздо короче, чем прошлогодние.

4 Likes

Здравствуйте. Выставил часовой пояс на контроллере. date теперь показывает Tue Nov 21 12:36:07 MSK 2017 - правильное время. Но правило, определенное для крон с указанием времени работает только для времени UTC.

defineRule("cron_0911", {
    when: cron("0 10 9 * * *"),
    then: function () {
        log("cron");
        if (dev["drb88_9"]["Relay 1"]) {
            dev["drb88_9"]["Relay 1"] = 0;
        } else {
            dev["drb88_9"]["Relay 1"] = 1;
        }
    }
});

Это правило сработает в 12:10 по Московскому времени. Так и должно быть?

И замечание. У вас в документации написано “Вместо @hourly здесь можно задать любое выражение, допустимое в стандартном crontab, например, 0 20 * * * (выполнять правило каждый день в 20:00).”
Но это не так, первый символ это секунды, а не минуты. И об этом написано по ссылке, которая у вас в тексте.

Как правильно создать defineVirtualDevice с типом integer или float?
Чтоб, например, передавать значения типа колограмм…

1 Like

Люди добрый помогите пожалуйста непрограммисту составить шаблоны правил для следующих задач, которые будут востребованы в 100% случаях при использовании WB в домашней автоматизации:

  1. Управление несколькими реле по изменению счетчика dev["device/Input "x" counter с предварительной проверкой состояния реле (если хотя бы одно реле On, то выкл все. если все off то вкл все.
  2. Аналогичное, но с добавлением в правило каналов диммера.
  3. Обработка двойного нажатия для определенного ```dev["device/Input “x” counter``. Т.е. запуск таймера после n+1, далее ожидание n+2, далее сброс таймера, анализ n и выполнение разных функций для n+1 и для n+2.
  4. Правило для постановки на сигнализацию определенных dev["device/Input "x" при отработке определенной функции, а также оповещение при сработке входа.
  5. Различные правила для ```dev["device/Input “x” counter` в зависимости от времени суток.
  6. Создание многонаборных сценариев, для виртуальных устройств: напр. включение димера на 20%+включение реле1+ реле5+ температура пола 26.
  7. Настройка алиасов для входных каналов : например вместо ```dev["device/Input “x”] применять одну глобальную переменную “button1”.
  8. То же самое для каналов реле - тут сложности: как система поймет что алиас “rele1” в одном случае это dev[device/K1], а в другом dev[device][K1]
  9. Как правильно структурировать правила - вкладывать все обработки в одну функцию (проверка времени суток, проверка состояния, проверка количества нажатий" или лучше разносить обработки в разных функциях, тогда какие должны выполняться раньше?
  10. будут дополняться

p.s. простое изложение данных шаблонов увеличит количество желающих приобрести Ваше оборудование. Возможно стоит выделить отдельную тему и назвать ее типа “Умный дом на WB для чайников”)))))

Может кто возьмется за плату составить шаблоны на выше указанные задачи?

5 сообщений перенесены в новую тему: Правило на групповое управление светом

(сообщение удалено автором)

4 Likes

Добрый вечер. Подскажите, как использовать переменные с восходом и закатом. Как сделать так, чтобы при наступлении восхода или заката сработало реле, которое выключает/включает уличное освещение. У меня, на данный момент, скрипт срабатывает только при обновлении или сохранении файла правила

Добрый день!
пытаюсь расположить функцию в отдельном js-файле, а ее вызов в другом и получаю ошибку:

Script error: ReferenceError: identifier ‘onButtonPress’ undefined
duk_js_var.c:1232
anon /etc/wb-rules/light_switches.js:42 preventsyield

нужно как-то специально указывать что функция расположена в другом файле?

И еще вопрос: при вызове функции, например, с параметром longPress, как передать несколько устройств (нужно по долгому нажатию выключать несколько реле)? и как задать какое значение должно принять реле (true/false)?

Спасибо!

Рекомендую сразу перейти на Бета-тестирование новой версии движка правил и прочитать
https://wirenboard.com/wiki/index.php/Движок_правил_wb-rules_2.0#.D0.98.D0.B7.D0.BE.D0.BB.D1.8F.D1.86.D0.B8.D1.8F_.D1.81.D1.86.D0.B5.D0.BD.D0.B0.D1.80.D0.B8.D0.B5.D0.B2

как понять какая версия движка установлена?

и может быть я не корректно читал, но я не нашел как функцию описать в одном файле, а вызывать из другого…

@almo
и все-таки, как корректно указать что нужно выключить несколько устройств при долгом нажатии?