Очень интересно, но ничего непонятно!

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Очень интересно, но ничего непонятно!

Сообщение Ruslan » 09 янв 2019, 23:13

А что значит "штатные методы"? О каких именно методах идет речь? Может быть вы используете "Простые устройства"?

Неважно как общаются между собой Мега и МД, по кабелю или по Wi-Fi, главное, чтобы "диалог" происходил. Если из адресной строки браузера у вас срабатывает команда по переключению реле "http://192.168.0.14/sec/?cmd=7:2", то и из метода/скрипта она должна срабатывать (file_get_contents("http://192.168.0.14/sec/?cmd=7:2");).

Другое дело, что МД может "не слышать" Мегу. Тут надо разбираться в ситуации. Если в модуле "MegaD" на вкладке "Advanced" при нажатии кнопки "Read config" текущая конфигурация Меги "перечитывается", значит все в порядке, "есть контакт", МД "видит" Мегу. Можно двигаться дальше.

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Очень интересно, но ничего непонятно!

Сообщение Ruslan » 09 янв 2019, 23:22

Erik писал(а):
09 янв 2019, 23:04
По моему этот вариант
Ruslan писал(а):
09 янв 2019, 15:30
вариант, который я изложил в самом конце своего первого длинного поста после подзаголовка "ДОПОЛНЕНИЕ". Помимо того, что этот вариант еще и гораздо менее трудоемкий в плане настройки.
можно использовать и без модуля мегаД.

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

У меня ситуация другая - нагрузка висит на выходах меги, и чтобы управлять ей из МД я "виртуальные реле" привязываю именно к выходам меги.
Ну да. В вашей ситуации модуль "MegaD" использовать не обязательно. Он (модуль "MegaD") нужен, в первую очередь, по моему мнению, чтобы "рассортировать" сигналы, поступающие от входов Меги типа "кнопка", направив исполнение кода по задуманному "писателем" алгоритму.
А так, если физические кнопки (выключатели, герконы, датчики протечки, датчики движения и т.п.) использовать не предполагается, все прекрасно работает и без модуля "MegaD".

Erik
Сообщения: 570
Зарегистрирован: 08 ноя 2017, 08:55

Re: Очень интересно, но ничего непонятно!

Сообщение Erik » 10 янв 2019, 10:22

Еще вопрос, поясните, если не сложно.

Зачем вы ставите «Skip default action»?
действие по умолчанию - это Act в конфиге меги? Оно же то же самое, что вы потом в методах прописываете.

По моему, можно ставить, если только вход управляет выходом на другой меге. В остальных случаях отсутствие галочки значительно упрощает конфигурацию. И все настраивается в одном месте - непосредственно на меге. Поменял там - обновил конфиг в МД, и все работает.

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Очень интересно, но ничего непонятно!

Сообщение Ruslan » 10 янв 2019, 11:33

Да, если реакция на срабатывание входа всегда одна и та же (а также связанные вход и выход находятся в одной Меге), то можно эту галку и не ставить. Я же для себя избрал более универсальный, но более трудоемкий вариант настройки, когда действие по умолчанию выполняется исключительно "по инициативе" самой Меги, когда сервер не отвечает. Кроме того, в том же освещении могут быть сложные сценарии, когда при коротком нажатии выполняется одно действие, а при длинном -- другое, когда с одного выключателя при сумерках включается одна группа освещения, а при полной темноте - другая. Режим освещения может быть разный (автовключение/автовыключение или ручной), я описал это в заметке про датчик движения.

Но вы правы, в самых простых случаях можно положиться на прописанное в Меге действие по умолчанию и не устанавливать галку «Skip default action» в модуле "MegaD".

Erik
Сообщения: 570
Зарегистрирован: 08 ноя 2017, 08:55

Re: Очень интересно, но ничего непонятно!

Сообщение Erik » 10 янв 2019, 11:46

Ruslan писал(а):
10 янв 2019, 11:33
Кроме того, в том же освещении могут быть сложные сценарии, когда при коротком нажатии выполняется одно действие, а при длинном -- другое, когда с одного выключателя при сумерках включается одна группа освещения, а при полной темноте - другая. Режим освещения может быть разный (автовключение/автовыключение или ручной),
Спасибо! Именно это и хотел узнать. :)

sergiusave
Сообщения: 2
Зарегистрирован: 09 янв 2019, 21:11

