#заметка дня
Продолжаем эпопею про написание пульта для телевизора на Flutter.
Мы с вами уже умеем верстать виджеты, находить телевизор широковещательным сообщением, выбирать его, открывать и закрывать на нём приложения и знаем, как искать их идентификаторы.
Потихоньку подбираемся к самому главному: как, собственно, посылать команды, точнее, нажатия кнопок.
А делается это довольно просто.
1. Постучались на WebSocket API, передав название приложения. Почему-то в моём случае стучаться пришлось на secure-вариант (ws vs wss, это как http vs https), разрешив использование самоподписанных сертификатов (потом расскажу, что не так).
2. Телевизор спросит разрешение на удалённое управление. И вот тут придётся подтверждать с пульта или джойстика на телевизоре, других вариантов нет. В ответ будет прислан токен. Чтобы больше не спрашивал — все дальнейшие запросы должны содержать в себе идентификатор приложения и токен, собственно. Как параметры запроса:
3. Формируем команду, на которую, естественно, опять нет никакой документации. Но когда это нам мешало? Копаемся в issues легендарной (в узком кругу) библиотеки Samsungctl, находим нужный формат.
4. Отправляем.
5. ...
6. Пищим от восторга.
На этом месте будет небольшая ода Джаваскрипту: нет на свете языка, который бы позволил быстрее настряпать всякие тестовые куски кода, вне зависимости от того, нужен вам UI, или нет. Ну, может, Python что-то способен противопоставить. Тяп-ляп и готов код, чтобы быстро проверить теорию или соответствие стандарта вашему телевизору: https://gist.github.com/bekharsky/80fce4263304eedcec7a46045b1a0ebd
Представьте, как было бы обидно, написать это всё на Dart и обнаружить, что мой телевизор старее, чем нужно. Впрочем, там не сильно сложнее, сделаю сегодня.
И посоветуйте, кто чем вебсокеты отлаживает. Что-нибудь вроде Postman, но не Postman.
К слову, если у кого-нибудь есть телевизоры Samsung и кому не лень, проверьте код выше (он просто выключает звук) и напишите модель в комментарии, пожалуйста (как узнать модель — смотрите ссылку в первых словах поста, там про API телевизора). Это мне потом очень поможет :)
Удачи в ваших пет-проектах, котаны.
P. S. если кому интересно, вот тут человек на Go автоматизирует браузер телевизора, чтобы дашборды Grafana запустить. Целый кладезь команд и подсказок. Красивое: https://gist.github.com/freman/8d98742de09d476c4d3d9e5d55f9db63
#flutter #dart #websockets
Продолжаем эпопею про написание пульта для телевизора на Flutter.
Мы с вами уже умеем верстать виджеты, находить телевизор широковещательным сообщением, выбирать его, открывать и закрывать на нём приложения и знаем, как искать их идентификаторы.
Потихоньку подбираемся к самому главному: как, собственно, посылать команды, точнее, нажатия кнопок.
А делается это довольно просто.
1. Постучались на WebSocket API, передав название приложения. Почему-то в моём случае стучаться пришлось на secure-вариант (ws vs wss, это как http vs https), разрешив использование самоподписанных сертификатов (потом расскажу, что не так).
2. Телевизор спросит разрешение на удалённое управление. И вот тут придётся подтверждать с пульта или джойстика на телевизоре, других вариантов нет. В ответ будет прислан токен. Чтобы больше не спрашивал — все дальнейшие запросы должны содержать в себе идентификатор приложения и токен, собственно. Как параметры запроса:
?name=xxx&token=yyy
.3. Формируем команду, на которую, естественно, опять нет никакой документации. Но когда это нам мешало? Копаемся в issues легендарной (в узком кругу) библиотеки Samsungctl, находим нужный формат.
4. Отправляем.
5. ...
6. Пищим от восторга.
На этом месте будет небольшая ода Джаваскрипту: нет на свете языка, который бы позволил быстрее настряпать всякие тестовые куски кода, вне зависимости от того, нужен вам UI, или нет. Ну, может, Python что-то способен противопоставить. Тяп-ляп и готов код, чтобы быстро проверить теорию или соответствие стандарта вашему телевизору: https://gist.github.com/bekharsky/80fce4263304eedcec7a46045b1a0ebd
Представьте, как было бы обидно, написать это всё на Dart и обнаружить, что мой телевизор старее, чем нужно. Впрочем, там не сильно сложнее, сделаю сегодня.
И посоветуйте, кто чем вебсокеты отлаживает. Что-нибудь вроде Postman, но не Postman.
К слову, если у кого-нибудь есть телевизоры Samsung и кому не лень, проверьте код выше (он просто выключает звук) и напишите модель в комментарии, пожалуйста (как узнать модель — смотрите ссылку в первых словах поста, там про API телевизора). Это мне потом очень поможет :)
Удачи в ваших пет-проектах, котаны.
P. S. если кому интересно, вот тут человек на Go автоматизирует браузер телевизора, чтобы дашборды Grafana запустить. Целый кладезь команд и подсказок. Красивое: https://gist.github.com/freman/8d98742de09d476c4d3d9e5d55f9db63
#flutter #dart #websockets
❤11👍2
#инструмент дня
📦 Что это такое?
По сути, это просто WebSocket-клиент, но с «магией»: автоматические переподключения, буферизация сообщений при обрыве, устойчивость к сбоям — и всё это без лишнего кода.
💬 Как выразился автор:
🚀 Особенности:
- Поддержка в браузере и Node.js
- Нативное API (`onmessage`,
- Работает с любым WebSocket-сервером (не только с PartyKit)
- Встроенные переподключения и буферизация
- Есть React-хуки
- Весит всего около 2 КБ
🛠 Пример:
📈 Уже более 100K скачиваний в неделю.
🔗 Подробнее и установка:
https://www.npmjs.com/package/partysocket
Буду пробовать в следующем #проект-е дня.
#websockets
partysocket
— это миниатюрная (всего ~2 КБ!) обёртка над WebSocket, которая делает их использование гораздо приятнее.📦 Что это такое?
По сути, это просто WebSocket-клиент, но с «магией»: автоматические переподключения, буферизация сообщений при обрыве, устойчивость к сбоям — и всё это без лишнего кода.
💬 Как выразился автор:
"A tiny abstraction (like, 2kb) on top of websockets that adds reconnections/buffering/resilience + optional React hooks. Doesn’t even need PartyKit or Cloudflare!"
🚀 Особенности:
- Поддержка в браузере и Node.js
- Нативное API (`onmessage`,
send
, onopen
, и т.д.)- Работает с любым WebSocket-сервером (не только с PartyKit)
- Встроенные переподключения и буферизация
- Есть React-хуки
- Весит всего около 2 КБ
🛠 Пример:
import { PartySocket } from "partysocket";
const socket = new PartySocket({
host: "example.com",
room: "main-room", // опционально — удобно для namespace'ов
});
socket.addEventListener("message", (evt) => {
console.log("📨", evt.data);
});
socket.send("Hello, world!");
📈 Уже более 100K скачиваний в неделю.
🔗 Подробнее и установка:
https://www.npmjs.com/package/partysocket
Буду пробовать в следующем #проект-е дня.
#websockets
👍30❤6🫡2