🏠: sbc

Настройка пульта для встроенного ИК-датчика Orange Pi

Дано: Orange Pi PC Plus с установленным LibreELEC 11, которым хотелось бы управлять с помощью пульта. Инфракрасный приёмник у Orange Pi имеется, поэтому нужно просто научить систему понимать с этого пульта сигналы.

Прежде всего нужно купить какой-нибудь пульт или взять уже имеющийся, у которого есть кнопки стрелок, старт/пауза, стоп, ОК и тому подобные, чтобы можно было нормально управлять медиацентром. Я купил пульт для телевизора Supra RS41-MOUSE за 200 рублей.

Заходим по SSH в систему. В инструкции по настройке пультов сначала рекомендуют подбирать совместимые конфигурации из списка по пути /usr/lib/udev/rc_keymaps, но их там полторы сотни и нет ничего похожего по названию, так что я не стал возиться, а сразу перешёл к созданию собственной конфигурации, описанному в разделе Advanced.

Выводим список поддерживаемых протоколов управления (supported kernel protocols):

OrangePiPCPlus:~ # ir-keytable
Found /sys/class/rc/rc0/ with:
        Name: sunxi-ir
        Driver: sunxi-ir
        Default keymap: rc-empty
        Input device: /dev/input/event0
        LIRC device: /dev/lirc0
        Attached BPF protocols:
        Supported kernel protocols: lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp imon rc-mm
        Enabled kernel protocols: lirc
        bus: 25, vendor/product: 0001:0001, version: 0x0100
        Repeat delay = 500 ms, repeat period = 125 ms

Нужно подобрать протокол, с которым совместим пульт. В моём случае подошёл nec, после включения которого в консоли начали отображаться коды кнопок при их нажатии на пульте:

OrangePiPCPlus:~ # ir-keytable -p nec -t
Protocols changed to nec
Testing events. Please, press CTRL-C to abort.
1018.929441: lirc protocol(necx): scancode = 0x710205
1018.984459: lirc protocol(necx): scancode = 0x710205 repeat
1021.562363: lirc protocol(necx): scancode = 0x710205
1024.293455: lirc protocol(necx): scancode = 0x710204
1024.348472: lirc protocol(necx): scancode = 0x710204 repeat
1028.355072: lirc protocol(necx): scancode = 0x710268
1028.410087: lirc protocol(necx): scancode = 0x710268 repeat
1028.517783: lirc protocol(necx): scancode = 0x710268 repeat
1030.043425: lirc protocol(necx): scancode = 0x710262
1030.098426: lirc protocol(necx): scancode = 0x710262 repeat

Отлично, теперь нужно нарисовать карту кнопок (keymap), где прописывается протокол пульта и соответствие кодов кнопок с их функциями. Список функций можно посмотреть с помощью команды irrecord -l | grep ^KEY или в секции <remote device="devinput"> файла /usr/share/kodi/system/Lircmap.xml.

В итоге у меня получилась конфигурация, приведённая ниже. Закомментированы кнопки, к которым я не нашёл близкой функции, а кнопка POWER была чуть позже изменена на ENTER, потому что одноплатник выключался, но включить его потом с пульта было нельзя.

# table supra_rs41, type: nec
# 0x710202 KEY_POWER
0x710202 KEY_ENTER
# 0x71020f source
0x710220 KEY_RED
0x710234 KEY_GREEN
0x71022b KEY_YELLOW
0x71022c KEY_BLUE
0x710227 KEY_MUTE
0x710225 KEY_ZOOM
# 0x710200 freeze
0x710228 KEY_TEXT
0x710203 KEY_FAVORITES
0x710232 KEY_SUBTITLE
0x710240 KEY_AUDIO
0x710255 KEY_RECORD
0x710226 KEY_REWIND
0x71021e KEY_FORWARD
0x710239 KEY_PREVIOUS
0x710213 KEY_NEXT
0x71021a KEY_PLAY
0x710201 KEY_STOP
0x710260 KEY_UP
0x710261 KEY_DOWN
0x710265 KEY_LEFT
0x710262 KEY_RIGHT
0x710268 KEY_ENTER
0x71022d KEY_MENU
0x71021f KEY_ESC
0x710207 KEY_VOLUMEUP
0x71020b KEY_VOLUMEDOWN
0x710222 KEY_HOME
# 0x710221 mouse
0x710212 KEY_CHANNELUP
0x710210 KEY_CHANNELDOWN
0x710204 KEY_1
0x710205 KEY_2
0x710206 KEY_3
0x710208 KEY_4
0x710209 KEY_5
0x71020a KEY_6
0x71020c KEY_7
0x71020d KEY_8
0x71020e KEY_9
0x710211 KEY_0
0x710223 KEY_DISPLAYTOGGLE
# 0x710250 return

Теперь надо создать файл с нашей картой кнопок и запустить его:

OrangePiPCPlus:~ # nano /storage/.config/rc_keymaps/supra_rs41
OrangePiPCPlus:~ # ir-keytable -c -w /storage/.config/rc_keymaps/supra_rs41
Read supra_rs41 table
Old keytable cleared
Wrote 39 keycode(s) to driver
Protocols changed to nec

Пульт сразу же начинает работать. Осталось добавить эту конфигурацию в автозагрузку:

OrangePiPCPlus:~ # echo "* * supra_rs41" > /storage/.config/rc_maps.cfg

Удаление рекламы на уровне сети

Обнаружил замечательный проект — Pi-hole, который служит фильтром рекламы и трекеров телеметрии. Это микросервер, который нужно на роутере указывать как DNS для клиентов DHCP, или, в случае статических адресов, указывать Pi-hole как DNS непосредственно на клиентах. Если роутер не умеет задавать DNS для динамических клиентов, то Pi-hole может взять на себя роль и DHCP-сервера.

