Страница 105 из 140

Re: [Модуль] MegaD (megad)

Добавлено: Пт ноя 23, 2018 2:50 pm
Chainik
Попробуйте вписать адрес сервера в Local-IP. Попробуйте дать права 777 на папку, где лежат файлы модуля. С Линуксом не работал, поэтому ничего более определенного сказать не смогу.
Еще можно проанализировать сетевой трафик (Wireshark).
Вообще, у всех, у кого сразу модуль не захотел читать конфигурацию, в конце концов все налаживалось, иногда даже безо всяких усилий со стороны пользователя (viewtopic.php?f=5&t=2263&start=1013).

Re: [Модуль] MegaD (megad)

Добавлено: Пт ноя 23, 2018 4:44 pm
kas5858
beavisgood писал(а):
Вт ноя 20, 2018 7:26 am
Привет, у меня вопрос по подключению, кнопки и реле, с железными кнопками возникли проблемы.
Кнопка P0, Реле Р7, классика.

Попытка 1: МОДУЛЬ MegaD:
Сначала пробовал связать эти два объекта через Модуль MegaD, на классических объектах Relay, (status, turnon, turnoff, switch)
из софта реле управляется отлично, но как в дело вступает железная кнопка, начинаются мигания, включения, отключения, реле живет своей жизнью.
Так то все красиво выглядит и логично, настроили модуль, кнопку нажали, мега отправила это событие к мажору.
Мажор принял решение, и выдал команду меге, включи реле, мега приняла эту команду, поменяла состояние порта.
Но к сожалению на связке модуль MegaD этот вариант не работает, Почему? мне не понятно до конца.
Расскажу о своей реализации кнопок на MegaD-2561 (fw: 4.29b4), может кому поможет.
Тех задание для детской комнаты по реализации вкл./выкл света такое.
  • 1.Одна кнопка для ребенка, условно Валеры (вкл/выкл) на личный свет.
    2.Вторая кнопка для ребенка, Насти (вкл/выкл) на личный свет.
    3.Третья кнопка проходная, с которой можно выключить и включить свет любого ребенка по отдельности, с возможностью выключить сразу весь свет.
Реализация.
  • 1.Кнопка Валеры подключена к порту Р0 (MegaD-2561).
    2.Кнопка Насти подключена к порту Р1 (MegaD-2561).
    3.Кнопка проходная подключена к порту Р2 (MegaD-2561).
    4.Свет Валеры подключен к порту Р7 (MegaD-2561).
    5.Свет Насти подключен к порту Р10 (MegaD-2561).
Настройка портов (MegaD-2561).
  • 1.Кнопка Валеры подключена к порту Р0 (MegaD-2561).
    P0.PNG
    P0.PNG (4.66 КБ) 4010 просмотров
    2.Кнопка Насти подключена к порту Р1 (MegaD-2561).
    P1.PNG
    P1.PNG (4.67 КБ) 4010 просмотров
    3.Кнопка проходная подключена к порту Р2 (MegaD-2561).
    P2.PNG
    P2.PNG (4.88 КБ) 4010 просмотров
    4.Свет Валеры подключен к порту Р7 (MegaD-2561).
    P7.PNG
    P7.PNG (3.99 КБ) 4010 просмотров
    5.Свет Насти подключен к порту Р10 (MegaD-2561).
    P10.PNG
    P10.PNG (4.06 КБ) 4010 просмотров
Настройка объектов, методов и свойств в MD.
  • 1.Создать класс
    klass.PNG
    klass.PNG (9.74 КБ) 4010 просмотров
    2.Создать объекты
    Обьекты.PNG
    Обьекты.PNG (10.58 КБ) 4010 просмотров
    3.Создать свойства
    Свойства.PNG
    Свойства.PNG (12.97 КБ) 4010 просмотров
    4.Создать методы
    Методы.PNG
    Методы.PNG (6.1 КБ) 4010 просмотров
    а. turnOn

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

    file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":1");
    $this->setProperty('status', 1);
    б. turnOff

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

    file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":0");
    $this->setProperty('status', 0);
    $this->setProperty("Menu", Выкл);
    в. switch

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

    $state = file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?pt=".$this->getProperty('Port')."&cmd=get");
    if ($state == "ON") {
      $this->setProperty('status', 1);
    } else {
      $this->setProperty('status', 0); 
    }
Настройка модуля MegaD в MD.
MegaD.PNG
MegaD.PNG (14.8 КБ) 4010 просмотров
Результат:
  • 1. с кнопки света Валеры (вкл/выкл)
    2. с кнопки света Насти (вкл/выкл)
    3. с проходной кнопки по одиночному нажатию (вкл/выкл) свет Валеры, по двойному нажатию (вкл/выкл) свет Насти, удержание кнопки выключает весь свет и Валеры и Насти.

Re: [Модуль] MegaD (megad)

Добавлено: Пт ноя 23, 2018 5:00 pm
Chainik
Я правильно понимаю, что при таком варианте реализации при использовании кнопки "P2", результат выполнения действия никак не отражается в интерфейсе УД? (Судя по отсутствию настроек в модуле MegaD для этой кнопки.)

