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

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

Модератор: immortal

Аватара пользователя
ovcher
Сообщения: 183
Зарегистрирован: Сб сен 12, 2015 3:11 am
Откуда: Волгоград
Благодарил (а): 60 раз
Поблагодарили: 39 раз
Контактная информация:

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

Сообщение ovcher » Чт авг 08, 2019 1:12 am

Я вообще не понимаю в чем у вас загвоздка. Допустим, нет сертификата, в лом покупать, а нужен.

ИНСТРУКЦИЯ:
1. Открываем страничку: https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx
2. В ниспадающих списках выбираем Свой сервер и свою ось.
3. Скролингом вниз, выполняем все по пунктам, в 4 выбираем "Either get and install your certificates..." т.е. выполняем:

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

sudo certbot --nginx
После выполнения данной команды, просто отвечаем на простетские вопросы, мыло там ввести, подписаться на рассылку, пара да/нет и т.п. Там все логически понятно, если пугает английский, копи/пастите каждый вопрос в переводчик. Сориентируетесь без проблем.
Это все! Установщик все сделает сам и проверку, и конфиг поправит, и в крон пропишется(автоматом будет обновлять сертификат). Вам останется лишь проверить сертификаты, вот тут:
https://www.ssllabs.com/ssltest/. Кстати Сertbot, в конце, выдаст вам прямые ссылки на проверку, переходите по каждой и дожидайтесь результата.

ПРИМЕР:
Давайте на примере и посложнее, вроде был вопрос с двумя серверами. Вот конкретно моя ситуация. У меня на NGNIX-е висит блог, он(сам сервер) крутится на виртуалке с Убунтой, Мажор на Апаче, на малинке. Нужно охватить все разом.
1. Заранее у регистратора делаем все А записи, это важно! Сertbot автоматом охватит их все и предложит выбрать те которые он пропишет в сертификате. В общем, примерно так, я захожу к регистратору и делаю главную A запись на ovcher.com (Для блога) и вспомогательную, ну допустим, mjd.ovcher.com (для мажора), обе записи ссылаются на мой внешний, белый ИП. Есть.
2. Пока новые записи реплицируются, в конфиге Нгникса прописываем простой редирект с него на Мажор, делается это так:

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

