Новый 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. Увы, но в целом не продвинулся. Разве что раздобыл оружие и боеприпасы получше. Через пару игровых дней придёт орда, а значит пора уделить время и оборонительным конструкциям. Впрочем, с этим в следующий раз.
Напишите комментарий