diff --git a/img/helpicon.png b/img/helpicon.png new file mode 100644 index 0000000..1290dda Binary files /dev/null and b/img/helpicon.png differ diff --git a/lib/module_mdmPiTerminal.lib.php b/lib/module_mdmPiTerminal.lib.php new file mode 100644 index 0000000..1be3a14 --- /dev/null +++ b/lib/module_mdmPiTerminal.lib.php @@ -0,0 +1,16 @@ +send_mpt($command, $data, $target); + return $res; +} +?> \ No newline at end of file diff --git a/modules/mdmPiTerminal/mdmPiTerminal.class.php b/modules/mdmPiTerminal/mdmPiTerminal.class.php index cdf04f2..dc6c7c8 100644 --- a/modules/mdmPiTerminal/mdmPiTerminal.class.php +++ b/modules/mdmPiTerminal/mdmPiTerminal.class.php @@ -1,8 +1,8 @@ +* @author Wizard * @copyright http://majordomo.smartliving.ru/ (c) * @version 0.1 (wizard, 23:05:08 [May 07, 2018]) */ @@ -113,13 +113,21 @@ function run() { * @access public */ function admin(&$out) { + $this->getConfig(); + $out['CREATE_CLASS']=$this->config['CREATE_CLASS']; + if ($this->view_mode=='update_settings') { + global $create_class; + $this->config['CREATE_CLASS']=$create_class; + $this->saveConfig(); + $this->redirect("?"); + } global $sendCommand; if ($sendCommand) { header("HTTP/1.0: 200 OK\n"); header('Content-Type: text/html; charset=utf-8'); - global $id; global $cmd; + global $id; $tmp = SQLSelectOne("SELECT HOST FROM `terminals` inner join mpt on mpt.ID_TERMINAL = terminals.ID where mpt.ID = $id"); $target = $tmp['HOST']; $this->send_mpt('rec', $cmd, $target); @@ -188,6 +196,7 @@ function delete_mpt($id) { SQLExec("DELETE FROM mpt WHERE ID='".$rec['ID']."'"); } function propertySetHandle($object, $property, $value) { + $this->getConfig(); $table='mpt'; $properties=SQLSelect("SELECT ID FROM $table WHERE LINKED_OBJECT LIKE '".DBSafe($object)."' AND LINKED_PROPERTY LIKE '".DBSafe($property)."'"); $total=count($properties); @@ -237,12 +246,50 @@ function install($data='') { unsubscribeFromEvent($this->name, 'SAY'); unsubscribeFromEvent($this->name, 'SAYTO'); unsubscribeFromEvent($this->name, 'ASK'); -// subscribeToEvent($this->name, 'SAY','',10); -// subscribeToEvent($this->name, 'SAYTO','',20); -// subscribeToEvent($this->name, 'ASK','',20); - parent::install(); + parent::install(); } -/** + + + function addObject($nmTerm) { + //global $create_class; + if($this->debug == 1) debmes('mpt addObject create class : ' . $this->config['CREATE_CLASS']); + if($this->debug == 1) debmes('mpt addObject nmTerm : ' . $nmTerm); + if($this->debug == 1) debmes('mpt addObject after return ' . $nmTerm); + addClass('Terminals'); + $phpcode = << 0 ему эквивалентен start_record. + speech_recognized_success: Голосовая команда успешно распознана и обрабатывается. + start_talking: Терминал начал говорить. + stop_talking: Терминал закончил говорить. + mpd_play, mpd_stop, mpd_pause: Статус mpd изменился на play, stop, pause. + mpd_error: Ошибка получения статуса mpd. + +Пример метода который сохраняет все параметры в свойства: +EOD; + + $phpcode .=chr(13) .' foreach ($params as $param => $value) { '. chr(13) .' $this->setProperty($param, $value);'. chr(13) .' };'. chr(13) .' */'; + addClassMethod('Terminals','GetDataFromTerminal',""); + addClassMethod('Terminals','TerminalDataProcessing',$phpcode); + if($this->debug == 1) debmes('mpt addObject befour add object ' . $nmTerm); + addClassObject('Terminals',$nmTerm); + if($this->debug == 1) debmes('mpt addObject after add object ' . $nmTerm); + } + + /** * Uninstall * * Module uninstall routine @@ -250,9 +297,6 @@ function install($data='') { * @access public */ function uninstall() { - unsubscribeFromEvent($this->name, 'SAY'); - unsubscribeFromEvent($this->name, 'SAYTO'); - unsubscribeFromEvent($this->name, 'ASK'); SQLExec('DROP TABLE IF EXISTS mpt'); parent::uninstall(); } @@ -269,23 +313,168 @@ function dbInstall($data) { */ $data = <<debug == 1) $oldvalue = $value; +// $setParam = !$_POST[$param]; + $param=strtoupper($param); + $db = <<debug == 1) debmes(">mpt edit validate int : $param = $oldvalue > $value ! isset = $setParam xxx " . isset($value)); +// if(isset($value)) +// { +// $value = str_replace("'","",$curarray[14]); +// if($this->debug == 1) debmes(">mpt edit validate int != 0 : $param = $oldvalue > $value" ); +// } + $value=(int)$value; + } + else + { + if(!$value) $value = str_replace("'","",$curarray[14]); + } + } + } + if($this->debug == 1) debmes("mpt edit validate : $param = $oldvalue > $value" ); + global $postdata; + $postdata[$param] = $value; + + return $value; + } + // -------------------------------------------------------------------- } /* * * TW9kdWxlIGNyZWF0ZWQgTWF5IDA3LCAyMDE4IHVzaW5nIFNlcmdlIEouIHdpemFyZCAoQWN0aXZlVW5pdCBJbmMgd3d3LmFjdGl2ZXVuaXQuY29tKQ== * */ + diff --git a/modules/mdmPiTerminal/mpt_edit.inc.php b/modules/mdmPiTerminal/mpt_edit.inc.php index 1a56f3a..a4d40a1 100644 --- a/modules/mdmPiTerminal/mpt_edit.inc.php +++ b/modules/mdmPiTerminal/mpt_edit.inc.php @@ -7,9 +7,14 @@ } $table_name='mpt'; $rec=SQLSelectOne("SELECT * FROM $table_name WHERE ID='$id'"); + if($rec['ID_TERMINAL']) + { + $tmp = SQLSelectOne('SELECT HOST , NAME FROM terminals where ID = ' . $rec['ID_TERMINAL']); + $out['IP_TERMINAL'] = $tmp['HOST']; + } + if ($this->mode=='update') { $ok=1; - //options for 'ID_TERMINAL' (select) global $id_terminal; $rec['ID_TERMINAL'] = $id_terminal; @@ -17,94 +22,191 @@ if($rec['ID']) $qry = " and ID <> " . $rec['ID']; $findduble=SQLSelectOne("SELECT * FROM $table_name WHERE ID_TERMINAL='$id_terminal' $qry"); // chech not empy terminal and mast no dubles - if($rec['ID_TERMINAL'] == '' or $findduble['ID']) + if(($rec['ID_TERMINAL'] == '' or $findduble['ID']) and !$_POST['panel_voice'] and !$_POST['panel_admin']) { $out['ERR_ID_TERMINAL']=1; $ok=0; } - //updating '<%LANG_TITLE%>' (varchar, required) - /* - global $title; - $rec['TITLE']=$title; - if ($rec['TITLE']=='') { - $out['ERR_TITLE']=1; - $ok=0; + + global $postdata; + $postdata = array(); + + + if($_POST['panel_voice']) + { + if($this->debug == 1) debmes("mpt edit panel_voice" ); + //updating 'snowboy_token' (varchar) + $rec['SNOWBOY_TOKEN']= $this->validate('snowboy_token'); + //updating 'settings_sensitivity' (varchar) + $rec['SETTINGS_SENSITIVITY']= $this->validate('settings_sensitivity'); + //updating 'settings_providertts' (varchar) + $rec['SETTINGS_PROVIDERTTS']= $this->validate('settings_providertts'); + //updating 'cache_tts_priority' (varchar) + $rec['CACHE_TTS_PRIORITY']= $this->validate('cache_tts_priority'); + //updating 'cache_tts_size' (varchar) + $rec['CACHE_TTS_SIZE']= $this->validate('cache_tts_size'); + //updating 'settings_providerstt' (varchar) + $rec['SETTINGS_PROVIDERSTT']= $this->validate('settings_providerstt'); + //updating 'yandex_apikeytts' (varchar) + $rec['YANDEX_APIKEYTTS']= $this->validate('yandex_apikeytts'); + //updating 'yandex_apikeystt' (varchar) + $rec['YANDEX_APIKEYSTT']= $this->validate('yandex_apikeystt'); + //updating 'yandex_emotion' (varchar) + $rec['YANDEX_EMOTION']= $this->validate('yandex_emotion'); + //updating 'yandex_speaker' (varchar) + $rec['YANDEX_SPEAKER']= $this->validate('yandex_speaker'); + //updating 'aws_speaker' (varchar) + $rec['AWS_SPEAKER']= $this->validate('aws_speaker'); + //updating 'aws_access_key_id' (varchar) + $rec['AWS_ACCESS_KEY_ID']= $this->validate('aws_access_key_id'); + //updating 'aws_secret_access_key' (varchar) + $rec['AWS_SECRET_ACCESS_KEY']= $this->validate('aws_secret_access_key'); + //updating 'aws_region' (varchar) + $rec['AWS_REGION']= $this->validate('aws_region'); + //updating 'aws_boto3' (varchar) + $rec['AWS_BOTO3']= $this->validate('aws_boto3'); + //updating 'rhvoice0rest_server' (varchar) + $rec['RHVOICE0REST_SERVER']= $this->validate('rhvoice0rest_server'); + //updating 'rhvoice0rest_speaker' (varchar) + $rec['RHVOICE0REST_SPEAKER']= $this->validate('rhvoice0rest_speaker'); + //updating 'rhvoice0rest_rate' (varchar) + $rec['RHVOICE0REST_RATE']= $this->validate('rhvoice0rest_rate'); + //updating 'rhvoice0rest_pitch' (varchar) + $rec['RHVOICE0REST_PITCH']= $this->validate('rhvoice0rest_pitch'); + //updating 'rhvoice0rest_volume' (varchar) + $rec['RHVOICE0REST_VOLUME']= $this->validate('rhvoice0rest_volume'); + //updating 'rhvoice_rest_volume' (varchar) + $rec['RHVOICE_SPEAKER']= $this->validate('rhvoice_speaker'); + //updating 'pocketsphinx0rest_server' (varchar) + $rec['POCKETSPHINX0REST_SERVER']= $this->validate('pocketsphinx0rest_server'); } - //updating 'name' (varchar) - global $name; - $rec['NAME']=$name; - //updating 'linkedRoom' (varchar) - global $linkedroom; - $rec['LINKEDROOM']=$linkedroom; - //updating 'ip' (varchar) - global $ip; - $rec['IP']=$ip; - */ - //updating 'providertts' (varchar) - global $providertts; - $rec['PROVIDERTTS']=$providertts; - //updating 'apikeytts' (varchar) - global $apikeytts; - $rec['APIKEYTTS']=$apikeytts; - //updating 'providerstt' (varchar) - global $providerstt; - $rec['PROVIDERSTT']=$providerstt; - //updating 'apikeystt' (varchar) - global $apikeystt; - $rec['APIKEYSTT']=$apikeystt; - //updating 'sensitivity' (varchar) - global $sensitivity; - $rec['SENSITIVITY']=$sensitivity; - //updating 'alarmkwactivated' (varchar) - global $alarmkwactivated; - if(!$alarmkwactivated) $alarmkwactivated = 0; - $rec['ALARMKWACTIVATED']=$alarmkwactivated; - //updating 'alarmtts' (varchar) - global $alarmtts; - if(!$alarmtts) $alarmtts=0; - $rec['ALARMTTS']=$alarmtts; - //updating 'alarmstt' (varchar) - global $alarmstt; - if(!$alarmstt) $alarmstt=0; - $rec['ALARMSTT']=$alarmstt; -/* - //updating '<%LANG_LINKED_OBJECT%>' (varchar) - global $linked_object; - $rec['LINKED_OBJECT']=$linked_object; - //updating '<%LANG_LINKED_PROPERTY%>' (varchar) - global $linked_property; - $rec['LINKED_PROPERTY']=$linked_property; + else if($_POST['panel_admin']) + { + //updating 'update_interval' (varchar) + $rec['UPDATE_INTERVAL']= $this->validate('update_interval'); + //updating 'update_turnoff' (varchar) + $rec['UPDATE_TURNOFF']= $this->validate('update_turnoff'); + //updating 'update_fallback' (varchar) + $rec['UPDATE_FALLBACK']= $this->validate('update_fallback'); + //updating 'update_pip' (varchar) + $rec['UPDATE_PIP']= $this->validate('update_pip'); + //updating 'update_apt' (varchar) + $rec['UPDATE_APT']= $this->validate('update_apt'); + } + else + { + if($this->debug == 1) debmes("mpt edit not panel_voice" ); + //updating 'settings_alarmkwactivated' (BOOLEAN) + $rec['SETTINGS_ALARMKWACTIVATED']= $this->validate('settings_alarmkwactivated'); + //updating 'settings_alarmtts' (BOOLEAN) + $rec['SETTINGS_ALARMTTS']= $this->validate('settings_alarmtts'); + //updating 'settings_alarmstt' (BOOLEAN) + $rec['SETTINGS_ALARMSTT']= $this->validate('settings_alarmstt'); + //updating 'settings_ask_me_again' (TINYINT) + $rec['SETTINGS_ASK_ME_AGAIN']= $this->validate('settings_ask_me_again'); + //updating 'settings_quiet' (BOOLEAN) + $rec['SETTINGS_QUIET']= $this->validate('settings_quiet'); + //updating 'settings_no_hello' (BOOLEAN) + $rec['SETTINGS_NO_HELLO']= $this->validate('settings_no_hello'); + //updating 'settings_phrase_time_limit' (TINYINT) + $rec['SETTINGS_PHRASE_TIME_LIMIT']= $this->validate('settings_phrase_time_limit'); + //updating 'settings_chrome_mode' (TINYINT) + $rec['SETTINGS_CHROME_MODE']= $this->validate('settings_chrome_mode'); + //updating 'settings_chrome_choke' (BOOLEAN) + $rec['SETTINGS_CHROME_CHOKE']= $this->validate('settings_chrome_choke'); + //updating 'settings_chrome_alarmstt' (BOOLEAN) + $rec['SETTINGS_CHROME_ALARMSTT']= $this->validate('settings_chrome_alarmstt'); + //updating 'majordomo_object_name' (varchar) + + + $rec['SETTINGS_LAZY_RECORD']= $this->validate('settings_lazy_record'); + //updating 'majordomo_object_name' (varchar) + $rec['SETTINGS_ALARM_RECOGNIZED']= $this->validate('settings_alarm_recognized'); + //updating 'majordomo_object_name' (varchar) + $rec['SETTINGS_BLOCKING_LISTENER']= $this->validate('settings_blocking_listener'); + //updating 'majordomo_object_name' (varchar) + $rec['SETTINGS_NO_BACKGROUND_PLAY']= $this->validate('settings_no_background_play'); + //updating 'majordomo_object_name' (varchar) + $rec['SETTINGS_OPTIMISTIC_NONBLOCK_TTS']= $this->validate('settings_optimistic_nonblock_tts'); + //updating 'majordomo_object_name' (varchar) + $rec['SETTINGS_AUDIO_GAIN']= $this->validate('settings_audio_gain'); + //updating 'majordomo_object_name' (varchar) + $rec['YANDEX_GRPC']= $this->validate('yandex_grpc'); + //updating 'majordomo_object_name' (varchar) + + + + + - */ - //UPDATING RECORD + + + + + $rec['MAJORDOMO_OBJECT_NAME']= $this->validate('majordomo_object_name'); + //updating 'majordomo_object_method' (varchar) + $rec['MAJORDOMO_OBJECT_METHOD']= $this->validate('majordomo_object_method'); + //updating 'majordomo_heartbeat_timeout' (varchar) + $rec['MAJORDOMO_HEARTBEAT_TIMEOUT']= $this->validate('majordomo_heartbeat_timeout'); + //updating 'proxy_enable' (varchar) + $rec['PROXY_ENABLE']= $this->validate('proxy_enable'); + //updating 'proxy_monkey_patching' (varchar) + $rec['PROXY_MONKEY_PATCHING']= $this->validate('proxy_monkey_patching'); + //updating 'proxy_proxy' (varchar) + $rec['PROXY_PROXY']= $this->validate('proxy_proxy'); + //updating 'mpd_control' (varchar) + $rec['MPD_CONTROL']= $this->validate('mpd_control'); + //updating 'mpd_ip' (varchar) + $rec['MPD_IP']= $this->validate('mpd_ip'); + //updating 'mpd_port' (varchar) + $rec['MPD_PORT']= $this->validate('mpd_port'); + //updating 'mpd_pause' (varchar) + $rec['MPD_PAUSE']= $this->validate('mpd_pause'); + //updating 'mpd_smoothly' (varchar) + $rec['MPD_SMOOTHLY']= $this->validate('mpd_smoothly'); + //updating 'mpd_quieter' (varchar) + $rec['MPD_QUIETER']= $this->validate('mpd_quieter'); + //updating 'mpd_wait_resume' (varchar) + $rec['MPD_WAIT_RESUME']= $this->validate('mpd_wait_resume'); + } + + if($this->debug == 1) debmes('mpt edit befour ok'); if ($ok) { - if ($rec['ID']) { - SQLUpdate($table_name, $rec); // update sql - $tmp = SQLSelectOne('SELECT HOST FROM terminals where ID = ' . $rec['ID_TERMINAL']); - $ip = $tmp['HOST']; - if($this->debug == 1) debmes('mpt: ' . $tmp['HOST']); - $rec['IP_SERVER']=$_SERVER['SERVER_ADDR']; - unset($rec['ID'],$rec['ID_TERMINAL']); - $senddata = json_encode($rec); - if($this->debug == 1) debmes('mpt edit send: ' . $senddata); - $this->send_mpt('settings',$senddata,$ip); - } else { - $new_rec=1; - $rec['ID']=SQLInsert($table_name, $rec); // adding new record - $tmp = SQLSelectOne('SELECT HOST FROM terminals where ID = ' . $rec['ID_TERMINAL']); - $ip = $tmp['HOST']; - $rec['IP_SERVER']=$_SERVER['SERVER_ADDR']; - unset($rec['ID'],$rec['ID_TERMINAL']); - $senddata = json_encode($rec); - if($this->debug == 1) debmes('mpt edit send: ' . $senddata); - $this->send_mpt('settings',$senddata,$ip); - } - $out['OK']=1; + if($this->debug == 1) debmes('mpt edit after ok'); + $nmTerm = $tmp['NAME']; + if ($rec['ID']) { + if($this->debug == 1) debmes("mpt edit update : $nmTerm ! ip: " . $tmp['HOST']); + if ($this->config['CREATE_CLASS'] == 1) + { + if($this->debug == 1) debmes("mpt edit update CreateClass=True : $nmTerm ! ip: " . $tmp['HOST']); + $rec['MAJORDOMO_OBJECT_METHOD'] = 'TerminalDataProcessing'; + $rec['MAJORDOMO_OBJECT_NAME'] = $nmTerm; + $postdata['MAJORDOMO_OBJECT_METHOD'] = 'TerminalDataProcessing'; + $postdata['MAJORDOMO_OBJECT_NAME'] = $nmTerm; + } + SQLUpdate($table_name, $rec); // update sql + } else { + if($this->debug == 1) debmes('mpt edit no recid insert'); + $new_rec=1; + if($this->debug == 1) debmes('mpt edit add object: ' . $nmTerm); + if ($this->config['CREATE_CLASS'] == 1) + { + $this->addObject($nmTerm); + $rec['MAJORDOMO_OBJECT_METHOD'] = 'TerminalDataProcessing'; + $rec['MAJORDOMO_OBJECT_NAME'] = $nmTerm; + } + $rec['ID']=SQLInsert($table_name, $rec); // adding new record + } + $rec['IP_SERVER']=$_SERVER['SERVER_ADDR']; + // if($this->debug == 1) debmes('mpt edit send: ' . $senddata); + + $this->send_mpt('settings', $postdata, $tmp['HOST']); + $out['OK']=1; } else { $out['ERR']=1; } } - $tmp=SQLSelect("SELECT ID, TITLE as NAME FROM terminals ORDER BY NAME"); + $tmp=SQLSelect("SELECT ID, TITLE, NAME, HOST, if(IS_ONLINE = 1, 'Online', 'Offline') as ONLINE FROM terminals WHERE TTS_TYPE = 'majordroid' OR MAJORDROID_API = 1 ORDER BY TITLE"); $terminals_total=count($tmp); for($terminals_i=0;$terminals_i<$terminals_total;$terminals_i++) { $terminal_id_opt[$tmp[$terminals_i]['ID']]=$tmp[$terminals_i]['NAME']; diff --git a/modules/mdmPiTerminal/mpt_search.inc.php b/modules/mdmPiTerminal/mpt_search.inc.php index 65124f4..2ad0e4c 100644 --- a/modules/mdmPiTerminal/mpt_search.inc.php +++ b/modules/mdmPiTerminal/mpt_search.inc.php @@ -20,7 +20,7 @@ $out['SORTBY']=$sortby_mpt; // SEARCH RESULTS //$res=SQLSelect("SELECT * FROM mpt WHERE $qry ORDER BY ".$sortby_mpt); - $res=SQLSelect("SELECT mpt.ID, terminals.TITLE,terminals.NAME, terminals.HOST FROM `mpt` inner join terminals on mpt.ID_TERMINAL = terminals.ID WHERE $qry ORDER BY ".$sortby_mpt); + $res=SQLSelect("SELECT mpt.ID, terminals.TITLE,terminals.NAME, terminals.HOST, terminals.IS_ONLINE FROM `mpt` inner join terminals on mpt.ID_TERMINAL = terminals.ID WHERE $qry ORDER BY ".$sortby_mpt); if ($res[0]['ID']) { //paging($res, 100, $out); // search result paging $total=count($res); diff --git a/modules/mdmPiTerminal/mpt_send.inc.php b/modules/mdmPiTerminal/mpt_send.inc.php index e8b8407..7aaf9f9 100644 --- a/modules/mdmPiTerminal/mpt_send.inc.php +++ b/modules/mdmPiTerminal/mpt_send.inc.php @@ -8,15 +8,39 @@ */ $service_port='7999'; - $in= $command.':'.$data; + if(is_array($data)) + { + if (isset($data['ID'])) unset($data['ID']); + if (isset($data['ID_TERMINAL'])) unset ($data['ID_TERMINAL']); + $senddata =$command.':'. json_encode($data); + } + else + { + $senddata = $command.':'.$data; + } + //$in= $command.':'.$senddata; - if($this->debug == 1) debmes('mpt send - ' . $in . '; to = ' . $target); + if (!filter_var($target, FILTER_VALIDATE_IP)) { + $tmp = SQLSelectOne("SELECT HOST FROM terminals where NAME = '$target'"); + if($tmp['HOST']) + { + $target = $tmp['HOST']; + } + else + { + return FALSE; + } + + } + + if($this->debug == 1) debmes("mpt send to = $target : $senddata"); $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket) { $result = socket_connect($socket, $target, $service_port); if ($result) { - socket_write($socket, $in, strlen($in)); + socket_write($socket, $senddata, strlen($senddata)); } } socket_close($socket); + return TRUE; diff --git a/templates/mdmPiTerminal/action_admin.html b/templates/mdmPiTerminal/action_admin.html index ac1ff5e..2edd577 100644 --- a/templates/mdmPiTerminal/action_admin.html +++ b/templates/mdmPiTerminal/action_admin.html @@ -1,3 +1,31 @@ + +
+ [ <#LANG_SETUP#> ] + [ Список терминалов ] +
+ + + + diff --git a/templates/mdmPiTerminal/mpt_edit.html b/templates/mdmPiTerminal/mpt_edit.html index 8206042..bb2bb6b 100644 --- a/templates/mdmPiTerminal/mpt_edit.html +++ b/templates/mdmPiTerminal/mpt_edit.html @@ -28,14 +28,17 @@
+ +
-
[#if OK#]
<#LANG_DATA_SAVED#>
@@ -47,17 +50,7 @@ [#if ID=""#] <#LANG_NEW_RECORD#> [#endif ID#] - + [#if !IS_SET_ID_TERMINAL#]
@@ -67,79 +60,365 @@
[#endif IS_SET_ID_TERMINAL#] -
-
--> -
-
--> -
-
--> - +
+ +
+
+ + +
-
+ + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + +
+ +
+
- +
+ +
-
- + +
-
- + + --> + +
-
+ +
+ +
+ [#if OK#] +
<#LANG_DATA_SAVED#>
+ [#endif OK#] + [#if ERR#] +
<#LANG_FILLOUT_REQURED#>
+ [#endif ERR#] +
+ [#if ID=""#] + <#LANG_NEW_RECORD#> + [#endif ID#] + +

SnowBoy

+ + +
+ +
+
+
+ + +
+ + +
+
+
+ +

Сервисы речи

+ + +
+ +
+ +
+
+
+ + +
+ +
+ -
- +
+ + +
+ +
+
+ +
+ +
-
+ +
+

Яндекс

+

Ключи для синтеза\распознавания. Можно использовать разные.
Если ключ не указан, он будет взят с https://translate.yandex.ru, пока это работает.
Ключ дают бесплатно, на месяц, https://tech.yandex.ru/speechkit/cloud/

+ +
+ +
+
+
+ + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ +
+ +
- + + +
-
- -
-
+ + + + [#if ID!=""#] + + [#endif ID#]
-
+
+
+ [#if ID!=""#] + + [#else ID#] + + [#endif ID#] + <#LANG_CANCEL#> +
+
+ +
+

Здесь можно записать до шести ключевых слов по 3 образца каждого ключевого слова. Для избегания ложных срабатываний лучше записать словосочетание из двух слов и более. Для лучшего качества срабатывания лучше записывать с тем микрофоном, который будет использоваться для распознавания. Говорить надо в микрофон на терминале.

1е слово @@ -226,28 +758,267 @@

Запись первого образца ключевого слова

-

Запись второго образца ключевого слова

-

Запись третьего образца ключевого слова

-

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

-
-

Применить настройки на терминале

+
+

Удалить модель

+ +
+ + +
+

Обновить терминал

+ +
+ +

Откатить термина до предыдущего успешного обновления

+ +
+ + +
+

+ Лог терминала + + +

+ + +
+
+ + + +
+ [#if OK#] +
<#LANG_DATA_SAVED#>
+ [#endif OK#] + [#if ERR#] +
<#LANG_FILLOUT_REQURED#>
+ [#endif ERR#] +
+ [#if ID=""#] + <#LANG_NEW_RECORD#> + [#endif ID#] + +
+

Настройки обновления

+

Терминал может самостоятельно обновляться с помощью стандартных механизмов гит. +Для этого он должен быть установлен через git clone, а директория терминала должна +оставаться валидным и доступным для git pull локальным репозиторием, pull не сработает +если вы изменяли файлы терминала. Проверить доступность можно с помощью git status. + +Обновление засчитывается если хоть один .py файл в src/ изменился, +или в Requirements/ появились новые пакеты. +Время последней проверки обновления и хеш коммита от предыдущего обновления хранятся +в update.json +

+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + + + + + + + + [#if ID!=""#] + + [#endif ID#] +
+
+
+ [#if ID!=""#] + + [#else ID#] + + [#endif ID#] + <#LANG_CANCEL#> +
+
+
+ + + +
+ + +