Re: [Модуль] MegaD (megad)

Добавлено: Пт ноя 23, 2018 5:25 pm
kas5858
Chainik писал(а):Я правильно понимаю, что при таком варианте реализации при использовании кнопки "P2", результат выполнения действия никак не отражается в интерфейсе УД? (Судя по отсутствию настроек в модуле MegaD для этой кнопки.)
Не совсем так, позже напишу, я уже в дороге.

Отправлено с моего ONEPLUS A5010 через Tapatalk


Re: [Модуль] MegaD (megad)

Добавлено: Пт ноя 23, 2018 7:44 pm
beavisgood
Вычитал на сайте у Андрея:
Флажок справа от поля Mode указывает, что при наличии сервера,
устройство отправляет на сервер сообщения всегда в режиме P&R,
а при его отсутствии Action выполняется только в том режиме, который установлен в Mode)
А это как раз что мне нужно, для сервера режим "P&R" (есть возможность обрабатывать, долгие, двойные нажатия),
а в автономном режиме, вход работает как "P"

Спасибо за советы, ребята. У меня получилось все настроить :-)
Я так же настроил вход Меги, как на картинке у kas5858.
Поменял megad.class.php, стал обрабатывать m=1 2
Добавил метод, и о чудо It's work!!!
Непонятно почему этот параметр не добавлен в стандартную комплектацию модуля?

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

Re: [Модуль] MegaD (megad)

Добавлено: Сб ноя 24, 2018 12:59 pm
kas5858
Chainik писал(а):
Пт ноя 23, 2018 5:00 pm
Я правильно понимаю, что при таком варианте реализации при использовании кнопки "P2", результат выполнения действия никак не отражается в интерфейсе УД? (Судя по отсутствию настроек в модуле MegaD для этой кнопки.)
Если говорить как у меня, то вот:
Сценарий

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

$objects=getObjectsByClass("MegaD");
 $total=count($objects);
 for ($i=0;$i<$total;$i++) {
  $data=callMethodSafe($objects[$i]['TITLE'].'.switch');
}
setTimeOut('myTimer_proverka','runScript("proverka");',60*15);
мне этого хватает. Если нужно то по аналогии делаешь как кнопка Насти и Валеры в модуле MegaD, создать объект и не в классовом методе а в методе объекта и выключением родительского метода. Ты через модуль только статус меняешь и все.
Снимок.PNG
Снимок.PNG (11.91 КБ) 3964 просмотра

Re: [Модуль] MegaD (megad)

Добавлено: Сб ноя 24, 2018 3:35 pm
Chainik
Все равно до конца не понял.
Код приведенного сценария перебирает все объекты, расположенные в классе "MegaD" и запускает в каждом из них метод "switch". А зачем нам в каждом, если надо запускать только по одному объекту (той кнопке, которая сработала)? Иначе методом "switch" одного объекта ("общеклассовым") мы свет, к примеру, включим, а потом сразу же методом "switch" другого объекта (например, проходного выключателя) этот же свет выключим.

И второй вопрос по проходному выключателю. Чем запускается именно его "объектовый" метод "switch", ведь в модуле "MegaD" входу "P2" вообще ничего не сопоставлено?

Re: [Модуль] MegaD (megad)

Добавлено: Сб ноя 24, 2018 7:42 pm
kas5858
Chainik писал(а):
Сб ноя 24, 2018 3:35 pm
Все равно до конца не понял.
Код приведенного сценария перебирает все объекты, расположенные в классе "MegaD" и запускает в каждом из них метод "switch". А зачем нам в каждом, если надо запускать только по одному объекту (той кнопке, которая сработала)? Иначе методом "switch" одного объекта ("общеклассовым") мы свет, к примеру, включим, а потом сразу же методом "switch" другого объекта (например, проходного выключателя) этот же свет выключим.

И второй вопрос по проходному выключателю. Чем запускается именно его "объектовый" метод "switch", ведь в модуле "MegaD" входу "P2" вообще ничего не сопоставлено?
Mega с помощью кнопок управляет нагрузкой, а через MD мы выводим статус порта Меги, через метод "switch". Если у вас пропала связь сервера с Мегой и вы успели потыкать кнопками а потом восстановилось, то статус может отображаться не правильно. Сценарий делает периодический опрос поров Меги по всем объектам в классе Мега чтобы при любом раскладе у вас отображался правильный статус. Я пока не знаю как по другому можно отдельно смотреть состояние одного порта по одиночному нажатию на кнопку, отдельно по двойному нажатию и по длительному нажатию, получается только по одному из трех вариантов.
По второму вопросу, я выше написал что у меня периодически опрашивает порты сценарий и меня это пока устраивает, так как этой клавишей я пользуюсь редко. Но если понадобится то настроить можно по принципу других портов только запускать не классовый метод а метод объекта со своим индивидуальным кодом.

Re: Модуль "MegaD"