Re: Очень интересно, но ничего непонятно!

Сообщение sergiusave » 10 янв 2019, 22:44

Спасибо. Немного освоился.

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Очень интересно, но ничего непонятно!

Сообщение Ruslan » 10 янв 2019, 23:05

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

Коля
Сообщения: 466
Зарегистрирован: 28 ноя 2014, 18:50

Re: Очень интересно, но ничего непонятно!

Сообщение Коля » 18 янв 2019, 16:39

Ruslan писал(а):
10 янв 2019, 23:05
Руслан спасибо за уроки. Потихоньку двигаюсь по мегад и мажордом. А Вы не пробовали подключить диммирование с мега д в мажордом? Чтоб и слайдер работал. Чтоб была видна обратная связь? Хоть с экрана управлял, хоть с выключателя?
Если пробовали может и "валенкам" ) покажете!?)

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Очень интересно, но ничего непонятно!

Сообщение Ruslan » 18 янв 2019, 17:46

Коля писал(а):
18 янв 2019, 16:39
А Вы не пробовали подключить диммирование с мега д в мажордом? Чтоб и слайдер работал. Чтоб была видна обратная связь? Хоть с экрана управлял, хоть с выключателя?
Если пробовали может и "валенкам" ) покажете!?)
Конечно, пробовал. И, конечно, с обратной связью. Единственное, не пробовал управлять с физической кнопки. Но в принципе, если при управлении с физической кнопки Мега о своем срабатывании посылает что-нибудь серверу, проблем совершенно не вижу.

Можно сделать, как написано здесь (https://majordomo.smartliving.ru/forum/ ... start=1015).
"Механика" процесса будет какова. После того, как ползунок слайдера будет перемещен в новое положение, в объект.свойство Dimmer01.value будет записано новое значение, которое должно быть установлено для диммируемой нагрузки. Затем запустится объект.метод Dimmer01.dimming. Из него сначала "прочитается" значение свойства Dimmer01.value, а потом будет дана команда Меге, содержащая выставленный уровень ШИМ (в диапазоне от 0 до 255).

Обратная связь будет заключаться в том, что при изменении из кода значения объект.свойства Dimmer01.value ползунок слайдера переместится в соответствии с новым значением.
Таким образом, если, допустим наша кнопка подключена ко входу P4, в модуле "MegaD" связываем этот вход с объект.методом Dimmer01.dimming и дополним наш код (метода Dimmer01.dimming) такой конструкцией (предполагается, что у объекта имеются свойства ipAddress, Password, Port, а также in_Port со значением = "4"):

Код: Выделить всё

if ( $_GET['pt'] == $this->getProperty('in_Port') ) {
$value = file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?pt=".$this->getProperty('Port')."&cmd=get");
$value = round(($value/255)*100, 0);
sg($this->object_title.".value",$value);
return "";
}
Этот кусок кода поместим в самое начало метода Dimmer01.dimming.
После срабатывания физической кнопки на порту P4 в этом куске кода будет запрошено значение ШИМ у ШИМ-порта Меги и присвоено свойству value текущего объекта (в нашем примере это Dimmer01.value). В результате ползунок слайдера переместится в положение, соответствующее текущему значению ШИМ у ШИМ-порта.
Хотя, как обстоит общение Меги с сервером в случае диммирования с помощью физической кнопки, не проверял, поэтому наверняка сказать, будет ли эта конструкция работать так, как задумано, нельзя. Возможно, подобный код надо запускать с некоторой задержкой, когда Мега проведет процедуру диммирования, которая требует некоторого времени.
Раз уж мы решили, что метод Dimmer01.dimming будет классовый, то под это и код в ссылке надо несколько переписать, т.е. часть кода, запускаемая слайдером, будет выглядеть так:

Код: Выделить всё

$val = $this->getProperty('value');
$val = round(($val/100)*255, 0);
$command="http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":".$val;
file_get_contents($command);

Для сцен стандартный элемент "слайдер" не предусмотрен. Но его можно сделать путем "дублирования" уже существующего слайдера в меню. Для этого надо выбрать элемент сцены "Menu Control" и из него сослаться на слайдер меню.

По поводу физической кнопки надо еще разбираться, как там Мега работает.
Вы то как предполагаете управлять диммированием с помощью физической кнопки (ведь Андрей придумал разные варианты)?

Romka0647
Сообщения: 3
Зарегистрирован: 31 янв 2019, 16:28

Re: Очень интересно, но ничего непонятно!

Сообщение Romka0647 » 31 янв 2019, 17:54

Руслан, спасибо за труд, ваша тема помогает хоть как-то уложить такую кучу инфы в голове для новичков.
Помогите пожалуйста разобраться со следующими вопросами:
1) правильно ли я понял, что подключение датчиков (например, температуры) по технологии 1-wire никак не связано с подключением их к Меге? Для того чтобы реализовать 1-wire нужно покупать мастер DS9490R и подключать это дело к серверу по usb?

