[Приложение] мой MjDM (Android)

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

Модератор: immortal

Аватара пользователя
hc2hunter
Сообщения: 507
Зарегистрирован: Сб дек 02, 2017 10:45 am
Откуда: RUS
Благодарил (а): 228 раз
Поблагодарили: 348 раз

Re: [Приложение] мой MjDM (Android)

Сообщение hc2hunter » Вт фев 11, 2020 3:15 pm

SmoKE_xDDD, я стараюсь давать полное описание функционала, который добавляется. Попробуйте перечитать мое сообщение НЕ по-диагонали :)
viewtopic.php?f=5&t=6737&p=114909#p114905
Аватара пользователя
hc2hunter
Сообщения: 507
Зарегистрирован: Сб дек 02, 2017 10:45 am
Откуда: RUS
Благодарил (а): 228 раз
Поблагодарили: 348 раз

Re: [Приложение] мой MjDM (Android)

Сообщение hc2hunter » Ср фев 12, 2020 9:55 am

...
Последний раз редактировалось hc2hunter Ср фев 12, 2020 2:12 pm, всего редактировалось 3 раза.
Аватара пользователя
hc2hunter
Сообщения: 507
Зарегистрирован: Сб дек 02, 2017 10:45 am
Откуда: RUS
Благодарил (а): 228 раз
Поблагодарили: 348 раз

Re: [Приложение] мой MjDM (Android)

Сообщение hc2hunter » Ср фев 12, 2020 12:32 pm

...
Последний раз редактировалось hc2hunter Ср фев 12, 2020 2:12 pm, всего редактировалось 2 раза.
Аватара пользователя
hc2hunter
Сообщения: 507
Зарегистрирован: Сб дек 02, 2017 10:45 am
Откуда: RUS
Благодарил (а): 228 раз
Поблагодарили: 348 раз

Re: [Приложение] мой MjDM (Android)

Сообщение hc2hunter » Ср фев 12, 2020 2:04 pm

