[Модуль] Yandex Home (yandexhome)

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

Модератор: immortal

VOVA_iS
Сообщения: 205
Зарегистрирован: Пн фев 04, 2019 10:23 pm
Благодарил (а): 18 раз
Поблагодарили: 30 раз

Re: [Модуль] Yandex Home (yandexhome)

Сообщение VOVA_iS » Сб апр 25, 2020 8:37 pm

Divan писал(а):
Сб апр 25, 2020 7:45 pm


Потом запускаю certbot --apache и получаю эту ошибку
СпойлерПоказать

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

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Error while running apache2ctl configtest.
Action 'configtest' failed.
The Apache error log may have more information.

AH00526: Syntax error on line 57 of /etc/apache2/sites-enabled/webhooks.conf:
SSLCertificateFile: file '/etc/apache2/ssl/webhooks/fullchain.pem' does not exist or is empty

The apache plugin is not working; there may be problems with your existing configuration.
The error was: MisconfigurationError("Error while running apache2ctl configtest.\nAction 'configtest' failed.\nThe Apache error log may have more information.\n\nAH00526: Syntax error on line 57 of /etc/apache2/sites-enabled/webhooks.conf:\nSSLCertificateFile: file '/etc/apache2/ssl/webhooks/fullchain.pem' does not exist or is empty\n",)
root@mjdm-style:/home/gladmin#
Пробовал сделать получить ключи отдельно, не ставя на ubuntu certbot и положить сюда /etc/apache2/ssl/webhooks, так же не работает.

Т.к. я не планировал (и не намерен в будущем) выставлять MajorDoMo в Интернет, то для задачи публикации вебхуков решено было поднять отдельный виртуальный сервер Apache, который будет в режиме реверс-прокси перенаправлять запросы от Яндекс на доступный только из локальной сети виртуальный сервер с MajorDoMo. Соответственно SSL-сертификат ставится именно на него. На этом моменте остановлюсь подробнее (см. ниже).
СпойлерПоказать
Вариант публикации вебхуков через реверс-прокси на базе веб-сервера Apache.
Первым делом активируем модули Apache - ssl, proxy и proxy_http.

sudo a2enmod ssl proxy proxy_http

Рестартуем Apache

sudo systemctl restart apache2

и проверяем, что модули загрузились

sudo apachectl -M | grep 'ssl\|proxy'

В ответе должно быть три строки.

proxy_module (shared)
proxy_http_module (shared)
ssl_module (shared)
Создаем конфигурационный файл нового виртуального сервера. Я назвал его webhooks.

sudo nano /etc/apache2/sites-available/webhooks.conf

Содержимое файла (с комментариями).

<IfModule mod_ssl.c>
<VirtualHost *:443>

# e-mail
ServerAdmin skysilver.da@gmail.com

# Доменное имя
ServerName majordomo.keenetic.pro

# Рабочая директория
DocumentRoot /var/www/webhooks

# Разграничение доступа
<Directory *>
Options All -Indexes
Order deny,allow
deny from all
</Directory>

# Определяем, что и куда нужно перенаправить.

# URL авторизации (authorize.php)
<Location /modules/yandexhome/authorize.php>
ProxyPass http://127.0.0.1/modules/yandexhome/authorize.php
ProxyPassReverse http://127.0.0.1/modules/yandexhome/authorize.php
</Location>

# URL для получения и обновления токена (token.php)
<Location /modules/yandexhome/token.php>
ProxyPass http://127.0.0.1/modules/yandexhome/token.php
ProxyPassReverse http://127.0.0.1/modules/yandexhome/token.php
</Location>

# URL обработчика навыка (smarthome.php)
<Location /modules/yandexhome/smarthome.php>
ProxyPass http://127.0.0.1/modules/yandexhome/smarthome.php
ProxyPassReverse http://127.0.0.1/modules/yandexhome/smarthome.php
</Location>

# URL на директорию с картинками для формы авторизации
<Location /modules/yandexhome/img>
ProxyPass http://127.0.0.1/modules/yandexhome/img
ProxyPassReverse http://127.0.0.1/modules/yandexhome/img
</Location>

# URL на директорию со стилями для формы авторизации
<Location /modules/yandexhome/css>
ProxyPass http://127.0.0.1/modules/yandexhome/css
ProxyPassReverse http://127.0.0.1/modules/yandexhome/css
</Location>

# Включаем логи
ErrorLog ${APACHE_LOG_DIR}/error.webhooks.log
CustomLog ${APACHE_LOG_DIR}/access.webhooks.log combined

# Указываем пути к файлам SSL-сертификата
SSLCertificateFile /etc/apache2/ssl/webhooks/fullchain.pem
SSLCertificateKeyFile /etc/apache2/ssl/webhooks/privkey.pem
SSLCertificateChainFile /etc/apache2/ssl/webhooks/chain.pem