2) в управлении каждой розеткой я не вижу никакого смысла, но хотелось бы отключать через мегу группы розеток. На каждую комнату планируется по два автомата: 1 на группу розеток, 1 на свет. Как правильнее будет соединить автоматы с мегой: сначала автомат а потом мега или сначала мега потом автомат?

3) как вообще будет правильнее и надежнее подключить контроллеры и исполнительные модули? Какие средства использовать для того, чтобы не перегорало реле или симистор после перегорания лампочки в светильнике?

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Очень интересно, но ничего непонятно!

Сообщение Ruslan » 31 янв 2019, 18:37

Romka0647 писал(а):
31 янв 2019, 17:54
Руслан, спасибо за труд, ваша тема помогает хоть как-то уложить такую кучу инфы в голове для новичков.
Помогите пожалуйста разобраться со следующими вопросами:
1) правильно ли я понял, что подключение датчиков (например, температуры) по технологии 1-wire никак не связано с подключением их к Меге? Для того чтобы реализовать 1-wire нужно покупать мастер DS9490R и подключать это дело к серверу по usb?
Нет, не правильно. Датчики температуры DS18B20 можно подключить напрямую к цифровым портам MegaD-2561, либо к портам исп.модуля MegaD-14-IOR (т.е. потребуется MegaD-2561 + MegaD-14-IOR). Причем на один порт подключить можно как один датчик, так и несколько (шина). Если хотите получать показания температурных датчиков DS18B20 без Меги, то можно, конечно, воспользоваться мастером DS9490R, и подключать через него. Просто Мега в плане возможностей -- это гораздо больше, чем просто поддержка 1-wire-устройств.
Romka0647 писал(а):
31 янв 2019, 17:54
2) в управлении каждой розеткой я не вижу никакого смысла, но хотелось бы отключать через мегу группы розеток. На каждую комнату планируется по два автомата: 1 на группу розеток, 1 на свет. Как правильнее будет соединить автоматы с мегой: сначала автомат а потом мега или сначала мега потом автомат?
Обычно делают так: Автомат >>> Мега >>> Нагрузка. Если надо обесточивать группы розеток (некоторые так делают, надолго покидая жилище), то, насколько я помню, перед автоматами они ставили контактор (он то и будет управляться с Меги). Т.е. получается Контактор >>> Автоматы >>> Меги >>> Нагрузки. Но надо сказать, что я -- не электрик (от слова совсем).
Romka0647 писал(а):
31 янв 2019, 17:54
3) как вообще будет правильнее и надежнее подключить контроллеры и исполнительные модули? Какие средства использовать для того, чтобы не перегорало реле или симистор после перегорания лампочки в светильнике?
Никаких специальных средств использовать не нужно, на мой взгляд.
С реле ничего плохого не случится, если конечно не превышать эксплуатационные токи. Максимум, у реле могут подгореть или приварится контакты. Ну или катушка реле выйдет из строя, отработав положенные 100 тыс. циклов.
С симистрами сложнее. При коротком замыкании они сгорят практически гарантированно (автомат не успеет сработать). Успокоить могу тем, что Андрей, вроде бы стал применять более "дубовые" симистры не так "нервно" реагирующие на перегорание лампочек. Если симистр сгорит, его надо перепаять на плате. Но для этого надо "дружить" с паяльником. Справедливости ради хочу заметить, что последние года 3 я ни от кого не слышал жалоб на выход из строя симистров при перегорании лампочек.
Сейчас появился новый исп.модуль MegaD-2561-24I14O-RTC, где реле и симистры вставляются в стандартные сокеты (https://ab-log.ru/forum/viewtopic.php?f=1&t=1505). Т.е. при необходимости вышедшие из строя элементы можно менять без пайки.

Romka0647
Сообщения: 3
Зарегистрирован: 31 янв 2019, 16:28

Re: Очень интересно, но ничего непонятно!

Сообщение Romka0647 » 31 янв 2019, 18:53

Ruslan писал(а):
31 янв 2019, 18:37
Нет, не правильно. Датчики температуры DS18B20 можно подключить напрямую к цифровым портам MegaD-2561, либо к портам исп.модуля MegaD-14-IOR (т.е. потребуется MegaD-2561 + MegaD-14-IOR). Причем на один порт подключить можно как один датчик, так и несколько (шина). Если хотите получать показания температурных датчиков DS18B20 без Меги, то можно, конечно, воспользоваться мастером DS9490R, и подключать через него. Просто Мега в плане возможностей -- это гораздо больше, чем просто поддержка 1-wire-устройств.
Как-раз этот 1-wire меня не привлекает, как-раз хочется делать все через мегу (понимание 1-wire для меня видимо не пришло). Хорошо, если объединять несколько температурных датчиков в шину (на один порт), как мега (или я) поймет какая температура с какого датчика? например один на кухне другой в зале, третий в спальне, каким образом я разделю три показания разных температур?

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Очень интересно, но ничего непонятно!

Сообщение Ruslan » 31 янв 2019, 18:58

Дело в том, что каждому датчику 1-wire "вшивают" при производстве свой уникальный адрес. Этот адрес передается в ответе Меге серверу, когда датчики подключены шиной. Вот на сервере то и нужно "разбирать" ответ, идентифицируя конкретный датчик по его адресу и отделяя показания одного датчика от другого.

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Очень интересно, но ничего непонятно!

Сообщение Ruslan » 03 фев 2019, 16:06

Коля писал(а):
18 янв 2019, 16:39
...А Вы не пробовали подключить диммирование с мега д в мажордом? Чтоб и слайдер работал. Чтоб была видна обратная связь? Хоть с экрана управлял, хоть с выключателя?
Если пробовали может и "валенкам" ) покажете!?)
Диммировали, диммировали и «выдиммировали»

