Управление выключателем (кнопкой)
-
но у меня не заработало! я предполагаю, что в сценарии BUTTON1.pressed используется BUTTON1, а у меня в устройствах нет такого ID а у меня кнопка SENSOR1
Уважаемый chass99, извините за задержку с ответом
В своих предположениях Вы абсолютно правы, в сценарии проекта нужно использовать имена устройств конкретного проекта.
Сейчас есть два решения:
1. Отредактировать файл test.json, заменив BUTTON1 на SENSOR1, после этого перезагрузить сервер (сценарии проекта сейчас загружаются на старте сервера).
2. Создать новое устройство, назвать его BUTTON1, т.к. изменить ID устройства можно только при его создании, и привязать шаблонный сценарий "Нажатие кнопки" к нему.
P.S. Идея " ЧАВО (FAQ) для новичка" очень правильная и своевременная, постараемся в ближайшем времени начать публикацию.
Ок, спасибо! Заменю, а что дальше ?
Хватит этих двух скриптов/сценариев? По идее нужно ведь ещё привязать ЛАМПЫ к этой кнопке, создав сценарий (PM - сценарии - по событиям устройств), так? А как настроить обработку двойного нажатия и длинного?
-
Хватит этих двух скриптов/сценариев? По идее нужно ведь ещё привязать ЛАМПЫ к этой кнопке, создав сценарий (PM - сценарии - по событиям устройств), так? А как настроить обработку двойного нажатия и длинного?
Обычно сценарий можно создать двумя способами - через интерфейс (PM - сценарии - по событиям устройств) или написать скрипт в виде файла.
Через интерфейс можно только обработать стандартное событие (нажато-отжато), а мы хотим нестандартное
Именно поэтому мы написали скрипт, который вы сохранили как test.json и загрузили в систему.
То есть сценарий по событию создавать НЕ НАДО, вместо него управлять лампами будет скрипт. Посмотрим, как его поменять для себя.
Скрипт стартует, когда шаблонный сценарий "Нажатие кнопки" определил, как именно нажата кнопка и установил свойство BUTTON1.pressed
"start": { "event": "BUTTON1", "if": "(BUTTON1.pressed > 0)" },
Здесь ничего менять не надо.
Дальше будут выполняться действия.
Здесь и нужно прописать то, что вы хотите получить при разных нажатиях BUTTON1.pressed (1-короткое, 2-двойное, 3-длинное).
{ "if": "BUTTON1.pressed == 1", "exec": { "do": "LAMP1.toggle", "wri": "Короткое нажатие, переключить LAMP1"} },
Для отладки делается запись в журнал ("wri") - это должно работать, если оба сценария подключены. Посмотрите, есть ли записи в журнале при нажатиях. Потом можно будет это убрать.
"do": - определяет, что нужно включить.
Сейчас по короткому нажатию переключается LAMP1, по двойному нажатию переключается LAMP2, по длинному обе выключаются.
Если у вас в проекте есть LAMP1 и LAMP2 - это должно работать.
Файл скрипта можно отредактировать любым текстовым редактором, который не добавляет разметку, например, "Блокнот" в Windows и заново загрузить.
Замените строки внутри do на свои команды, например
"do": "RELE1.on" - включить
"do": "VENT3.off" - выключить
"do": "LAMP8.toggle" - переключить
Если нужно выполнить несколько действий, они перечисляются через запятую
"do": "LAMP1.off,LAMP2.on"
Помните, что после редактирования файла сценария требуется перезагрузка сервера intrahouse (кнопка Перезагрузить в PM - Система - Параметры запуска сервера).
Или из консоли:
sudo service intrahouse stop sudo service intrahouse start
-
у меня добавление к предложению http://intrahouse.eu/forum/viewtopic.php?f=7&t=43
давайте ВМЕСТЕ делать " ЧАВО (FAQ) для новичка" или HOW-TO, с примерами решения конкретных ситуаций, чтобы любой желающий/начинающий разбираться с iH мог воспользоваться подготовленными решениями!!!
давайте, дорешаем с этой темой, а решение там опубликуете 8-)
Чтобы любой мог начать знакомство с iH подключив пару СветоДиодов и пару кнопок к Raspberry и настроить управление их взаимодействие, попробовав разные сценарии… :idea:
Спасибо! Предложение принимается
-
2. Создать новое устройство, назвать его BUTTON1, т.к. изменить ID устройства можно только при его создании, и привязать шаблонный сценарий "Нажатие кнопки" к нему.
выбрал вариант 2. предложенный вами
создал по новой -
1.добавил устройство "Датчик бинарный - Датчик универсальный два состояния" с ID BUTTON1
2.[Поведение] добавил Шаблон сценария - "Нажатия кнопки (Короткое, длинное, двойное)"
3.[Железо] привязал к GPIO21, Тип канала "Дискретный вход с подтяжкой pull_up", Инвертировать значение - вкл
в результате - Ура, заработали и кнопка и лампочки!!! :!:
но вылез проклятый "дребезг контактов" Подскажите, пожалуйста, как с ним бороться?
для примера "длинное нажатие" нажал на кнопку и отпустил через пару секунд, а вот что записалось в журнале…
Причем если посмотреть Отладчик - Устройства - Монитор BUTTON1 - то там отображается 0, а при нажатии 1, и нет мерцания "дребезга контактов"…
-
Обычно сценарий можно создать двумя способами - через интерфейс (PM - сценарии - по событиям устройств) или написать скрипт в виде файла.
Через интерфейс можно только обработать стандартное событие (нажато-отжато), а мы хотим нестандартное
Именно поэтому мы написали скрипт, который вы сохранили как test.json и загрузили в систему.
То есть сценарий по событию создавать НЕ НАДО, вместо него управлять лампами будет скрипт. Посмотрим, как его поменять для себя.
….
СПАСИБО за развернутый ответ!
оказывается всё довольно легко и просто (когда понимаешь)
-
Надеюсь поможет эта информация в борьбе с "дребезгом контактов"
Вот логи через Отладчик - Scene Server - Загрузка, старт/стоп сценариев
Это одиночное нажатие кнопки
Это двойное
Это длинное
-
У вас еще работают сценарии по событиям LAMP1 и LAMP2. Что они делают?
-
да, сделал на пробу два сценария, чтобы автоматом выключались лампы, LAMP1 через минуту после включения, LAMP2 через 10сек :oops:
сценарии РАБОТАЮТ!
Лампы выключаются через заданные интервалы, причем не зависимо как включать через физическую кнопку или мышкой на экране…
-
Как у вас проявляется дребезг? В логах не видим.
-
@intrahouse:
Как у вас проявляется дребезг? В логах не видим.
Проявляется - лампочки не понятно как срабатывают по крайней мере не так и не всегда как задумано, одно, двойное , длинное нажатие….
-
Попробуйте убрать все сценарии по событию для LAMP1 и LAMP2 и повторить эксперимент
-
Пробовал… То же самое...
-
Завтра проверим на работе
-
Хорошо, только кнопку подключите напрямую к raspberry
-
Проверили. На разных кнопках. И нашли кнопку где дребезг есть. Собственно это не кнопка, просто замыкал два проводочка.
А раз есть, надо его убирать.
Сделаем обработку дребезга на уровне плагина.
О результате сообщу.
-
-
заменил кнопку, на другую, работать стало гораздо лучше
логика работы не много не устраивает!
двойное нажатие зажигает сразу LAMP2, а вот одиночное нажатие - LAMP1 зажигается с задержкой ~2сек! не удобно…
хотел поиграть с настройкой таймеров - fm_butpress.pat
"timers":[ {"name":"T1","interval":"1", "call":"ontimer1"}, {"name":"T2","interval":"1", "call":"stop"}
изменил на "1" на "0.1", но сохранить изменения не могу - Permission Denied
подскажите, пожалуйста, как изменить и таймер и сохранить?
я хочу поэкспериментировать с задержками…
-
не дождался ответа, пришлось самому разбираться :ugeek:
сделал так, вместо 1 поставил 0.05
"timers":[ {"name":"T1","interval":"0.05", "call":"ontimer1"}, {"name":"T2","interval":"0.05", "call":"stop"}
стало быстрее реагировать!
-
@intrahouse:
Сделаем обработку дребезга на уровне плагина.
О результате сообщу.
Сделали обработку дребезга контактов. Можно обновиться и протестировать.
-
@intrahouse:
Сделали обработку дребезга контактов. Можно обновиться и протестировать.
Потестил, работает стабильно, спасибо!
Работает и как просто кнопка (без Поведения), так и с Поведением (Нажатие Короткое, длинное, двойное) правда для уменьшения задержки при включении LAMP1 изменил значения обоих Таймеров T1 и T2 с 1 на 0.1
"timers":[ {"name":"T1","interval":"0.1", "call":"ontimer1"}, {"name":"T2","interval":"0.1", "call":"stop"} ]