Main

Для разработчиков

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

Информация в данном разделе будет пополняться по мере возможности.

Структурная схема системы:

Основные файлы и папки

backup\ -- автоматические резервные копии данных системы
debmes\ -- системный лог событий/ошибок
highcharts\ -- "живые" графики
blocky\ -- система визуального программирования
pdw\ -- модуль файлового менеджера (используется в панели управлеиния)
languages\ -- словари (мульти-язычность)
lib\ -- общесистемные библиотеки
modules\ -- все модули системы
objects\ -- используется для работы с системой через командную строку и HTTP (см Интеграция)
pChart\ -- модуль построения графиков
rc\
saverestore\ -- используется для (полу)автоматического обновления системы
scripts\ -- утилиты (скрипты)
sounds\
templates\ -- все шаблоны системы
texts\
.htaccess

config.php -- файл базовых настроек (доступ к базе данных и т.п.)

obj.bat -- используется для работы с системой через командную строку (см Интеграция)

cycle.php -- запуск основных циклов системы (см. папку cycles\)

admin.php -- веб интерфейс панели настроек системы
index.php -- основной веб-интерфейс
nf.php -- URL-mapper
command.php -- мини-чат с системой
btraced.php -- интерейс для GPS-трэкера на базе программы BTraced (iphone)
gps.php -- интерейс для GPS-трэкера на базе программы BigBrotherGPS (android)
trackme.php -- интерейс для GPS-трэкера на базе программы TrackMe (winmobile)

Смотрите так же:

 
 

Обсуждение

 

sergejey: Начал расписывать внутренности :)

Alex: Вот это по настоящему хорошая новость.

Urbas81: Меня давно интересовал вопрос, в каком месте осуществляется вывод главной страницы, в части того, как например изменить цвет, или стили кнопок, где то тут попадался скрин с квадратными кнопками, или это от браузера зависит.

sergejey: Меня давно интересовал вопрос, в каком месте осуществляется вывод главной страницы, в части того, как например изменить цвет, или стили кнопок, где то тут попадался скрин с квадратными кнопками, или это от браузера зависит. Квадратные кнопки у меня в Internet Expolorer-е по-моему :) А вообще HTML код в папке ./templates/ , стили в CSS-файлах разных.

Urbas81: Меня давно интересовал вопрос, в каком месте осуществляется вывод главной страницы, в части того, как например изменить цвет, или стили кнопок, где то тут попадался скрин с квадратными кнопками, или это от браузера зависит. Квадратные кнопки у меня в Internet Expolorer-е по-моему :) А вообще HTML код в папке ./templates/ , стили в CSS-файлах разных. А у меня в Internet Expolorer вообще левая панель, там где кнопки всякие, не отображается, в Opera отображаются только надписи, firefox только нормально отображает. Вопрос у меня по поводу ошибки Fatal error: Call to a member function getProperty() on a non-object in C:\_majordomo\htdocs\modules\commands\commands_search.inc.php on line 84 уже несколько раз напарывался на нее, последний раз пять минут назад, когда пытался на переключатель назначить управление DS3413, и где-то с именами напутал, после этого не пускает ни в меню где расположен переключатель, ни в панель управления, пробовал удалить из базы данный переключатель, но не помогло, иногда получается вернуть все на место, в чем тут заморочка, и как от нее избавиться с минимумом потерь. И еще, не планируется ли в ближайшее время выпуск полноценного exe файла в который войдут все последние доработки, особенно меня интересует что-то там с запуском циклов было, в pChart много изменений было и по мелочам, сразу и не вспомню.

sergejey: Fatal error: Call to a member function getProperty() on a non-object in C:\_majordomo\htdocs\modules\commands\commands_search.inc.php on line 84 Эта ошибка из-за использования имени несуществующего объекта (ошибка в написании, к примеру). В последних исходниках я подправил, чтобы это не приводило к фатальной остановке выполнения. По поводу exe-файла -- да, я планирую на этой неделе таки собрать новую версию со всеми изменениями.

Urbas81: Fatal error: Call to a member function getProperty() on a non-object in C:\_majordomo\htdocs\modules\commands\commands_search.inc.php on line 84 Эта ошибка из-за использования имени несуществующего объекта (ошибка в написании, к примеру). В последних исходниках я подправил, чтобы это не приводило к фатальной остановке выполнения. По поводу exe-файла -- да, я планирую на этой неделе таки собрать новую версию со всеми изменениями. о. отлично, буду ждать! А ошибку вылечил, пришлось repair table делать.