Итак, поразбирался немного с диммированием путем управления ШИМ-портом. Через драйвер на базе микросхемы L298N подключил в качестве диммируемой нагрузки лампу накаливания на 12 В. На соответствующую ножку драйвера подается ШИМ-сигнал с порта P10 исполнительного модуля MegaD-14-IN. Версия прошивки 4.32 beta1.

Андрей придумал много разных вариантов для осуществления диммирования. Меня заинтересовал такой (процитирую инструкцию):

«Но если требуется обойтись только одной кнопкой, то тогда в сценарии необходимо прописать так: 10:~
Важно! При использовании команды "~" режим работы входа должен быть установлен "P&R".
... Однократное нажатие включает или выключает нагрузку. Удержание изменяет яркость в ту или другую сторону.»


Причем при включении лампочки после нажатия кнопки контроллер «помнит» уровень яркости, при котором в последний раз она была выключена. Еще Мега «помнит», в какую сторону в последний раз изменялась яркость, чтобы в текущий момент при удержании кнопки изменять яркость в противоположную сторону. Шикарно!
(Правда, все эти вроде бы очевидные нюансы начинаешь осознавать, когда пытаешься повторить эту логику.)

Что ж,… посмотрим, как этот вариант логики диммирования можно интегрировать в систему УД (MajorDoMo).


ВАРИАНТ 1

Начнем с настройки входа Меги.
Изображение
Еще раз процитирую инструкцию.
«Флажок (чекбокс) справа от поля Act определяет логику работы сценария. Если он не установлен (по умолчанию), то сценарий выполняется ТОЛЬКО если сервер не прописан, недоступен или HTTP-статус отличен от 200. Если флажок установлен, то сценарий выполняется всегда независимо от наличия сервера. Контроллер в этом случае будет сообщать на сервер о событиях, но его ответные команды в рамках одной TCP-сессии будут проигнорированы.»

Теперь настройка выхода.
Изображение
Тут никаких особенностей.

В общем, идея состоит в том, чтобы при диммировании «кнопкой» всей логикой (в пределах 10:~) заведовала Мега, а сервер получал бы от Меги лишь «отчеты об исполнении». Ну и «отрисовывал» эту информацию в интерфейсе УД.

Приступим. Я исхожу из жизненной ситуации, когда объекты освещения сосредоточены в одном классе Мажордомо, являются недиммируемыми, но мы «прикручиваем» диммируемый объект.
Как всегда пойдем по пунктам.