Я сделал тестовую виртуальную машину с этим сервисом и прицепил её к роутеру как DNS, в результате на всех мобильных устройствах пропала реклама из приложений.

Ставится Pi-hole элементарно, у него есть красивый веб-интерфейс со статистикой и настройками.

Главная панель Журнал запросов

Идеальное применение для маленького дешёвого одноплатника, типа Orange Pi Zero, так как сервис нетребователен к ресурсам.

Переехал на новый сервер

Полторы недели назад наконец-то перенёс свой сайт на новый сервер. «Сервер» — это звучит гордо: это такой же, что и раньше, размером с сигаретную пачку пластиковый корпус, в котором заключена маленькая печатная плата. Тем не менее, это полноценный сервер, чему я не перестаю удивляться.

Модель — Orange Pi PC 2, от предыдущей модели с почти таким же названием (Orange Pi PC Plus) он отличается более мощным процессором, гигабитным сетевым интерфейсом и отсутствием wi-fi, который мне и не нужен в данном случае.

Orange Pi PC 2

С середины сентября, то есть, со времени, как он доехал ко мне из Китая, я не мог дождаться от него стабильной работы — я пробовал дистрибутив за дистрибутивом, но он перезагружался во время установки программ, мог вообще не запускаться — в общем, ни о каком разумном применении речь не шла. Работала, конечно, какая-то версия полугодичной давности, но нужно было заморозить версию ядра и не обновлять его совсем, при первом же обновлении начинались проблемы — это меня совершенно не устраивало. Я уже начал жалеть, что купил эту плату, и отложил переезд на неопределённый срок. Выяснилось, что сейчас нужно сначала узнать, поддерживается ли железка какой-либо из операционных систем, прежде чем её покупать. Раньше как-то само собой подразумевалось, что есть аппарат — а софт под него найдётся, теперь это неверно: железка может выйти на рынок не поддерживаемая вообще ничем, то есть, хороший софт сейчас важнее хорошего железа.

Несколько недель я вообще не трогал плату, устав наблюдать внезапные перезагрузки. Тем временем, ядро Linux обновлялось, вбирая в себя поддержку всё новых и новых устройств и избавляясь от ошибок, а ребята из Armbian постоянно допиливали свой дистрибутив. Где-то в начале ноября я решил попробовать новую сборку Armbian — и с удивлением заметил, что перезагрузки прекратились. Выждав примерно неделю, установив несколько обновлений системы и убедившись, что всё работает стабильно, я перевёз сайт на новый одноплатник.

Нужно сказать, что на этом компьютере и сейчас всё небезоблачно — например, выключить его командой shutdown из консоли вообще невозможно, только выдёргиванием из розетки, а из-за лицензионных ограничений драйверы под Linux для видеоускорителя Mali-450 могут вообще никогда не увидеть свет, но для моих целей это не нужно, так что я доволен результатом. Из дополнительных плюсов — процессор меньше греется. Безо всякого охлаждения, температура процессора в покое 33-40°, на старом сервере было 44-50°.

Также, я поменял страничку мониторинга — eZ Server Monitor заменил на phpSysInfo, описанный в предыдущей публикации, потому что он умеет определять имя процессора, в отличие от предшественника, пишущего «нет данных». А ещё у него есть мобильное приложение для телефона, непонятно зачем сделанное, но сам по себе факт забавный. Вот как это выглядит:

phpSysInfo

Наконец-то

Хорошие новости — появились более-менее стабильные сборки Armbian на свежем ядре для моего нового сервера Orange Pi PC 2. Красноглазие продолжается!

First stable test images (CLI or desktop) with a modern #64bit kernel 4.13.5 for H5 based #OrangepiPC2
https://t.co/5LTv523zaS #docker #iot pic.twitter.com/y6KZJkD7ZU
— armbian (@armbian) October 9, 2017

https://twitter.com/armbian/status/917440345880834053

Замена медиаплеера

Купил ещё один Raspberry Pi 3 для замены своего старого плеера ASUS O!Play AIR HDP-R3. Требования — воспроизведение файлов с сетевого хранилища, эфирные телеканалы, Youtube.

Raspberry Pi 3 с пультом управления

Самое очевидное решение — дистрибутивы на основе Kodi, такие как OpenELEC или LibreELEC. Загвоздка была только в ТВ, так как мой провайдер предоставляет ТВ через smotreshka.tv, которую никак нельзя прикрутить к OpenELEC, зато есть приложение для Андроида. Я ставил Андроид на Raspberry Pi, но работает он медленно и нестабильно — пока не появится официальный дистрибутив, заниматься подобной установкой не стоит.

Интерфейс LibreELEC 7 на телевизоре

Для LibreELEC нужен плейлист .m3u, который можно загрузить в плагин IPTV Simple PVR Client, туда же можно загрузить и логотипы каналов с телепрограммой. В интернете есть много бесплатных плейлистов, но они все сегодня работают, а завтра нет, поэтому я нашёл сайт edem.tv, где полторы сотни каналов стоят 1$ в месяц. К слову, я за антенну плачу 85 рублей в месяц, так что если всё будет работать нормально (а оно пока так и работает), буду отказываться от антенны. Каналы высокой чёткости занимают полосу примерно в 1,5 МБайт/сек.

График на роутере во время воспроизведения HD-канала

Также, у этой штуки есть веб-интерфейс, а ещё ей можно управлять со смартфона. Официальное приложение называется Kore, но есть ещё куча разных управлялок, в том числе платный пульт Yatse, который умеет транслировать выбранный на смартфоне файл или видео с Youtube прямо на телевизор, передавая его на плеер.

Веб-интерфейс LibreELEC 7