Функции majordomo


Больше информации здесь

Общие функции

say($ph,$level,$from_user_id) -- говорит фразу (использует глобальные переменные $voicemode'' [именно говорить] и $commandLine [преобразует ответ в echo utf2win(), иначе просто echo]).
$level - указывает уровень важности фразы (в зависимости от текущих настроек минимального уровня произношения, фраза может быть либо озвучена голосом либо просто записана в историю сообщений).
$from_user_id - от имени кого будет сказана фраза ($from_user_id в данном случае будет равен идентификатору текущего пользователя).
sayTo (ФРАЗА, УРОВЕНЬ, НАЗНАЧЕНИЕ) - в качестве НАЗНАЧЕНИЯ можно использовать системное имя терминала и если это терминал на MajorDroid, то ему отправится команда для произношения. В любом случае из этой функции создаётся событие SAYTO (вида: processSubscriptions('SAYTO', array('level' => $level, 'message' => $ph, 'destination' => $destination));), которое может быть перехвачено сторонними модулями -- на заметку тем, кто захочет создать свой модуль для организации работы с различными устройствами доставки сообщений на определённый канал.
sayReply(ФРАЗА, УРОВЕНЬ, ОТВЕТ_НА_ЧТО) -- последние два параметра не обязательны. Эта функция ведёт себя следующим образом:
  1. Если указан параметр ОТВЕТ_НА_ЧТО, то система попытается найти терминал, с которого был запрос, содержащий данную фразу
  2. Если не указан параметр ОТВЕТ_НА_ЧТО, то система выберет терминал, с которого был любой запрос в течении последних 5 секунд
  3. Если терминал найден, то ответ будет направлен на него (с помощью той же функции sayTo)
  4. Если терминал не найден, то ответ будет озвучен в обычном порядке (аналогично просто использованию функции say).
processCommand($command) -- отправляет текстовую команду на исполнение (например, "скажи сколько время"). Сами команды настраиваются методе ThisComputer->commandReceived.
getGlobal($varname); -- получения значения глобального свойства
setGlobal($varname,$value); -- установка глобального свойства
processLine($line); -- запуск скрипта синхронизации
getRandomLine($filename); -- взятие случайной строки из текстового файла. $filename может быть сокращённым, например file1 и тогда будет браться файл ./texts/file1.txt
playSound($filename); -- проигрывание файла (mp3,wav,etc.). $filename может быть сокращённым, например file1 и тогда будет браться файл ./sounds/file1.mp3
playMedia($path); -- играть музыку из каталога $path
runScript($id,$data); -- выполняет скрипт с заданным id. В качестве id может использоваться имя
runScriptSafe($id,$data); -- выполняет скрипт безопасно в фоне
isOnLine($host) -- проверяет доступность хоста из Устройства OnLine (1/0).

Работа с объектами

addClass('ESP8266'); // Создаем класс
addClassObject($class, $objName); - Создать объект от родительского класса. Передаются строки
$obj=getObject($name); -- получает объект по имени $name. с полученным объектом можно работать используя следующие методы:
$obj->callMethod('method_name',$params); $obj->setProperty('property_name',$value);
$obj->getProperty('property_name');
$obj-> description; Доступ к описанию объекта
$this->object_title; -- Доступ к имени объекта
callMethod('Object.Method', $params); -- вызывает метод объекта с заданными параметрами (последнее указывать не обязательно). Параметры передаются массивом, например array("value"=>0)
callMethod("sensorMovement.statusChanged", array("value"=>0));
cm -- альтернативное имя предыдущей функции
$value=getGlobal('Object.Property'); -- получения значения свойства объекта
gg -- альтернативное имя предыдущей функции
setGlobal('Object.Property',$value); -- установка значения свойства объекта
sg -- альтернативное имя предыдущей функции
$objects=getObjectsByClass('class_name'); -- возвращает массив объектов указанного класса в виде название.Пример перебора объектов в цикле и установки значения свойств:
getObjectsByProperty($property_name,$condition=,$condition_value=); -- возвращает массив названий объектов, имеющих свойство $property_name. опционально можно задать условие, под которое попадает значение. Условия могут быть == (или =), >=, >, <=, <, <> (или !=)

Функции работы с историей

getHistoryMin($varname, $start_time, $stop_time) -- Возвращает минимальное значение за период
getHistoryMax($varname, $start_time, $stop_time) -- Возвращает максимальное значение за период
getHistoryCount($varname, $start_time, $stop_time) -- Возвращает количество значений за период
getHistorySum($varname, $start_time, $stop_time) -- Возвращает сумму значений за период
getHistoryAvg($varname, $start_time, $stop_time) -- Возвращает среднее значений за период
getHistory($varname, $start_time, $stop_time) -- Возвращает массив значений истории
getHistoryValue($varname, $start_time, $stop_time) -- Возвращает среднее значений за период
  • varname - "объект.свойство" (строка)
  • start_time - Время начало выборки, включительно (метка времени Unix)
  • stop_time - Время конца выборки, включительно (метка времени Unix)
Если нет никаких данных функция возвращает false.

Время/интервалы

time() -- возвращает текущее время в формате timestamp.
timeConvert($tm) -- конвертирует время из hh:mm в формат time() на сегодняшнее число
timeNow($tm) -- возвращает в текстовом виде время типа "16 часов 40 минут". Если $tm не задан, то возвращает текущее время. $tm в формате time.
isWeekEnd() -- выходной да/нет = 1/0
isWeekDay() -- будний день да/нет = 1/0
timeIs($tm) -- проверяет совпадает ли текущее время с передаваемым в формате hh:mm
timeBefore($tm) -- сравнивает время $tm (hh:mm) и текущее. Если текущее меньше, то 1 иначе 0
timeAfter($tm) -- сравнивает время $tm (hh:mm) и текущее. Если текущее больше, то 1 иначе 0
timeBetween($tm1, $tm2) -- проверяет входит ли текущее время в заданный интервал (каждое hh:mm, причем $tm1 может быть больше чем $tm2, например 23:00 05:00)
recognizeTime($text) -- функция пытается из фразы извлечь конкретное время/дату. Например $text может быть "завтра в 9:30" или "через 5 минут"

