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

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Модуль "MegaD"

Сообщение sergejey » Ср май 20, 2015 2:34 pm

AHgpeu писал(а):и вопрос: sergejey, а точно команды по умолчанию не выполняются, если прописано связанное свойство/метод?
не могу победить игнорируемые/множественные срабатывания.
особенно часто такое встречается при командах по умолчанию типа 12:2;11:1;p600;11:0
для пробы была в логике на сервере убрана вся логика, пардон за тавтологию, оставлено только переключение выхода 12.
однако выход 11 срабатывает!
В смысле "точно не выполняются"? Они точно выполняются :) Команды по-умолчанию выполняются всегда, независимо от того прописан метод или не прописан. Разница лишь в том, выполняются ли они с сервером или без сервера. Если сервер недоступен, то мега её выполняет сама по себе, если доступен, то эту же команду отдаст сервер, но при этом установит связанное свойство и/или вызовет прописанный метод.
AHgpeu писал(а):и категорически необходима галочка для входов "обрабатывать отпускание кнопки"
Так вы поставьте в свойствах входа тип R&D (если не ошибаюсь) и событие будет приходить дважды -- как на нажатие так и на отпускание. При этом в метод передаётся парметр value, который говорит как раз о том, какое действие было произведено.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

Re: Модуль "MegaD"

Сообщение Victor_S » Ср май 20, 2015 2:50 pm

AHgpeu писал(а): попробуйте реализовать так.
:) Опять же отошлю Вас к своим первым сообщениям в теме...;)
То что Вы говорите, я прекрасно понимаю, безусловно в этом есть своя логика. Хотя я и не проверял как на данный момент отреагирует Мега на, скажем, изменение свойства связанного с выходом Меги объекта...;) Вроде как аналога методу setData пока в модуле нет(или это уже реализовано)?
Смысл моей логики в том, чтобы не плодить "тупые" объекты в большом количестве в системе, которые нигде не используются дальше, ни в сценариях, ни в сценах, у которых и статуса то нету, да и не нужен он никому. У меня железные выключатели(нефиксируемые) света выполняют одну единственную функцию(что с сервером, что без сервера) - переключить выход Меги. Многократных и длительных нажатий я не использую. Поэтому у выключателя не может быть статуса - нефиксируемый он... Статус и метод у меня у лампочки(объект класса реле) - выхода Меги. В этом вся разница подходов... :) Там же где на входе Меги стоят датчики(датчики наличия напряжения или герконы) - там у меня есть объекты класса keysensors со свойствами и методами...
Аватара пользователя
AHgpeu
Сообщения: 117
Зарегистрирован: Чт мар 12, 2015 11:46 am
Благодарил (а): 26 раз
Поблагодарили: 16 раз

Re: Модуль "MegaD"

Сообщение AHgpeu » Ср май 20, 2015 2:55 pm

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

что касается команд по умолчанию... мега сама не может делать более сложную логику, для чего и используем сервер.
простейший пример: 12:2;11:1;p600;11:0 -- это логика меги. на 12м выходе у меня лампа освещения туалета, на 11м -- вытяжка.

можно увидеть, что по клику на выключатель у меня переключается свет (вкл/выкл) и на 10 мин включается вытяжка.
сервер же вытяжку включает только когда человек вышел из туалета! т.е. сидя, пардон, на унитазе, он слышит музыку, а не надоедливые завывания вентилятора.
просто простейший пример привёл.

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

ну или подскажите, на крайний случай, как правильно и безболезненно удалить все команды, прописанные в мегах, из модуля?
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Модуль "MegaD"

Сообщение sergejey » Ср май 20, 2015 3:04 pm

AHgpeu писал(а):что касается команд по умолчанию... мега сама не может делать более сложную логику, для чего и используем сервер.
простейший пример: 12:2;11:1;p600;11:0 -- это логика меги. на 12м выходе у меня лампа освещения туалета, на 11м -- вытяжка.

можно увидеть, что по клику на выключатель у меня переключается свет (вкл/выкл) и на 10 мин включается вытяжка.
сервер же вытяжку включает только когда человек вышел из туалета! т.е. сидя, пардон, на унитазе, он слышит музыку, а не надоедливые завывания вентилятора.
просто простейший пример привёл.

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

Собственно, один из вариантов сделать так, что если связанный метод возвращает false, то не отдавать меге команду по-умолчанию. Либо, если метод возвращает команду, то выдавать её. В любом другом случае отдавать команду по-умолчанию, как это сделано сейчас.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
AHgpeu
Сообщения: 117
Зарегистрирован: Чт мар 12, 2015 11:46 am
Благодарил (а): 26 раз
Поблагодарили: 16 раз

Re: Модуль "MegaD"

Сообщение AHgpeu » Ср май 20, 2015 3:06 pm

Victor_S писал(а): Вроде как аналога методу setData пока в модуле нет(или это уже реализовано)?
есть,
СпойлерПоказать

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

/**
* Title
*
* Description
*
* @access public
*/
 function setProperty($property_id, $value) {
  $prop=SQLSelectOne("SELECT * FROM megadproperties WHERE ID='".$property_id."'");
  $prop['CURRENT_VALUE_STRING']=$value;
  SQLUpdate('megadproperties', $prop);

  $channel=$prop['NUM'];
  $device=SQLSelectOne("SELECT * FROM megaddevices WHERE ID='".$prop['DEVICE_ID']."'");

  if ($prop['TYPE']==1) {
   $url='http://'.$device['IP'].'/'.$device['PASSWORD'].'/?cmd='.$prop['NUM'].':'.$value;
   getURL($url, 0);
  }

  $this->readValues($prop['DEVICE_ID']);

 }
