Страница 17 из 26
Re: [Модуль] DLNA
Добавлено: Вт мар 27, 2018 9:05 am
Hold
fandaymon писал(а):
Потом в phpmyadmin в таблице settings найти HOOK_EVENT_SAY и поставить у rhvoice priority=50
По идее теперь когда Мажордомо будет что-то произносить, то RHVoice закеширует сообщение, а DLNAVoice отправит этот файл на DLNA устройство. Но конечно всё это умозрительно и надо пробовать
Файл подредактирвал, директорию создал и закинул его, как инсталлировать? Файл installed тоже копировать? И не смог найти в phpmyadmin таблицу settings и HOOK_EVENT_SAY
Спустя пару часов ...
Модуль появился в списке приложений, приоритет так и не поставил.
Пока файл редактировал и кидал в малину, 2 раза обрушил все из за синтаксиса, помогло удаление папки dlnavoice и
sudo php /var/www/html/cycle.php

Re: [Модуль] DLNA
Добавлено: Вт мар 27, 2018 11:49 am
fandaymon
А в чём проблема таблицу найти? База данных называется DB_Terminal, на второй странице есть таблица settings
Re: [Модуль] DLNA
Добавлено: Вт мар 27, 2018 12:37 pm
Hold
fandaymon писал(а):А в чём проблема таблицу найти?
Дак я туда заходил 1 раз когда образ поставил, пароль поменять и все.
Поменял, сейчас попробую что выйдет.
Видимо до вечера из дома, работа ...
Re: [Модуль] DLNA
Добавлено: Вт мар 27, 2018 1:43 pm
fandaymon
Приоритет можно и сценарием поменять
Код: Выделить всё
$rec = SQLSelectOne("SELECT * FROM settings WHERE NAME = 'HOOK_EVENT_SAY'");
$data = json_decode($rec['VALUE'], true);
$data['rhvoice']['priority'] = 50;
$rec['VALUE'] = json_encode($data);
SQLUpdate('settings', $rec);
Re: [Модуль] DLNA
Добавлено: Вт мар 27, 2018 7:30 pm
Hold
fandaymon писал(а):Приоритет можно и сценарием поменять
Так проще.
Вот с кодом в модуле загвоздка
Изменил то что ранее обсуждалось, а что убрать не ясно.
И в Before SAY (code): не нужно же ничего писать?
В таком виде не работает.
Код: Выделить всё
<?php
/**
* rhvoice
* @package project
* @author Dark_Veter <[email protected]>
* @copyright Dark_Veter (c)
* @version 0.1 (wizard, 15:03:33 [Mar 14, 2016])
*/
//
//
class dlnavoice extends module {
/**
* rhvoice
*
* Module class constructor
*
* @access private
*/
function dlnavoice() {
$this->name = "dlnavoice";
$this->title = "DLNAVoice";
$this->module_category = "<#LANG_SECTION_APPLICATIONS#>";
$this->checkInstalled();
}
/**
* saveParams
*
* Saving module parameters
*
* @access public
*/
function saveParams($data = 0) {
$p = array();
if (IsSet($this->id)) {
$p["id"] = $this->id;
}
if (IsSet($this->view_mode)) {
$p["view_mode"] = $this->view_mode;
}
if (IsSet($this->edit_mode)) {
$p["edit_mode"] = $this->edit_mode;
}
if (IsSet($this->tab)) {
$p["tab"] = $this->tab;
}
return parent::saveParams($p);
}
/**
* getParams
*
* Getting module parameters from query string
*
* @access public
*/
function getParams() {
global $id;
global $mode;
global $view_mode;
global $edit_mode;
global $tab;
if (isset($id)) {
$this->id = $id;
}
if (isset($mode)) {
$this->mode = $mode;
}
if (isset($view_mode)) {
$this->view_mode = $view_mode;
}
if (isset($edit_mode)) {
$this->edit_mode = $edit_mode;
}
if (isset($tab)) {
$this->tab = $tab;
}
}
/**
* Run
*
* Description
*
* @access public
*/
function run() {
global $session;
$out = array();
if ($this->action == 'admin') {
$this->admin($out);
} else {
$this->usual($out);
}
if (IsSet($this->owner->action)) {
$out['PARENT_ACTION'] = $this->owner->action;
}
if (IsSet($this->owner->name)) {
$out['PARENT_NAME'] = $this->owner->name;
}
$out['VIEW_MODE'] = $this->view_mode;
$out['EDIT_MODE'] = $this->edit_mode;
$out['MODE'] = $this->mode;
$out['ACTION'] = $this->action;
$this->data = $out;
$p = new parser(DIR_TEMPLATES . $this->name . "/" . $this->name . ".html", $this->data, $this);
$this->result = $p->result;
}
/**
* BackEnd
*
* Module backend
*
* @access public
*/
function admin(&$out) {
$this->getConfig();
$out['VOICE']=$this->config['VOICE'];
$out['USE_SPD']=$this->config['USE_SPD'];
$out['USE_CACHE']=$this->config['USE_CACHE'];
if (!$out['VOICE']) {
$out['VOICE'] = 'Anna+CLB';
}
if ($this->view_mode == 'update_settings') {
global $voice;
$this->config['VOICE']=$voice;
global $use_spd;
$this->config['USE_SPD']=$use_spd;
global $use_cache;
$this->config['USE_CACHE']=$use_cache;
$this->saveConfig();
$this->redirect("?");
}
}
/**
* FrontEnd
*
* Module frontend
*
* @access public
*/
function usual(&$out) {
$this->admin($out);
}
function processSubscription($event, &$details) {
$this->getConfig();
if ($event == 'SAY' && !$details['ignoreVoice']) {
$level = $details['level'];
$message = $details['message'];
if ($level >= (int) getGlobal('minMsgLevel') && !IsWindowsOS()) {
$out = '';
$voice=$this->config['VOICE'];
$use_spd = $this->config['USE_SPD'];
$use_cache = $this->config['USE_CACHE'];
if ($use_spd) {
safe_exec('spd-say "'.$message.'" -w -y ' . $voice, 1, $out);
} else {
if ($use_cache) {
$cached_filename = 'cached/voice/rh_' . md5($message) . '.wav';
if (!file_exists($cached_filename))
$url='http://192.168.2.74/'.$cached_filename;
sg('MultiCastKitchen.playUrl',$url);
}
}
$details['ignoreVoice'] = 1;
}
//...
}
}
/**
* Install
*
* Module installation routine
*
* @access private
*/
function install($data = '') {
subscribeToEvent($this->name, 'SAY');
parent::install();
}
/**
* Uninstall
*
* Module deinstallation routine
*
* @access private
*/
function uninstall() {
unsubscribeFromEvent($this->name, 'SAY');
parent::uninstall();
}
// --------------------------------------------------------------------
}
/*
*
* TW9kdWxlIGNyZWF0ZWQgTWFyIDE0LCAyMDE2IHVzaW5nIFNlcmdlIEouIHdpemFyZCAoQWN0aXZlVW5pdCBJbmMgd3d3LmFjdGl2ZXVuaXQuY29tKQ==
*
*/
Re: [Модуль] DLNA
Добавлено: Вт мар 27, 2018 8:06 pm
fandaymon
Так я ж написал, что надо оставить в функции processSubscription
И в функции admin тоже можно всё закомментировать, так как у модуля будут свои, не похожие сеттингсы
В before say ничего писать не надо, потому что нам перед произнесением фразы ничего делать не надо
Код: Выделить всё
function processSubscription($event, &$details) {
$this->getConfig();
if ($event == 'SAY' ) {
$level = $details['level'];
$message = $details['message'];
if ($level >= (int) getGlobal('minMsgLevel') {
$cached_filename = 'cached/voice/rh_' . md5($message) . '.wav';
if (file_exists(ROOT . $cached_filename)) {
$url='http://192.168.2.74/'.$cached_filename;
sg('MultiCastKitchen.playUrl',$url);
DebMes($url,'googlenotifier');
}
}
}
}
Re: [Модуль] DLNA
Добавлено: Вт мар 27, 2018 8:39 pm
Hold
Parse error: syntax error, unexpected ';' in /var/www/html/modules/dlnavoice/dlnavoice.class.php on line 127
на эту строку
$cached_filename = 'cached/voice/rh_' . md5($message) . '.wav';
function admin удалил полностью
Код: Выделить всё
<?php
/**
* rhvoice
* @package project
* @author Dark_Veter <[email protected]>
* @copyright Dark_Veter (c)
* @version 0.1 (wizard, 15:03:33 [Mar 14, 2016])
*/
//
//
class dlnavoice extends module {
/**
* rhvoice
*
* Module class constructor
*
* @access private
*/
function dlnavoice() {
$this->name = "dlnavoice";
$this->title = "DLNAVoice";
$this->module_category = "<#LANG_SECTION_APPLICATIONS#>";
$this->checkInstalled();
}
/**
* saveParams
*
* Saving module parameters
*
* @access public
*/
function saveParams($data = 0) {
$p = array();
if (IsSet($this->id)) {
$p["id"] = $this->id;
}
if (IsSet($this->view_mode)) {
$p["view_mode"] = $this->view_mode;
}
if (IsSet($this->edit_mode)) {
$p["edit_mode"] = $this->edit_mode;
}
if (IsSet($this->tab)) {
$p["tab"] = $this->tab;
}
return parent::saveParams($p);
}
/**
* getParams
*
* Getting module parameters from query string
*
* @access public
*/
function getParams() {
global $id;
global $mode;
global $view_mode;
global $edit_mode;
global $tab;
if (isset($id)) {
$this->id = $id;
}
if (isset($mode)) {
$this->mode = $mode;
}
if (isset($view_mode)) {
$this->view_mode = $view_mode;
}
if (isset($edit_mode)) {
$this->edit_mode = $edit_mode;
}
if (isset($tab)) {
$this->tab = $tab;
}
}
/**
* Run
*
* Description
*
* @access public
*/
function run() {
global $session;
$out = array();
if ($this->action == 'admin') {
$this->admin($out);
} else {
$this->usual($out);
}
if (IsSet($this->owner->action)) {
$out['PARENT_ACTION'] = $this->owner->action;
}
if (IsSet($this->owner->name)) {
$out['PARENT_NAME'] = $this->owner->name;
}
$out['VIEW_MODE'] = $this->view_mode;
$out['EDIT_MODE'] = $this->edit_mode;
$out['MODE'] = $this->mode;
$out['ACTION'] = $this->action;
$this->data = $out;
$p = new parser(DIR_TEMPLATES . $this->name . "/" . $this->name . ".html", $this->data, $this);
$this->result = $p->result;
}
/**
* BackEnd
*
* Module backend
*
* @access public
*/
function processSubscription($event, &$details) {
$this->getConfig();
if ($event == 'SAY' ) {
$level = $details['level'];
$message = $details['message'];
if ($level >= (int) getGlobal('minMsgLevel') {
$cached_filename = 'cached/voice/rh_' . md5($message) . '.wav';
if (file_exists(ROOT . $cached_filename)) {
$url='http://192.168.2.74/'.$cached_filename;
sg('MultiCastKitchen.playUrl',$url);
DebMes($url,'googlenotifier');
}
}
}
}
/**
* Install
*
* Module installation routine
*
* @access private
*/
function install($data = '') {
subscribeToEvent($this->name, 'SAY');
parent::install();
}
/**
* Uninstall
*
* Module deinstallation routine
*
* @access private
*/
function uninstall() {
unsubscribeFromEvent($this->name, 'SAY');
parent::uninstall();
}
// --------------------------------------------------------------------
}
/*
*
* TW9kdWxlIGNyZWF0ZWQgTWFyIDE0LCAyMDE2IHVzaW5nIFNlcmdlIEouIHdpemFyZCAoQWN0aXZlVW5pdCBJbmMgd3d3LmFjdGl2ZXVuaXQuY29tKQ==
*
*/
Re: [Модуль] DLNA
Добавлено: Вт мар 27, 2018 8:41 pm
fandaymon
В этой строчке скобка пропущена
if ($level >= (int) getGlobal('minMsgLevel') {
надо так
if ($level >= (int) getGlobal('minMsgLevel')) {
Re: [Модуль] DLNA
Добавлено: Вт мар 27, 2018 8:45 pm
fandaymon
функцию admin всё-таки надо было оставить, просто всё внутри закомментировать.
Она вызывается когда в Панели управления выбирается модуль
Re: [Модуль] DLNA
Добавлено: Вт мар 27, 2018 8:55 pm
Hold
Заработало!
Но есть одно но.
Если в кеше уже есть файл из текстов ранее произнесенных, то четко срабатывает, если нет, то молчит. И в свойство sg('MultiCastKitchen.playUrl',$url); не передает. Например спросил какая погода, в ответ написала Алиса и молчит в DLNA. Тут же опять спрашиваю какая погода, все произносит.
Остался один шаг к победе
fandaymon писал(а):функцию admin всё-таки надо было оставить, просто всё внутри закомментировать.
Она вызывается когда в Панели управления выбирается модуль
Это не страшно, просто пусто когда модуль выбираю.
Позже можно обстряпать.
И еще, если подряд 2 сообщения, то не успев договорить начинает следующее.