Здравствуйте. При помощи ChatGPT создал скрипт для управления шторами, но ничего не происходит :). Проверьте пожалуйста, в чем может быть проблема, или он целиком неправильный.
// Инициализация переменных
var motion_timer_timeout_ms = 30 * 1000; // Время движения штор (30 секунд)
var motion_timer_id = null; // Идентификатор таймера
var quantity = 0; // Счетчик нажатий
// Создание виртуального устройства для управления шторами
defineVirtualDevice("curtains", {
title: "Curtains", // Название виртуального устройства
cells: {
direction: {
type: "switch", // Переключатель для направления движения
value: false // Начальное значение: false (вверх)
},
moving: {
type: "switch", // Переключатель для отслеживания движения
value: false // Начальное значение: false (не движется)
}
}
});
// Функция для управления движением штор
function controlCurtains() {
if (!dev["curtains"]["moving"]) {
// Если шторы не движутся, начать движение
dev["curtains"]["moving"] = true;
dev["wb-gpio"]["ext2_dir1"] = dev["curtains"]["direction"]; // Установить направление движения
dev["wb-gpio"]["ext2_on1"] = true; // Включить движение
motion_timer_id = setTimeout(function () {
stopCurtains();
}, motion_timer_timeout_ms); // Остановить через 30 секунд
} else {
// Если шторы движутся, остановить движение
stopCurtains();
}
}
// Функция для остановки движения штор
function stopCurtains() {
dev["curtains"]["moving"] = false;
dev["wb-gpio"]["ext2_on1"] = false; // Выключить движение
if (motion_timer_id) {
clearTimeout(motion_timer_id); // Очистить таймер
motion_timer_id = null;
}
}
// Обработчик нажатия кнопки на 12-м входе
defineRule("curtainsControl", {
whenChanged: "wb-gpio/ext1_in12", // Вход для кнопки
then: function (newValue, devName, cellName) {
if (newValue) {
quantity++;
if (quantity == 1) {
dev["curtains"]["direction"] = !dev["curtains"]["direction"]; // Изменить направление
controlCurtains();
}
}
}
});
// Обработчик изменения состояния виртуального устройства
defineRule("virtualCurtainsControl", {
whenChanged: "curtains/direction", // Переключатель направления
then: function (newValue, devName, cellName) {
dev["curtains"]["direction"] = newValue; // Обновить направление движения
if (dev["curtains"]["moving"]) {
controlCurtains(); // Если шторы движутся, изменить направление
}
}
});
Добрый день.
Для начала - расскажите как должен работать скрипт?
Зачем вот это? Правило “curtainsControl” выполниится один раз и до перезапуска?
Скрипт должен выполнить следующее:
- создать виртуальное устройство
- при нажатии кнопки шторы должны двигаться 30 сек
- если шторы двигаются, и кнопка нажата, шторы должны остановиться
- при следующем нажатии движение должно начаться в противоположном направлении
эээ :). не могу ответить ), скрипт целиком написан в Copilote ),и хотелось бы чтобы он начал работать )
То есть ожидаете что я напишу работающий скрипт? Нет, боюсь именно написание в функции техподдержки не входит.
Можем помочь в том случае если есть какая-то ошибка, например.
Нет, что вы. Я думал, если в скрипте есть явная ошибка, которую можно быстро исправить, вы бы подсказали. Если скрипт целиком неработоспособный, то конечно я не прошу его написать заново.
Нет, ну прямо явных синтаксических ошибок я не вижу. Но как оно должно все вместе работать - понять не удается.
Держи мой обработчик нажатий, в том числе для штор.
onbuttonpress.js (8,4 КБ)
curtain.js (8,4 КБ)
onbuttonpress и curtain в wb-modules
И пример правила, подстрой под себя уже сам
Обработка нажатий:
function curtain_open_close(device) {
if(dev[device]['positionNow'] < 95 && dev[device]['positionNow'] > 50 || dev[device]['positionNow'] <= 5) {
dev[device]['position'] = 100;
}
else if(dev[device]['positionNow'] <= 50 && dev[device]['positionNow'] > 5 || dev[device]['positionNow'] >= 95) {
dev[device]['position'] = 0;
}
}
function curtain_stop(device) {
dev[device]['direction'] = 'stop';
}
/**/
btn = require('onbuttonpress');
btnPressTimeout = 500; //Время короткого нажатия
btnPressLongTimeout = 700; //Время длинного нажатия
/*
btn.onButtonPress(
{
name: "wb-gpio/EXT1_IN8", title: "Гостиная - S10"
},
{
singlePress: EXT1_IN8_single,
doublePress: EXT1_IN8_double,
threePress: EXT1_IN8_three,
longLaunch: EXT1_IN8_launch,
longRelease: EXT1_IN8_release
},
1000, btnPressLongTimeout
);
function EXT1_IN8_single(on_off_state) {
if(on_off_state == true ) {
dev['wb-mr6c_51']['K3'] = true;
}
else {
dev['wb-mr6c_51']['K3'] = false;
}
}
function EXT1_IN8_double(on_off_state) {
if(on_off_state == true ) {
dev['wb-mr6c_65']['K3'] = true;
}
else {
dev['wb-mr6c_65']['K3'] = false;
}
}
function EXT1_IN8_three(on_off_state) {
curtain_open_close('Curtian1');
}
function EXT1_IN8_launch(on_off_state) {
curtain_open_close('Curtian1');
}
function EXT1_IN8_release(on_off_state) {
curtain_stop('Curtian1');
}
Таймауты штор:
curtian = require('curtain');
curtian.newCurtain(
{
name: "Curtian1",
title: "Штора - Гостиная"
},
{
// timer: 15000, //Время открытия в ms
timer: 20000, //Время открытия в ms
changeDirectionTimeout: 1000, //Время изменения направления
directionRevers: false,
powerRelay: { module: "wb-mio-gpio_135:1", channel: "ON1" },
directionRelay: { module: "wb-mio-gpio_135:1", channel: "DIR1" }
}
);
1 лайк
Привет, правило для управления шторами
Правило создает виртуальное устройсво для управления Шторами\Жалюзи\Маркизами итд с возможностью установить положение
Правило так же принимает команды OPEN\CLOSE\STOP (В верхнем регистре!)
Направление открытия, у кого то может быть что 100 процентов это закрыто у кого то открыто, для этого на строке 136 и 138 надо поменять значния со 100 на 0 и с 0 на 100 или перекидываем фазы двигателя
Формула: makeBaseCover(‘Название’, ‘Топик’, Секунд, ‘Устройсво R10R-4/DIR1’, ‘Устройсво R10R-4/ON1’);
Название: Название которое будет отображатся в панели WB
Топик: префикс топика в MQTT Chanels Cover_Префикс (Cover_mark1)
Секунды: Сколько секунд требуется для открытия\закрытия на основании этого будет высчитыватся процент
Устройство\Контрол: Можно взять из певрой колонкив MQTTChannels (Устройство/Контрол")
Дополнительно приложил файл как прописывать в HA
в HA используется домен cover
В конфине не забываем добавить или прописать
mqtt:
Шторы
cover: !include_dir_merge_list includes/cover
curtains.js (9,7 КБ)
mio-gpio_83_1.yaml (1,8 КБ)
1 лайк
Добрый день.
Сохраните пожалуйста файл
например просто текстом в сообщениии. Движок формума не дает выполнять операции с .js файлами.