только срабатывает абсолютно прозрачно для пользователя, при изменении значения в привязанном свойстве.
Аватара пользователя
AHgpeu
Сообщения: 117
Зарегистрирован: Чт мар 12, 2015 11:46 am
Благодарил (а): 26 раз
Поблагодарили: 16 раз

Re: Модуль "MegaD"

Сообщение AHgpeu » Ср май 20, 2015 3:07 pm

sergejey писал(а):Собственно, один из вариантов сделать так, что если связанный метод возвращает false, то не отдавать меге команду по-умолчанию. Либо, если метод возвращает команду, то выдавать её. В любом другом случае отдавать команду по-умолчанию, как это сделано сейчас.
это было бы идеально!!
Аватара пользователя
AHgpeu
Сообщения: 117
Зарегистрирован: Чт мар 12, 2015 11:46 am
Благодарил (а): 26 раз
Поблагодарили: 16 раз

Re: Модуль "MegaD"

Сообщение AHgpeu » Ср май 20, 2015 3:20 pm

Victor_S писал(а): У меня железные выключатели(нефиксируемые) света выполняют одну единственную функцию(что с сервером, что без сервера) - переключить выход Меги. Многократных и длительных нажатий я не использую. Поэтому у выключателя не может быть статуса - нефиксируемый он... Статус и метод у меня у лампочки(объект класса реле) - выхода Меги. В этом вся разница подходов... :) Там же где на входе Меги стоят датчики(датчики наличия напряжения или герконы) - там у меня есть объекты класса keysensors со свойствами и методами...
тогда Вам сделать проще простого. Вам только нужно привязать свойство статус лампочки к выходу меги. и всё! т.е. вообще всё)
всё заработает.
при условии, что на меге прописаны команды автономного режима
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Модуль "MegaD"

Сообщение sergejey » Ср май 20, 2015 3:42 pm

AHgpeu писал(а):
sergejey писал(а):Собственно, один из вариантов сделать так, что если связанный метод возвращает false, то не отдавать меге команду по-умолчанию. Либо, если метод возвращает команду, то выдавать её. В любом другом случае отдавать команду по-умолчанию, как это сделано сейчас.
это было бы идеально!!
Сделал, но пришлось внести изменение в ядро, так что для работы с этой функцией нужно общее обновление (или обновить один файл /modules/objects/objects.class.php).
Оказывается, вызываемый метод не возвращал результат своего выполнения и его нельзя было использовать. Почему-то думал, что это было когда-то сделано.

В любом случае, теперь, если в коде связанного метода стоит return, то эти данные будут использоваться как команда для меги.
Например:

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

return ""; // ничего не выполнять на меге 
или

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

return "8:2"; // переключить OUT8 
если return-а нет никакого, то будет выполнена команда по-умолчанию
За это сообщение автора sergejey поблагодарил:
AHgpeu (Ср май 20, 2015 4:36 pm)
Рейтинг: 1.16%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

Re: Модуль "MegaD"

Сообщение Victor_S » Ср май 20, 2015 4:06 pm

AHgpeu писал(а):[
тогда Вам сделать проще простого. Вам только нужно привязать свойство статус лампочки к выходу меги. и всё! т.е. вообще всё)
всё заработает.
при условии, что на меге прописаны команды автономного режима
Нет, сейчас модуль не обновляет статус свойства связанного объекта после эхо -команды от выключателя.
Собственно эти разные наши подходы сродни спору о том что первично - яйцо или курица...:)
Я, на данный момент, больше доверяю исполнительному устройству чем МД...;) Т.е. мне важно знать что устройство точно выполнило мою команду, а не то, что команда ему отправлена. Именно поэтому я сейчас после отправки команд Меге каждый раз спрашиваю у нее выполнила ли она ее. И только после этого отображаю состояние в интерфейсе МД.
Аватара пользователя
AHgpeu
Сообщения: 117
Зарегистрирован: Чт мар 12, 2015 11:46 am
Благодарил (а): 26 раз
Поблагодарили: 16 раз

Re: Модуль "MegaD"

Сообщение AHgpeu » Ср май 20, 2015 4:43 pm

sergejey писал(а):Сделал, но пришлось внести изменение в ядро, так что для работы с этой функцией нужно общее обновление (или обновить один файл /modules/objects/objects.class.php).
Оказывается, вызываемый метод не возвращал результат своего выполнения и его нельзя было использовать. Почему-то думал, что это было когда-то сделано.

В любом случае, теперь, если в коде связанного метода стоит return, то эти данные будут использоваться как команда для меги.
Например:

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

return ""; // ничего не выполнять на меге  
или

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

return "8:2"; // переключить OUT8  
если return-а нет никакого, то будет выполнена команда по-умолчанию
спасибо огромное!

можно вопрос?

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

function setProperty($property_id, $value) 
есть ли возможность вывести в интерфейс $property_id ?
что бы была возможность пользоваться этой функцией. и возможен ли локальный хак этой функции, при передаче в $value значения типа "2&t=18"?
ничего этим не поломается?

не хватает функции отправки своих команд меге
Ответить