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

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

Модераторы: Bagir, Ivan, Vit, immortal, PAV

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

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

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

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

Помощник создания модулей для MajorDoMo Обсуждение

Просьба задавать вопросы, а также написать чего не хватает в описании.
В последствии будет сделана инструкция в WIKI
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Ivan
Сообщения: 1440
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 299 раз

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) она означает что для следующий модулей не нужно произносить фразы
Пока этот механизм реализован только в модулях от sergejey

Для чего это нужно. Например я ставлю 2 модуля: "Yandex TTS" и "Festival TTS". Если модуль "Yandex TTS" смог произнести фразу, то он устанавливает переменную ignoreVoice=true и "Festival TTS" уже не произносит её.

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

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

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

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

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

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
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1364 раза
Контактная информация:

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
Сообщения: 5722
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 111 раз
Поблагодарили: 1397 раз

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
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1364 раза
Контактная информация:

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
Сообщения: 187
Зарегистрирован: Пт дек 20, 2013 4:46 pm
Благодарил (а): 64 раза
Поблагодарили: 31 раз

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

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

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

PS Вот хоть убей не могу найти где качал. Надеюсь мне за наглость не сочтется дублирование в этой ветке :)
Вложения
написание модуля.zip
(14.79 КБ) 222 скачивания
шаблоны.zip
(14.15 КБ) 210 скачиваний
Последний раз редактировалось 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

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