akouz: Начал расписывать внутренности Посмотрел на картинку, почитал обсуждение. Ничего не понял. От слова "вообще". На картинке есть прямоугольник "MajorDoMo server". Стрелочками указано, что он как-то связан с прямоугольничками "Hardware" и "Terminals". Что это за связи? Как мне привязать железо к серверу? Внутри сервера есть некие "модули" USB, I2C, 1-wire, и т.д., про которые написано, что это "все модули системы" Я знаю такие интерфейсы. Я мог бы ожидать увидеть драйверы для этих интерфейсов. Однако я вижу некие "модули". Что это? Это аппаратные модули (т.е. платы) привязки к этим интерфейсам плюс драйверы этих модулей? Или это некие программные модули, которые осуществляют привязку к драйверам? Или это нечто иное, о чем я даже не догадываюсь? "USB, I2C, 1-wire" - это "железные" интерфейсы, однако в этом же списке есть "RSS", который, кажется, к железу не имеет ни малейшего отношения. Там же и какие-то "hosts", что, наверное, намекает на интернет-хосты, но что означает на самом деле - не знаю. О чем речь идет в обсуждении - я тоже не понимаю. Я не интернет-программист, я электронный инженер. Нюансы работы разных браузеров я представляю с трудом. Существуют ли другие описания MajorDoMo? Как мне понять, что это такое и как работает?

sergejey: Начал расписывать внутренности Посмотрел на картинку, почитал обсуждение. Ничего не понял. От слова "вообще". На картинке есть прямоугольник "MajorDoMo server". Стрелочками указано, что он как-то связан с прямоугольничками "Hardware" и "Terminals". Что это за связи? Как мне привязать железо к серверу? Внутри сервера есть некие "модули" USB, I2C, 1-wire, и т.д., про которые написано, что это "все модули системы" Я знаю такие интерфейсы. Я мог бы ожидать увидеть драйверы для этих интерфейсов. Однако я вижу некие "модули". Что это? Это аппаратные модули (т.е. платы) привязки к этим интерфейсам плюс драйверы этих модулей? Или это некие программные модули, которые осуществляют привязку к драйверам? Или это нечто иное, о чем я даже не догадываюсь? "USB, I2C, 1-wire" - это "железные" интерфейсы, однако в этом же списке есть "RSS", который, кажется, к железу не имеет ни малейшего отношения. Там же и какие-то "hosts", что, наверное, намекает на интернет-хосты, но что означает на самом деле - не знаю. О чем речь идет в обсуждении - я тоже не понимаю. Я не интернет-программист, я электронный инженер. Нюансы работы разных браузеров я представляю с трудом. Существуют ли другие описания MajorDoMo? Как мне понять, что это такое и как работает? Видимо, из-за того что я интернет-программист, то описано как для себе подобных :) Некоторые модули описаны здесь, так что если немного потратить времени на изучение сайта, то, как минимум, общее представление должно появиться. Конкретно по вопросу модулей. Модуль это более высокий уровень абстракции, нежели драйвер. Основная задача модулей, связанных с аппаратными протоколами, в том, чтобы обеспечить двустроннюю трансляцию данных, действий и событий между соответствующим "железом" и объектами системы (а соответственно с интерфейсом, сценариями и прочим). Модули используют более низко-уровневые драйверы и API для обращения к устройствам. Некоторые модули не работают с устройствами вовсе, а оперируют только информационными каналами.

akouz: Видимо, из-за того что я интернет-программист, то описано как для себе подобных Хорошо, можно тогда начать "от печки"? В GitHub сказано, что MajorDoMo написан на php. Если я правильно понимаю, это означает, что доступ ко всем ресурсам на самом сервере - через сервисы php. Что интерпретатор php предоставляет, то и имеем - доступ к сервисам оси, usb, блютусу, и т.п. - все через него. Верно? Если я хочу подключить свое собственное железо, напимер, через usb, то сначала я должен каким-то образом подрихтовать php, а потом написать"модуль" для MajorDoMo. Однако если, к примеру, мое железо подключается к usb при помощи драйвера класса CDC и появляется в системе как виртуальный Com порт, то мне, наверное, рихтовать php не потребуется, я сразу смогу начать писать модуль для MajorDoMo. А доступ к ресурсам вне сервера - такой же, как к любым другим интранет/интернет ресурсам. То есть, через IP попадаем на нужную страницу, и уже оттуда вытягиваем информацию в том виде, в каком она там представлена. А поскольку стандартов нет (или есть, может, я просто не знаю?), то каждое устройство выкладывает инфу в том виде, в каком захотелось его разработчикам, поэтому каждое конкретное устройство нуждается в индивидуальной привязке. Поэтому, если я сделаю эзернет-железяку, с которой можно будет общаться при помощи веб-страницы, то особых проблем не будет, так или иначе можно будет написать специальный модуль, который с этой страницы считает инфу и по командам MajorDoMo будет нажимать на этой странице кнопки. Я правильно понимаю?

