본문 바로가기

홈어시스턴트 IoT

IoT 스위치로 홈어시스턴트를 통해 Volumio 재생/멈춤/종료 조작하기

굳이 이렇게까지 해야하나 싶긴 하지만, 필요에 의해 이런 저런 작업을 해보았습니다.

 

[의식의 흐름] 

  • 탁상용 스피커를 통해 영국에서 스트리밍하는 Classic FM을 듣고 싶습니다. 인터넷 라디오를 지원하는 대중적인  Volumio를 쓰기로 합니다. 
  • Volumio을 Odroid XU4에 설치하고 Wi-Fi에 연결합니다. 혹시 소리가 좋을까 싶어서 안쓰는 USB Audio 카드를 오드로이드에 연결합니다. 
  • 이제 껐다가 켰다가 해야 하는데, Volumio를 조작하려면 스마트폰이나 PC에서 로컬IP(예:192.168.1.96)로 접속해야 합니다. 그러나 전화오면 잠깐 멈추고 하는 작업들까지 그렇게 하려니 상당히 귀찮습니다. 
  • 일단 IoT 플러그를 꼽아서 오드로이드의 전원을 제어할 준비를 하고, IoT 스위치(아카라 스위치) 하나를 추가하여(연동에 필요한 Xiaomi Gateway3는 이미 보유) Play, Stop, 전원켜기/끄기를 스위치로 조작하기로 합니다.  

 

(흰색 사각형 모양이 IoT 스위치)

 

[기능] 

  • 전원켜기 - IoT 스위치를 Click합니다. 그러면, Volumio가 설치된 Odroid는 IoT 플러그(Mi Smart Plug WiFi)를 이용하여 전원을 공급합니다.
  • 전원끄기 - IoT 스위치를 더블 클릭합니다. 그러면, (그냥 꺼도 되지만)Volumio가 설치된 Odroid에 SSH로 접속해서 shutdown을 해야 하는데, 홈어시스턴트의 Shell command를 활용하고, 50초 후에는 IoT 플러그의 전원을 차단합니다. 
  • Volumio의 음악 재생과 잠시 멈춤 -  Volumio가 켜진 상태에서 IoT 스위치를 Click하면 Play와 Stop이 토글됩니다. 

 

[전원 켜기] 

  • 전원 켜는 것은 (저의 경우에는 샤오미 생태계를 이용하므로) Mi Home앱에서 바로 설정할 수 있습니다. 

 

