[Разработчикам] Информация и рекомендации

Модератор: immortal

Ivan
Сообщения: 1460
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 312 раз

Re: Разработка модулей (Рекомендации)

Сообщение Ivan » Пт май 06, 2016 3:21 pm

В систему подписки а события добавлен механизм приоритетов и дополнительных параметров.
Теперь при установке в функции подписки необходимо указать приоритет модуля

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

 function install($data='') {
  subscribeToEvent($this->name, 'SAY', '', 10);
  parent::install();
 }
У данного модуля приоритет 10 (По умолчанию приоритет 0). Он запускается раньше чем другие модули. То есть чем выше приоритет тем раньше он в очереди

Также в processSubscription добавлен массив &$details в который каждый модуль может оставить информацию для других модулей.

Введённые переменные:
  • ignoreVoice (NULL/false, true) она означает что для следующий модулей не нужно произносить фразы
Для чего это нужно. Например я ставлю 2 модуля: "Yandex TTS" и "Festival TTS". Если модуль "Yandex TTS" смог произнести фразу, то он устанавливает переменную ignoreVoice=true и "Festival TTS" уже не произносит её.

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

Для отписки от событий в функцию uninstall() (или при других условиях) модуля нужно добавить unsubscribeFromEvent(...).
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Sas
Сообщения: 187
Зарегистрирован: Вт июл 12, 2016 6:16 pm
Благодарил (а): 1 раз
Поблагодарили: 11 раз

Re: Разработка модулей (Рекомендации)

Сообщение Sas » Пт авг 05, 2016 1:31 am

Можно еще приоритет в минус, например для случая когда фраза вообще не должна произноситься?
сейчас любая фраза идет в голос и скачивает mp3 несмотря на уровень и уровень громкости
это должно чуть уменьшить нагрузку на систему и интернеты(те же 2/3/4г)
Аватара пользователя
nick7zmail
Сообщения: 6003
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 115 раз
Поблагодарили: 1484 раза

Re: Разработка модулей (Рекомендации)

Сообщение nick7zmail » Чт авг 18, 2016 11:40 am

Вопросик по модулям...на этот раз по юзер-интерфесу...

Как создать в интерфейсе элемент меню?

Звучит туповато, но сформулировал как мог. Теперь разъяснения)) Скопировать HTML-код с описания библиотеки JQueryMobile вообще не проблема, назначить на него какой нить java-код тоже...
А как создать именно элемент меню? Там помимо самого (к примеру выключателя) есть обвес из java-скриптов, которые ожидают завершения выполнения, потом прописывают "ОК", плюс у каждого элемента свои #ID#.

Ну и, наверное, пример)) Есть в таблице несколько записей, есть поле, к примеру "STAT", значения соответственно 1/0. Нужно чтобы при конструкции формата

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

