структура

Структура MajorDoMo

Структура MajorDoMo просто о «сложном».

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

Давайте попробуем взглянуть на это поближе. Все что мы делаем реализуется, по большей части, с помощью PHP кода. Он, в свою очередь, состоит как из базовых функций, так и небольшого количества собственных команд MajorDoMo.

Для удобства понимания и реализации, размещать код можно в разных местах. Для понимания, я приведу простой пример такого подхода. Допустим, мы имеем необходимость выполнить некий абсолютно одинаковый код, и по нажатию кнопки в меню, и по голосовой команде. Мы можем прописать этот код непосредственно и в кнопку меню, и в голосовую команду. Громоздко не правда ли? А можем положить его в сценарий и далее уже вызывать этот сценарий абсолютно из любого места одной единственной строчкой. Вот, по сути, и весь секрет этой кажущейся сложности. 🙂

Отсюда простая формула. Если, какой то, код планируется выполнить из одного места, то прописываем его непосредственно там откуда и будем выполнять. Если же доступ к нему нужен, как минимум, из двух мест стоит уже задуматься о сценарии.

Где же эти самые места для кода?

  • Ну конечно же это Сценарии. (Меню администрирования/ОБЪЕКТЫ/Сценарии).
  • Методы (Меню администрирования/ОБЪЕКТЫ/Объекты), этого я подробно коснусь позже.
  • Меню (Меню администрирования/ОБЪЕКТЫ/Меню управления).
  • Голосовое управление (Меню администрирования/ОБЪЕКТЫ/Шаблоны поведения).
  • Визуальное управление на плане здания (Меню администрирования/ОБЪЕКТЫ/Сцены).
  • Выдергивание данных с Веб страниц (Парсинг) (Меню администрирования/ОБЪЕКТЫ/Веб-переменные).

Собственно, по большей части, этим все и ограничивается. Все остальное интуитивно понятно и схватывается на лету.

Сценарии.

Со Сценариями все понятно. В них мы прописываем код который хотим исполнять из разных мест.

Меню, Голосовое управление и Сцены.

В них мы записываем те самые заветные индикаторы, кнопочки, выключатели, регуляторы…

В них могут быть записаны:

  1. Весь код.
  2. Непосредственный переход в сценарий (путем выбора, заранее заготовленного, сценария из списка).
  3. Смешанный тип (например, когда отрабатываем кусочек кода непосредственно в кнопочке, например ее индикацию, потом переходим в сценарий и выполняем то что прописано в нем).

Парсинг.

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

Вот пример. Допустим, нужно с сайта, условно «Синоптик», получать температуру. Специальными символами мы указываем начало и конец нужного нам кусочка текста (пусть это будет цифра текущей температуры). Далее, с определенной, заданной нами, периодичностью эта циферка считывается и записывается в свойство. О свойствах чуток позже. Пока же, просто, знайте что считанная цифра хранится у нас в определенном месте, пока не произойдет ее изменение. Как только оно произойдет, цифра изменится и в этом месте (свойстве). Параметр (цифру температуры) записанную в свойстве мы необходимым нам образом обрабатываем. Допустим, для меню, дописываем перед выводимой цифрой слова: «На улице:» а после  «° С» .

Вот как это выглядит в коде: На улице: %ThisComputer.Sinoptik_temp%°C

На улице: и °C это просто текст.

А: ThisComputer.Sinoptik_temp как раз и есть наше свойство, где ThisComputer это класс, а Sinoptik_temp это свойство этого класса, а точка применяется в качестве разделителя. Прочтя чуть ниже все это поймете. Ах да % это ограничители для меню, в коде как правило применяются кавычки.

В результате у нас в меню, мы видим всегда актуальную температуру с сайта.

Объекты.

Ну и наконец, у нас остаются объекты, то самое место где лежат наши свойства и не только. Объекты тоже, на первый взгляд, кажутся сложной вещью. Но это только на первый взгляд. 🙂