1. До запуска Мажордомо проведем модернизацию файла megad.class.php модуля «MegaD», чтобы модуль научился «отлавливать» приходящий от контроллера параметр «m».
Подробнее о том, как это сделать, можно почитать здесь (https://ab-log.ru/forum/viewtopic.php?f ... 309#p28309), в самом конце этого длинного поста после подзаголовка «ДОПОЛНЕНИЕ/УТОЧНЕНИЕ».
Если у вас вновь установленный или обновленный модуль "MegaD", то данный пункт выполнять не нужно.

2. Выполним базовую настройку по созданию и параметризации объектов, свойств, методов по аналогии с тем, как это описано здесь (https://ab-log.ru/forum/viewtopic.php?f=1&t=1328) в конце длинного первого поста после подзаголовка «ДОПОЛНЕНИЕ».
Но, естественно, у нас будут кое-какие дополнения и изменения, о которых я скажу ниже.

3. Дополним состав свойств в классе новыми свойствами.
value -- будет сохранятся значение слайдера (в диапазоне от 0 – 100).
stored_value -- будет сохраняться значение сигнала от ШИМ-порта Меги (в диапазоне от 0 – 255).

4. Дополним состав методов в классе новым методам «dimming».
Добавим в класс новый объект (он будет диммируемый) и запишем в метод ОБЪЕКТа код:

Код: Выделить всё

//Действия при срабатывании кнопки
if ( $_GET['pt'] >= "0" ) {
$value = file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?pt=".$this->getProperty('Port')."&cmd=get");
$value = round($value/255*100, 0);
$this->setProperty('value', $value);
If ($value == 0 || $value == "") {
$this->setProperty('Status', 0);
} else {
$this->setProperty('Status', 1);
}
return "";
}


//Нижеследующая часть кода выполняется после перемещения ползунка слайдера
$val = $this->getProperty('value');
If ($val == 0) {
$this->callMethod('turnOff');
return"";
}
$val = round($val/100*255, 0);
file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":".$val);
$this->setProperty('stored_value', $val);
$this->callMethod('turnOn');
Поставим радиоточку для «Вызывать родительский метод:» в положение «Никогда».
Если все объекты в классе будут диммируемыми, то приводимый мной код методов вполне применим для «общеклассовых» методов.

Запишем в соответствующие методы ОБЪЕКТа код PHP.
В метод turnOff:

Код: Выделить всё

$stored_value = file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?pt=".$this->getProperty('Port')."&cmd=get");
file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":0");
$this->setProperty('Status', 0);
$this->setProperty('value', 0);
If ($stored_value <> 0) {
$this->setProperty('stored_value', $stored_value);
}
В метод turnOn:

Код: Выделить всё

$value = $this->getProperty('stored_value');
If ($value == 0 || $value == "") {
$value = 255;
}
file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":".$value);
$this->setProperty('Status', 1);
$value = round($value/255*100, 0);
$this->setProperty('value', $value);
В метод switch:

Код: Выделить всё

$value = file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?pt=".$this->getProperty('Port')."&cmd=get");
If ($value == 0 || $value == "") {
$this->callMethod('turnOn');
} else {
$this->callMethod('turnOff');
}
5. В меню создаем слайдер, у которого указываем
«Мин. значение:» -- 0
«Макс. значение:» -- 100
«Шаг изменений:» -- 1
«Связанный объект:» -- наш новый ОБЪЕКТ
«Свойство:» -- value
«Метод:» -- dimming

Для сцен стандартный элемент "слайдер" не предусмотрен. Но при необходимости его можно сделать путем "дублирования" уже существующего слайдера в меню. Для этого надо выбрать элемент сцены "Menu Control" и из него сослаться на слайдер меню.

6. На сцене создаем выключатель. Точно так же, как описано в базовой настройке, поскольку выключатель стандартный и с его помощью можно только включить или выключить (но не диммировать). Ведь «удержание клавиши» тут не работает. Т.е. используем связанное свойство «Status».

7. В модуле «MegaD» на вкладке «Данные» по соответствующему входу вместо метода «switch» укажем метод «dimming».