Большое получилось обновление...
Итак, что нового появилось с момента последнего релиза (с добавления отслеживания точек WiFi):
  • По просьбе пользователей переработана логика отображения значка WiFi в имени сервера (в общем списке серверов).
    Теперь он отображается если сервер находится на альтернативном адресе.
  • Также, добавлена возможность сохранять одинаковые имена WiFi точек доступа в разных серверах.
    Логика работы теперь следующая:
    • При обнаружении точки доступа происходит переход на первый сервер по списку, где указана эта точка.
      (если указан еще и альтернативный адрес, - разумеется, спрыгнет на него)
    • Если в списке еще есть сервера, где перечислена эта же точка, они пока не трогаются. При выборе такого сервера вы либо сразу попадете на альтернативную страницу (если сервер ранее не был открыт), либо просто достаточно нажать ДОМОЙ, чтобы программа спрыгнула на альтернативный адрес
    • При смене точки WiFi происходит переход на другой сервер, где есть данная точка.
    • Если WiFi просто пропал (вышли из зоны действия), то текущий сервер смотрит, надо ли ему перейти на основной (глобальный) адрес. И, возможно, возвращается на него.
  • Добавлена возможность включить кнопку "Скопировать", с помощью которой можно взять в буфер адрес текущей открытой страницы.
    При длинном тапе на этой кнопке в буфер берется ссылка в готовом для обмена формате с метассылкой. Об этом ниже...
  • Введена поддержка приложением собственного метатэга (uri-схемы) mymjdm://...
    На данный момент поддерживаются 2 команды:
    • mymjdm://openurl/?url=http(s)://ссылка&user=логин&pass=пароль
      Открыть указанную ссылку.
      Если basic-авторизация не требуется, то user и pass указывать не нужно.
      Ссылка открывается в отдельном окне, которое в списке серверов не отображается. При переходе на какой-нибудь ранее созданный сервер вы на эту ссылку уже не вернетесь (придется дергать ещё раз). То есть она "как бы" одноразовая (получил, посмотрел, и при любом действии закрывающем это окно - она закрылась...).
      При открытии таких внешних ссылок изменена логика работы кнопок "Домой" и "Обновить" - они заблочены, т.к. если делать данные кнопки активными, в некоторых ситуациях возникает двусмысленность... Проще дать понять пользователю, что теперь ему просто следует выбрать нужный сервер из списка.
    • mymjdm://download/?url=http(s)://ссылка/файл&user=логин&pass=пароль
      Для скачивания файла по ссылке.
      Если basic-авторизация не требуется, то user и pass указывать не нужно.
      Файлы складываются во внутреннее хранилище, в папочку /Download . При повторном запросе скачивания файл автоматически перезаписывается поверх старой копии.
  • Добавлена поддержка работы myMJDM в качестве Терминала (то есть поддержка MajorDroidAPI). Включить данную возможность можно в Настройках приложения.
    За основу взята официальная спецификация команд отсюда: viewtopic.php?f=5&t=518
    Количество команд было увеличено, некоторые переработаны.
    Чтобы устройство корректно работало терминалом, нужно чтобы сервер MDM видел его напрямую (пинговал без проблем). Поэтому наиболее актуально это для локальный сетей.
    Также, как становится понятно из специфики самого приложения, - оно может являться Терминалом сразу всех серверов и обрабатывать входящие команды любого сервера.

    На текущий момент поддерживаются следующие команды:
    • stop terminal или stop server
      Останавливает терминальный сервис на устройстве. Сам он уже не запустится. Как минимум нужно перезапустить приложение.
    • about
      Открывает экран "О приложении"
    • settings
      Вызов экрана настроек Приложения
    • home
      Переход на домашнюю страницу. Если список серверов пуст, переход никуда не осуществляется. Если была загружена внешняя страница (например по команде url: или по схеме mymjdm://openurl), то осуществляется переход на домашнюю страницу первого по списку сервера.
    • refresh
      Обновляет текущую страницу.
      Если загружена внешняя ссылка командами mymjdm://openurl или через терминал командой url: , то refresh и home ничего делать не будут (согласно выше оговоренной политике работы с такими страницами).
    • url:ссылка
      Переход по указанной ссылке.
      Команда аналогична внешней команде со схемой mymjdm://openurl/?url=http(s)://ссылка&user=логин&pass=пароль за исключением того, что согласно MajorDroidAPI параметры авторизации не поддерживаются. Поэтому программой будет предпринята попытка использовать логин/пароль последнего активного сервера. Если ресурс все-таки требует авторизации, а эта пара логин/пароль не прокатит - будет отлуп...
    • hi
      Запустить автоматически голосовое распознавание (если оно включено в Настройках приложения).
      Если в этот момент игралась какая-то мелодия по команде play:url (см.ниже), воспроизведение будет прервано.
    • voice
      Аналогично hi.
      Запустить автоматически голосовое распознавание (если оно включено в Настройках приложения).
    • tts:текст
      Произнести фразу. Фраза будет проговорена если в системе устройства имеется корректно работающий голосовой движок и данная опция отмечена в Настройки\Терминал.
      Фразы, отправленные друг за другом, становятся в очередь воспризведения.
      Если в этот момент игралась какая-то мелодия по команде play:url (см.ниже), воспроизведение будет приостановлено и возобновится после проговаривания всех фраз.
    • ask:текст
      Произнести фразу и перейти в режим ожидания голосового ввода.
      Если в этот момент игралась какая-то мелодия по команде play:url (см.ниже), воспроизведение будет прервано.
    • play:url
      Проиграть звуковой файл, расположенный по адресу url.
      Пример: play:http://<сервер_MDM>/cms/sounds/dingdong.mp3
      Если http:// не указано, приложение само это подставит в адрес.
      Если по ссылке требуется basic-авторизация, то будет попытка применить логин/пароль с открытого активного сервера, поскольку MajorDroidAPI опять же не предусматривает никаких полей с данными для авторизации...
    • stop
      Остановить проигрывание звукового файла, вызванное командой play:url
    • pause
      Приостановить проигрывание звукового файла, вызванное командой play:url, запомнив позицию
      Если вы не планируете продолжать проигрывание файла, то с некоторыми допущениями команду можно рассматривать как stop, однако Терминал продолжает поддерживать соединение до ранее указанного файла, думая что последует resume.
    • resume
      Продолжить проигрывание звукового файла (вызванное ранее командой play:url), с запомненной позиции по команде pause
      Повторный вызов play:url сбросит позицию и начнет проигрывание файла с начала
    • run://приложение
      Запустить приложение, установленное в системе. Следует указать имя пакета.
      Пример: run://com.google.android.calendar
    • avolume:уровень
      Установить громкость будильника (ALARM) на заданный уровень (0...100%)
    • rvolume:уровень
      Установить громкость звонка (RING) на заданный уровень (0...100%)
    • nvolume:уровень
      Установить громкость уведомлений (NOTIFICATION) на заданный уровень (0...100%)
    • mvolume:уровень
      Установить громкость музыки (MEDIA) на заданный уровень (0...100%)
    • volume:уровень
      Установить громкость медиа и уведомлений (MEDIA + NOTIFICATION) на заданный уровень (0...100%)
      Обратите внимание, что на некоторых устройствах громкость звонков и уведомлений рассматривается как единая.
    • brightness:уровень
      Установить яркость дисплея в диапазоне 0...100%.
      Автояркость при этом будет принудительно выключена (если она включена в Настройках устройства).
      Для работы этой функции на Android M и выше требуется дополнительное системное разрешение.
    • info или status или getterminalinfo или getterminalstatus
      Вернуть на сервер полную информацию о терминале в формате JSON.
      Пример содержимого JSONПоказать

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

      {
        "appname":"myMjDM",
        "appversion":"1.2.3 (build 22, code version 27)",
        "devicename":"Sony F8332",
        "serial":"CB512DRQTM",
        "os":"Android SDK 26 (8.0.0)"
        "battery":"77%",
        "fullscreen":true,
        "recognition":true,
        "listening":false,
        "listening_keyphrase":"алиса",
        "currentserver":"мой Сервер",
        "brightness_auto":1,
        "brightness":"47%",
        "volume_alarm":"100%",
        "volume_ring":"86%",
        "volume_notification":"86%",
        "volume_media":"73%"
      }
      
      Как данные попадают назад? Предусмотрено 2 пути:
      1. Данные по-умолчанию незамедлительно отправляются назад на сервер в порт 7999, в том же формате JSON.
        Отловить их на сервере можно, если предыдущий запрос вы сделали так:

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

        $unswer = socket_write($socket, $in, strlen($in)); //ожидать ответа
        socket_close($socket); 
        
      2. Можно дополнительно вернуть данные любому скрипту GET-запросом, если по каким-то причинам принять ответ в порт не удобно.
        Для этого в Настройках приложения указывается путь к такому скрипту (относительно корня сервера) и имя параметра, значение которого вы будете затем парсить.
        Например /status.php?status=
        То есть при вызове данной команды приложение попытается на текущий открытый сервер отправить информацию по адресу:
        <сервер>/status.php?status={...json...}
        Если данная настройка пуста, сработает лишь 1 вариант.
    • set:параметр=значение
      Семейство команд для изменения параметров самой программы прямо "находу".
      • set:screenon=[false, true, 0, 1]
        Экран всегда включен. Значение можно указывать как false/true, так и 0/1
      • set:fullscreen=[off, on, false, true, 0, 1]
        Включить/Выключить полноэкранный режим. Значение можно указывать как off/on, так и false/true или 0/1
      • set:immersive=[off, on, false, true, 0, 1]
        Включить/Выключить иммерсию полноэкранного режима (режим дополнительного скрытия наэкранных кнопок). Значение можно указывать как off/on, так и false/true или 0/1
      • set:toolbar=[off, on, false, true, 0, 1]
        Включить/Выключить верхнюю строку с названием сервера (тулбар). Значение можно указывать как off/on, так и false/true или 0/1
    Пример вызова команд из платформы MDMПоказать
    На основе приведенного ниже кода можно строить скрипты, шаблоны или методы устройств и т.п.:

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

    $address='192.168.0.170'; //ip-адрес терминала, явно видимый с сервера MDM
    $service_port='7999';
    $in='tts:проверка'; //команда для отправки
    
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket === false) {
        echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "<br/>\n";
        return 0;
    }
    $result = socket_connect($socket, $address, $service_port);
    if ($result === false) {
        echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
        return 0;
    }
    socket_write($socket, $in, strlen($in));
    socket_close($socket); 
  • Добавлено всеми долгожданное голосовое управление (преобразование голоса в текст).
    Активируется в Настройках. Распознанная фраза отправляется на текущий открытый активный сервер в виде
    <адрес_сервера>/command.php?qry=<фраза>
  • Распознанную фразу также можно отправлять на кастомный скрипт. Для этого предусмотрено дополнительно поле ввода.
    Например: <адрес_сервера>/modules/myvoice.php?voice=<фраза>
  • Добавлена возможность вынести дополнительную кнопку микрофона в правый нижний угол экрана
    ИллюстрацияПоказать
    Screenshot_20200216-154012.png
    Screenshot_20200216-154012.png (135.6 КБ) 3234 просмотра
  • Также добавлена возможность постоянно слушать эфир и реагировать на ключевую фразу (например, "Алиса").
    Проговариваемое выражение должно начинаться с ключевой фразы. Например "Алиса включи свет".
    Можно настроить, вызывать ли при обнаружении ключевой фразы дополнительный диалог распознавания или сразу отправлять выражение на сервер. В первом случае остаток фразы будет пропущен, что бы вы ни наговорили после ключевого выражения, а затем будет вызвано стандартное системное окно голосового ввода.
  • На экран "О приложении" добавлена ссылка на данный форум для получения пользователями свежей информации и документации по приложению.
  • Устранена проблема с иммерсивным полноэкранным режимом на некоторых устройствах Samsung и LG, а также на устройствах с дисплеями типа "cutout" (например, Samsung A10/S10).
  • Прочие улучшения, исправление недочетов и ошибок...