При вызове любого метода (но не сценария!) доступны переменные:
$prevRun -- время последнего вызова (в формате timestamp)
$prevRunPassed -- сколько секунд прошло с последнего вызова
$this -- Указатель на себя. Используется в методах классов. Например:

Работа с шаблонами

описание шаблонов
addPattern($matches[1],$new_pattern,1); // добавляем описанный шаблон (описание на форуме)
context_activate($id); -- Активировать вручную нужный контекст (ступень шаблона) (вместо $id нужно вставить цифровой код шаблона -- он виден в ссылке при редактировании шаблона/контекста). context_clear(); -- позволяет сбросить текущий контекст у текущего пользователя.
clearTimeOut('user_'.context_getuser().'_contexttimeout'); -- удаление таймера события при не ответе
context_getuser(), по всей видимости возвращает id текущего пользователя.
Если нам для чего то потребуется имя, то зная id достать его из базы данных не трудно.
Полный код команды Забудь:

Запланированные задачи и события

AddScheduledJob('title','commands',$datetime, $expire=60); -- $expire в секундах
ClearScheduledJob('title'); -- может использоваться маска типа "title%"
SetTimeOut('title','commands', $timeout); -- $timeout в секундах (аналог AddScheduledJob('title','commands',time()+$timeout));
ClearTimeOut('title'); -- аналог ClearScheduledJob('title');
timeOutExists('title'); -- возвращает идентификатор запланированной задачи (или 0, в случае отсутствия)
registerEvent($eventName, $details='',$expire_in=365); -- регистрация события $eventName
registeredEventTime($eventName); -- возвращает время последней регистрации события $eventName (-1 если еще не было такого события)

Отправка почты

SendMail($from, $to, $subject, $body); -- отправляет электронное письмо на указанный в $to адрес
SendMail_html($from, $to, $subject, $body); -- аналогично предыдущей функции, но тело письма предполагается в формате HTML

Проверка связи (ping)

if (ping(gg('Arduino.IP'))) {} else {} // PING адреса, заданного в свойстве IP объекта Arduino и выполнение кода в зависимости от результата.

Функционал Public Calls в Connect-е

Есть возможность получить уникальную публичную ссылку (доступную любому в Интернете), при открытии которой вызывается заданный метод в системе. Функция доступна только тем, кто зарегистрирован в проекте CONNECT.
В разделе CONNECT панели управления есть закладка Public Calls. Самое важное в настройках -- связанный объект и метод, который будет вызван. Ссылка будет с уникальным ключём, но можно дополнительно её защитить заданным паролем. Ссылку можно открывать просто в браузере или даже из скрипта.
К ссылке можно добавлять свои параметры и они будут доступны в методе в массиве $params Важно: очень аккуратно используйте эту опцию и старайтесь не "раскидываться" ссылками, которые могут навредить, попадая в
Идеи использования:
  1. Обмен данными между несколькими системами MajorDoMo (одна система через getURL может инициировать событие в другой, причём у первой даже может не быть аккаунта в Connect-е)
  2. Интеграция со сторонними системами и интернет-сервисами (сторонняя система "дёргает" ссылку и MajorDoMo об этом узнаёт)
  3. Выдача прав на использование некоторых функций системы третьим лицам (передайте ссылку кому-нибудь, попросите добавить в закладки и объясните, что будет происходить при переходе -- реализация сценария полностью на ваше усмотрение)
getURLBackground('URL'); - Запрос URL в фоне (если не важен результат

Управление циклами (сервисами)

Интерфейс доступен через раздел XRay->Services
Для управления циклом использются глобальные переменные.
Например, есть цикл ./scripts/cycle_ping.php. Чтобы его остановить, достаточно выполнить команду в коде:
setGlobal('cycle_pingControl','stop'); - Остановка
setGlobal('cycle_pingControl','start'); - запуск
setGlobal('cycle_pingControl','restart'); - рестарт
setGlobal('cycle_pingDisabled','1'); - Для запрета автозапуска (по-умолчанию он всегда разрешён)
setGlobal('cycle_pingAutoRestart','1'); - Для включения авто-восстановления (по-умолчанию он всегда выключен)

Работа с базой данных

Теперь если вы используете альфа версию при разработке своих сценариев, методов и модулей можно использовать PDO (PHP Data Objects). Этот класс, предоставляет методы для работы с объектами и prepared statements, которые заметно повысят вашу продуктивность! Детальней про него можно почитать вот тут: https://habr.com/post/137664/

Функции для разработчиков модулей

addClass('имя класса'); -  автоматическое создание свойства класса в разделе "Объекты".
addClassMethod('имя класса','имя метода,"php код"); - автоматическое создание метода.
addClassProperty('имя класса', 'имя свойства', 'хранить историю', 'имя связанного метода'); - автоматическое создание свойства класса. Четвёртый параметр необязательный, позволяет автоматически линковать метод к свойству. Полезно использовать когда необходимо каждый раз выполнять метод при изменении значения свойства.

Комментарии

Популярные сообщения из этого блога

Перенос Armbian на SSD

Установка Home Assistants на Orange pi

Радиореле 220В 433МГц c кодировкой сигнала eV1527