В результате имеем диммируемый источник света, управляемый как с физического выключателя-кнопки, так и из интерфейса. С обратной связью.
Единственная, но вполне объяснимая «шероховатость» заключается в том, что если лампочка была выключена из интерфейса, а включена по нажатию физической кнопки, она включится не на ту яркость, которая была до выключения, а на полную. Поскольку контроллер никто «не предупреждал» о необходимости «запоминания» текущего значения ШИМ-синала. Так что при включении «вспоминать» ему просто нечего. Но это сущая мелочь, которую мы попробуем «отрихтовать» в следующей серии.


Следующая серия.
ВАРИАНТ 2

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

Наш вариант №1 работает замечательно, надежно. Тогда зачем «городить огород»? Дело в том, что мы не ищем легких путей, любим преодолевать трудности самим себе созданные и… В общем, было просто интересно, получится или нет. Сразу скажу, получилось.

Приступим к настройке.
Настройка входа Меги (тут снята галка напротив поля «Act»).
Изображение

Надо сделать ту же самую настройку, что и в варианте №1, но с некоторыми отличиями, о которых я скажу ниже.

1. Дополним состав свойств в классе новыми свойствами.
Direction -- будет сохраняться направление последнего изменения яркости, т.е. увеличение или уменьшение («Down» или «Up»).
LongClick – будет сохраняться значение параметра «m», когда имеет место длинное нажатие («m=2»).

2. Дополним код метода «dimming» частью, которая будет отвечать за отработку логики при нажатии физической кнопки.
Теперь код метода «dimming» будет выглядеть так:

Код: Выделить всё

//Действия при срабатывании кнопки
if ( $_GET['pt'] >= "0" ) {
$ot = $this->object_title;
//Если произошло длинное нажатие (m="2")
if ( $_GET['m'] == "2" ) {
if ( $this->getProperty('Direction') <> "Down" ) {
file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":v7");
$this->setProperty('Direction', "Down");
} else {
file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":^7");
$this->setProperty('Direction', "Up");
}
$this->setProperty('LongClick', 2);
clearTimeOut("myTimerOff_".$ot);
clearTimeOut("myTimerOn_".$ot);
}

//Если произошло нажатие (m=""), выполним включение или выключение с 2-секундной отсрочкой
if ( $_GET['m'] == "" ) {
$value = file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?pt=".$this->getProperty('Port')."&cmd=get");
if ( $value <> "0" ) {
setTimeOut("myTimerOff_".$ot,"callMethod('".$ot.".turnOff');",2);
} else {
setTimeOut("myTimerOn_".$ot,"callMethod('".$ot.".turnOn');",2);
}
}

// Действие при отпускании кнопки ("m=1") после длинного нажатия ("m=2")
if ( $_GET['m'] == "1" ) {
//"m=1" приходит после длинного нажатия (m=2)
if ($this->getProperty('LongClick') == "2") {
$this->setProperty('LongClick', 0);
file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":x");
$stored_value = file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?pt=".$this->getProperty('Port')."&cmd=get");
If ($stored_value <> 0) {
$this->setProperty('stored_value', $stored_value);
}
} else {
//"m=1" приходит после короткого нажатия ("m=")
clearTimeOut("myTimerOff_".$ot);
clearTimeOut("myTimerOn_".$ot);
$value = file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?pt=".$this->getProperty('Port')."&cmd=get");
if ( $value <> "0" ) {
$this->callMethod('turnOff');
return "";
} else {
$this->callMethod('turnOn');
return "";
}
}
}

$value = file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?pt=".$this->getProperty('Port')."&cmd=get");
$value = round($value/255*100, 0);
$this->setProperty('value', $value);
If ($value == 0 || $value == "") {
$this->setProperty('Status', 0);
} else {
$this->setProperty('Status', 1);
}
return "";
}


//Нижеследующая часть кода выполняется после перемещения ползунка слайдера
$val = $this->getProperty('value');
If ($val == 0) {
$this->callMethod('turnOff');
return"";
}
$val = round($val/100*255, 0);
file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":".$val);
$this->setProperty('stored_value', $val);
$this->callMethod('turnOn');
И в метод «turnOff» надо добавить изменение свойства «Direction».
Код метода «turnOff»:

Код: Выделить всё

$stored_value = file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?pt=".$this->getProperty('Port')."&cmd=get");
file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":0");
$this->setProperty('Status', 0);
$this->setProperty('value', 0);
$this->setProperty('Direction', Down);
If ($stored_value <> 0) {
$this->setProperty('stored_value', $stored_value);
}
Собственно, на этом все. Теперь «рулит» сервер.