Объект это представление чего бы то ни было, например: компьютер(как в примере выше), или будильник, или таймер, или даже Скайп… В общем, что угодно.

Идентичных объектов может быть множество. Ну например. Помните когда я писал как мне видится система, я говорил что у нас будет метеостанция с домашним и уличным блоками. Так вот, оба блока собираются на абсолютно одинаковых модулях ESP-12. Каждый из них это объект, а их совокупность это Класс. Здесь все, так же, делается для удобства и исключения лишней писанины, поймете дальше.

Структура здесь следующая:

1. Класс идентичных устройств, давайте условно назовем его ESP (раз мы взяли за пример модули ESP).

1.1. Этому классу можно задать свойства (если по простому, задавая в классе ESP свойство температура оно у нас автоматически появится во всех объектах класса ESP, т. е. не нужно будет создавать свойство, каждому объекту).

1.2 Этому классу, так же, можно задать и методы (т.е. выполнение некоего кода, эти методы аналогично свойствам отобразятся во всех наших объектах).

1.3. Ну и наконец, естественно, в классе есть объекты. Это уже, непосредственно, наши физические ESP: ESP-12 №1, ESP-12 №2 и т.д.

Каждый объект (ESP-12 №1, ESP-12 №2 и т.д.), в свою очередь, имеет свои собственные свойства и методы.

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

Я поясню на примере:

Допустим у нас есть ESP-12 №1 и ESP-12 №2. Нам нужно мерить на обоих температуру, но помимо этого на первом нужно еще мерить влажность, а с помощью второго управлять реле.

Делаем класс ESP, в нем прописываем свойство  Температура. Оно автоматически появятся в свойствах как ESP-12 №1 так ESP-12 №2. Далее непосредственно, для ESP-12 №1, уже в его свойствах, прописываем Влажность. В свойствах же, ESP-12 №2 прописываем Реле. В результате имеем ESP-12 №1 со свойствами в которых система нам запишет значения температуры и влажности и ESP-12 №2 со свойствами в которых система нам запишет значение температуры и статус реле(0- Выкл, 1-Вкл). Ну и соответственно, методы которые помогут нам эти самые данные обрабатывать, если в этом будет какая то необходимость, заведем в классе ESP, а код в них будем уже прописывать персонально для каждого объекта.

Следует отметить что методы  могут быть вызваны откуда угодно callMethod(«Object.Method», $params); или альтернатива cm cm(«Object.Method», $params);. Свойства так же глобальны и могут вызываться из любого места. Функции sg(setGlobal) и gg (getGlobal) как раз этим и занимаются. Например строчка: getURL(gg(‘AlarmOne.UrlAlarmRing’),0);  откроет ссылку которая хранится в свойстве AlarmOne.UrlAlarmRing

Вот теперь уже точно, у Вас есть все чтобы осознать как устроен MajorDoMo.

Давайте закрепим это на конкретном примере:

Мы прошили прошивкой от wifi-iot.com наши модули ESP-12 №1 и №2. Первый из которых считывает температуру и влажность, а второй, считывает температуру и управляет реле. Обе ESP-12 с определенной периодичностью посылают данные на MajorDoMo, где их принимает некий сценарий, который раскладывает полученные данные по свойствам. Ну и наконец, мы берем эти данные из свойств и пользуемся ими уже на свое усмотрение, т. е. вставляем необходимое свойство уже там где его нужно вывести или применить.

Например, берем уличную и комнатную температуры, обрабатываем их в неком сценарии, тем самым получаем умный термостат.

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

А по утру метод который запускается из объекта Будильник, запустит нам сценарий, который после того как мы окончательно проснулись и отключили мелодию, голосом прочтет нам текущую сводку погоды. И как вы думаете откуда он возьмет цифры температур и влажности? Точно, из свойств!

И таких вот вариантов можно строить сколь угодно много лишь бы фантазии хватало, вот Вам и гибкость которую я обещал.

Что дальше?

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

Итак, HDMI 4×2 matrix 4K x 2K 3D.

