Новый 2024-й год: День 12: Пятница
Пятница! Первая рабочая пятница 2024-го года. В такой день хочется собрать все дела в кучу, скомкать и пнуть как футбольный мяч, чтобы летели далеко-далеко. Но это только в каком-нибудь аниме будет выглядеть красиво и обоснованно.
В реальности я бы не хотел так делать.
- Во-первых, дела — вещь нужная и полезная. При том, полезная не только для меня.
- Во-вторых, на надо «далеко-далеко». Было у меня такое в жизни. Оценил, проникся, больше не хочу.
Да и не в делах дело. Просто хочется лениться с самого утра. Хочется, но…
Для начала полез смотреть что там с говорилкой через яндекс-колонку с Алисой. Дело в том, что Home Assistance нужный текст для колонки пробрасывается, но есть две проблемы.
Проблема 1: Пробрасывается почему-то только GET-запрос, хотя воспринимается как POST. В результате, имеем ограничение по количеству знаков и часть текста режется.
А так-как GET кодируется в urlecode то кириллические символы занимают ещё больше места, а текст урезается ещё больше.
Проблема 2: Если на колонке выставлена низкая громкость, то текст оповещения будет произноситься тихо.
Всё потому, что колонка работает не локально, а из облака, однако гайды в сети описывают только локальный вариант.
Итак, устанавливаю громкость колонки с Алисой в Home Assistance перед тем, как она начнёт говорить.
Добавил вот такой блок перед блоком, который отправляет текст в колонку.
service: media_player.volume_set data: entity_id: media_player.yandex_station_ID_КОЛОНКИ_В_ХОУМ_АССИСТЕНТЕ volume_level: >- {% set ya_c_vol_current = state_attr('media_player.yandex_station_ID_КОЛОНКИ_В_ХОУМ_АССИСТЕНТЕ', 'volume_level') %} {% if ya_c_vol_current != 0.7 %} 0.7 {% else %} 0.6 {% endif %}
Проверяю какая громкость установлена сейчас, и если она не 0.7, то делаю 0.7, а если 0.7 — делаю 0.6. Это нужно для того, чтобы колонка не говорила что-нибудь типа «такая громкость уже установлена». Она это делает вслух и это бесит. Бесило…
С этим вроде всё.
Теперь разбираюсь с передачей данных в webhook Home Assistance методом POST.
Во-первых, меняю блок, который проговаривает текст.
service: media_player.play_media entity_id: media_player.yandex_station_ID_КОЛОНКИ_В_ХОУМ_АССИСТЕНТЕ data: media_content_id: "{{ trigger.data.mess }}" media_content_type: text
Во-вторых, ковыряю функцию передачи текста.
//CURL-запрос function curl_response($url, $mess) { $fields = ['mess' => $mess]; $postvars = http_build_query($fields); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, count($fields)); curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars); $result = curl_exec($ch); echo $result; curl_close($ch); }
Теперь она выглядит так. Урл выглядит как http://IP:PORT/api/webhook/ID_ВЕБХУКА
И это работает. Однако текст по прежнему ограничен в количестве знаков.
Так вот в чём дело! Сто символов!
«…Я же говорил, что место проклятое, а ты — руки кривые, руки кривые…». © Бородатый анекдот
Ну и славно! Допилил ещё проверку на дату файла с количеством приседаний. Если он менялся не сегодня, то колонка сообщит о том, что данные не обновлялись.
Пришлось повозиться с курлом и часовым поясом, но там ничего сложного.
//Получить количество приседаний function get_file($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_FILETIME, true); $result = curl_exec($curl); if ($result === false) { //Если файл не получен return false; } $timestamp = curl_getinfo($curl, CURLINFO_FILETIME); if ($timestamp != -1) { //otherwise unknown $date_now = date("d.m.Y"); $date_file = date("d.m.Y", $timestamp); if ($date_now != $date_file) { //Если файл обновлялся не сегодня return false; } } curl_close($curl); //Выдаю содержимое файла return $result; }
Зато теперь, если данные не обновлены, я просто зайду в ТГ-бота и кликну по команде /logs. Или присяду раз 20 и вкину количество в того же бота. А если колонка и после этого не сможет получить количество приседаний, то значит проблема на стороне сервера и нужно лезть разбираться.
Ну вот после такой зарядки можно и рабочий день начинать. Только сперва чаю заварить!
Обед! Правда я ничего не ем, но зато отдыхаю по полной. А перекусить и потом можно будет. Позже.
Вечер. Играю в 7d2d. Увы, но в целом не продвинулся. Разве что раздобыл оружие и боеприпасы получше. Через пару игровых дней придёт орда, а значит пора уделить время и оборонительным конструкциям. Впрочем, с этим в следующий раз.
Напишите комментарий