Но все же опишу логику, которая применена в коде для отработки событий, приходящих от кнопки. У нас возможны 3 случая.

Первый случай. Очень короткое нажатие, буквально, кратковременное касание контактов. При замыкании и при размыкании параметр «m» не приходит (т.е. в нашей логике m=«»). Скрипт на сервере запускается только один раз при замыкании. Но в этот момент мы не можем с определенностью сказать, что произойдет дальше. Вдруг через 1,5 секунды к нам «прилетит» «m=2»? Поэтому по нажатию кнопки запустим 2-секундный таймер с отсрочкой включения или выключения нагрузки.

Второй случай. Чуть более продолжительное нажатие длительностью не более 1,5 секунд. При этом при отпускании приходит «m=1». Уже появляется определенность. В этом случае, когда приходит «m=1» ликвидируем запущенный при нажатии таймер и выполняем действие по включению или выключению.

Третий случай. Происходит удержание длительностью 1,5 секунды и более. Теперь последовательность такая: при нажатии «m» отсутствует (m=«»), на 1,5 секундах приходит m=2, и при отпускании поступает m=1.
Здесь при поступлении m=2 ликвидируется таймер (запущенный при нажатии) и запускается действие на увеличение или уменьшение яркости. Кроме того, выставляется флаг, что произошло длинное нажатие (LongClick=2).
Когда при отпускании приходит m=1, надо отделить третий случай от второго, для чего «смотрим», выставлен ли флаг длинного нажатия, и если да, останавливаем изменение яркости и снимаем флаг длинного нажатия (LongClick=0).

Вид на стандартной сцене.
Изображение

Думаю, и при варианте №1, когда «рулит» Мега, можно устранить «шероховатость», заставив сервер подавать команду на восстановление последнего уровня яркости, после того, как зафиксирована такая последовательность: «выключение с сервера, включение с кнопки». Но, как говорили в известном произведении, «я подумаю об этом завтра». И так постоянно утомляю читателя своими «безразмерными» постами.


Кстати, недавно ув.sergejey (Сергей, автор Мажордомо) выложил новую версию модуля «MegaD». Обновление на новую версию показало, что модуль научился отлавливать параметр «m», но как-то ограниченно, поскольку m=2 воспринимать от Меги отказывается. А это «ломает» нам всю вышеописанную логику. Так что спешить с обновлением модуля «MegaD», если есть потребность завязывать логику на длинные нажатия, пока не стоит.

Дополнение: после внесенных в модуль «MegaD» изменений он успешно начал "отлавливать" параметр "m=2". Так что можно пробовать обновлять модуль. (Лично я перед обновлениями делаю полную копию папки, куда установлена программа MajorDoMo.) На всякий случай.
Последний раз редактировалось Ruslan 14 мар 2020, 20:59, всего редактировалось 1 раз.

Коля
Сообщения: 466
Зарегистрирован: 28 ноя 2014, 18:50

Re: Очень интересно, но ничего непонятно!

Сообщение Коля » 09 мар 2019, 22:40

Ruslan, хотел бы обратится с просьбой опять. Так как Вы разбираетесь и мегад и мажордомо.

Ситуация следующая . Делаю подсветку в выключатели livolo в зависимости от вкл/ выкл красн/син. Первая версия планировалась с выходов светодиодов megad14r.

Вторая версия на базе светодиодов ws2811 (ws2812в). Это питание + и - 5 v. И управление один провод. То есть управляя одним проводом с мегад можно подсвечивать любой светодиод любым светом.

То есть например выключатель ливоло 6 кнопок. Подключаю 6 светодиодов.
Команда http://192.168.0.14/sec/?pt=35&ws=00ff0 ... f00000000f
Зажигает светодиоды 1.красный 2.зеленый 3.синий 4.красный 5.зеленый 6.синий (пример)

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

У нас может быть нажато любое количество кнопок и в любой последовательности. Поэтому должен быть какой то скрипт в мажордомо который бы проверял включенность и выключенность кнопок, чтоб правильно подсветить светодиоды.

Вот этот скрипт я и не знаю как написать и как его подключить в мажордомо. Сам выключатель мегад в мажордомо подключил . Работает.

Например когда никакой свет не включен:
http://192.168.0.14/sec/?pt=35&ws=Ff0000
Зеленым горят все 6