Добавлено: Вс ноя 25, 2018 1:10 am
Ivg_spb
Alexum писал(а):
Пн янв 08, 2018 3:22 pm
Проблему в итоге решил. Несколько месяцев назад переходил на другой домен и в некоторых местах остались "хвосты" от старого. Заодно перевел систему на https.
Объясните подробнее что именно сделали - не могу у себя побороть аналогичную проблему!

Re: [Модуль] MegaD (megad)

Добавлено: Вс ноя 25, 2018 3:45 pm
Chainik
beavisgood писал(а):
Пт ноя 23, 2018 7:44 pm
Единственное, если я меняю состояние портов на Меге железной кнопкой, это событие не передается на сервер.
Пока я поставил в Модуле MegaD считывать статусы каждые 15 сек,
поэтому в меню, на сценах, и пр. софт элементах отображается с задержкой.
может есть более оптимальное решение?
Поделюсь и я своим вариантом настройки, когда на некоторые клавиши выключателя могут быть «повешены» разные действия при коротком и при длинном нажатии.

Путь у нас именно таким объектом будет «Lamp_01». При этом объект «Lamp_02» будет отрабатывать только короткие нажатия.
Сразу покажу настройку портов, на примере одного из входов (контроллер MegaD-2561, прошивка: 4.13b8).
Настройка входа в интерфейсе контроллера.png
Настройка входа Меги
Настройка входа в интерфейсе контроллера.png (7.6 КБ) 4208 просмотров
Галка напротив поля «Net» говорит о том, что прописанное в нем действие по умолчанию (NetAction) будет выполняться только в том случае, если сервер недоступен.

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

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

3. Дополним состав свойств в классе новым свойством «clickLong», которое нам будет служить идентификатором того, будет ли использоваться конкретная клавиша выключателя для длинных нажатий (clickLong = «1») или нет (clickLong <> «1»).
Так как решено, что на длинные нажатия будет реагировать объект «Lamp_01», то сразу уставим у него значение свойства «clickLong» = «1».

4. Дополним состав методов в классе новыми методами
«clickShortAction» (в нем будет код для действия при коротком нажатии)
и
«clickLongAction» (в нем будет код для действия при длинном нажатии).

Запишем в КЛАССЕ код метода «clickShortAction» (он будет таким же, какой ранее мы писали в метод «switch»):

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

file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":2");
$state = file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?pt=".$this->getProperty('Port')."&cmd=get");
if ($state == "ON") {
  $this->setProperty('Status', 1);
} else {
  $this->setProperty('Status', 0); }
Запишем в ОБЪЕКТЕ «Lamp_01» код метода «clickLongAction»:

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

callMethod('Lamp_02.clickShortAction');
Поставим радиоточку для «Вызывать родительский метод:» в положение «Никогда».

5. Запишем в КЛАССЕ код метода «switch»:

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

$ot=$this->object_title;
$clickLong = $this->getProperty('clickLong');
//Если в свойстве "clickLong" не выставлена возможность длинного нажатия (clickLong <> 1), выполняем действие для короткого нажатия сразу
if ($clickLong <> "1") {
//Если пришел параметр "m", например, "m=2", игнорируем
if($_GET['m'] <> "") {
return"";}
callMethod($ot.".clickShortAction");

} else {
//Если для входа предусмотрена возможность использования длинного нажатия ("clickLong" = 1), выполняем нижеследующий кусок кода
//Если пришло длинное нажатие, сразу выполняем для него действие
if($_GET['m'] == 2) {
clearTimeOut($ot);
callMethod($ot.".clickLongAction");
return"";
}
//Выполним действие для короткого нажатия, только если в течение 2-х секунд не придет m=2
setTimeOut($ot,"callMethod('".$ot.".clickShortAction');",2);
}
На всякий случай покажу настройку в модуле «MegaD» на вкладке «Данные».
Настройка в модуле MegaD на вкладке Данные.png
Настройка в модуле "MegaD"
Настройка в модуле MegaD на вкладке Данные.png (51.32 КБ) 4208 просмотров


В результате мы имеем следующее.
Если сервер недоступен, выполняется действие по умолчанию (в моем примере -- это переключение входа на другом контроллере (192.168.0.14/sec/?cmd=7:2).

Если клавиша выключателя должна отрабатывать только короткие нажатия (в моем случае это объект «Lamp_02»), действие выполняется мгновенно (в моем примере – это переключение выхода по параметрам, заданным у объекта в свойствах «ipAddress», «Password» и «Port»).

Если клавиша выключателя должна отрабатывать и короткие и длинные нажатия (в моем случае это объект «Lamp_01»), короткие нажатия отрабатываются с 2-секундной задержкой, а длинные -- с задержкой, примерно, в секунду-полторы.

При этом статусы объектов изменяются одновременно с переключением выходов.
Отдельную периодическую проверку текущих статусов на случай выполнения контроллером действий по умолчанию, разумеется, тоже проводить будет не лишним. Только делать это уже можно не так часто, допустим, 1 раз в 15 минут.