server {
    server_name  mjd.ovcher.com;
        location / {
            proxy_pass http://192.168.1.197/;
            proxy_redirect     off;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}
192.168.1.197 это ИП мажора.
Просто, втыкаем кусок в самый конец и правим под себя, собственно это все.
3. Проверяем. Делаем в файле хостс на рабочей станции ассоциации НО! уже не на Мажор, а на Нгникс т.е. пишем что то вроде:

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

192.168.1.97  ovcher.com
192.168.1.97  mjd.ovcher.com
192.168.1.97 - это сервер NGNIX.
Все, пробуем заходить по именам.

В лом заморачиваться с хостом, пробуем с мобилы, отключив локалку, разумеется 80 и 443 порты должны быть проброшены.

Все должно быть доступно.

Ну, а далее как я писал выше производим установку и настройку Сertbot(см. ИНСТРКУЦИЮ).
При настройке(ответах на те самые вопросы), будет вопрос с перечислением имен, что то вроде:
1. ovcher.com
2. mjd.ovcher.com
В ответе пишем: 1,2 и давим Enter.
Пожалуй это самый главный вопрос.
Ах да. Сertbot ставится только на NGNIX, Апач с мажором не трогаем, Яндекс прекрасно работает через редирект.
И наконец, делаем последнюю проверку, в адресной строке вводим: mjd.ovcher.com, на второй вкладке: ovcher.com, давим Интер и радуемся замочкам слева от адресов.

Ну, а если у вас все просто, один домен-один сервер то, просто, пользуйте инструкцию, этого более чем.
diver
Сообщения: 114
Зарегистрирован: Пн мар 27, 2017 8:01 pm
Благодарил (а): 7 раз
Поблагодарили: 1 раз

Internal server error

Сообщение diver » Пн авг 12, 2019 4:20 pm

Всем привет!
При попытки обновить устройства получаю "Internal server error". Доступ из инета есть, сертификат валидный, с правами проблем нет.
В логах модуля ошибка:
16:15:05 0.57814700 GET /modules/yandexhome/smarthome.php/v1.0/user/devices 192.168.0.79 <<< []
16:15:05 0.58027900 smarthome.php === Unsupported API version!
16:15:05 0.58054000 smarthome.php >>>
Какая версия API должна быть и что надо поменять ? (const API_VERSION = '1.0' в yandexhome.class.php ?)
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Internal server error

Сообщение skysilver » Пн авг 12, 2019 4:39 pm

diver писал(а):
Пн авг 12, 2019 4:20 pm
Какая версия API должна быть и что надо поменять ? (const API_VERSION = '1.0' в yandexhome.class.php ?)
1.0 Новее ничего не было.

viewtopic.php?f=5&t=6498&p=104189#p104189
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
diver
Сообщения: 114
Зарегистрирован: Пн мар 27, 2017 8:01 pm
Благодарил (а): 7 раз
Поблагодарили: 1 раз

Re: Internal server error

Сообщение diver » Пн авг 12, 2019 4:55 pm

1.0 Новее ничего не было.

viewtopic.php?f=5&t=6498&p=104189#p104189
Тогда куда копать ?
вэбхуки отвечают:
https://domain/authorize.php
{"error":"invalid_client","error_description":"No client id supplied"}
https://domain/token.php
{"error":"invalid_request","error_description":"The request method must be POST when requesting an access token","error_uri":"http:\/\/tools.ietf.org\/html\/rfc6749#section-3.2"}
https://domain/smarthome.php/
{"success":false,"message":"Access is denied."}

Сертификат - живой.
Строка "fastcgi_param PATH_INFO $fastcgi_path_info;" есть.
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Internal server error

Сообщение skysilver » Пн авг 12, 2019 5:04 pm

diver писал(а):
Пн авг 12, 2019 4:55 pm
Тогда куда копать ?
MajorDoMo на чем? Вебхуки как опубликованы? SSL как прикручен?
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
diver
Сообщения: 114
Зарегистрирован: Пн мар 27, 2017 8:01 pm
Благодарил (а): 7 раз
Поблагодарили: 1 раз

Re: Internal server error

Сообщение diver » Пн авг 12, 2019 5:14 pm

MajorDoMo на чем? Вебхуки как опубликованы? SSL как прикручен?
MDM стоит на x64 Ubuntu, всегда использовался nginx (Апача никогда не было)
Есть два nginx сайта
1) Для основного MDM с 80 портом, только приватный IP
2) Для данных вэбхуков - https revers proxy, который отправляет запросы на сайт 1). Сертификаты letsencrypt

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

server {
    listen   *:443 ssl;
    server_name  домен ;

    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2; # SSLv3 исключить CVE-2014-3566
    ssl_certificate /etc/letsencrypt/live/домен/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/домен/privkey.pem;

    location /authorize.php {
proxy_pass http://192.168.0.79/modules/yandexhome/authorize.php;
proxy_read_timeout 90;
               }

    location /token.php {
proxy_pass http://192.168.0.79/modules/yandexhome/token.php;
proxy_read_timeout 90;
               }

    location /smarthome.php {
proxy_pass http://192.168.0.79/modules/yandexhome/smarthome.php;
proxy_read_timeout 90;
               }

               }
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Internal server error

Сообщение skysilver » Пн авг 12, 2019 5:36 pm