Если включаем например 1 кнопку
http://192.168.0.14/sec/?pt=35&ws=00ff0 ... 00ff0000ff
Горит 1 кнопка красным 2-6 кнопки горят синим

Если включаем например 3 кнопку не включая 1 кнопку
http://192.168.0.14/sec/?pt=35&ws=00ff0 ... 00ff0000ff
Горит 1 и 3 кнопка красным 2 и 4-6 кнопки горят синим

И тп.

Если сможете помочь то распишу тогда все кнопки вкл/выкл по цветам.

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Очень интересно, но ничего непонятно!

Сообщение Ruslan » 09 мар 2019, 23:17

Ну, то что я разбираюсь и в МегаД и Мажордомо -- это громко сказано. Знания у меня, увы, поверхностные.

Тем не менее, задача ваша, на первый взгляд, не кажется сложной, при условии, что с выключателем livolo имеется обратная связь. Куда этот выключатель (6-кнопочный) подключен? Понимаю, что к MegaD-14-R его подключить нельзя. Непосредственно к MegaD-2561 что ли?

Ну и самое главное, какой командой можно узнать текущее состояние конкретной клавиши выключателя?

Коля
Сообщения: 466
Зарегистрирован: 28 ноя 2014, 18:50

Re: Очень интересно, но ничего непонятно!

Сообщение Коля » 10 мар 2019, 08:06

К megad-14-in.
Подключены 14 сенсоров ttr223

Все сделано и работает как тут
https://ab-log.ru/smart-house/ethernet/ ... ch-sensors
Аот megad-14-in уже управляет выходами megad-14-r
Последний раз редактировалось Коля 10 мар 2019, 09:18, всего редактировалось 1 раз.

Коля
Сообщения: 466
Зарегистрирован: 28 ноя 2014, 18:50

Re: Очень интересно, но ничего непонятно!

Сообщение Коля » 10 мар 2019, 08:47

Примерно так в мажордомо пока сделал 14 кнопок. Работают и с экрана компа и тел и с механическими сенсоров ттр223
Вложения
Clip2net_190310120128.png
Clip2net_190310120128.png (68.93 КБ) 5298 просмотров
Clip2net_190310120116.png
Clip2net_190310120116.png (56.1 КБ) 5298 просмотров
Clip2net_190310120102.png
Clip2net_190310120102.png (85.61 КБ) 5298 просмотров
Clip2net_190310120050.png
Clip2net_190310120050.png (54.38 КБ) 5298 просмотров
Clip2net_190310115951.png
Clip2net_190310115951.png (43.12 КБ) 5298 просмотров
Последний раз редактировалось Коля 10 мар 2019, 13:02, всего редактировалось 1 раз.

Коля
Сообщения: 466
Зарегистрирован: 28 ноя 2014, 18:50

Re: Очень интересно, но ничего непонятно!

Сообщение Коля » 10 мар 2019, 08:59

Контроллер также позволяет вывести состояние всех своих портов по команде cmd=all

http://192.168.0.14/sec/?cmd=all

Коля
Сообщения: 466
Зарегистрирован: 28 ноя 2014, 18:50

Re: Очень интересно, но ничего непонятно!

Сообщение Коля » 10 мар 2019, 09:15

вот так выглядит
OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;OFF/5;OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;ON/14;ON;OFF;OFF;OFF;OFF;OFF;OFF;OFF;ON;OFF;OFF;OFF;OFF;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON

для удобства смотрим
0 OFF/0;
1 OFF/0;
2 OFF/0;
3 OFF/0;
4 OFF/0;
5 OFF/0;
6 OFF/0;
7 OFF/0;
8 OFF/5;
9 OFF/0;
10 OFF/0;
11 OFF/0;
12 OFF/0;
13 OFF/0;
14 ON/14;

15 ON;
16 OFF;
17 OFF;
18 OFF;
19 OFF;
20 OFF;
21 OFF;
22 OFF;
23 ON;
24 OFF;
25 OFF;
26 OFF;
27 OFF;
28 ON;

29 ON;
30 ON;
31 ON;
32 ON;
33 ON;
34 ON;
35 ON;
36 ON;
37 ON

*нас интересуют выходы с 15 по 28
*нужно делать скрипт и телодвижения сразу на 14 выходов. чтоб всем потом подошло под любое количество кнопок (выключателей, сенсоров)
*для теста сейчас у меня включены 15 , 23 , 28
они должны быть красными, все остаольные голубыми

Ответить