I slightly altered the operation of the sensor for games by keywords, as I encountered a false trigger of the sensor for games when watching YouTube. On YouTube, keywords can match keywords for games and then when watching a game on YouTube, the game sensor will work. For example, keywords for games contain such words.
Halo Infinite|4 Engine|God of War|Forza Horizon
We launch YouTube with the game Halo Infinite and the game sensor will work for us, since the auxiliary element for the game has the keyword Halo Infinite. If we launch an online movie, the sensor game will work, although the game is not actually running.
What kind of content and where did it come from? Content is an auxiliary element text for keywords for content, everything that you watch through the browser, for example online movies, TV series, YouTube. This is how keywords for content look like
online|YouTube
Below is an example of a sensor that has a game check != content == ‘on’. If I watch YouTube or online movies and the keywords of the content match the keywords for the games, then the sensor game will not work
Note
ignorecase=True - ignoring the case comparison
ignorecase=False - don’t ignore the case comparison
games_kws - keywords for games
content_kws - keywords for content
Below is an example of a sensor for a game that has a check. If I watch YouTube or online movies and the keywords of the content match the keywords for the games, then the sensor game will not work
{% if game == True and content == False %} on
sensor:
- platform: template
sensors:
hassagent_pc_livingroom_running_game:
friendly_name: "Living room: Computer. Game"
icon_template: mdi:google-controller
value_template: >
{% set activewindow = states("sensor.pc_livingroom_activewindow") %}
{% set games_kws = states("input_text.pc_livingroom_games_keywords") %}
{% set content_kws = states("input_text.pc_livingroom_content_keywords") %}
{% set game = activewindow | string is search(find=games_kws, ignorecase=False) %}
{% set content = activewindow | string is search(find=content_kws, ignorecase=False) %}
{% if game == True and content == False %} on
{% else %} off
{% endif %}
Note that the template uses ignorecase=False\True. Why is this necessary and how does it work?
ignorecase is used to enable or disable case checking in words. We don’t always need a keyword search to be conducted for any case in words, but we need a keyword search to be conducted for a specific word and with a specific case. It all depends on the situation. I will give examples below
ignorecase=False - do not ignore the case comparison. The search will be case-sensitive and if the active sensor has HALO INFINITE, the word will not be detected, and if the active sensor has Halo Infinite, the word will be detected
Halo Infinite|4 Engine|God of War|Forza Horizon
ignorecase=True - ignore the case comparison. The search will be case-insensitive and if the active sensor has HALO INFINITY\Halo Infinity\HaLO INFINITE, the word will be detected regardless of which case it is specified in the keywords
HaLO INFINITE|4 EnGIne|God OF War|FORZa HoRIzon
To check the operation of ignorecase, you can use the options below
If we need to display a word instead of True\False
{{ 'HALO Infinite' | regex_findall("Halo Infinite") }}
{{ 'HALO Infinite' | regex_findall("HALO Infinite") }}
{{ 'HALO Infinite' | regex_findall("Halo Infinite", ignorecase=True) }}
{{ 'HALO Infinite' | regex_findall("Halo Infinite", ignorecase=False) }}
If we need to display True\False instead of the word
{{ 'HALO Infinite' | string is search("Halo Infinite") }}
{{ 'HALO Infinite' | string is search("HALO Infinite") }}
{{ 'HALO Infinite' | string is search(find="Halo Infinite", ignorecase=True) }}
{{ 'HALO Infinite' | string is search(find="Halo Infinite", ignorecase=False) }}
I will be glad if you offer your own version of the sensor for working with keywords
Текст на русском (Text in Russian)
Я не много переделал работу сенсора для игр по ключевым словам, так как столкнулся с ложным срабатыванием сенсора для игр при просмотре YouTube. На YouTube ключевые слова могут совпадать с ключевыми словами для игр и тогда при просмотре игры на YouTube сработает сенсор игра. Например в ключевых словах для игр указаны такие слова.
Halo Infinite|4 Engine|God of War|Forza Horizon
Запускаем YouTube с игрой Halo Infinite и у нас сработает сенсор игра, так как во вспомогательном элементе для игры имеется ключевое слово Halo Infinite. Если запустим онлайн фильм, то сработает сенсор игра, хотя игра не запущена в действительности.
Что за контент и откуда он взялся? Контент это вспомогательный элемент текст для ключевых слов для контента, все что смотрите через браузер, например онлайн фильмы, сериалы, YouTube. Вот так выглядят ключевые слова для контента
онлайн|YouTube
Примечание
ignorecase=True - игнорируем сравнение регистра
ignorecase=False - не игнорируем сравнение регистра
games_kws - ключевые слова для игр
content_kws - ключевые слова для контента
Ниже пример сенсора для игры который имеет проверку. Если смотрю YouTube или онлайн кино и ключевые слова контента совпадают с ключевыми словами для игр, то сенсор игра не сработает
{% if game == True and content == False %} on
sensor:
- platform: template
sensors:
hassagent_pc_livingroom_running_game:
friendly_name: "Гостиная: Компьютер. Игра"
icon_template: mdi:google-controller
value_template: >
{% set activewindow = states("sensor.pc_livingroom_activewindow") %}
{% set games_kws = states("input_text.pc_livingroom_games_keywords") %}
{% set content_kws = states("input_text.pc_livingroom_content_keywords") %}
{% set game = activewindow | string is search(find=games_kws, ignorecase=False) %}
{% set content = activewindow | string is search(find=content_kws, ignorecase=False) %}
{% if game == True and content == False %} on
{% else %} off
{% endif %}
Обратите внимание, что в шаблоне используется ignorecase=False\True. Зачем это нужно и как оно работает?
ignorecase используется для включения или выключения проверки регистра в словах. Не всегда нам нужно, чтобы поиск по ключевым словам велся на любой регистр в словах, а нужно, чтобы поиск по ключевым словам велся на конкретное слово и с конкретным регистром. Все зависит от ситуации. Ниже приведу примеры
ignorecase=False - не игнорируем сравнение регистра. Поиск будет с соблюдением регистра и если в активном сенсоре будет HALO INFINITE, то слово не будет обнаружено, а если активном сенсоре будет Halo Infinite, то слово будет обнаружено
Halo Infinite|4 Engine|God of War|Forza Horizon
ignorecase=True - игнорируем сравнение регистра. Поиск будет без соблюдения регистра и если в активном сенсоре будет HALO INFINITE\Halo Infinite\HaLO INFINITE, то слово будет обнаружено независимо в каком регистре оно указано в ключевых словах
HaLO INFINITE|4 EnGIne|God OF War|FORZa HoRIzon
Для проверки работы ignorecase можно использовать варианты ниже
Если нам нужно отображать слово вместо True\False
{{ 'HALO Infinite' | regex_findall("Halo Infinite") }}
{{ 'HALO Infinite' | regex_findall("HALO Infinite") }}
{{ 'HALO Infinite' | regex_findall("Halo Infinite", ignorecase=True) }}
{{ 'HALO Infinite' | regex_findall("Halo Infinite", ignorecase=False) }}
Если нам нужно отображать True\False вместо слова
{{ 'HALO Infinite' | string is search("Halo Infinite") }}
{{ 'HALO Infinite' | string is search("HALO Infinite") }}
{{ 'HALO Infinite' | string is search(find="Halo Infinite", ignorecase=True) }}
{{ 'HALO Infinite' | string is search(find="Halo Infinite", ignorecase=False) }}
Буду рад, если вы предложите свой вариант сенсора по работе с ключевыми словами