# АктивируемSSL
SSLEngine on

</VirtualHost>
</IfModule>
Здесь ключевые моменты это активация SSL и секции Location, в которых определются правила перенаправления входящего трафика.

Сохраняем и закрываем конфигурационный файл, затем создаем пустую рабочую директорию.

sudo mkdir /var/www/webhooks

Активируем новый виртуальный сервер

sudo a2ensite webhooks.conf

и обновляем конфигурацию Apache для применения изменений.

sudo systemctl reload apache2


У Вас ругается на отсутсвие файла
Проверяйте написание файла
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: [Модуль] Yandex Home (yandexhome)

Сообщение Divan » Сб апр 25, 2020 9:59 pm

Сделал сертификаты, загрузил их в папку /etc/apache2/ssl/webhooks/
создал конфигурационный файл sudo nano /etc/apache2/sites-available/webhooks.conf, просто заменил DNS и почту
сделал
sudo mkdir /var/www/webhooks
sudo a2ensite webhooks.conf

До этого момента все норм, но после этого, запустив sudo systemctl reload apache2 - получил следующую ошибку, апач не хочет работать, я несколько раз пересоздал виртуалки и ошибка все повторяется.
СпойлерПоказать
Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.
Если набрать systemctl status apache2.service, то получаю следующее
СпойлерПоказать
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) (Result: exit-code) since Sat 2020-04-25 18:48:28 UTC; 13min ago
Process: 2070 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS)
Process: 2291 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=1/FAILURE)
Process: 2085 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 2110 (apache2)
Tasks: 11 (limit: 2290)
CGroup: /system.slice/apache2.service
├─2110 /usr/sbin/apache2 -k start
├─2125 /usr/sbin/apache2 -k start
├─2126 /usr/sbin/apache2 -k start
├─2127 /usr/sbin/apache2 -k start
├─2128 /usr/sbin/apache2 -k start
├─2129 /usr/sbin/apache2 -k start
├─2166 /usr/sbin/apache2 -k start
├─2250 /usr/sbin/apache2 -k start
├─2263 /usr/sbin/apache2 -k start
├─2264 /usr/sbin/apache2 -k start
└─2266 /usr/sbin/apache2 -k start

апр 25 18:49:58 mjdm-style apachectl[2192]: The Apache error log may have more information.
апр 25 18:49:58 mjdm-style systemd[1]: apache2.service: Control process exited, code=exited status=1
апр 25 18:49:58 mjdm-style systemd[1]: Reload failed for The Apache HTTP Server.
апр 25 19:01:40 mjdm-style systemd[1]: Reloading The Apache HTTP Server.
апр 25 19:01:40 mjdm-style apachectl[2291]: AH00526: Syntax error on line 57 of /etc/apache2/sites-enabled/webhooks.conf:
апр 25 19:01:40 mjdm-style apachectl[2291]: SSLCertificateFile: file '/etc/apache2/ssl/webhooks/fullchain.pem' does not exist or is empty
апр 25 19:01:40 mjdm-style apachectl[2291]: Action 'graceful' failed.
апр 25 19:01:40 mjdm-style apachectl[2291]: The Apache error log may have more information.
апр 25 19:01:40 mjdm-style systemd[1]: apache2.service: Control process exited, code=exited status=1
апр 25 19:01:40 mjdm-style systemd[1]: Reload failed for The Apache HTTP Server.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
VOVA_iS
Сообщения: 205
Зарегистрирован: Пн фев 04, 2019 10:23 pm
Благодарил (а): 18 раз
Поблагодарили: 30 раз

Re: [Модуль] Yandex Home (yandexhome)

Сообщение VOVA_iS » Сб апр 25, 2020 10:11 pm

Вывод команды

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

ls -l /etc/apache2/ssl/webhooks
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: [Модуль] Yandex Home (yandexhome)

Сообщение Divan » Сб апр 25, 2020 10:26 pm

При команде ls -l /etc/apache2/ssl/webhooks

Получил следующее
СпойлерПоказать
total 0
lrwxrwxrwx 1 root root 43 апр 25 18:48 chain.pem -> ../../archive/XXXXXXXX.myddn s.me/chain1.pem
lrwxrwxrwx 1 root root 47 апр 25 18:48 fullchain.pem -> ../../archive/XXXXXXXX.m yddns.me/fullchain1.pem
lrwxrwxrwx 1 root root 45 апр 25 18:48 privkey.pem -> ../../archive/XXXXXXXX.myd dns.me/privkey1.pem
Если я отключу ssl командой a2dismod ssl то апач стартует, если я включу a2enmod ssl, то апач не хочет стартовать. Откуда тут chain1.pem, если я загрузил chain.pem?

