본문 바로가기
IOT스마트홈 만들기 (Home Assistant)/HA설정

HA와 구글 홈 미니로 인터넷 라디오 재생방법 (final)

by ProjectDH 2021. 7. 29.

 

안녕하세요. 소나미 (project DH) 입니다.

오늘은 오직 HA IOT 플랫폼, 파이썬 언어와 xteve 프록시 (오디오 코덱 변환용)로

구글 홈 미니로 라디오를 청취하는 방법을 소개해드리려고합니다.

 

파이썬 flask로 서버를 실행시켜놓으면

바로 사용 가능합니다.

 

파이썬 서버를 키기전에 준비해야 할 사항은

명령어를 입력해서 패키지를 설치해야합니다.

 

아래의 명령어를 입력해서 파이썬3를 설치해주시고

apt install python3

 

flask 서버를 설치해야합니다.

pip3 install flask

pip3 install waitress

 

그리고 웹 url 호출관련 패키지를 설치해야합니다.

pip3 install beautifulsoup4

pip3 install requests

 

 

그 다음에는 xteve 설치 방법입니다.

라즈베리파이에서는 xteve를 go로 컴파일해서 실행하는 것 보다는

도커 설치 후에 바로 xteve를 설치하는게 더 편리하기 때문에

도커 설치 후 xteve를 실행하겠습니다.

 

라즈베리파이에서 도커를 설치하는 방법으로는 아래의 명령어를 입력합니다.

sudo curl -fsSL https://get.docker.com/ | sudo sh

 

이후 xteve 데이터 관련 폴더를 생성하고

sudo mkdir -p /home/xteve/config

sudo mkdir -p /home/xteve/tmp

 

폴더의 소유권을 리눅스 pi 계정으로 만듭니다.

sudo chown pi:pi /home/xteve/config

sudo chown pi:pi /home/xteve/tmp

 

그리고 xteve 도커 컨테이너를 생성 및 실행합니다.

docker run --name="xteve" -v /home/xteve/config:/config -v /home/xteve/tmp:/tmp/xteve -p 34400:34400 -u 1000:1000 --restart=unless-stopped tnwhitwell/xteve:latest

 

xteve에 m3u를 등록하는 방법을 알려드리겠습니다.

m3u 파일을 웹에 올려놓을거기 때문에 apache2나 nginx 등 웹서버를 설치합니다.

자신이 쓰고있는 웹서버가 있다면 따로 설치할 필요는 없습니다.

sudo apt install apache2

 

기본 웹 경로는 /var/www/html입니다.

 

웹서버 경로에 아래 두 개의 파일을 디운로드 합니다. (오른쪽 마우스 클릭후 링크 다운로드)

https://raw.githubusercontent.com/projectdhs/ha/main/final_HA_radio/example.xml

https://raw.githubusercontent.com/projectdhs/ha/main/final_HA_radio/TV_1.m3u

 

TV_1.m3u는 라디오 url 정보가 담긴 재생목록 파일이고

example.xml은 테스트용 epg(편성표 파일)입니다. 이 파일을 업로드해주지 않으면 epg 맵핑을 하나하나 해야해서

편의성 업로드 해놓습니다.

 

TV_1.m3u 파일을 열어서 ip라고 되어있는 부분을 자신의 라즈베리파이 서버 ip로 변경해줍니다.

파이썬 추출 프로그램 호출 후에 url이 다시 반환되어서 리다이렉트하는 방식입니다.

 

수정하셨으면 두 개의 파일을 업로드합니다.

 

다음은 아까 설치한 xteve 설정 방법입니다.

 

ip:34400/web에 접속 한 후에

튜너 개수를 10개로 설정

XEPG로 체크 후 다음

M3U Playlist가 뜨면 http://ip/TV_1.m3u 를 입력합니다. (ip는 자신의 서버 ip)

XMLTV File이 뜨면 http://ip/example.xml 를 입력합니다.

 

그러면 완료됩니다.

Mapping에 가보면 초록불이 들어와있습니다.

이게 정상입니다.

 

 

 

xteve에서 설정해야 할거는 Settings에 가서 Streaming Buffer를 ffmpeg로 변경합니다.

버퍼 사이즈는 작을 수록 더 빨라지는데, xteve웹 설정에서는 최대가 0.5MB입니다. 이부분은 설정파일을 직접 수정해야겠네요.

 

ffmpeg option란을 아래의 것으로 바꿔치기합니다. 이게 바로 오디오 코덱을 변환시켜주는 겁니다.

kbs 등 일부 라디오를 구글 홈으로 바로 전송하면 코덱이 안 맞는지 재생이 안 됩니다.

이렇게 ffmpeg로 변환 과정을 거친 후 url을 전송하면 재생이 잘 됩니다.

-hide_banner -vn -loglevel error -i [URL] -c:a mp3 -b:a 192k -ar 44100 -ac 2 -f wav pipe:1

