Управление выключателем (кнопкой)



  • попалось на глаза описание УД https://geektimes.ru/post/269080/

    понравилось описание сценариев управления светом…

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

    Первый вариант интерфейса выглядел примерно так (сейчас уже не помню точно):

    короткое нажатие — включение или выключение света (включался свет на последнем уровне яркости)

    долгое нажатие при включенном свете — плавное уменьшение яркости, а потом проходя через ноль увеличение

    долгое нажатие при выключенном свете — плавное увеличение от нуля

    двойное нажатие включение света на полную яркость.

    С этим вариантом я жил несколько месяцев, но потом пришел к выводу, что он все-таки не очень-то удобен и чаще всего используются только 3 режима — свет включен, свет выключен или свет включен на минимальную ярость. Поэтому я реализовал более простой дискретный вариант (который остается до сих пор):

    короткое нажатие — включение/выключение света (включается на полную яркость)

    длинное нажатие — включает свет на 25% яркости и переводит в режим диммера;

    каждое следующее нажатие переводит на следующую ступень +25%. Выход из режима диммера — по таймауту.

    Как я уже говорил в предыдущем посте, управление одиночными кнопками без фиксации — все-таки не лучшее решение. Кроме примера с диммером, который я только что привел, я еще реализовал сложный сценарий включения света в гостиной. Мы предпочитаем не использовать верхний свет в гостиной и сразу включаем настольную лампу и подсветку в шкафу. Я автоматизировал этот процесс и сейчас управление светом в гостиной выглядит так:

    одно нажатие (если лампа выключена) — включает лампа и подсветку

    одно нажатие (если лампа включена) — включает или выключает верхний свет

    одно нажатие сразу за вторым (когда выключился верхний свет) — гасит настольную лампу

    длинное нажатие — выключает весь свет в комнате

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



  • уважаемые разработчики iH, Хотелось бы иметь механизм создания подобных сценариев 😉



  • @chas99:

    уважаемые разработчики iH, Хотелось бы иметь механизм создания подобных сценариев 😉

    Сделать можно, написав немного скриптов 🙂

    Немного offtop: в своих проектах мы редко используем выключатели напрямую, так как в основном придерживаемся идеи - основополагающие вещи должны работать, даже если УД отключить. Поэтому обычно выключатели импульсные, работают стандартно и никого не пугают, а интеллектуальное управление - с телефона, панели, компьютера..

    Конечно, сценарные панели мы используем и их можно программировать в системе. Но для RPI просто не добавляли каналы этого вида.

    Но, используя механизм сценариев, сделать можно все что угодно:

    1. Для бинарного датчика реализуем поведение "Кнопка" с помощью шаблонного сценария, который создаст свойство pressed и будет присваивать значения:

    1 - при коротком нажатии, 2 - при двойном нажатии, 3 - при длинном нажатии

    [{
    	"patname":"butpress",
    	"patnote":{
    		"ru":"Нажатия кнопки (короткое, длинное, двойное)",
    		"en":"Button pressing"
    		},
    
    	"param":{"BUT":{"note":{"ru":"Кнопка","en":"Button"}, "type":"100"}
    	},
    
    	"maindev":"#BUT#",
    	"scenname":"#BUT#",
    
    	"userparam":[
    		{"prop":"pressed", "defval":0, "type":"num"},
    		{"prop":"fin",     "defval":0, "type":"num"}
    	],	
    
    	"start":{
    		"event":"#BUT#",
    		"if":"(#BUT#.dval == 1)"
    	},
    
    	"stop":{
    		"event":"#BUT#",
    		"if":"(#BUT#.dval == 0) && (#BUT#.fin>0)"
    	},
    
    	"listen":[{"event":"#BUT#", "call":"onbut"}],	
    
    	"timers":[
    		{"name":"T1","interval":"1",  "call":"ontimer1"},
    		{"name":"T2","interval":"1",  "call":"stop"}
    	], 
    
    	"functions":{	 
    		"start":{ "exec":{"timer":"T1.start", "do":"#BUT#.pressed:0,#BUT#.fin:0"}  },
    
    		"onbut":[
    			{"if":"(#BUT#.dval == 0) && (TIMER.T1.in)", 
    				"exec":{"timer":"T1.stop,T2.start"} },
    			{"if":"(#BUT#.dval == 1) && (TIMER.T2.in)",
    				"exec":{"timer":"T2.stop", "do":"#BUT#.pressed:2,#BUT#.fin:1"} }
    		],
    
    		"ontimer1":{ "exec":{ "do":"#BUT#.pressed:3,#BUT#.fin:1"}  },
    
    		"stop":[
    			{"if":"(#BUT#.fin == 0)",  
    				"exec":{"do":"#BUT#.pressed:1,#BUT#.fin:1"} }
    		]	
    	}			
    }
    ]
    
    
    

    Такой сценарий мы сделали и включили в обновление.

    Он будет появляться при нажатии на кнопку "Поведение" для "Дискретного универсального датчика" (тип=100).

    Времена сейчас такие: до 1 сек - короткое нажатие, интервал между кликами для двойного - тоже 1 сек.

    При желании можно в файле поменять времена, поэкспериментировать… Файл /opt/intrahouse/server/scenpat/fm_butpress.pat

    Можно создать свой шаблон и сохранить под другим именем (кроме имени файла, обязательно поменять и patname), иначе он перезапишется при обновлении.

    2. Теперь хотелось бы выполнять разные действия при разных нажатиях, например:

    Будем LAMP1 переключать при коротком нажатии, LAMP2 - при двойном, а при длинном мы оба светильника выключим. Все свои действия запишем в журнал.

    Для этого напишем сценарий, который работает по событию BUTTON1.pressed

    {
        "scenname": "mybut1",
        "note": "Сценарии кнопки BUTTON 1",
    
        "start": {
            "event": "BUTTON1",
            "if": "(BUTTON1.pressed > 0)"
        },
    
        "functions": {
            "start": [
                { "if": "BUTTON1.pressed == 1",
                 	 "exec": { "do": "LAMP1.toggle", "wri": "Короткое нажатие, переключить LAMP1"}  },
                { "if": "BUTTON1.pressed == 2", 
                	 "exec": { "do": "LAMP2.toggle", "wri": "Двойное нажатие,  переключить LAMP2"}  },
                { "if": "BUTTON1.pressed == 3", 
                	 "exec": { "do": "LAMP1.off,LAMP2.off", "wri": "Длинное нажатие, выключить LAMP1 и LAMP2" }  },
                {"exec": {"do": "BUTTON1.pressed:0" }  }
            ]
        }
    }
    
    
    

    Действия устройств: on - включить, off - выключить, toggle - переключить.

    Это уже не шаблонный сценарий, который можно применять к различным устройствам, а обычный базовый сценарий, в нем используются имена устройств конкретного проекта, хранятся такие сценарии в папке /opt/intrahouse/base/scenbase.

    Если сценарий лежит в папке scenbase, он загружается при старте системы и будет выполняться без всяких привязок.

    Файл можно загрузить и просмотреть через интерфейс: PM->Сценарии/ Скрипты/ Скрипты проекта, но редактировать пока нельзя. В ближайшем времени будет добавлен новый формат для сценариев с использованием синтаксиса JavaScript, но пока это голый JSON и в принципе легко ошибиться, не поставив кавычки или запятую.

    При интерактивной загрузке выполняется проверка на валидность JSON формата, не валидный файл не загружается.

    Проверить синтаксис JSON можно разными способами, в т.ч. online



  • @intrapro:

    Немного offtop: в своих проектах мы редко используем выключатели напрямую, так как в основном придерживаемся идеи - основополагающие вещи должны работать, даже если УД отключить. Поэтому обычно выключатели импульсные, работают стандартно и никого не пугают, а интеллектуальное управление - с телефона, панели, компьютера..

    Конечно, сценарные панели мы используем и их можно программировать в системе. Но для RPI просто не добавляли каналы этого вида.

    Спасибо за развёрнутый ответ ! 😄

    Раз можно сделать, то это хорошо, надеюсь, что с вашей помощью разберусь 😉

    По поводу выключателей, можете схему электрическую показать,того как делаете вы? хочу понять как сделать, чтобы в случае 'поломки'/отключения УД, свет продолжил работать от выключателей….



  • @chas99:

    @intrapro:

    Немного offtop: в своих проектах мы редко используем выключатели напрямую, так как в основном придерживаемся идеи - основополагающие вещи должны работать, даже если УД отключить. Поэтому обычно выключатели импульсные, работают стандартно и никого не пугают, а интеллектуальное управление - с телефона, панели, компьютера..

    Конечно, сценарные панели мы используем и их можно программировать в системе. Но для RPI просто не добавляли каналы этого вида.

    Спасибо за развёрнутый ответ ! 😄

    Раз можно сделать, то это хорошо, надеюсь, что с вашей помощью разберусь 😉

    По поводу выключателей, можете схему электрическую показать,того как делаете вы? хочу понять как сделать, чтобы в случае 'поломки'/отключения УД, свет продолжил работать от выключателей….

    Ниже два варианта
    schir101.jpg
    Вариант 1 - с промежуточным реле.

    Главное достоинство - можно отключить весь умный дом со всеми блоками питания, но управление светом с кнопочного выключателя сохраняется.

    Недостатки:

    1. Дороже

    2. На кнопочный выключатель нужно тянуть силовой кабель. Но этот недостаток переходит в достоинство в случае отказа от системы управления. Силовые кабели перекладывать не потребуется.

    Вариант 2

    Достоинства:

    1. Дешевле. Используется только одно импульсное реле на 12-24 В

    Недостатки:

    1. Требуется отдельный блок питания на 12 или 24В. Этот блок питания должен работать независимо от того, включена система Умный дом или нет.



  • @intrahouse:

    Вариант 1 - с промежуточным реле.

    Главное достоинство - можно отключить весь умный дом со всеми блоками питания, но управление светом с кнопочного выключателя сохраняется.

    Недостатки:

    1. Дороже

    2. На кнопочный выключатель нужно тянуть силовой кабель. Но этот недостаток переходит в достоинство в случае отказа от системы управления. Силовые кабели перекладывать не потребуется.

    Вариант 2

    Достоинства:

    1. Дешевле. Используется только одно импульсное реле на 12-24 В

    Недостатки:

    1. Требуется отдельный блок питания на 12 или 24В. Этот блок питания должен работать независимо от того, включена система Умный дом или нет.

    Отлично! спасибо!

    в 1м варианте, что имелось ввиду под Силовые кабели перекладывать не потребуется. ?

    если вы про существующую проводку, то ведь как правило выключатель идет от лампы, и от щетка идет один кабель на все лампы… или что-то другое...?

    я правильно понимаю?

    Управление - GPIOx выход с raspberry (через "развязку") если без реле, то это выход на лампу

    Состояние - GPIOy вход на raspberry (через "развязку") если без реле, то для подключения к кнопке

    в приведенных вами вариантах, отпадает возможность сценарного управления с кнопки (одно, два, долгое нажатие...) 😞

    хотелось бы такой вариант - УД работает, и всё работает через него (без дополнительных реле), а в случае отключения УД, включить (ручками) БП и управление через теже кнопки, но уже через реле так, как кнопки подключены к щитку по витой паре…



  • @chas99:

    в 1м варианте, что имелось ввиду под Силовые кабели перекладывать не потребуется. ?

    если вы про существующую проводку, то ведь как правило выключатель идет от лампы, и от щетка идет один кабель на все лампы… или что-то другое...?

    Это про кабель от выключателя. В первом варианте к выключателю идет кабель на 220В, во втором можно любой слаботочный (например КСПВ)
    @chas99:

    я правильно понимаю?

    Управление - GPIOx выход с raspberry (через "развязку") если без реле, то это выход на лампу

    Состояние - GPIOy вход на raspberry (через "развязку") если без реле, то для подключения к кнопке

    Я показал на схемах выше принцип управления с помощью импульсных реле.

    На схеме ниже вариант для Raspberry Pi
    schem301.jpg
    На данной схеме:

    GPIO17 работает как вход (состояние светильника)

    GPIO23 работает как выход (управление светильником)
    @chas99:

    в приведенных вами вариантах, отпадает возможность сценарного управления с кнопки (одно, два, долгое нажатие…) 😞

    хотелось бы такой вариант - УД работает, и всё работает через него (без дополнительных реле), а в случае отключения УД, включить (ручками) БП и управление через теже кнопки, но уже через реле так, как кнопки подключены к щитку по витой паре…

    Физику не обманешь. Или так или так.

    В этих вариантах мы управляем импульсным реле непосредственно с кнопки. И параллельно с системы Умный дом.

    Принцип работы импульсного реле для информации на всякий случай:

    импульсом дали напряжение на катушку реле - реле переключилось. Второй импульс - переключилось в другую сторону. И так по кругу.



  • В ваших вариантах получается, что кнопка не подключена к УД и соответственно не может давать ему команды, а УД считывает состояние лампы, что для простого вкл/выкл лампы одно и тоже… Но ограничивает функционал управления , о чём я писал выше...

    Ок надо ещё "покурить" эту тему 😉

    А скажите пожалуйста как у вас реализовано диммирование лампами, Электрическая часть ?



  • @chas99:

    В ваших вариантах получается, что кнопка не подключена к УД и соответственно не может давать ему команды, а УД считывает состояние лампы, что для простого вкл/выкл лампы одно и тоже… Но ограничивает функционал управления , о чём я писал выше...

    Ок надо ещё "покурить" эту тему 😉

    Надо исходить из задачи. Требуется управление светом независимо от системы Умный дом.

    В этом решении мы можем управлять светом просто с выключателя. При этом система знает о состоянии светильника 🙂

    Конечно в этом решении кнопочный выключатель не обрабатывается системой. Но невозможно сделать автономное управление светом и одновременно навесить дополнительный функционал на кнопку. Хотя, конечно можно что-то накрутить, но не думаю что это будет простым решением. Проще поставить дополнительный 2-4 клавишный выключатель, завести его на входы и обрабатывать различные нажатия. Обычно мы так и делаем. И называется он у нас "Сценарный выключатель". Это потому, что на кнопки этого выключателя можно навесить любые сценарии. Хоть свет, хоть климат, хоть ворота. Что угодно 😄
    @chas99:

    А скажите пожалуйста как у вас реализовано диммирование лампами, Электрическая часть ?

    Через Raspberry вероятно только ШИМ для светодиодных светильников. Мы не пробовали. Диммирование делали в проектах с использованием контроллеров. Там варианты Dali, 0-10V

    Но мое личное мнение. Спорное 😉 но основаное на некотором опыте работы с заказчиками.

    Диммеры не нужны 🙂 Первое время поиграться. Потом уже не интересно.

    Лучше сделать несколько групп света.



  • @intrahouse:

    Диммеры не нужны 🙂 Первое время поиграться. Потом уже не интересно.

    Лучше сделать несколько групп света.

    Считаю также. Однако с развитием технологий интересной изюминкой в освещении являются RGB люстры - это как Ambilight, который прежде был только у ТВ Philips. Утром проснулись включили один свет, вечером другой - по настроению. Может быть и игрушка, но можно автоматизировать - хоть в качестве цветомузыки использовать:). А с помощью RGB-лент, правильно смонтированных в оконных проемах, можно удлинять световой день (читал исследование - для мужчин очень благотворно влияет)!



  • смотрите что у меня получается (в голове) -

    1. есть кнопка/выключатель мы её подключаем к GPIO17 через PC817 (для гальванической развязки)… пока логично 😉

    2. есть силовые контакты реле управляющие лампой, параллельно им мы подключаем НР контакты импульсного реле (ИР, возьмем на 12в). тут вроде тоже всё логично

    3. теперь управление ИР, мы переключателем типа П2К ( УД / Ручное) отключаем от +12в и оно не работает и нам ни как на работу не влияет!

    4. остается решить как управлять ИР от кнопки/выключателя... самый простой вариант (на мой взгляд) контакт кнопки через переключатель подключать или к GPIO17 или к управлению ИР.

    Раньше часто использовались переключатели П2К (сейчас может уже есть что поновее), но смысл в том, что два фиксируемых положения и достаточное кол-во коммутируемых пар контактов.

    В итого получается в одном положении УД (12в отключено от ИР + кнопка подключена к Raspberry), работает УД со всеми прелестями , в другом положении Ручное (12В подключено к ИР, кнопка подключена к управлению ИР 😉

    понятно, что я насочинял? или нужно схему нарисовать ?

    как вам такой вариант?



  • Дома делая ремонт (давно) понаставил кучу светильников и 6 штук подключил через кнопки-диммеры (Legrand), так вот в спальне у прикроватных бра, диммерами очень часто пользуюсь, почитать с небольшой подсветкой 🙂

    в зале после замены ламп накаливания на светодиодные, диммерами перестал пользоваться так СД моргают 😢

    Купил на пробу одну СД-лампу умеющую работать с диммером, (правда она дорогая по сравнению с обычными СД ~500р) работает…

    Когда в комнате одна люстра и больше нет светильников, то диммирование этой люстры востребовано...

    Но согласен - что зонирование света и управление через группы - прекрасный вариант 😄



  • @chas99:

    понятно, что я насочинял? или нужно схему нарисовать ?

    Лучше схема. А вообще на форуме ab-log приводили также рабочие схемы.

    П2К - очень не технологичное подключение… мне кажется если есть такие новые кнопки с фиксацией, то к ним все равно надо делать какой-то переходник на клеммники и чтобы это все вставало на DIN-рейку желательно. Представляете весь клубок проводов, который будет приходить на одну кнопку с несколькими группами? 😮 По мне - для того же света идеально использовать MegaD - упал сервер УД, контроллер MegaD работает самостоятельно. Сгорел контроллер - отсоединил питание, шлейф, поменял на новый, локально залил на него конфиг (делов на 10 минут). Это проще и намного дешевле чем покупать кучу импульсных реле!



  • @Alex_Jet:

    По мне - для того же света идеально использовать MegaD - упал сервер УД, контроллер MegaD работает самостоятельно. Сгорел контроллер - отсоединил питание, шлейф, поменял на новый, локально залил на него конфиг (делов на 10 минут). Это проще и намного дешевле чем покупать кучу импульсных реле!

    дайте пожалуйста, ссылочку про MegaD почитать (для управления светом) он работает в связке с iH ?



  • @chas99:

    дайте пожалуйста, ссылочку про MegaD почитать (для управления светом) он работает в связке с iH ?

    ab-log.ru - один из самых лучших сайтов по УД. Там цикл статей про автоматизацию частного дома. Да, с некоторых пор работает.



  • @intrahouse:

    v17.01.15.01 - Добавлен шаблон сценария для обработки короткого, длинного и двойного нажатия кнопок

    Подскажите пожалуйста, как этим воспользоваться?



  • @intrapro:

    @chas99:

    уважаемые разработчики iH, Хотелось бы иметь механизм создания подобных сценариев 😉

    Сделать можно, написав немного скриптов 🙂

    ..

    Но, используя механизм сценариев, сделать можно все что угодно:

    1. Для бинарного датчика реализуем поведение "Кнопка" с помощью шаблонного сценария, который создаст свойство pressed и будет присваивать значения:

    1 - при коротком нажатии, 2 - при двойном нажатии, 3 - при длинном нажатии

    ..

    Такой сценарий мы сделали и включили в обновление.

    Он будет появляться при нажатии на кнопку "Поведение" для "Дискретного универсального датчика" (тип=100).

    Времена сейчас такие: до 1 сек - короткое нажатие, интервал между кликами для двойного - тоже 1 сек.

    При желании можно в файле поменять времена, поэкспериментировать… Файл /opt/intrahouse/server/scenpat/fm_butpress.pat

    Можно создать свой шаблон и сохранить под другим именем (кроме имени файла, обязательно поменять и patname), иначе он перезапишется при обновлении.

    я правильно понимаю, что такой скрипт уже есть в iH ? вот он…
    2017-01-19_210215.jpg

    @intrapro:

    2. Теперь хотелось бы выполнять разные действия при разных нажатиях, например:

    Будем LAMP1 переключать при коротком нажатии, LAMP2 - при двойном, а при длинном мы оба светильника выключим. Все свои действия запишем в журнал.

    Для этого напишем сценарий, который работает по событию BUTTON1.pressed

    > {
    >     "scenname": "mybut1",
    >     "note": "Сценарии кнопки BUTTON 1",
    >     
    >     "start": {
    >         "event": "BUTTON1",
    >         "if": "(BUTTON1.pressed > 0)"
    >     },
    >     
    >     "functions": {
    >         "start": [
    >             { "if": "BUTTON1.pressed == 1",
    >              	 "exec": { "do": "LAMP1.toggle", "wri": "Короткое нажатие, переключить LAMP1"}  },
    >             { "if": "BUTTON1.pressed == 2", 
    >             	 "exec": { "do": "LAMP2.toggle", "wri": "Двойное нажатие,  переключить LAMP2"}  },
    >             { "if": "BUTTON1.pressed == 3", 
    >             	 "exec": { "do": "LAMP1.off,LAMP2.off", "wri": "Длинное нажатие, выключить LAMP1 и LAMP2" }  },
    >             {"exec": {"do": "BUTTON1.pressed:0" }  }
    >         ]
    >     }
    > }
    > 
    > 
    

    Действия устройств: on - включить, off - выключить, toggle - переключить.

    Это уже не шаблонный сценарий, который можно применять к различным устройствам, а обычный базовый сценарий, в нем используются имена устройств конкретного проекта, хранятся такие сценарии в папке /opt/intrahouse/base/scenbase.

    Если сценарий лежит в папке scenbase, он загружается при старте системы и будет выполняться без всяких привязок.

    Файл можно загрузить и просмотреть через интерфейс: PM->Сценарии/ Скрипты/ Скрипты проекта, но редактировать пока нельзя. В ближайшем времени будет добавлен новый формат для сценариев с использованием синтаксиса JavaScript, но пока это голый JSON и в принципе легко ошибиться, не поставив кавычки или запятую.

    При интерактивной загрузке выполняется проверка на валидность JSON формата, не валидный файл не загружается.

    Проверить синтаксис JSON можно разными способами, в т.ч. online

    Я скопировал ваш код в файл test.json и загрузил его в iH, и он в системе
    2017-01-19_210806.jpg
    правильно я сделал?

    но у меня не заработало! я предполагаю, что в сценарии BUTTON1.pressed используется BUTTON1, а у меня в устройствах нет такого ID

    а у меня кнопка SENSOR1
    2017-01-19_211140.jpg

    Скажите пожалуйста, что я делаю не правильно?



  • @chas99:

    но у меня не заработало! я предполагаю, что в сценарии BUTTON1.pressed используется BUTTON1, а у меня в устройствах нет такого ID а у меня кнопка SENSOR1

    В своих предположениях Вы абсолютно правы, в сценарии проекта нужно использовать имена устройств конкретного проекта.

    Сейчас есть два решения:

    1. Отредактировать файл test.json, заменив BUTTON1 на SENSOR1, после этого перезагрузить сервер (сценарии проекта сейчас загружаются на старте сервера).

    2. Создать новое устройство, назвать его BUTTON1, т.к. изменить ID устройства можно только при его создании, и привязать шаблонный сценарий "Нажатие кнопки" к нему.

    P.S. Идея " ЧАВО (FAQ) для новичка" очень правильная и своевременная, постараемся в ближайшем времени начать публикацию.



  • @intrapro:

    @chas99:

    но у меня не заработало! я предполагаю, что в сценарии BUTTON1.pressed используется BUTTON1, а у меня в устройствах нет такого ID а у меня кнопка SENSOR1

    Уважаемый chass99, извините за задержку с ответом 🙂

    В своих предположениях Вы абсолютно правы, в сценарии проекта нужно использовать имена устройств конкретного проекта.

    Сейчас есть два решения:

    1. Отредактировать файл test.json, заменив BUTTON1 на SENSOR1, после этого перезагрузить сервер (сценарии проекта сейчас загружаются на старте сервера).

    2. Создать новое устройство, назвать его BUTTON1, т.к. изменить ID устройства можно только при его создании, и привязать шаблонный сценарий "Нажатие кнопки" к нему.

    P.S. Идея " ЧАВО (FAQ) для новичка" очень правильная и своевременная, постараемся в ближайшем времени начать публикацию.

    Ок, спасибо! Заменю, а что дальше ?

    Хватит этих двух скриптов/сценариев? По идее нужно ведь ещё привязать ЛАМПЫ к этой кнопке, создав сценарий (PM - сценарии - по событиям устройств), так? А как настроить обработку двойного нажатия и длинного?



  • @chas99:

    Хватит этих двух скриптов/сценариев? По идее нужно ведь ещё привязать ЛАМПЫ к этой кнопке, создав сценарий (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
    
    
    

Log in to reply