Здесь видно, что нет никаких 1
СпойлерПоказать
ключи.jpg
ключи.jpg (26.91 КБ) 3746 просмотров
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: [Модуль] Yandex Home (yandexhome)

Сообщение Divan » Вс апр 26, 2020 1:58 am

Наконец-то сдвинулось. Теперь DNS прошел проверку на SSL, в Яндекс диалогах я создал и опубликовал. Но появилась другая проблема, это Forbidden You don't have permission to access this resource и о ней ниже.

Какие были ошибки и почему не работало?

1) Неверно сделал запрос сертификата с помощью certbot, изначально я выбирал sudo certbot --apache, который автоматически настраивал конфиг апача и делал редирект с http на https. Нужно было выбрать sudo certbot certonly --apache, это просто получить сертификат без внесении настроек в конфиг апача.

2) Как получил сертификат через sudo certbot certonly --apache, то получил сообщение, где хранятся ключи
СпойлерПоказать
13.jpg
13.jpg (61.36 КБ) 3723 просмотра
3) Вместо этих путей
СпойлерПоказать
# Указываем пути к файлам SSL-сертификата
SSLCertificateFile /etc/apache2/ssl/webhooks/fullchain.pem
SSLCertificateKeyFile /etc/apache2/ssl/webhooks/privkey.pem
SSLCertificateChainFile /etc/apache2/ssl/webhooks/chain.pem
я указал
СпойлерПоказать
# Указываем пути к файлам SSL-сертификата
SSLCertificateFile /etc/letsencrypt/live/xxxxxxxx/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/xxxxxxxx/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/xxxxxxxx/chain.pem

но теперь другая проблема и я не могу объединить аккаунты, пишет, что "Не удается получить доступ к сайту", куда копать то?

Forbidden
You don't have permission to access this resource.
СпойлерПоказать
12.JPG
12.JPG (23.59 КБ) 3723 просмотра

Права на папку назначил такие
СпойлерПоказать
права.jpg
права.jpg (26.21 КБ) 3723 просмотра
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: [Модуль] Yandex Home (yandexhome)

Сообщение Divan » Вс апр 26, 2020 4:27 am

Урра ), заработало. Как я понимаю, что сообщение Forbidden. You don't have permission to access this resource, так и должно быть, никакие права не нужно назначать папке webhooks. Оставлю свою хронологию действии, это может помочь в будущем кому-то.

С сертификатом разобрался, про них я спрашивал и написал выше.

Для тех, у кого стоит Ubuntu 18.04.4 LTS и будете ставить Certbot, то тут есть но, см. ниже

Add Certbot PPA
СпойлерПоказать
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe - если запустить эту команду, то получим ошибку add-apt-repository universe error: universe invalid, в таком случае запускаем эту команду sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe"
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update

В Яндекс Диалог сделал следующие настройки.

В строке Endpoint URL порт указал
СпойлерПоказать
Endpoint URL.jpg
Endpoint URL.jpg (14.35 КБ) 3706 просмотров
В настройке "Авторизация" порты не указал
СпойлерПоказать
Связка аккаунтов.jpg
Связка аккаунтов.jpg (15.42 КБ) 3706 просмотров
Связка аккаунтов - настройка.jpg
Связка аккаунтов - настройка.jpg (69.77 КБ) 3706 просмотров
Перешел в раздел "Тестирование"
Появилось окно авторизации, а при попытки объединить аккаунт появилось сообщение об ошибке
СпойлерПоказать
Паспорт ошибка.jpg
Паспорт ошибка.jpg (26.09 КБ) 3706 просмотров
в логах MD была такая запись

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

smarthome.php >>> HTTP/1.1 401 Unauthorized
Content-Type: application/json
WWW-Authenticate: Bearer realm="Service"

Добавил в исключение в файл config.php, который лежит по пути /var/www/config.php

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

if (!(preg_match('/\/authorize\.php/is', $_SERVER['REQUEST_URI']) ||
      preg_match('/\/token\.php/is', $_SERVER['REQUEST_URI']) ||
      preg_match('/\/smarthome\.php/is', $_SERVER['REQUEST_URI'])))
{
   Define('HOME_NETWORK', '192.168.0.*'); - здесь указал свою сеть
   Define('EXT_ACCESS_USERNAME', 'user');
   Define('EXT_ACCESS_PASSWORD', 'password');
}
После всех манипуляции по прежнему не получалось объединить аккаунт. Пересоздал связку аккаунта и после этого все заработало - диалог опубликован.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
SmoKE_xDDD
Сообщения: 816
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Откуда: Нижний Новгород
Благодарил (а): 110 раз
Поблагодарили: 898 раз

Re: [Модуль] Yandex Home (yandexhome)

Сообщение SmoKE_xDDD » Ср апр 29, 2020 11:34 am

