Może komuś się przyda moje rozwiązanie ( i AI). Bawię się Voice Assistant z lokalnym asystentem konwersacji. Mam TV LG webOS i chodziło o zmianę programów poleceniem głosowym. To wydaje się przydatne, bo skakanie P+/P- lub pamiętanie numerów kanałow jest kłopotliwe.
Po kolei.
Wpisana sentencja w custom_sentences/pl:
TvSetChannel:
data:
- sentences:
- "włącz program {channel}"
- "przełącz na program {channel}"
- "zmień program na {channel}"
- "przełącz program na {channel}"
- "zmień na program {channel}"
Słowo “program” jest o tyle istotne, że łatwo odczytane przez STT, bo np. słowo “kanał” asystent mylił z “Canal +”
i koniecznie lista kanałów (tutaj tylko fragment)
lists:
channel:
values:
- in: "TV Toruń"
out: "TV Torun HD"
- in: "TVP1"
out: "TVP1 HD"
- in: "TVP 1"
out: "TVP1 HD"
- in: "Jedynkę"
out: "TVP1 HD"
- in: "TVP2"
out: "TVP2 HD"
- in: "TVP 2"
out: "TVP2 HD"
- in: "Dwójkę"
out: "TVP2 HD"
- in: "TVN"
out: "TVN"
- in: "TVN24"
out: "TVN 24 HD"
- in: "TVN 24"
out: "TVN 24 HD"
- in: "TVN24 bis"
out: "TVN 24 BIS HD"
- in: "TVN 24 bis"
out: "TVN 24 BIS HD"
- in: "TVN 7"
out: "TVN 7"
- in: "POLSAT"
out: "POLSAT HD"
- in: "POLSAT 2"
out: "POLSAT 2 HD"
- in: "POLSAT NEWS"
out: "POLSAT NEWS HD"
- in: "POLSAT NEWS "
out: "POLSAT NEWS 2 HD"
Generalnie chodzi o to, że TV ma zapisane kanały w różny sposób, w większości przypadków z “HD” na końcu i po co to mówić. Tutaj zresztą można sobie wpisać swoje nazwy. Nazwa out: xxx musi być dokładnie jak w TV. To można podejrzeć za pomocą narzędzi deweloperskich i wyświetleniu stanu TV, gdzie jest media_title. Ale chyba to co wyświetla się na TV jest też OK.
source_list:
- Accuweather
- Amazon Alexa
- Apple TV
- Apps
- CANAL+
- Copilot
- Disney+
- Dostępność
- HBO Max
- HDMI 2
- HDMI 3
- HDMI 4
- Home Hub
- Kamera
- LG Gallery+
- LG Gaming Portal
- Live TV
- "MEGOGO: TV, Filmy, Sport"
- Multi View
- Netflix
- Odtwarzacz multimedialny
- Prime Video
- Przeglądarka
- Rakuten TV
- SWEET.TV
- SkyShowtime
- Sport
- Spotify - Muzyka i podcasty
- Yamaha Odtwarzacz DVD
- YouTube
- cda.pl
volume_level: 0.06
is_volume_muted: false
media_content_type: channel
media_title: Polsat News HD
source: Live TV
sound_output: tv_external_speaker
assumed_state: true
device_class: tv
entity_picture: >-
/api/media_player_proxy/media_player.lg_webos_tv_55qned86a6a_beufljp?token=6ef4448946ebe3c8eadaa33fb168868ec34a7fe77e2a6354fa6986e309921a29&cache=e46683248a6957df
friendly_name: LG webOS TV 55QNED86A6A.BEUFLJP
supported_features: 24381
Następnie wpis w intent_script.yaml:
TvSetChannel:
speech:
text: >-
{% set ch = channel | default('', true) | string | trim %}
{% if ch %} Bardzo proszę. {% else %} Nie jestem pewien, o jaki kanał chodzi. Nie wykonuję akcji. {% endif %}
action:
service: script.tv_set_channel
data:
channel: "{{ channel | string | trim }}"
I sam skrypt, w moim wypadku napisany przez AI. Jest tutaj czyszczenie ze śmieci odebranego tekstu. To wynik, prób gdzie były kłopoty z odpowiednim jego działaniem. Jednak myślę, że można by z tego framgemntu zrezygnować.
tv_set_channel:
alias: "Ustaw kanał TV (LG webOS)"
mode: restart
sequence:
- variables:
spoken: >-
{{ (channel
if channel is defined else media_content_id
if media_content_id is defined else '') | string }}
cleaned: >-
{{ spoken
| replace('“','"') | replace('”','"')
| replace('„','"') | replace('’',"'")
| trim('" ')
| regex_replace('^[\\.,;:!\\s]+','')
| regex_replace('[\\s\\.,;:!]+$','')
}}
- service: media_player.play_media
target:
entity_id: media_player.lg_webos_tv_55qned86a6a_beufljp
data:
media_content_type: channel
media_content_id: "{{ cleaned }}"
Działa to dobrze. Radzi sobie z programami gdzie nazwy polskie są mieszane z angielską wymową np. “Polsat news” , czy mieszany tekst z cyfrą np.: “TVP 1”. Pewnie dałoby się zrezygnować całkowicie z osobnego skryptu, ale piszę Wam jak u mnie to jest rozwiązane i działa. I jeszcze jedno, mam zrobioną automatyzacje, która wycisza TV jak urządzenia voice Assistant przechodzi w tryb słuchania komendy. To poprawia skuteczność rozpoznawania mowy.