diver писал(а):
Пн авг 12, 2019 5:14 pm
MDM стоит на x64 Ubuntu, всегда использовался nginx (Апача никогда не было)
Есть два nginx сайта
1) Для основного MDM с 80 портом, только приватный IP
2) Для данных вэбхуков - https revers proxy, который отправляет запросы на сайт 1). Сертификаты letsencrypt
Таки не увидел полного лога модуля. Могу предположить, что проблема в конфиге основного виртуал хоста nginx, т.к. до модуля по факту доходят пустые запросы.

На крайнем образе для малины (там тоже nginx) в режиме реверс прокси (отдельный виртуал хост для ssl и вебхуков) все работает норм. Недавно проверял у одного комрада с таким конфигом прокси:
СпойлерПоказать

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

server {
   listen 0.0.0.0:443;

   server_name bla-bla-bla.ru;

   root /var/www/webhooks;

   location /modules/yandexhome/token.php {
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_pass http://127.0.0.1/modules/yandexhome/token.php;
   }

   location /modules/yandexhome/authorize.php {
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_pass http://127.0.0.1/modules/yandexhome/authorize.php;
   }

   location /modules/yandexhome/smarthome.php {
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_pass http://127.0.0.1/modules/yandexhome/smarthome.php;
   }

   location /modules/yandexhome/img {
      proxy_pass http://127.0.0.1/modules/yandexhome/img;
   }

   location /modules/yandexhome/css {
      proxy_pass http://127.0.0.1/modules/yandexhome/css;
   }

   ssl on;
   ssl_certificate /etc/nginx/ssl/webhooks/fullchain.pem;
   ssl_certificate_key /etc/nginx/ssl/webhooks/privkey.pem;

   access_log /var/log/nginx/webhooks.access.log;
   error_log /var/log/nginx/webhooks.error.log;
}
Конфиг основного виртуал хоста, к сожалению, не скопировал и привести тут не могу. У меня малины нету.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
diver
Сообщения: 114
Зарегистрирован: Пн мар 27, 2017 8:01 pm
Благодарил (а): 7 раз
Поблагодарили: 1 раз

Re: Internal server error

Сообщение diver » Пн авг 12, 2019 5:42 pm


Таки не увидел полного лога модуля. Могу предположить, что проблема в конфиге основного виртуал хоста nginx, т.к. до модуля по факту доходят пустые запросы.

По логам nginx, в момент обновления списка устройств дергается только:
5.255.199.9 - - [12/Aug/2019:17:39:32 +0300] "GET /smarthome.php/v1.0/user/devices HTTP/1.1" 200 5 "-" "Go-http-client/1.1"
37.9.68.141 - - [12/Aug/2019:17:39:52 +0300] "GET /smarthome.php/v1.0/user/devices HTTP/1.1" 200 5 "-" "Go-http-client/1.1"
37.9.68.189 - - [12/Aug/2019:17:40:03 +0300] "GET /smarthome.php/v1.0/user/devices HTTP/1.1" 200 5 "-" "Go-http-client/1.1"
В error.log nginx пусто.
В логе модуля только это:


17:39:32 0.63367500 GET /modules/yandexhome/smarthome.php/v1.0/user/devices 192.168.0.79 <<< []
17:39:32 0.63605800 smarthome.php === Unsupported API version!
17:39:32 0.63653600 smarthome.php >>>
17:39:52 0.05555500 GET /modules/yandexhome/smarthome.php/v1.0/user/devices 192.168.0.79 <<< []
17:39:52 0.05748500 smarthome.php === Unsupported API version!
17:39:52 0.05768900 smarthome.php >>>
17:40:03 0.41435200 GET /modules/yandexhome/smarthome.php/v1.0/user/devices 192.168.0.79 <<< []
17:40:03 0.41626700 smarthome.php === Unsupported API version!
17:40:03 0.41652600 smarthome.php >>>
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Internal server error

Сообщение skysilver » Пн авг 12, 2019 5:57 pm