Все это в релизе 1.3.0
viewtopic.php?f=5&t=6737&start=470#p115503
Последний раз редактировалось hc2hunter Пт фев 21, 2020 10:14 pm, всего редактировалось 59 раз.
За это сообщение автора hc2hunter поблагодарил:
Logrus (Чт фев 20, 2020 4:40 pm)
Рейтинг: 1.16%
pash4uga
Сообщения: 192
Зарегистрирован: Чт окт 04, 2018 12:04 pm
Благодарил (а): 28 раз
Поблагодарили: 45 раз

Re: [Приложение] мой MjDM (Android)

Сообщение pash4uga » Ср фев 12, 2020 3:22 pm

Потестил, системные уведомления, воспроизводит на ура, но замечена особенность, если воспроизводится длинное сообщение и в это время поступает еще одно, то первое сообщение просто обрывается, видимо пока очереди сообщений нет.
Попробовал воспроизвести музыку через модуль SHOUTCast. Воспроизвелось, только вот остановить трансляцию получилось только вырубив приложение)) При чем на экране появлялись полученные команды, пауза, стоп, но реакции небыло.
Ну и регулировка громкости не работает, но это вроде как и не заявлялось)
Все это проверял с установленным модулем "терминалы2"
За это сообщение автора pash4uga поблагодарил:
hc2hunter (Ср фев 12, 2020 3:45 pm)
Рейтинг: 1.16%
Аватара пользователя
hc2hunter
Сообщения: 507
Зарегистрирован: Сб дек 02, 2017 10:45 am
Откуда: RUS
Благодарил (а): 228 раз
Поблагодарили: 348 раз