Помогайте =)
Искал в теме, но у меня нет проблем с доступом, SSL от кинетика, страницы открыты через htaccess

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

Произошла ошибка
Произошла ошибка в процессе получения данных от сервиса

7820-5ea7394f7a0f4902981d438c884531b0-1588149122
ЛогПоказать

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

11:32:02 0.25375700 POST /modules/yandexhome/authorize.php?state=https%3A%2F%2Fsocial.yandex.ru%2Fbroker2%2Fauthz_in_web%2Fdc9e1fe1e67c4074ab1b2e9007b1032d%2Fcallback&redirect_uri=https%3A%2F%2Fsocial.yandex.net%2Fbroker%2Fredirect&response_type=code&client_id=ca262042db3d-41d0be43 192.168.1.1 <<< {"authorized":"yes"}
11:32:02 0.37312800 authorize.php >>> HTTP/1.1 302 Found
Content-Type: application/json
Location: https://social.yandex.net/broker/redirect?code=81d32c55231d78d4f28e780425ec02bc7f6e6a40&state=https%3A%2F%2Fsocial.yandex.ru%2Fbroker2%2Fauthz_in_web%2Fdc9e1fe1e67c4074ab1b2e9007b1032d%2Fcallback

11:32:01 0.04635500 POST /modules/yandexhome/authorize.php?state=https%3A%2F%2Fsocial.yandex.ru%2Fbroker2%2Fauthz_in_web%2Fdc9e1fe1e67c4074ab1b2e9007b1032d%2Fcallback&redirect_uri=https%3A%2F%2Fsocial.yandex.net%2Fbroker%2Fredirect&response_type=code&client_id=ca262042db3d-41d0be43 192.168.1.1 <<< {"login":"тут логин","password":"тут пароль"}
11:31:59 0.79771200 GET /modules/yandexhome/authorize.php?state=https%3A%2F%2Fsocial.yandex.ru%2Fbroker2%2Fauthz_in_web%2Fdc9e1fe1e67c4074ab1b2e9007b1032d%2Fcallback&redirect_uri=https%3A%2F%2Fsocial.yandex.net%2Fbroker%2Fredirect&response_type=code&client_id=ca262042db3d-41d0be43 192.168.1.1 <<< []
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: [Модуль] Yandex Home (yandexhome)

Сообщение Divan » Чт апр 30, 2020 3:32 am

1) Добавьте в исключение

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

if (!(preg_match('/\/authorize\.php/is', $_SERVER['REQUEST_URI']) ||
      preg_match('/\/token\.php/is', $_SERVER['REQUEST_URI']) ||
      preg_match('/\/smarthome\.php/is', $_SERVER['REQUEST_URI'])))
{
   Define('HOME_NETWORK', '192.168.0.*'); - здесь указал свою сеть
   Define('EXT_ACCESS_USERNAME', 'user');
   Define('EXT_ACCESS_PASSWORD', 'password');
}
2) Пересоздайте связку аккаунта
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Gigabyte
Сообщения: 2
Зарегистрирован: Пт фев 28, 2020 5:42 am
Благодарил (а): 0
Поблагодарили: 0

Re: [Модуль] Yandex Home (yandexhome)

Сообщение Gigabyte » Сб май 16, 2020 10:54 am

Всем привет! Не верю в демонов, но объяснения случившемуся найти не могу. Сидели с супругой ночью, вспоминали родственников, которых больше нет... И тут включается пылесос и чайник. Позже при детальном рассмотрении выяснилось, что в это время были какие то шевеления со стороны умного дома Яндекса. В мониторинге от Яндекса в этот момент имеются какие то ошибки:
СпойлерПоказать
Изображение
Но самое интересное в логах модуля мажордомо:
СпойлерПоказать
Изображение
В том месте, где виднеется строка "NUL" как раз всё и произошло.
Что это могло быть? Посторонних лиц ни на сервере ни в аккаунте Яндекса не было.

P.S., вероятно таинственные NUL из-за того, что я в кипише обесточил сервер и лог не до сохранился? Но сути дела не меняет, что это было?
C_3AXAPOB
Сообщения: 510
Зарегистрирован: Ср июн 08, 2016 4:17 pm
Благодарил (а): 124 раза
Поблагодарили: 101 раз

Re: [Модуль] Yandex Home (yandexhome)

Сообщение C_3AXAPOB » Сб май 16, 2020 11:12 am

Барабашка. Читал про это в журнале Огонёк за февраль 1992 года.

А если серьезно, Алисе иногда что-то слышится, разговор, работа телевизора она это по своему интерпретирует.
Orange pi pc plus, megaD-2561, Xiaomi
--------------------------------------------------
http://connect.smartliving.ru/profile/908
Ответить