sergejey: В GitHub сказано, что MajorDoMo написан на php. Если я правильно понимаю, это означает, что доступ ко всем ресурсам на самом сервере - через сервисы php. Что интерпретатор php предоставляет, то и имеем - доступ к сервисам оси, usb, блютусу, и т.п. - все через него. Верно? Если я хочу подключить свое собственное железо, напимер, через usb, то сначала я должен каким-то образом подрихтовать php, а потом написать"модуль" для MajorDoMo. Однако если, к примеру, мое железо подключается к usb при помощи драйвера класса CDC и появляется в системе как виртуальный Com порт, то мне, наверное, рихтовать php не потребуется, я сразу смогу начать писать модуль для MajorDoMo. А доступ к ресурсам вне сервера - такой же, как к любым другим интранет/интернет ресурсам. То есть, через IP попадаем на нужную страницу, и уже оттуда вытягиваем информацию в том виде, в каком она там представлена. А поскольку стандартов нет (или есть, может, я просто не знаю?), то каждое устройство выкладывает инфу в том виде, в каком захотелось его разработчикам, поэтому каждое конкретное устройство нуждается в индивидуальной привязке. Поэтому, если я сделаю эзернет-железяку, с которой можно будет общаться при помощи веб-страницы, то особых проблем не будет, так или иначе можно будет написать специальный модуль, который с этой страницы считает инфу и по командам MajorDoMo будет нажимать на этой странице кнопки. Я правильно понимаю? Писать модуль для устройства и, тем более, "рихтовать" PHP задача достаточно нетривиальная и редко необходимая. Модули обычно пишутся под распостранённые и востребованные протоколы, чтобы работать с ними было удобней. Для работы с устройствами можно вполне обойтись и без модулей -- в системе присутствует достаточно продвинутая модель классов/объектов, используя которую можно реализовать взаимодействие практически с любым устройством, до которого можно каким-то образом достучаться и протокол обмена с которым как-то описан -- через сеть, через командную строку, через COM-порт и т.п. Например, есть достаточно популярные устройства управления освещением от компании Ноолайт, но для них не создавался отдельный модуль, а был написан класс с методами взаимодействия и каждый может его у себя создать, а потом добавить свои устройства как объекты ну и работать с ними в системе как с любыми другими объектами. Что касается доступа к ресурсам вне сервера -- приблизительно так как описано. Плюс есть ещё кое-какие сетевые стандарты, работающие не по http. Например, SNMP или MQTT, модули для работы с которыми идут в "коробке".

akouz: был написан класс с методами взаимодействия и каждый может его у себя создать, а потом добавить свои устройства как объекты ну и работать с ними в системе как с любыми другими объектами. ... есть ещё кое-какие сетевые стандарты, работающие не по http. Например, SNMP или MQTT, модули для работы с которыми идут в "коробке". Таким образом, если делать собственное железо или интегрировать какое-то готовое, то для USB его проще всего будет привязать через этот класс, а для эзернета - через MQTT. Соответственно, при выборе готовых систем нужно сразу смотреть, какую связку они предоставляют. И если, к примеру, в описании бриджа USB-Velbus написано, что он использует CDC драйвер, то есть неплохой шанс, что его удастся привязать через этот класс.

sergejey: Таким образом, если делать собственное железо или интегрировать какое-то готовое, то для USB его проще всего будет привязать через этот класс, а для эзернета - через MQTT. Соответственно, при выборе готовых систем нужно сразу смотреть, какую связку они предоставляют. И если, к примеру, в описании бриджа USB-Velbus написано, что он использует CDC драйвер, то есть неплохой шанс, что его удастся привязать через этот класс. USB, COM, ETHERNET -- это транспортный уровень, поверх которого работает уровень протокола обмена, который может быть совершенно разным у разных производителей. У того же Velbus он достаточно специфический и беглый обзор показал, что USB-адаптер реализует транспортный уровень (если я правильно понял, то адаптер организует COM-порт для отправки/приёма команд) и поверх этого транспортного уровня нужно реализовывать систему команд. Некоторые производители работают на каком-то из стандартных протоколов обмена (ModBus, MQTT, SNMP и т.д.). Другие производители работают по сети и предоставляют какой-то интерфейс для работы с ними извне (какое-то API с набором команд). Задача MajorDoMo привести этот "зоопарк" к своим логическим объектам и использовать их для построения логики и пользовательских интерфейсов. что-то из обозначенного "зоопарка" уже поддерживается, для чего-то надо дописывать модули и классы.

RusikOk: cycle.php -- запуск основных циклов системы (см. папку cycles\) у меня такой папки вообще нет. а посмотреть на скрипты хочется. Версия 0.7.0b

warik: cycle.php -- запуск основных циклов системы (см. папку cycles\) у меня такой папки вообще нет. а посмотреть на скрипты хочется. Версия 0.7.0b и еще. если я правильно понимаю, то весь информационный обмен происходит (как и любой другой web ориентированной информационной системе) через БД. и данные с датчиков не исключение Смотрите папку "scripts". Там они все родимые :D лежат.

RusikOk: если я правильно понимаю, то весь информационный обмен происходит (как и любой другой web ориентированной информационной системе) через БД. и данные с датчиков не исключение

[ Обсудить на форуме ]

 

MajorDomo

Информация

Проекты

Партнёры

edit SideBar

 
 
 

 

Blix theme adapted by David Gilbert, powered by PmWiki