Re: [Приложение] мой MjDM (Android)

Сообщение hc2hunter » Ср фев 12, 2020 3:45 pm

pash4uga,
очередь есть, но я ее специально зарЭзал... :?
Не надо было? Показалось, что последнее сообщение всегда более приоритетное. Мало ли что...
Иначе их может придти с десяток и они все одновременно будут "базарить" со сдвигом. Получается каша.

Или вы хотите реальную очередь - чтобы говорились все сообщения по очереди, пока есть буфер?

Что касается "стоп-паузы" - я ее не реализовывал и не заявлял. Нужно сделать?
Показалось, что данная функция более актуальна для коротких файлов (типа сгенеренных голосовых сообщений).
Громкость тоже нужна?


p.s. вообще, можно ссылочку на перечень команд, используемых в Терминалы2? что-то в той теме не увидел...
я так понимаю, что они включают в себя стандартное MDM API... но хотелось бы ознакомиться с остальными. например команды "стоп" я в официальном API не вижу... а она есть?
Аватара пользователя
hc2hunter
Сообщения: 507
Зарегистрирован: Сб дек 02, 2017 10:45 am
Откуда: RUS
Благодарил (а): 228 раз
Поблагодарили: 348 раз

Re: [Приложение] мой MjDM (Android)

Сообщение hc2hunter » Ср фев 12, 2020 4:44 pm

Добавил возможность распознавания речи.
Пока распознанная фраза выводится в виде всплывающего сообщения. В дальнейшем будет отправляться на текущий сервер по адресу:
http(s):<сервер_MDM>/command.php?qry=<распознанный текст>

Можно потестить чисто на предмет рабочести...
Думаю, в сущности, это функция, которую все давно ждали. Разумеется, потом добавлю в Терминал команды "ask:текст" и "voice"
Последний раз редактировалось hc2hunter Чт фев 13, 2020 2:33 pm, всего редактировалось 1 раз.
За это сообщение автора hc2hunter поблагодарили (всего 2):
SmoKE_xDDD (Ср фев 12, 2020 5:13 pm) • pash4uga (Ср фев 12, 2020 7:05 pm)
Рейтинг: 2.33%
Аватара пользователя
SmoKE_xDDD
Сообщения: 816
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Откуда: Нижний Новгород
Благодарил (а): 110 раз
Поблагодарили: 899 раз