Комментарии
  1. admin admin

    Сразу скажу, я максимально, на сколько могу, стараюсь сужать картинки чтобы их можно было рассмотреть даже на смартфоне в страничной ориентации, но не всегда это получается 🙁 . Если вы видите что текст комментариев вылазит за границы, просто, поверните смартфон на бок (Альбомная ориентация), смартфоны, они разные бывают.

    Анализируя свой блог я столкнулся с несколькими поисковыми запросами, типа: — Где находится файл menu.html или scenes.html и т.п.
    Ответы на подобные вопросы очень просты, чтобы посвящать им отдельный блог. Поэтому отвечу на них в комментариях.
    По умолчанию, все файлы формирующие внешний вид терминала находятся в папке: /templates если же у вас уже натянут сторонний скин то эти файлы следует искать в папке /templates_alt. У папки /templates_alt более высокий приоритет чем у /templates и все что в ней находится отрабатывается в первую очередь. Если же в ней чего то не достает, то движок обращается за недостающим в папку /templates. Ну и, наверное, исходя из выше сказанного, стоит отметить, что если вы собираетесь натянуть на MajorDoMo свой собственный темплейт (скин), стоит создать папку /templates_alt (если она еще не создана) и все эксперименты производить в ней. Это убережет вас от потери чего бы то ни было, полученного вами по умолчанию, в случае какой либо неудачи.

  2. admin admin

    Был и такой запрос: -MajorDoMo не принимает данные…
    MajorDoMo принимает данные, как правило, путем выполнения некоего сценария, который либо получает эти данные либо считывает их, и далее сценарий помещает их в приготовленные вами для этого свойства, откуда впоследствии необходимые вам данные считываются и используются. Запускаются эти сценарии, как правило; Либо извне, со стороны стороннего сервера (ну допустим как в случае с ESP8266, который отправляя данные запускает сценарий espdata), так мы получаем данные (кстати, в ближайшее время, я подробнее все это расскажу в своей статье про метеостанцию). Либо по таймеру, чтобы считать данные от куда либо. Есть уже готовые механизмы, например, подобный встроен в Веб-переменные, которые опрашивают целевую страницу, с определенной периодичностью. В описываемом случае периодичность задается в поле Интервал проверки , конкретной веб-переменной. Например, таким образом мы получаем время восхода и захода солнца. Веб-переменная забирает значение времени с какого нибудь метеосайта, записывает его в свойство, ну а далее, уже в методе, мы производим обработку(проще говоря, сверяем текущее время с временем захода солнца), в результате которой Алиса, точно в нужное время, говорит нам — Солнце заходит. и при необходимости выполняет какие либо действия, ну или 🙂 запускает нужный нам сценарий.
    Так вот, если MajorDoMo не принимает какие то данные в первую очередь стоит отыскать сценарий или источник(допустим как в случае в веб-переменной) который за это отвечает и проверить его работоспособность. Для этого предусмотрены все механизмы, от элементарного запуска сценария, прямо из его настроек, путем перехода по прописанной на страничке его настроек ссылке и до анализа логов как например это имеется в веб-переменных.

  3. admin admin

    Ну и наконец третий запрос который я увидел: -MajorDoMo простые объекты
    Тут стоит отметить, что запрос был построен немножко некорректно. Несмотря на то что объектом может быть все что угодно, с недавнего времени в систему введено дополнительное понятие: Простые Устройства. Это было сделано для облегчения жизни новичкам. Честно говоря, я этим пока не пользовался, ввиду того, что работаю, как раз, на уровне тех самых объектов. Но вот направить человечка на путь истинный: (Простые Устройства) мог бы, буквально, за секунды. Так что, не стесняйтесь, регистрируйтесь и спрашивайте в комментариях. В любом случае я их рассматриваю гораздо чаще чем анализирую поисковые запросы.

  4. admin admin

    Сижу, потихонечку пишу статью про чайник, а самого так и подмывает, глянуть в метрику. Сдался, решил посмотреть. И вижу, очередной поисковый запрос: — MajorDoMo структура бд
    Сложно как то сразу ответить на данный вопрос, не зная изначально чего человек хотел конкретно. Структура, по мере заполнения системы будет у всех разная, кто то поставит себе тот или иной модуль, то или иное приложение, а кому то это не понадобится… Таблицы соответственно тоже имеют далеко не типовые поля. Поэтому на данном этапе приведу свой перечень, а там уже если кого либо, заинтересует что либо конкретное, спрашивайте будем посмотреть.
    структура базы

  5. admin admin

    Запрос: Как записать значение в свойство?
    Ответ: Значение в свойство в большинстве случаев пишется автоматически, впрочем можно и вручную. Прочтите статью про Розетку Broadlink SP3 и у вас больше никогда не возникнут подобные вопросы.

  6. admin admin

    Запрос: MajorDoMo, веб переменные температура?
    Ответ: Веб переменным, наверное будет посвящена отдельная статья, чтобы дать понятие о самом, на первый взгляд, сложном, что там имеется, а именно, о фильтровании. Пока же конкретный ответ на конкретный вопрос.
    Будем брать текущую температуру с сайта Синоптик ввиду его стабильности и постоянства.
    Создаем Веб переменную с Именем: Sinoptik_temp
    В Ссылку записываем: https://sinoptik.com.ru/погода-волгоград В вашем случае волгоград меняем на ваш город.
    В Шаблон поиска:
    веб переменная температура Синоптик
    Связанный объект: This Compuer
    Свойство: Sinoptik_temp это свойство нужно создать в объекте This Compuer (читайте эту статью и статью про розетку SP3).
    Интервал проверки: 600
    Вот, собственно и все, теперь каждые 10 минут Мжор будет считывать, с Синоптика, текущую температуру в вашем городе, и записывать ее в свойство Sinoptik_temp, с которым вы сможете делать все что Вам угодно, отображать использовать в сценариях и т.д…

  7. admin admin

    Запрос: MajorDoMo, солнце заходит?
    Ответ: В MajorDoMo, существуют два режима, А именно, Ночной режим и режим Темное время суток. Ночной режим, включается по часам, по дефолту с 20:00 и до 8:00. Этот режим очень удобен, например, для отключения голосового оповещения. Режим, Темное время суток, включается по заходу и выключается по восходу солнца, данный режим удобен, например, для управления уличным освещением. Данные, для конкретной местности, получают путем применения Веб переменных. Которые в последствии хранятся в свойствах ThisComputer.SunRiseTime и ThisComputer.SunSetTime и обрабатываются в методе onNewMinute класса Timer.

  8. admin admin

    Запрос: MajorDoMo глобальные переменные?
    Ответ: Функции gg (getGlobal) и sg(setGlobal) говорят сами за себя, ну, а наши свойства, ввиду того что им свойственно меняться и есть эти самые глобальные переменные. Допустим мы имеем некий сценарий и нам нужно что то сделать со свойством, ну допустим, изменить пороговую температуру термостата. С помощью функции getGlobal мы забираем значение свойства в свой сценарий и записываем его в локальную переменную, пусть это будет: $temp_term. С этой локальной переменной, в нашем сценарии, мы уже, делаем, нужные нам преобразования, и наконец, записываем измененное состояние $temp_term, с помощью функции setGlobal, обратно в свойство. Ну, а со свойством, как мы уже знаем, мы можем поступать как нам угодно. Например, отобразить его значение на экране, отправить его в физический термостат, ну или, даже проговорить через динамики системы… Кстати, говоря о глобальных переменных, стоит отметить и встроенные функции системы. Надо помнить, что есть некий набор функций и переменных которые реализованы, чисто, для системы. Помните, я упоминал, что по большей части мы работаем с PHP, но есть и нечто встроенное? Посмотреть встроенные функции можно ЗДЕСЬ. И когда будете смотреть, обратите внимание на пункт «Управление циклами (сервисами)», там вы, как раз, и столкнетесь со встроенной глобальной переменной и поймете что методика везде одна и та же.

  9. admin admin

    Запрос: MajorDoMo html блок использовать значение из переменной?
    Ответ: Я делаю, например, так: На улице: %ESP8266003b5df7.dhtt1%°C (т.е. пишу символ ° с клавиатуры) и тогда раскладка до балды. Символ градус ставиться ALT+0176, цифры набираем на цифровой части клавиатуры (ССЫЛКА НА ВИКЕПЕДИЮ).
    Некоторые делают, например, так:
    %KitchenMain.dhtt1%&dеg;C и тогда нужно ставить C исключительно в английской раскладке. Лично я не пробовал, но об этом говорилось: (ССЫЛКА НА ФОРУМ).
    Внимание! Если кто надумает скопи-пастиь: %KitchenMain.dhtt1%&dеg;C имейте ввиду, чтобы оно здесь, в блоге, отображалось не как символ градуса, а как &dеg; я в коде символа заменил английскую букву е на русскую, не забудьте поменять обратно!
    Ну и так дале… Бла, бла, бла: %ОБЪЕКТ.СВОЙСТВО% бла, бла, бла. Бла, бла, бла на любом языке хоть на китайском.
    Если нужно, например отобразить влажность то делаем так: %ESP8266003b5df7.dhth1%% второй значок % будет просто символом.

  10. admin admin

    Запрос: Чтобы сценарий majordomo выполнялся каждый час?
    Ответ: Идем в метод: ОБЪЕКТЫ/Объекты/Timer/onNewMinute и в самом конце добавляем:

    if ($m=="10") {
    runScript('ИМЯ СЦЕНАРИЯ');
    }

    Не забываем нажать кнопку «Обновить»
    Сценарий будет выполняться после каждой десятой минуты часа.

  11. admin admin

    Запрос: MajorDoMo как прописать путь к другим страницам?
    Ответ:
    1. Если вы хотите чтобы ваша страница выглядела как вкладка, то вам следует перейти: Главное административное меню/НАСТРОЙКИ/Домашние страницы, кликнуть по кнопке «Новая страница», В поле Название(*) прописать название вкладки, в списке Тип выбрать URL, в поле Ссылка, прописать адрес страницы. Для локальных страниц достаточно указывать локальный путь, например: /Template_alt/название страницы.html. Если у вас страница в собственной папке и в ней имеется индексный файл, достаточно указать только папку, например: /Kinoteatr/

    2. Допустим вы захотели вставить себе в MajorDoMo какой то сайт из Интернет, чтобы пользоваться им постоянно. Это очень просто. Для этого нужно воспользоваться приложением «Присланные ссылки» (ReadIt в маркете дополнений).
    Пример. У вас есть браузер на работе. Делаем браузерную закладку с Названием: Отправить в MJD и в поле URL прописываем:

    javascript:(function(){var host='Адрес вашего MajorDoMo'; var title=prompt('Название:', document.title); if (title!='' && title!=null) {location.href='http://'+host+'/popup/app_readit.html?ajax=1&op=add&url='+encodeURIComponent (location.href)+'&title='+encodeURIComponent(title);}}());

    !!! НЕ ЗАБУДЬТЕ ПОМЕНЯТЬ: Адрес вашего MajorDoMo !!!
    Кладем ее на видное место, например в панель закладок(которую предварительно, естественно, надо отобразить).
    Теперь на какой бы странице вы не находились, достаточно кликнуть по этой закладке, как страница появиться у вас в MajorDoMo, во вкладке Ссылки. Обратите там (в открытой вкладке Ссылки) внимание на маленькую иконку в левом верхнем углу, кликнув по ней вы откроете меню, где сможете : Выбрать страницу которая будет отображаться постоянно во фрейме (во вкладке), Добавить новую страницу вручную(Если по каким то причинам не захотите пользоваться закладкой), ну и наконец взять ту самую ссылку для создания закладки (Внимание! Если будете брать ссылку оттуда обратите внимание на: host='mycomp' mycomp это ссылка на ваш MajorDoMo, как правило там может быть локальный IP, его нужно будет сменить либо на внешний IP, либо на доменное имя. Вообще, я бы рекомендовал вам пользоваться доменным именем, это удобнее во всех отношениях. Так, например, имея доменное имя во вне и прописав его ассоциацию в локальной сети у вас будет всего одна ссылка, которую вы сможете использовать везде, это очень удобно при работе с мобильными приложениями, Tasker и т.д. не нужно надеяться на переключение чего либо когда вы дома, а потом вне).

    3. И наконец, при желании, вы можете вставлять свою страничку прямо в сцену. Ну, например, если у вас есть некая готовая страница с группой кнопок и т.п. С возможностями ознакомиться можно здесь: (ССЫЛКА)

  12. admin admin

    Запрос: Где в МажорДоМо вручную прописать timezone?
    Ответ: Главное административное меню/НАСТРОЙКИ/Общие настройки, пункт Time zone.

  13. admin admin

    Запрос: MajorDoMo сценарии?
    Ответ: Круто, ничего не скажешь! 😀 И таких запросов достаточно много. Тем не менее, несмотря на всю комичность ситуации, в нашем случае, выход есть. Разработчики постарались и сделали ресурс где новички всегда могут увидеть, именно, то что они просят и не только. 🙂 Вот вам прямая ссылка: (СЕРВИС CONNECT)
    Перед вами карта со всеми участниками проекта которые готовы поделиться своими наработками. Сразу под картой таблица с перечнем участников, напротив каждого участника есть цифра количества сценариев присутствующих в его системе. Переходите на страничку выбранного вами участника, кликнув по его имени в таблице, а далее на вкладку Сценарии. Выбирайте понравившийся сценарий и изучайте его на здоровье. Но сразу предупрежу, вряд ли Вы там найдете пошаговые инструкции. Исключительно только код, ну и может немного комментариев. Для тех кому нужно разобраться в том как, куда и зачем… Существует форум, Ютюб, ну и такие сайты на котором вы сейчас находитесь. 🙂

  14. admin admin

    Запрос: MajorDoMo запуск метода объекта?
    Ответ: Метод вызывается строкой:

    callMethod("Object.Method", $params);

    Ранее в комментарии про глобальные переменные я писал про внутренние функции и приводил (ССЫЛКУ) , там же в разделе «Работа с объектами» вы найдете и про методы.

  15. admin admin

    Запрос: Как записать значение из свойства одного объекта в свойство другого?
    Ответ: Для начала, стоит определить зачем это нужно. Это нужно, например, в том случае когда вам необходимо создать Простое устройство, допустим датчик температуры, а физически вы имеете сложное устройство, например модуль ESP, к которому подсоединено много датчиков в том числе и датчик температуры. Но, ввиду того что ESP не является простым устройством и сценарий для записи всех его датчиков составной (Т.е. значение в свойство записывается путем составления из идентификатора как объекта и, собственно, свойства. Короче код один, а данные пишутся в свойства разных ESP), прямое использование его в простых устройствах невозможно.
    Как поступить?
    1. Создадим Простое устройство, датчик температуры. На выходе мы получим пару Объект.Свойство, например: Sensor_temp01.value запомним его.
    2. Узнаем как называется датчик температуры интересующей нас ESP(допустим мы хотим использовать датчик температуры из состава BME-280, который подключен к первому модулю ESP, который у нас находится в зале), идем в свойства зального ESP и видим что датчик температуры у нас называется: ESP8256007b5b6d.bmet, запоминаем его.
    3. Создадим сценарий который будет ежеминутно записывать значение из свойства температуры ESP в свойство температуры простого устройства. Давайте назовем его: SensorAssociation
    И пропишем ему код:

    //Ежеминутно пишет данные из ESP8256007b5b6d.bmet в Sensor_temp01.value
    $templ = getGlobal("ESP8256007b5b6d.bmet");
    setGlobal(("Sensor_temp01.value"),$templ);

    Сохраним наш сценарий!

    4. Ну и наконец, поместим сценарий на ежеминутное исполнение в метод таймера: onNewMinute прописав его в самом конце строчкой:

    runScript('SensorAssociation');

    Таким образом, мы запишем одно свойство в другое, вот собственно и ответ на поставленный вопрос.

    P.S. Кстати, в дальнейшем, ничего вам не мешает, в этот сценарий прописывать все необходимые вам ассоциации. 🙂

  16. admin admin

    Запрос: Как в MajorDoMo отключить ночной режим?
    Ответ: Все очень просто, любым способом поставить в свойство ThisComputer.minMsgLevel значение 2.
    Примечание! В свое время мнения разошлись и некоторые решили оставить себе запас значений. Если вдруг вы пользуетесь подобным модом и после установки 2 Алиса, у вас, не заговорит, попробуйте поставить туда 4.

  17. admin admin

    Запрос: MajorDoMo индикаторы?
    Ответ: Очень многие новички часто залипают на этом вопросе. Да, действительно, без глубокого знания структуры, а в частности шаблонов, индикаторы не так то просто найти, но зная точное место где они находятся это не составит, абсолютно, никакой проблемы. Первое о чем бы хотелось сказать, индикаторы это часть шаблона, т.е. т.н. Веб-морды или (front-end, если угодно), поэтому? именно там их и следует искать. И так, Веб-морда у нас может находиться в двух местах. 1. Если вы используете стандартный шаблон, то наверняка вам следует искать ее вот здесь: /www/templates/default.html 2. Если же у вас, как и у меня, применен альтернативный шаблон и при этом соблюдены правила, благородных веб мастеров, не говнять дефолт(то что Автор дает по умолчанию), мало ли что, а вдруг придется переделать покрасивее. То, наверняка, вам следует искать в альтернативном шаблоне: /www/templates_alt/default.html . С шаблоном мы определились, открываем в текстовом редакторе файлик: default.html и чтобы вам не шляться по увесистому тексту, в поисках нужного, ищем по файлу строчку: System.IndicatorColor это свойство (в котором значением является картинка) системного статуса, индикатор номер один! Он присутствует всегда, добавляя по его подобию свойства, в котором имеют место быть картинки, вы получите сколь угодно много необходимых индикаторов на главной странице.

    Но это еще не все. Вот на этой моей страничке (ССЫЛКА), в качестве главной иллюстрации показан мой шаблон и если вы присмотритесь то заметите что индикаторы имеют место быть не только справа в главном шаблоне, но и так же в меню. Это не прихоть и не дурь, так как, по дефолту, кой я и использую в MajorDroid, главной страницы не увидеть, там главной страницей является меню(оговорюсь, это в моем случае, ибо при желании там по умолчанию можно и сцену вывести!) поэтому в меню вы тоже можете наблюдать дубликат индикаторов.
    Где же искать их? Все просто, вам придется сделать их самим, если в этом у вас действительно есть нужда.
    Итак, как это сделать?
    Делаем пункт меню с Названием: State и помещаем его в самый верх вашего меню(Приоритет: 100000), Родительским пунктом:, естественно, должен быть ROOT.
    В Типе: выберем HTML блок.
    В поле Данные: запишем следующий код:
    Индикаторы меню
    Это мой вариант, вы правьте под себя, что да как и где лежит, уже поймете без труда. И пардон за картинку, просто моя система так устроена что подхватывает этот код. Так что придется переписать ручками. Обратите внимание: Liquid_Crystal это шрифт имитирующий ЖК часы, именно в этом стиле выполнен мой шаблон, если захотите такой же, вам придется его себе скачать, если Вам без разницы то не найдя Liquid_Crystal система подключит Arial, ну а в верху уже пропишите.
    Ну и наконец, в пункте: Период автообновления: пропишем 10 сек.
    Сохраняем и получаем то что хотели.

Добавить комментарий

Вы должны войти для комментирования.