Navigation

    Forum

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • intraHouse Site
    1. Home
    2. div115
    3. Best
    D
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    Best posts made by div115

    • RE: Плагин TextToSpeech

      привел в рабочее состояние text2speech

      Как оказалось, на сегодняшний момент Yandex полностью поменял API по сравнению с тем, под который написан плагин, по этому пришлось переписать немножко код (я качал и ковырял версию 0.0.4 с гитхаба).

      Для того что-бы получить доступ к фунциям Yandex SpeechKit пришлось:

      • зарегистрировать на себя облако создав платежный аккаунт,
      • получить IAM-токен
      • создать каталог в облаке (и запомнить его ID - он нам далее пригодится для синтеза звука)
      • в каталоге создать - Сервисный аккаунт
      • в сервисном аккаунте создать API-ключ - и запомнить его - он нам далее пригодится для синтеза звука.

      Итого: по результатам регистрации на Yandex должен быть API-ключ и ID каталога.

      Далее ковырял установленный плагин, заранее прошу прощения за корявый код, т.к. таких слов как js-node и CURL до текущей ситуации я не знал.
      Ковырял при помощи описания API от Yandex https://cloud.yandex.ru/docs/speechkit/tts/request + гуглил по синтаксису и функциям языков.

      По большому счету надо переписать в плагине одну библиотеку из модуля "yandex-speech" для этого идем в: /var/lib/intrahouse-c/plugins/text2speech/node_modules/yandex-speech/lib
      там есть файл: YandexTTS.js

      Содержимое YandexTTS.js после моего ковыряния:

      'use strict';
      
      var request = require('request');
      var fs = require('fs');
      
      
      var yandex_tts_url = 'https://tts.api.cloud.yandex.net/speech/v1/tts:synthesize';
      
      var YandexTTS = function (options, callback) {
        
      
      var headers = {'Authorization': 'Api-Key ' + options['developer_key']};
      
      var dataString = 'text='+  options['text'] +
          '&lang='+ options['lang'] +
          '&voice='+ options['speaker'] +
          '&emotion='+ options['emotions'] +
        //  '&speed=' + options['speed'] + '';
          '&speed=0.9' +
        //  '&folderId=' + options['folder_id'] + '';
       	'&folderId=b1g92u63tba34rg4c8sr';
      
      
      var request_options = {
          url: yandex_tts_url,
          method: 'POST',
          headers: headers,
          body: dataString
      };
         	var file = fs.createWriteStream(options['file']);
          	file.on('finish', callback);
      	request(request_options).pipe(file);
      };
      
      module.exports = YandexTTS;
      

      Если кто-то будет пользоваться исправленным кодом, в коде надо заменить слово b1****************sr на ранее полученный ID каталога и в параметрах плагина надо в поле токен прописать ранее полученный API-ключ и после этого перезапустить плагин.

      В параметры плагина text2speech, пытался добавить элементы: folderId и speed - но что-то у меня не получилось, - параметры в интерфейсе появились, данные там сохранялись, но вызвать их у меня не получилось.

      Далее, как выяснилось, в новом API SpeechKit в качестве ответа выдает файл в формате ogg (по умолчанию), или в RAW (надо дополнительно выбирать при передаче параметров) - который потом придется преобразовывать в какой-то другой формат. Сразу в формате wav SpeechKit не синтезирует. Поэтому пришлось доустановить в линуксе mplayer, т.к. тот что был у меня установлен по умолчанию файлы ogg не проигрывал.

      При вызове информатора, в тексте который необходимо озвучить можно расставлять ударения в словах вставляя перед ударной гласной 3 символа: %2B согласно документации Yandex вообще-то надо ставить символ "+" но у меня как-то не срослось с урл-кодированием передаваемого текста, и поэтому вместо "+" ставлю %2B

      В целом на текущий момент синтез звука в IH работает.

      И еще, изначально в text2speech не было голоса alena, - как по мне - так это самый приятный голос из синтезируемых. Его можно добавить поправив файл /var/lib/intrahouse-c/plugins/text2speech/text2speech.json добавив следующий код в параметре yandex_speaker:

      {
                "id": "alena",
                "name": "Alena"
              },
      

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

      posted in intraHouse V4 Cherry
      D
      div115
    • RE: Плагин HTTP-Client

      @div115
      проблема решена, как оказалась я неправильно установил систему IntraHouse

      IH ставил на Debian 10, по умолчанию в нем нет пакета sudo. И посмотрев что установка ругается в том числе на sudo я решил установить IH без команды sudo: "curl -sL https://git.io/fN1JN | bash -E -s ru"
      вместо "curl -sL https://git.io/fN1JN | sudo -E bash -s ru".

      С варнингами система поставилась и работала, + там точно работали планины МегаД, р2р, и уведомления на телефон. А с планином http получилась засада - после запуска он сразу же останавливался.

      Внимательно прочитав список поддерживаемых систем я на виртуалке поставил Ubuntu 18.04, на нее IH и плагин http. - все работало как надо.

      Так я решил что IH просто не поддерживает Debian 10. Потом на виртуалке я поставил Debian 9, в очередной раз обратив внимание на то что команда установки не запустилась ругаясь на sudo. Я установил IH как и раньше - без sudo. Грабли оказались те же - http плагин не работал. Тогда я до установил sudo и переустановил IH правильной коммандой - и счастье - http заработал.

      Далее на физическом сервере на котором работал IH на debian 10 я сделал бэкап проекта, доустановил sudo и переустановил IH правильной коммандой. Далее апгрейдил IH до последней версии и просто переключился с демо-проекта на рабочий проект что был раньше (оказывается во время переустановки он не удалился и даже не пришлось загружать бэкап). Теперь все работает как надо.

      posted in Плагины
      D
      div115
    • Как подружить WQTT и устройства IntraHouse уже привязанные к другим плагинам

      Просто добавить в канал плагина устройство уже привязанное к другому плагину (например к плагину Mega-D) просто так не получается, т.к. в поле "Устройство" его нет. Но все же сделать связку топика канала с таким устройством возможно.

      Для этого нужно создать такой мультисценарий (можно и простой сценарий но тогда придется писать похожий сценарий для каждого подключаемого устройства) с "ID сценария" например - [syncro_switch] и "Найменование" например - [переключатель]

      const lamp = Device("ActorD", "Устройство"); 
      
      script ({    
          start({topic, message}) {
        if (message == 1) lamp.on();
        else lamp.off();
          }
      });
      

      После сохранения скрипта надо перезапустить IntraHouse.

      далее во вкладке скрипта "Запуск для устройств" создаем новую запись и в графе "Устройство" добавляем то устройство которое хотим привязать к топику MQTT и сохраняем.
      Далее идем в плагин MQTT создаем новый канал. Там заполняем номер канала, выбираем тип канала DO-digital output, прописывем топик и сохраняем. После сохранения появляется поле "Запустить сценарий при получении" - в нем выбираем сценарий типа переключатель(Имя_нашего_устройства_которое_хотим_подключить). Далее еще раз сохраняем канал. Потом перезапускаем плагин MQTT и все должно работать.

      alt text

      Для того что-бы добавить следующее устройство - идем опять в наш мультисценарий в "Запуск для устройств" добавляем еще одну строку с уже новым устройством и сохраняем. Потом идем в планин MQTT и добавляем очередной канал по вышеописанной схеме.

      posted in Задачи и варианты решения
      D
      div115
    • RE: Релиз IntraHouse V5

      @IntraVM
      И еще если можно, поправьте пожалуйста ссылку в Примерах проектов (v5) по ссылке проекта - Dream House реально скачивается проект - Metro

      posted in intraHouse V5
      D
      div115
    • RE: Как подружить WQTT и устройства IntraHouse уже привязанные к другим плагинам

      Пользователь @Erik написал в Как подружить WQTT и устройства IntraHouse уже привязанные к другим плагинам:

      В свойствах устройства на вкладке "дополнительно" можно поставить галочку "расшарить устройство". Это не оно?

      Да, - оно. Круто ! и без извращений

      posted in Задачи и варианты решения
      D
      div115
    • RE: Как подружить WQTT и устройства IntraHouse уже привязанные к другим плагинам

      @Erik
      хотя у меня так не работает - возможности выбрать в канале устройство занятое другим плагином все равно нет 😞

      но через скрипт - все работает

      posted in Задачи и варианты решения
      D
      div115