Re: [Приложение] мой MjDM (Android)

Сообщение SmoKE_xDDD » Ср фев 12, 2020 5:12 pm

hc2hunter писал(а):
Ср фев 12, 2020 4:44 pm
Добавил возможность распознавания речи.
Пока распознанная фраза выводится в виде всплывающего сообщения. В дальнейшем будет отправляться на текущий сервер по адресу:
http(s):<сервер_MDM>/command.php?qry=<распознанный текст>

Можно потестить чисто на предмет рабочести...
Думаю, в сущности, это функция, которую все давно ждали. Разумеется, потом добавлю в Терминал команды "ask:текст" и "voice"
Оу круто! Работает! А можно эфир постоянно слушать и по ключевой фразе отправлять на сервер?) Очень хотеть эту функцию)
За это сообщение автора SmoKE_xDDD поблагодарил:
hc2hunter (Ср фев 12, 2020 5:49 pm)
Рейтинг: 1.16%
Аватара пользователя
hc2hunter
Сообщения: 507
Зарегистрирован: Сб дек 02, 2017 10:45 am
Откуда: RUS
Благодарил (а): 228 раз
Поблагодарили: 348 раз

Re: [Приложение] мой MjDM (Android)

Сообщение hc2hunter » Ср фев 12, 2020 5:49 pm

Мы вернемся к этому вопросу...
Во всяком случае, там есть некоторые нюансы реализации. Система считает, что это "хак". Не исалючено также, что для такой фичи нужен рут.
pash4uga
Сообщения: 192
Зарегистрирован: Чт окт 04, 2018 12:04 pm
Благодарил (а): 28 раз
Поблагодарили: 45 раз

Re: [Приложение] мой MjDM (Android)

Сообщение pash4uga » Ср фев 12, 2020 7:04 pm

hc2hunter писал(а):
Ср фев 12, 2020 3:45 pm
pash4uga,
очередь есть, но я ее специально зарЭзал... :?
Не надо было? Показалось, что последнее сообщение всегда более приоритетное. Мало ли что...
Иначе их может придти с десяток и они все одновременно будут "базарить" со сдвигом. Получается каша.

Или вы хотите реальную очередь - чтобы говорились все сообщения по очереди, пока есть буфер?

Что касается "стоп-паузы" - я ее не реализовывал и не заявлял. Нужно сделать?
Показалось, что данная функция более актуальна для коротких файлов (типа сгенеренных голосовых сообщений).
Громкость тоже нужна?

p.s. вообще, можно ссылочку на перечень команд, используемых в Терминалы2? что-то в той теме не увидел...
я так понимаю, что они включают в себя стандартное MDM API... но хотелось бы ознакомиться с остальными. например команды "стоп" я в официальном API не вижу... а она есть?
При нормальной работе, большой очереди за 4 года использования. ни разу не скапливалось. К тому же у уважаемого tarasfrompir (его модуль viewtopic.php?f=5&t=6446) есть очистка очереди не отправленных сообщений на терминал.

А вот без очереди, может получится и обратная ситуация, терминал говорит что-то важное, а тут кукушка решила время сказать..))
Вот если отталкиваться от важности сообщений,и сообщение с самым высоким приоритетом, прерывает с низшим. При чем это должно проверяться как со стороны сервера, так и терминала, иначе сервер накидает с обычным приоритетом, терминал бубнит, а в это время... и ситуация как вы и описывали. Или сервер должен знать, проговорил терминал или нет, и кидать следующее по приоритету, но это может быть чревато длинными паузами между сообщениями. Тут нужно компромисс искать.

А на счет стоп-паузы, конечно надо, если мы можем отправить аудио на терминал, а выключить его не можем. Ту же мелодию будильника не выключить, или ждать когда все доиграет))
По поводу громкости, просто удобная фича, у меня например громкость на терминалах выставляется в зависимости от шума в помещении.
Со стороны сервера опять же все реализовано у tarasfrompir, ну или почти все), он в вашей теме тоже был и что-то вроде даже предлагал)

И поддержу SmoKE_xDDD, слушать эфир, то чего очень многим не хватает)

А Вам огромная благодарность за труды!)
Ответить