[전원 끄기 구현 과정]

  1. 우선 오드로이드를 꺼야 합니다. 
  2. "sudo shutdown -h now"명령을 홈어시스턴트(라즈베리파이에 설치)가 보내도록 해야하는데, id와 패스워드 없이 라즈베리파이(Home Assistant, 192.168.1.154)에서 오드로이드(Volumio, 192.168.1.96)로 접속하려면 미리 작업을 해야 합니다. 
  3. 홈어시스턴트의 설치 방법(수퍼바이즈드, 도커, 코어)에 따라 조금씩 다르겠지만, 홈어시스턴트가 어느 (리눅스) 계정을 사용하여 volumio@192.168.1.96으로 접속하는 지 생각해본 후, 다음 작업을 진행합니다. 
  4. 저는 수퍼바이즈드이므로 pi아이디로 접속 후 sudo명령으로 작업을 하면 되고, 도커로 설치했다면 sudo docker exec -it homeassistant bash로 쉘에 접속해서 작업을 해야 하겠습니다.  작업 위치는 config파일들이 있는 곳인데 configuration.yaml이 있는 위치입니다.  이곳에 .ssh폴더 밑에 id_rsa를 만들 것입니다. 
  5. ssh-keygen -t rsa 명령으로 만들고 ssh-copy-id volumio@192.168.1.96을 통해 id_rsa를 전달해 놓습니다. 그러면, 이후 ssh -i [id_rsa가 있는 폴더명] volumio@192.168.1.96을 해보면 패스워드 없이 접속 가능하게 되면 성공입니다.(How to Setup SSH Passwordless Login in Linux [3 Easy Steps] (tecmint.com)
  6. 보통 처음 접속할 때 다음 메시지가 한번 나오기 때문에 yes를 해주어야 홈어시스턴트가 다음에 접속할 때 문제가 없습니다. 물론 다른 방법도 있지만 귀차니즘이 있으므로,,, 
  7. ssh -i /config/.ssh/id_rsa volumio@192.168.1.96

  8. The authenticity of host '192.168.1.96 (192.168.1.96)' can't be established.
    ECDSA key fingerprint is SHA256:QVld0ZMcRRc78fO...
    This key is not known by any other names
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
  9. 최종적으로 configuration.yaml에 다음 내용이 추가됩니다. /config는 홈어시스턴트가 볼 때의 configuration.yaml 파일이 있는 폴더 위치이고 절대 위치는 /home/pi/homeassistant와 같이 다른 장소에 있습니다(설치 방법에 따라 다름). 
  10. shell_command  volumio_turn_offsudo ssh -i /config/.ssh/id_rsa volumio@192.168.1.96 'sudo shutdown -h now'
  11. 이제 자동화 명령을 통해 shell_command를 보내고 50초 후 IoT 플러그를 끄며 다음과 같이 자동화 스크립트를 만들었습니다. 제가 타이핑하여 만든 거는 아니고, 홈어시스턴트에서 쉽게 사용할 수 있게 만들어진 UI를 통해서 하나씩 아이템과 작업을 선택하면 됩니다. 
  12. volumio:  sequence:    data: {}    data: {}      hours: 0      seconds: 50  - type: turn_off    entity_id: switch.chuangmi_m3_deba_switch  mode: single
  13.     domain: switch
  14.     device_id: 712d9be0af5c47
  15.       milliseconds: 0
  16.       minutes: 0
  17.   - delay:
  18.   - service: shell_command.volumio_turn_off
  19.   - service: rest_command.volumio_stop_music
  20.   alias: Volumio 끄기
  21. 이제 아래와 같이 자동화를 하면 끝입니다.

 

(홈어시스턴트가 제공하는 UI로 자동화하는 모습, 버튼을 더블클릭하면 미리 만들어 놓은 스크립트를 호출합니다)

 

[Volumio를 홈어시스턴트에서 제어하기] 

 

[IoT 스위치로 Volumio의 음악을 멈추었다가 다시 켜기]

  • 미리 Volumio도 Home Assistant의 기기로 추가해 놓아야 합니다. 상태를 읽을 수는 있는데 제어하는 기능은 없더라구요... 
  • 위쪽에 있는 그림에서 트리거와 동작에 대해서는 이해했다고 가정하고, 이제 조건이 필요한데요. 
  • 버튼을 한번 눌렀을 때 Volumio가 재생 중이라면, 재생을 멈추기를 해야 하기 때문입니다. 

 

(버튼을 눌렀을 때 조건을 추가해야 합니다)

 

 

  • 버튼을 눌렀을 때 대기 중이었다면, 재생을 하도록 합니다. 

 

(조건을 추가합니다. 음악을 멈춘 상태라면~) 

 

그 외 아침에 시간이 되면 자동으로 틀고, LIFE360으로 위치를 공유하는 가족들이 모두 외출하면 자동으로 끄고, 홈어시스턴트가 인식하는 스마트TV를 켜면 자동으로 멈추는 기능들은 덤(위 작업을 해냈다면 쉬운 일)입니다...

 

끝으로, 홈어시스턴트가 어렵다고 느껴지는 이유는 UI가 점점 좋아지고 있음에도 불구하고 알아야할 제반 지식들이 쏠쏠하게 필요하기 때문입니다. 하나씩 알아가면서 하면 되긴 하겠지만, 예를 들면 리눅스를 다룰 줄 알고 있는 사람보다 두 세 배의 시간이 소요될 수 있습니다.

 

개인적으로는 Supervised, Docker, Core의 세 가지 방식으로 모두 설치해 보았는데, 다 나름대로의 고충이 있었습니다. 일단, 지속적으로 업데이트를 쉽게 할 수 있는 것은 Supervised인 듯하고, 도커가 설치는 편한데 도커라서 또 알아야 할 사항들이 조금 더 생깁니다.  

 

읽어주셔서 감사합니다~