[#module name="имя модуля" mode="menu"#]    
...ну или как там модули вызываются...выводилось, скажем, несколько выключателей отображающих свойство STAT из таблицы у каждой записи. Аналогично со сценами...чтобы выводилась пачка элементов типа выключатель. Соответственно чтобы при перещелкивании они заносили соотв. значения в таблицу, и меняли свой статус.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
sergejey
Site Admin
Сообщения: 4263
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 74 раза
Поблагодарили: 1426 раз
Контактная информация:

Re: Разработка модулей (Рекомендации)

Сообщение sergejey » Пт авг 19, 2016 11:07 am

Два варианта.

1. [#module name="имя модуля" mode="menu"#] -- такой вариант вполне ОК, только нужно самому реализовывать обработку переключателя, т.е. выводить все нужные html-элементы и написать свой скрипт, который в случае изменения будет отправлять данные в свой модуль. Фактически, это вставка HTML-кода, который делает всё, что нужно

2. Автоматически создавать "родные" элементы меню, привязывать их опять же к каким-то объектам либо задавать код, который будет выполняться, когда пользователь их меняе. Т.е. добавлять записи в таблицу commands, указывая нужный TYPE. Кстати, сейчас в некоторых сущностях системы появилось поле SYSTEM -- его отредактировать в панели нельзя и оно специально служит для автоматического создания, обновления и удаления элементов. Модуль может создать свой элемент, заполнив поле SYSTEM и потом его обновлять, удалять и т.п.

Лично мне больше нравится первый вариант для кастомного модуля.
За это сообщение автора sergejey поблагодарил:
Samir77 (Пн июн 25, 2018 9:51 pm)
Рейтинг: 1.37%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
nick7zmail
Сообщения: 6003
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 115 раз
Поблагодарили: 1484 раза

Re: Разработка модулей (Рекомендации)

Сообщение nick7zmail » Пт авг 19, 2016 11:11 am

sergejey писал(а): 1. [#module name="имя модуля" mode="menu"#] -- такой вариант вполне ОК, только нужно самому реализовывать обработку переключателя, т.е. выводить все нужные html-элементы и написать свой скрипт, который в случае изменения будет отправлять данные в свой модуль. Фактически, это вставка HTML-кода, который делает всё, что нужно
Тогда еще вопрос - есть какие-нить мануалы по системным обработчикам, чтобы их прикрутить? Просто если есть системные скрипты - типа ожидания переключения выключателя - зачем я буду дублировать его? Или системными тут не воспользоваться?
sergejey писал(а): 2. Автоматически создавать "родные" элементы меню, привязывать их опять же к каким-то объектам либо задавать код, который будет выполняться, когда пользователь их меняе. Т.е. добавлять записи в таблицу commands, указывая нужный TYPE. Кстати, сейчас в некоторых сущностях системы появилось поле SYSTEM -- его отредактировать в панели нельзя и оно специально служит для автоматического создания, обновления и удаления элементов. Модуль может создать свой элемент, заполнив поле SYSTEM и потом его обновлять, удалять и т.п.
Про это тоже можно по-подробнее? Как вариант - где инфу почитать?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
sergejey
Site Admin
Сообщения: 4263
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 74 раза
Поблагодарили: 1426 раз
Контактная информация:

Re: Разработка модулей (Рекомендации)

Сообщение sergejey » Пт авг 19, 2016 11:35 am

nick7zmail писал(а):
sergejey писал(а): 1. [#module name="имя модуля" mode="menu"#] -- такой вариант вполне ОК, только нужно самому реализовывать обработку переключателя, т.е. выводить все нужные html-элементы и написать свой скрипт, который в случае изменения будет отправлять данные в свой модуль. Фактически, это вставка HTML-кода, который делает всё, что нужно
Тогда еще вопрос - есть какие-нить мануалы по системным обработчикам, чтобы их прикрутить? Просто если есть системные скрипты - типа ожидания переключения выключателя - зачем я буду дублировать его? Или системными тут не воспользоваться?
В таком варианте придётся дублировать. Даже не так -- делать упрощённую копию, т.к. текущие обработчик меню достаточно сложные из-за того, что там и AJAX и веб-сокеты. Проще всего использовать AJAX со своим модулем и всё.
nick7zmail писал(а):
sergejey писал(а): 2. Автоматически создавать "родные" элементы меню, привязывать их опять же к каким-то объектам либо задавать код, который будет выполняться, когда пользователь их меняе. Т.е. добавлять записи в таблицу commands, указывая нужный TYPE. Кстати, сейчас в некоторых сущностях системы появилось поле SYSTEM -- его отредактировать в панели нельзя и оно специально служит для автоматического создания, обновления и удаления элементов. Модуль может создать свой элемент, заполнив поле SYSTEM и потом его обновлять, удалять и т.п.
Про это тоже можно по-подробнее? Как вариант - где инфу почитать?
Всё в лучших традициях -- нигде )) Сорри, но я при работе над проектами делаю некоторые фичи, которые нужны в данный момент и пригодятся на будущее, но их популярно описывать у меня уже времени не остаётся.
В общем, ниже пример кода, который удаляет элемент меню и создаёт его заново:

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

$system_name='mymodule_item_1';
$code='';
SQLExec("DELETE FROM commands WHERE SYSTEM='".$system_name."';
$item=array();
$item['SYSTEM']=$system_name;
$item['TITLE']='My Switch';
$item['TYPE']='switch';
$item['PARENT_ID']=0;
$code="include_once(DIR_MODULES.'mymodule/mymodule.class.php');"
$code.="$myModule=new mymodule();";
$code.="$myModule->processItemChange('".$system_name."',\$params['VALUE']);";
$item['CODE']=$code;
SQLInsert('commands',$item);
И соответственно в модуле должен быть метод processItemChange, который принимает два параметра -- системное имя и новое значение.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
AuguR_S
Сообщения: 5
Зарегистрирован: Сб авг 13, 2016 9:13 pm
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Разработка модулей (Рекомендации)

Сообщение AuguR_S » Вт авг 23, 2016 6:18 pm

Парни, помогите чайнику. А что это за синтаксис в .html - [#.............#] ???
Например тот же [#module name="имя модуля" mode="menu"#] или [#begin RESULT#]
[#end RESULT#]? Что курить на эту тему?
Alien
Сообщения: 188
Зарегистрирован: Пт дек 20, 2013 4:46 pm
Благодарил (а): 66 раз
Поблагодарили: 32 раза

Re: Разработка модулей (Рекомендации)

Сообщение Alien » Вт авг 23, 2016 7:20 pm

Покури где-то тут http://majordomo.smartliving.ru/forum/v ... 0%B5%D0%B9 сразу действительно покурить нужно. Потом разбираешься :)
На форуме где-то есть два архивчика в зипах "написание модуля" и "шаблоны"

PS Вот хоть убей не могу найти где качал. Надеюсь мне за наглость не сочтется дублирование в этой ветке :)
Вложения
написание модуля.zip
(14.79 КБ) 245 скачиваний
шаблоны.zip
(14.15 КБ) 233 скачивания
Последний раз редактировалось Alien Вт авг 23, 2016 7:35 pm, всего редактировалось 1 раз.
За это сообщение автора Alien поблагодарили (всего 2):
AuguR_S (Вт авг 23, 2016 7:35 pm) • ipz (Вс сен 04, 2016 2:03 am)
Рейтинг: 2.74%
Ubuntu на Banana pi M2U Connect
AuguR_S
Сообщения: 5
Зарегистрирован: Сб авг 13, 2016 9:13 pm
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Разработка модулей (Рекомендации)

Сообщение AuguR_S » Вт авг 23, 2016 7:35 pm

Спасибо. То что надо!
Ответить