{"id":8383,"date":"2024-10-01T11:40:53","date_gmt":"2024-10-01T02:40:53","guid":{"rendered":"https:\/\/hasu0707.duckdns.org\/blog\/?p=8383"},"modified":"2024-10-01T11:40:53","modified_gmt":"2024-10-01T02:40:53","slug":"tts-bluetooth-speaker-for-home-assistant","status":"publish","type":"post","link":"https:\/\/hasu0707.duckdns.org\/blog\/?p=8383","title":{"rendered":"TTS Bluetooth Speaker for Home Assistant"},"content":{"rendered":"\n<span style=\"font-family: \ub3cb\uc6c0\uccb4, \uad74\ub9bc\uccb4, \ub098\ub214\uace0\ub515\ucf54\ub529, \uad81\uc11c\uccb4; font-size: 12pt;\">\uc6d0\ubcf8: <a href=\"https:\/\/github.com\/pkozul\/ha-tts-bluetooth-speaker\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/pkozul\/ha-tts-bluetooth-speaker<\/a><br \/><br \/>\uc774 \ud504\ub85c\uc81d\ud2b8\ub294 Bluetooth \uc2a4\ud53c\ucee4\ub97c \ud1b5\ud574 TTS(\ud14d\uc2a4\ud2b8 \uc74c\uc131 \ubcc0\ud658)\ub97c \uc7ac\uc0dd\ud558\ub294 Home Assistant\uc6a9 \ubbf8\ub514\uc5b4 \ud50c\ub808\uc774\uc5b4(\uc0ac\uc6a9\uc790 \uc815\uc758 \uad6c\uc131 \uc694\uc18c)\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.<br \/><br \/>HA\uc758 Bluetooth \uc7a5\uce58 \ucd94\uc801\uae30(\uc874\uc7ac \uac10\uc9c0\uc6a9)\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0, \uc774 \ud504\ub85c\uc81d\ud2b8\ub294 \ub450 \uad6c\uc131 \uc694\uc18c\uac00 \uc6d0\ud65c\ud558\uac8c \uc791\ub3d9\ud560 \uc218 \uc788\ub3c4\ub85d \ud558\ub294 \ub300\uccb4 Bluetooth \ucd94\uc801\uae30\ub3c4 \uc81c\uacf5\ud569\ub2c8\ub2e4.<br \/><br \/>Bluetooth \ucd94\uc801\uae30\ub294 \uc9c0\uc18d\uc801\uc73c\ub85c \uc7a5\uce58\ub97c \uc2a4\uce94\ud558\uae30 \ub54c\ubb38\uc5d0 Bluetooth \uc2a4\ud53c\ucee4\uc5d0\uc11c \uc624\ub514\uc624 \uc7ac\uc0dd\uc774 \uc911\ub2e8\ub418\uac70\ub098 \uc2a4\uce94\ud558\ub294 \ub3d9\uc548 \ub04a\uae38 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc0ac\uc6a9\uc790 \uc9c0\uc815 \uad6c\uc131 \uc694\uc18c\ub294 \ud568\uaed8 \uc791\ub3d9\ud558\uc5ec \uc8fc\uc5b4\uc9c4 \uc2dc\uac04\uc5d0 \uadf8 \uc911 \ud558\ub098\ub9cc Bluetooth\uc5d0 \uc561\uc138\uc2a4\ud558\ub3c4\ub85d \ud569\ub2c8\ub2e4.<br \/><br \/>\ud750\ub984\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<br \/><br \/>&nbsp; &bull; Bluetooth \ucd94\uc801 \uad6c\uc131 \uc694\uc18c\ub294 \uc7a5\uce58\ub97c \uc9c0\uc18d\uc801\uc73c\ub85c \uc2a4\uce94\ud569\ub2c8\ub2e4(\uc874\uc7ac \uac10\uc9c0)<br \/>&nbsp; &bull; TTS \uc11c\ube44\uc2a4\uac00 Bluetooth \uc2a4\ud53c\ucee4\uc5d0\uc11c \ubb34\uc5b8\uac00\ub97c \uc7ac\uc0dd\ud558\ub3c4\ub85d \ud638\ucd9c\ub429\ub2c8\ub2e4.<br \/>&nbsp; &bull; TTS Bluetooth \uc2a4\ud53c\ucee4 \uad6c\uc131 \uc694\uc18c\uac00 Bluetooth \ucd94\uc801 \uad6c\uc131 \uc694\uc18c\ub97c \ube44\ud65c\uc131\ud654\ud569\ub2c8\ub2e4.<br \/>&nbsp; &bull; Bluetooth \ucd94\uc801 \uad6c\uc131 \uc694\uc18c\ub294 \uc2e4\ud589 \uc911\uc778 \ubaa8\ub4e0 Bluetooth \uc2a4\uce94\uc744 \uc885\ub8cc\ud569\ub2c8\ub2e4.<br \/>&nbsp; &bull; TTS \ube14\ub8e8\ud22c\uc2a4 \uc2a4\ud53c\ucee4 \uad6c\uc131 \uc694\uc18c\ub294 TTS MP3 \ud30c\uc77c\uc744 \uc7ac\uc0dd\ud569\ub2c8\ub2e4.<br \/>&nbsp; &bull; TTS Bluetooth \uc2a4\ud53c\ucee4 \uad6c\uc131 \uc694\uc18c\ub294 Bluetooth \ucd94\uc801 \uad6c\uc131 \uc694\uc18c\ub97c \ud65c\uc131\ud654\ud569\ub2c8\ub2e4.<br \/>&nbsp; &bull; Bluetooth \ucd94\uc801\uae30 \uad6c\uc131 \uc694\uc18c\ub294 \uc7a5\uce58(\uc874\uc7ac \uac10\uc9c0)\ub97c \uacc4\uc18d \uc2a4\uce94\ud569\ub2c8\ub2e4.<br \/><br \/><span style=\"font-size: 18pt;\"><strong>\uc2dc\uc791\ud558\uae30<\/strong><\/span><br \/><br \/><span style=\"font-size: 14pt;\"><strong>1) Pulse Audio(Bluetooth \uc9c0\uc6d0), MPlayer \ubc0f SoX(MP3 \uc9c0\uc6d0) \uc124\uce58<\/strong><\/span><br \/>apt-get install -y pulseaudio pulseaudio-module-bluetooth bluez mplayer sox libsox-fmt-mp3<br \/><br \/><br \/><span style=\"font-size: 14pt;\"><strong>2) 'pulse-access' \uadf8\ub8f9\uc5d0 HA \ubc0f pi \uc0ac\uc6a9\uc790 \ucd94\uac00(\ud14c\uc2a4\ud2b8\uc6a9 pi \uc0ac\uc6a9\uc790, \uc11c\ube44\uc2a4\uc6a9 homeassistant)<\/strong><\/span><br \/>adduser pi pulse-access<br \/>adduser homeassistant pulse-access<br \/><br \/><br \/><span style=\"font-size: 14pt;\"><strong>3) Pulse Audio\uc5d0 Bluetooth \uac80\uc0c9 \ucd94\uac00<\/strong><\/span><br \/><br \/>\/etc\/pulse\/system.pa \uc5d0 \ub2e4\uc74c\uc744 \ud30c\uc77c \ub9e8 \uc544\ub798\uc5d0 \ucd94\uac00\ud569\ub2c8\ub2e4.<br \/><br \/>### Bluetooth Support<br \/>.ifexists module-bluetooth-discover.so<br \/>load-module module-bluetooth-discover<br \/>.endif<br \/><br \/>#set-card-profile bluez_card.00_2F_AD_12_0D_42 a2dp_sink<br \/><br \/>\ub9c8\uc9c0\ub9c9 \ubd80\ubd84\uc740 \ube14\ub8e8\ud22c\uc2a4\uac00 \ub2e4\ub978 \ud504\ub85c\ud544\ub85c \uae30\ubcf8 \uc124\uc815\ub41c \uacbd\uc6b0\ub97c \ub300\ube44\ud574 a2dp \uc124\uc815\uc744 \uc720\uc9c0\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \ubd88\uc548\uc815\ud574 \ubcf4\uc5ec\uc11c \uc8fc\uc11d \ucc98\ub9ac\ud588\uc2b5\ub2c8\ub2e4.<br \/><br \/>\uc624\ub514\uc624\uac00 \ub04a\uae30\ub294 \uacbd\uc6b0 \uc774 \uc904\uc758 \uc8fc\uc11d \ucc98\ub9ac\ub97c \ud574\uc81c\ud558\uc138\uc694.<br \/><br \/>### Automatically suspend sinks\/sources that become idle for too long<br \/>#load-module module-suspend-on-idle<br \/><br \/><br \/><span style=\"font-size: 14pt;\"><strong>4) \uc2dc\uc791 \uc2dc Pulse Audio\ub97c \uc2e4\ud589\ud558\ub294 \uc11c\ube44\uc2a4\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.<\/strong><\/span><br \/><br \/>\ud30c\uc77c\uc744 \ub9cc\ub4e4\uace0 \/etc\/systemd\/system\/pulseaudio.service\ub2e4\uc74c\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.<br \/><br \/>[Unit]<br \/>Description=Pulse Audio<br \/><br \/>[Service]<br \/>Type=simple<br \/>Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=\/run\/dbus\/system_bus_socket<br \/>ExecStart=\/usr\/bin\/pulseaudio --system --disallow-exit --disable-shm --exit-idle-time=-1<br \/><br \/>[Install]<br \/>WantedBy=multi-user.target<br \/><br \/>\ubd80\ud305\ud560 \ub54c \uc11c\ube44\uc2a4\uac00 \uc2dc\uc791\ub418\ub3c4\ub85d \uc124\uc815\ud569\ub2c8\ub2e4.<br \/><br \/>systemctl daemon-reload<br \/>systemctl enable pulseaudio.service<br \/><br \/>Pulse \uc0ac\uc6a9\uc790\uc5d0\uac8c \ube14\ub8e8\ud22c\uc2a4 \uc778\ud130\ud398\uc774\uc2a4 \uc561\uc138\uc2a4 \uad8c\ud55c \ubd80\uc5ec<br \/><br \/>\ud3b8\uc9d1\ud558\ub2e4\/etc\/dbus-1\/system.d\/bluetooth.conf<br \/><br \/>\ub2e4\uc74c \uc904\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4:<br \/><br \/>&nbsp; &lt;policy user=\"pulse\"&gt;<br \/>&nbsp; &nbsp; &lt;allow send_destination=\"org.bluez\"\/&gt;<br \/>&nbsp; &nbsp; &lt;allow send_interface=\"org.bluez.MediaEndpoint1\"\/&gt;<br \/>&nbsp; &lt;\/policy&gt;<br \/><br \/><br \/><span style=\"font-size: 14pt;\"><strong>5) \uc2dc\uc791 \uc2dc Bluetooth \uc2a4\ud53c\ucee4\ub97c \ud398\uc5b4\ub9c1\ud558\uae30 \uc704\ud55c \uc2a4\ud06c\ub9bd\ud2b8 \uc0dd\uc131<\/strong><\/span><br \/><br \/>bluetoothctl<br \/>&nbsp; scan on<br \/>&nbsp; pair 00:2F:AD:12:0D:42<br \/>&nbsp; trust 00:2F:AD:12:0D:42<br \/>&nbsp; connect 00:2F:AD:12:0D:42<br \/>&nbsp; quit<br \/><br \/>\ud30c\uc77c\uc744 \ub9cc\ub4e4\uace0 \/var\/hass\/scripts\/pair_bluetooth.sh \uc5d0 \ub2e4\uc74c\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4. Bluetooth \uc8fc\uc18c\ub97c Bluetooth \uc2a4\ud53c\ucee4\uc758 \uc8fc\uc18c\ub85c \ubc14\uafd4\uc57c \ud569\ub2c8\ub2e4.<br \/><br \/>#!\/bin\/bash<br \/>bluetoothctl &lt;&lt; EOF<br \/>connect 00:2F:AD:12:0D:42<br \/>EOF<br \/><br \/>\uc2a4\ud06c\ub9bd\ud2b8\uc5d0 \ub300\ud55c \uc2e4\ud589 \uad8c\ud55c\uc744 \ubd80\uc5ec\ud558\uc138\uc694.<br \/>chmod a+x \/var\/hass\/scripts\/pair_bluetooth.sh<br \/><br \/>\uc5d0\uc11c \/etc\/rc.local \uc2dc\uc791 \uc2dc \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud558\ub824\uba74 \ub2e4\uc74c\uc744 \ud30c\uc77c \ub05d\uc5d0 \ucd94\uac00\ud558\uc138\uc694.<br \/><br \/># Pair Bluetooth devices<br \/>\/var\/hass\/scripts\/pair_bluetooth.sh<br \/><br \/>exit 0<br \/><br \/><br \/><strong><span style=\"font-size: 14pt;\">6) HA\uc5d0 TTS \ube14\ub8e8\ud22c\uc2a4 \uc2a4\ud53c\ucee4 \ucd94\uac00<\/span><\/strong><br \/><br \/>TTS Bluetooth \uc2a4\ud53c\ucee4 \uad6c\uc131 \uc694\uc18c\ub97c \ubcf5\uc0ac(\uc774 GitHub \uc800\uc7a5\uc18c\uc5d0\uc11c)\ud558\uc5ec Home Assistant \uad6c\uc131 \ub514\ub809\ud1a0\ub9ac\uc5d0 \uc800\uc7a5\ud569\ub2c8\ub2e4.<br \/>custom_components\/tts_bluetooth_speaker\/media_player.py<br \/><br \/><br \/><span style=\"font-size: 14pt;\"><strong>7) \uc120\ud0dd \uc0ac\ud56d - HA\uc5d0 (\uc0c8\ub85c\uc6b4) Bluetooth \ucd94\uc801\uae30 \ucd94\uac00<\/strong><\/span><br \/><br \/>\uc774 \ub2e8\uacc4\ub294 Bluetooth \ucd94\uc801\uae30\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0\uc5d0\ub9cc \uc801\uc6a9\ub429\ub2c8\ub2e4.<br \/>Bluetooth Tracker \uad6c\uc131 \uc694\uc18c\ub97c \ubcf5\uc0ac\ud558\uc5ec Home Assistant \uad6c\uc131 \ub514\ub809\ud1a0\ub9ac\uc5d0 \uc800\uc7a5\ud569\ub2c8\ub2e4.<br \/><br \/>custom_components\/bluetooth_tracker\/device_tracker.py<br \/><br \/><br \/><span style=\"font-size: 14pt;\"><strong>8) \uc624\ub514\uc624 \uc2f1\ud06c\uac00 \uc0ac\uc6a9 \uac00\ub2a5\ud55c\uc9c0 \ud655\uc778<\/strong><\/span><br \/><br \/>pactl list sinks<br \/><br \/>\ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\uc774 \ud45c\uc2dc\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.<br \/><br \/>Sink #1<br \/>&nbsp; &nbsp; &nbsp; &nbsp; State: SUSPENDED<br \/>&nbsp; &nbsp; &nbsp; &nbsp; Name: bluez_sink.00_2F_AD_12_0D_42.a2dp_sink<br \/><br \/>\ub300\uc2e0 headset_head_unit\uc774\ub77c\uace0 \uc801\ud600\uc788\ub294 \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 a2dp \ud504\ub85c\ud544\ub85c \uc804\ud658\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br \/><br \/>pactl set-card-profile bluez_card.00_2F_AD_12_0D_42 a2dp_sink<br \/><br \/>\ub2e4\uc2dc \ud655\uc778\ud558\uace0 a2dp\ub97c \uc0ac\uc6a9\ud558\ub294\uc9c0 \ud655\uc778\ud558\uc138\uc694.<br \/><br \/>\uba85\ub839\uc904\uc744 \uc0ac\uc6a9\ud558\uc5ec mplayer\uac00 a2dp\ub85c \uc2a4\ud2b8\ub9ac\ubc0d\ud560 \uc218 \uc788\ub294\uc9c0 \ud14c\uc2a4\ud2b8\ud569\ub2c8\ub2e4.<br \/><br \/>mplayer -ao pulse::bluez_sink.00_2F_AD_12_0D_42.a2dp_sink -channels 2 -volume 100 \/some\/mp3file.mp3<br \/><br \/><br \/><span style=\"font-size: 14pt;\"><strong>9) HA\uc5d0\uc11c \uc0ac\uc6a9\uc744 \uc2dc\uc791\ud558\uc138\uc694<\/strong><\/span><br \/><br \/>\uc774 \ub2e8\uacc4(\ub9ac\ubd80\ud305 \ud6c4)\uc5d0\ub294 HA\uc5d0\uc11c TTS Bluetooth \uc2a4\ud53c\ucee4\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.<br \/><br \/>\uc544\ub798\ub294 \uad6c\uc131 \uc694\uc18c\uac00 \uad6c\uc131\ub41c \ubc29\ubc95\uc758 \uc608\uc785\ub2c8\ub2e4. \uc2a4\ud53c\ucee4\uc758 Bluetooth \uc8fc\uc18c\ub97c \uc9c0\uc815\ud574\uc57c \ud558\uba70, \uc120\ud0dd\uc801\uc73c\ub85c volume\ub808\ubca8\uc744 \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4(0~1 \uc0ac\uc774\uc5ec\uc57c \ud568). \uc2a4\ud53c\ucee4\uac00 \uc624\ub514\uc624\uc758 \uccab \ubc88\uc9f8 \ubd80\ubd84\uc744 \uc7ac\uc0dd\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0(\uc989, \uc7ac\uc0dd \uc2dc \uccab \ubc88\uc9f8 \ub450 \ubc88\uc9f8\uac00 \ub204\ub77d\ub41c \uacbd\uc6b0) \uc120\ud0dd\uc801\uc73c\ub85c \uc6d0\ub798 TTS \uc624\ub514\uc624 hsing \ubc0f pre_silence_duration\uc635\uc158 post_silence_duration(0~60\ucd08 \uc0ac\uc774\uc5ec\uc57c \ud568)\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc77c\ubd80 \ubb34\uc74c\uc744 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. TTS \uce90\uc2dc \ub514\ub809\ud1a0\ub9ac(TTS \uad6c\uc131\uc5d0\uc11c)\ub97c \ubcc0\uacbd\ud55c \uacbd\uc6b0 cache_dir\uc5ec\uae30\ub97c \uc77c\uce58\ud558\ub3c4\ub85d \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.<br \/><br \/>media_player:<br \/>&nbsp; - platform: tts_bluetooth_speaker<br \/>&nbsp; &nbsp; address: [BLUETOOTH_ADDRESS] &nbsp; # Required - for example, 00:2F:AD:12:0D:42<br \/>&nbsp; &nbsp; volume: 0.45 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Optional - default is 0.5<br \/># &nbsp; &nbsp;pre_silence_duration: 1 &nbsp; &nbsp; &nbsp; # Optional - No. of seconds silence before the TTS (default is 0)<br \/># &nbsp; &nbsp;post_silence_duration: 0.5 &nbsp; &nbsp;# Optional - No. of seconds silence after the TTS (default is 0)<br \/># &nbsp; &nbsp;cache_dir: \/tmp\/tts &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Optional - make sure it matches the same setting in TTS config<br \/><br \/>Bluetooth \ucd94\uc801\uae30\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\ub2e4\uba74 \uc544\ub9c8\ub3c4 \uc774\ubbf8 \uc124\uc815\uc5d0 \ub2e4\uc74c\uc774 \ud3ec\ud568\ub418\uc5b4 \uc788\uc744 \uac83\uc785\ub2c8\ub2e4.<br \/><br \/>device_tracker:<br \/>&nbsp; - platform: bluetooth_tracker<br \/><br \/>\ubaa8\ub4e0 \uac83\uc774 \uc81c\ub300\ub85c \uc791\ub3d9\ud558\ub294\uc9c0 \ud14c\uc2a4\ud2b8\ud558\ub824\uba74 HA \ud504\ub7f0\ud2b8\uc5d4\ub4dc\uc5d0\uc11c \uac1c\ubc1c\uc790 \ub3c4\uad6c &gt; \uc11c\ube44\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc5ec Bluetooth \uc2a4\ud53c\ucee4\ub97c \ud1b5\ud574 TTS \uba54\uc2dc\uc9c0\ub97c \uc7ac\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br \/><br \/>{ \"entity_id\": \"media_player.tts_bluetooth_speaker\", \"message\": \"Hello\" }<br \/><br \/>\uc774\ub97c \ud14c\uc2a4\ud2b8\ud558\ub294 \ub610 \ub2e4\ub978 \ubc29\ubc95\uc740 HA\uac00 \uc2dc\uc791\ub420 \ub54c\ub9c8\ub2e4 TTS \uba54\uc2dc\uc9c0\ub97c \uc7ac\uc0dd\ud558\ub294 \uc790\ub3d9\ud654\ub97c \ucd94\uac00\ud558\ub294 \uac83\uc785\ub2c8\ub2e4.<br \/><br \/>automation:<br \/>&nbsp; - alias: Home Assistant Start<br \/>&nbsp; &nbsp; trigger:<br \/>&nbsp; &nbsp; &nbsp; platform: homeassistant<br \/>&nbsp; &nbsp; &nbsp; event: start<br \/>&nbsp; &nbsp; action:<br \/>&nbsp; &nbsp; &nbsp; - delay: '00:00:10'<br \/>&nbsp; &nbsp; &nbsp; - service: tts.google_translate_say<br \/>&nbsp; &nbsp; &nbsp; &nbsp; data:<br \/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; entity_id: media_player.tts_bluetooth_speaker<br \/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; message: 'Home Assistant has started'<br \/><\/span>\n","protected":false},"excerpt":{"rendered":"<p>\uc6d0\ubcf8: https:\/\/github.com\/pkozul\/ha-tts-bluetooth-speaker \uc774 \ud504\ub85c\uc81d\ud2b8\ub294 Bluetooth \uc2a4\ud53c\ucee4\ub97c \ud1b5\ud574 TTS(\ud14d\uc2a4\ud2b8 \uc74c\uc131 \ubcc0\ud658)\ub97c \uc7ac\uc0dd\ud558\ub294 Home Assistant\uc6a9 \ubbf8\ub514\uc5b4 \ud50c\ub808\uc774\uc5b4(\uc0ac\uc6a9\uc790 \uc815\uc758 \uad6c\uc131 \uc694\uc18c)\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. HA\uc758 Bluetooth \uc7a5\uce58 \ucd94\uc801\uae30(\uc874\uc7ac \uac10\uc9c0\uc6a9)\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0, \uc774 \ud504\ub85c\uc81d\ud2b8\ub294 \ub450 \uad6c\uc131 \uc694\uc18c\uac00 \uc6d0\ud65c\ud558\uac8c \uc791\ub3d9\ud560 \uc218 \uc788\ub3c4\ub85d \ud558\ub294 \ub300\uccb4 Bluetooth \ucd94\uc801\uae30\ub3c4 \uc81c\uacf5\ud569\ub2c8\ub2e4. Bluetooth \ucd94\uc801\uae30\ub294 \uc9c0\uc18d\uc801\uc73c\ub85c \uc7a5\uce58\ub97c \uc2a4\uce94\ud558\uae30 \ub54c\ubb38\uc5d0 Bluetooth \uc2a4\ud53c\ucee4\uc5d0\uc11c \uc624\ub514\uc624 \uc7ac\uc0dd\uc774 \uc911\ub2e8\ub418\uac70\ub098 \uc2a4\uce94\ud558\ub294 \ub3d9\uc548 \ub04a\uae38 \uc218 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[93],"tags":[],"class_list":["post-8383","post","type-post","status-publish","format-standard","hentry","category-computing_iot"],"_links":{"self":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/8383","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8383"}],"version-history":[{"count":0,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/8383\/revisions"}],"wp:attachment":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8383"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8383"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8383"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}