홈어시스턴트에서 Volumio를 play, stop 및 원격 리부팅하기(shell_command 이용) 홈오토메이션(Home Assi..

* Home Assistant는 배우는 데 시간이 꽤 걸리고 알아야 할 사전 IT지식도 제법 됩니다. 저도 초보가 아닌데도 꽤 많은 시일을 투자해야 원하는 기능을 작동할 수 있었습니다. 오늘은 원격으로 shell명령 작업을 할 때 시간 낭비를 줄여보고자 간단히 작성해 보았습니다.   

Home Assistant에 Volumio를 위와 같이 추가하여 Play, Stop 제어를 할 수 있습니다. 

시간이 되면 자동으로 Play가 되도록 제어하고 싶다면, 홈 어시스턴트에 있는 '자동화'기능을 이용하여 정해주는 시각에 REST명령어가 실행되도록 자동화 루틴을 추가해 주면 가능합니다.(참고: https://volumio.github.io/docs/API/REST_API.html)

Home Assistant의 configuration.yaml에 아래와 같이 Volumio의 REST 명령어를 추가할 수 있습니다. 아래의 예에서 192.168.0.136은 Volumio가 설치된 Raspberry Pi(이하, RPi)의 IP주소입니다. 참고로 ClassicFM을 곧바로 트는 명령도 첨부했습니다. 

rest_command:
  volumio_play:
    url: "http://192.168.0.136/api/v1/commands/?cmd=play"
  volumio_stop:
    url: "http://192.168.0.136/api/v1/commands/?cmd=stop"    
  volumio_play_classicfm:
    url: "http://192.168.0.136/api/v1/replaceAndPlay"
    method: post
    content_type: "application/json"
    payload: '{ "service":"webradio", "type":"webradio", "title":"Classic FM", "uri":"http://vis.media-ice.musicradio.com/ClassicFMMP3 Albumart: /albumart" }'
   
그런데, 가끔 USB로 RPi에 접속 된 앰프가 '치이익~~~'하면서 안되는 경우가 간혹 있어서, 아침에 Volumio가 설치된 RPi가 재시작(reboot)되었으면 좋겠어서 다음과 같이 구성해 보았습니다. 

현재, 192.168.0.118에 설치된 Home Assistant(이하, HA)는 Docker로 설치된 Core버전입니다. 그러므로, Docker에서 실행되고 있는 HA의 쉘 bash로 접속할 필요가 있습니다. 

왜냐하면, 192.168.0.118에 설치된 HA의 쉘에서 192.168.0.136 주소의 RPi를 리부팅하도록 원격 제어할 때 SSH로 패스워드 없이 접속하는 것이 필요하기 때문입니다. 

1)Volumio에 SSH 접속이 가능하도록 조치 
2)HA에서 ssh로 RPi(IP주소 192.168.0.136)에 접속해서 원격 제어가 가능하도록, HA가 설치된 Odoid기기의  IP주소 192.168.0.118(아래에서 root@odroid 프롬프트) 에서 패스워드 없이 접속이 가능하도록 키를 미리 준비합니다.(참고: How to Setup SSH Passwordless Login in Linux [3 Easy Steps] (tecmint.com)) 참고로, Home Assistant의 config 디렉터리의 위치는 /root/config이고, 도커로 실행 중인 HA에 접속하면 그 쉘에서는 /root/config위치가 /가 됩니다. => HA의 설치 방법에 따라 디렉터리(폴더)의 위치는 달라질 수가 있으므로 아래 명령은 감안하여 실행해야 합니다. ssh-keygen -t rsa 명령을 하면, 저장할 위치를 지정할 수 있는데 이 때 당연히 config(configuration.yaml파일이 있는!) 디렉터리 밑에 .ssh 폴더가 생기도록 해야 합니다. 또한 Addon이 사용 가능한 방법으로 HA를 설치했다면 아래의 sudo docker exec -it homeassistant bash 대신에 Terminal & SSH 애드온을 설치하여 ssh-copy-id 작업을 직접 진행할 수도 있습니다.   
  • root@odroid:~# sudo docker exec -it homeassistant bash
  • bash-5.1# ssh-keygen -t rsa 
  • bash-5.1# exit 
  • root@odroid:~# ssh-copy-id -f -i /root/config/.ssh/id_rsa.pub volumio@192.168.0.136 
  • root@odroid:~# sudo docker exec -it homeassistant bash
  • bash-5.1# ssh -i -o StrictHostKeyChecking=accept-new .ssh/id_rsa volumio@192.168.0.136
3)이제 Docker에서 실행 중인 HA의 내부 shell에서 RPi에 SSH로 접속이 가능한 상태가 되었습니다. 이제는 HA의 configuration.yaml파일을 아래와 같이 편집합니다. 앞서서 -o StrictHostKeyChecking=accept-new 옵션을 통해 'Permanently added '192.168.0.136' (ECDSA) to the list of known hosts.' 상태를 미리 확인해 놓아야 아래 명령이 작동함에 유의해야 합니다. 아니면 왜 작동이 안될까 고민하는 시간이 늘어납니다. 

shell_command: 
  reboot_volumio: ssh -i /config/.ssh/id_rsa volumio@192.168.0.136 'sudo reboot'

물론, 위와 같이 복잡하게 구성하지 않고 Volumio에서 자동 끄기를 설정하고, 스마트플러그를 사용하여 전원 제어를 하면 더 간단하게 구성이 가능하고 안 쓸 때 꺼지므로 전기도 절약이 되는 효과도 누릴 수 있겠습니다. 

끝으로, 또 다른 7인치 RPi의 모니터 화면을 끄기 위한 shell 명령도 아래에 나열해 봅니다. 사람이 움직일 때 Home Assistant에서 7인치 모니터를 잠시 켜도록 하기 위해 필요한 명령어 입니다. 세번째 명령은 밤에는 아예 끄기 위한 것이고, 아침에는 스마트플러그가 작동하여 전원을 켭니다. 

shell_command:
  turn_off_screen: ssh -i /config/.ssh/id_rsa pi@192.168.0.116 'sudo vcgencmd display_power 0'
  turn_on_screen: ssh -i /config/.ssh/id_rsa pi@192.168.0.116 'sudo vcgencmd display_power 1'
  turn_off_rpi: ssh -i /config/.ssh/id_rsa pi@192.168.0.116 'sudo shutdown -h now'

덧글

댓글 입력 영역


통계 위젯 (블랙)

08
56
586385