diver писал(а):
Пн авг 12, 2019 5:42 pm
По логам nginx, в момент обновления списка устройств дергается только
5.255.199.9 - - [12/Aug/2019:17:39:32 +0300] "GET /smarthome.php/v1.0/user/devices HTTP/1.1" 200 5 "-" "Go-http-client/1.1"
В 6-ую строчку smarthome.php воткни $yandexhome->WriteLog(json_encode($request)); и скинь потом лог.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
diver
Сообщения: 114
Зарегистрирован: Пн мар 27, 2017 8:01 pm
Благодарил (а): 7 раз
Поблагодарили: 1 раз

Re: Internal server error

Сообщение diver » Пн авг 12, 2019 6:08 pm

В 6-ую строчку smarthome.php воткни $yandexhome->WriteLog(json_encode($request)); и скинь потом лог.
Лови, это в момент "обновить список устройств"
СпойлерПоказать
18:01:19 0.90359200 {"attributes":[],"request":[],"query":[],"server":{"USER":"www-data","HOME":"\/var\/www","PATH_TRANSLATED":"\/usr\/share\/nginx\/html68.0.79","ORIG_SCRIPT_FILENAME":"\/opt\/majordomo\/\/modules\/yandexhome\/smarthome.php\/v1.0\/user\/devices","ORIG_SCRIPT_NAME":"\/modules\/yandexhome\/smarthome.php\/v1.0\/user\/devices","ORIG_PATH_INFO":"","HTTP_ACCEPT_ENCODING":"gzip","HTTP_X_REQUEST_ID":"bbb70044-9668-4420-ad56-d5c3b2ae269f","HTTP_AUTHORIZATION":"Bearer f682911211cf949a6e1b99976401463b81bc2910","HTTP_USER_AGENT":"Go-http-client\/1.1","HTTP_CONNECTION":"close","HTTP_HOST":"192.168.0.79","HTTP_X_FORWARDED_FOR":"5.255.199.59","REDIRECT_STATUS":"200","PATH_INFO":"68.0.79","SERVER_NAME":"192.168.0.79","SERVER_PORT":"80","SERVER_ADDR":"192.168.0.79","REMOTE_PORT":"55714","REMOTE_ADDR":"192.168.0.79","SERVER_SOFTWARE":"nginx\/1.14.0","GATEWAY_INTERFACE":"CGI\/1.1","REQUEST_SCHEME":"http","SERVER_PROTOCOL":"HTTP\/1.0","DOCUMENT_ROOT":"\/usr\/share\/nginx\/html","DOCUMENT_URI":"\/modules\/yandexhome\/smarthome.php\/v1.0\/user\/devices","REQUEST_URI":"\/modules\/yandexhome\/smarthome.php\/v1.0\/user\/devices","SCRIPT_NAME":"","CONTENT_LENGTH":"","CONTENT_TYPE":"","REQUEST_METHOD":"GET","QUERY_STRING":"","SCRIPT_FILENAME":"\/opt\/majordomo\/\/modules\/yandexhome\/smarthome.php","FCGI_ROLE":"RESPONDER","PHP_SELF":"68.0.79","REQUEST_TIME_FLOAT":1565622079.897001,"REQUEST_TIME":1565622079},"files":[],"cookies":[],"headers":{"ACCEPT_ENCODING":"gzip","X_REQUEST_ID":"bbb70044-9668-4420-ad56-d5c3b2ae269f","AUTHORIZATION":"Bearer f682911211cf949a6e1b99976401463b81bc2910","USER_AGENT":"Go-http-client\/1.1","CONNECTION":"close","HOST":"192.168.0.79","X_FORWARDED_FOR":"5.255.199.59","CONTENT_LENGTH":"","CONTENT_TYPE":""},"content":null}
18:01:19 0.90418500 GET /modules/yandexhome/smarthome.php/v1.0/user/devices 5.255.199.59 <<< []
18:01:19 0.90696500 smarthome.php === Unsupported API version!
18:01:19 0.90755300 smarthome.php >>>
Ответить