그리고 Save를 클릭합니다.

 

다음은 설정파일을 직접 수정해보겠습니다.

리눅스 ssh를 열어주시고

cd /home/xteve/config

nano settings.json

(nano 에디터 설치방법은 sudo apt install nano)

buffer.size.kb => 256

files.update => false

update의 0000을 1900으로 변경 (새벽 시간대가 됩니다 저녁 7시 + 9시간)

맨아래에 xteveAutoUpdate => false

 

그리고 컨트롤과 x키 동시에 => y => 엔터

docker restart xteve를 입력합니다.

 

이제 xteve 재생 파일을 다운로드 받아보겠습니다.

ip:34400/m3u/xteve.m3u

로 접속해서 m3u 파일을 다운로드 받습니다.

 

그리고 이제 Home Assistant에서 장기 토큰을 발급받아야 합니다.

 

 

 

이렇게 해서 맨마지막 사진의 아래에 나온 장기 토큰을 복사해놓습니다.

 

다음은 파이썬 아래의 파이썬 파일을 다운받으세요. (오른쪽 마우스 클릭후 링크 다운로드)

https://raw.githubusercontent.com/projectdhs/ha/main/final_HA_radio/play_radio.py

 

 

수정해야 할 부분은 HA 서버 ip입력, 장기 토큰 입력, kbs 라디오url, 기타 라디오 url, 그리고 구글 홈 엔티티 아이디를 수정해야합니다.

플레이어 엔티티 아이디의 예는 media_player.office_speaker이고 홈 어시스턴트에 등록된대로 엔티티 아이디를 입력해주세요.

 

[] 친 부분에 []를 지우고 서버 ip, 장기 토큰을 입력하시고

'url' 이라고 된 부분에 url 대신에 아까 xteve.m3u 다운받은 파일에서 각각의 라디오에 해당하는 라디오 url을 넣어줍니다.

j='url' 부분과 play_kbs쪽만 잘 넣으시면 됩니다.

 

 

 

(1번 그림에서 안 보이는 tbs도..)

 

/home/xteve 에 업로드합니다.

 

수정하셨으면 파이썬 서버 자동 실행방법을 알려드리겠습니다.

 

crontab -e

nano 에디터 선택

@reboot python3 /home/xteve/play_radio.py

컨트롤 + x => y => 엔터로 저장 하시고

systemctl restart cron

로 재시작합니다.

리눅스 재부팅 (reboot) 시 자동으로 프로세스가 시작됩니다.

 

이제 마지막 단계만 남았습니다.

HA에 shell_command로 파이썬 url 호출하게 만들고, script로 구글 홈 어플에서 테마 조정(루틴에서 사용)으로 사용할 수 있게 만드는 것입니다.

 

https://raw.githubusercontent.com/projectdhs/ha/main/final_HA_radio/shell_command

https://raw.githubusercontent.com/projectdhs/ha/main/final_HA_radio/scripts

 

역시 ip 부분은 자신의 서버 ip로 설정하시고요.

제가 업로드한 두 개의 파일을 참고해서

홈 어시스턴트의 shell_command와 script를 수정합니다.

 

그리고 홈 어시스턴트를 재시작해주면!!

이제 script를 호출하면 바로 구글 홈 미니에서 라디오가 재생됩니다.

 

구글 홈 미니에게

오케이구글, ~~ 라디오 틀어 해서 재생하는 방법은

https://cafe.naver.com/koreassistant/2489

이곳을 참고해서 테마조정으로 해주세요!

 

아직 HA를 구글 홈에 연동하지 않으셨다면 레이군님의 설정 글을 보시고 바로 설정해보세요.

어렵지 않습니다.

https://cafe.naver.com/koreassistant/5414

 

근데 요즘 구글 서버가 이상해서 인지 어시스턴트 언어가 한국어이면 테마 조정에 들어가지지 않습니다..

어시스턴트 언어를 잠시 영어로 변경하시고 테마 조정 설정 해주시고

설정 끝나면 다시 어시스턴트 언어를 한국어로 변경하시면 됩니다.

어시스턴트 설정 => 언어 => 영어로 변경

 

루틴으로 들어가서

작업추가 => 스마트 홈 기기 조정 => 테마 조정 => 재생하려는 라디오 스크립트 선택

후 저장하시면 됩니다.

 

참.. cbs fm 틀어대신 씨베스 fm 틀어 라고 명령어를 설정하셔야하고

(cbs 음악 fm도 마찬가지)

말을 할 때에도 씨 베 스 fm 틀어라고 또박또박 말하셔야 합니다..

cbs fm은 이미 구글홈에서 등록되어 있는 라디오 서비스 (튠인)인데 재생이 안 되네요.

 

여기까지 HA에서 sbs mbc kbs tbs tbn ifm cbs fm ytn fm ebs fm을 재생하는 방법이었습니다.

 

댓글