IR discrete codes / дискретные ИК коды

Как только дома появляется кроме телевизора еще что-то из оборудования – медиаплеер, ресивер – сразу хочется как-то автоматизировать рутинные операции. Противно нажимать последовательно ВКЛ/ВЫКЛ для каждого устройства

У меня стоит медиаплеер kodi на rpi, который включен всегда, что очень удобно поставил на паузу кино, продолжил смотреть на другой день. Но вот включать и выключать телевизор и ресивер почти сразу надоело.

Естественно, сразу стал задумываться над вариантами автоматизации. Благо их масса. Вообще, сначала я стал смотреть на “красивые” решения. Raspberry pi поддерживает HDMI CEC. Что по идее дает возможность управлять питанием подключенных устройств. Так как у меня и телевизор и ресивер висят на HDMI – думал, что легким движением смогу управлять с малины обоими устройствами. На деле HDMI CEC (или его поддержка) оказалось тем еще протоколом. Что-то работает, что-то – нет. Что-то не всегда. В итоге, потратив несколько вечеров, решил использовать вместе красивых работающие методы. А именно – управление через ИК.

В области ИК управления тоже есть разные варианты. Можно использовать универсальный пульт, который теоретически может по одной кнопке запускать сценарии. Можно самому сделать или купить IR бластер для lirc и управлять с rpi. Третий вариант – автономный сетевой IR бластер.

Для начала я собрал простой излучатель для lirc. Оно работает. Из неудобств могу отметить то, что не каждый осилит настройку команд (linux). и то, что внешний вид, скажем так – диайвайный.

Так что в итоге я остановился на Orvibo излучателе, который выглядит симпатично и самое главное – может управляться извне по разведанному энтузиастами протоколу.

С учетом “умного дома” сетап поулчается такой – телевизор-ресивер-kodi, рядом node-red как контроллер умности дома и в той же сети Orvibo. Кажется, успех, есть все необходимое и мы можем управлять устройствами. Но нет

Первая, и не самая страшная проблема – надо научить ИК излучатель своим пультам. Это в принципе рутинная операция. Надо сесть, и записать все коды с пультов в систему, Orvibo позволяет осуществлять запись. Далее засада посерьезнее – обычно пульты управляют состоянием устройства не абсолютно, а относительно текщуего состояния. Например ПЕРЕКЛЮЧИТЬ питание, включить СЛЕДУЮЩИЙ источник сигнала и т.п. Это удобно для пользователя – меньше кнопок, ну и текущее состояние устройства обычно пользователю очевидно.

Но вот когда дело касается автоматизации, такой подход не работает в принципе. Невозможно включить телевизор и ресивер, если мы не знаем, включены ли они в данный момент!
Сначала обдумывал сумасшедшие идеи типа “смотреть потребление питания телевизором”. Но потом внезапно наткнулся на приложение TV kill. Которое, кстати, отлично работает. Оттуда я и узнал, что существуют так называемые дискретные коды (discrete ir codes) управления. Например ВКЛЮЧИТЬ телевизор или ВЫКЛЮЧИТЬ телевизор. Это как раз, то что нужно.

Дальше пошли поиски нужных кодов для моих конкретных устройств. В этой области беда с форматами и сайтами – все страшное и недостаточно хорошо описано. Тем не менее, один из основных сайтов для поиска – Remote Central, для перевода кодов (если понадобится) я использовал IrScrunitizer.

После того, как нашел нужные коды – их надо было как-то проверить. Проблема в том, что Orvibo умеет записывать и воспроизводить сигнал, но я не нашел возможности сразу добавить (без записи) конкретный сигнал. Поэтому пришлось найти Android приложение IRplus, которое может брать коды в стандартном формате pronto и излучать. Очевидно, так образом можно теперь научить Orvibo

Пример моих кодов

TV ON
0000 006d 0026 0000 0155 00aa 0016 0015 0016 0015 0016 0040 0016 0015 0016 0015 0016 0015 0016 0014 0016 0015 0016 0040 0016 0040 0016 0015 0016 0040 0016 0040 0016 0040 0016 0040 0016 0040 0016 0015 0016 0015 0016 0040 0016 0015 0016 0015 0016 0015 0016 0040 0016 0040 0016 0040 0016 0040 0016 0015 0016 0040 0016 0040 0016 0040 0016 0014 0016 0015 0016 060b 0155 0055 0016 0e58 0155 0055 0016 00aa

TV OFF
0000 006d 0026 0000 0155 00aa 0016 0015 0016 0015 0016 0040 0016 0015 0016 0015 0016 0014 0016 0015 0016 0015 0016 0040 0016 0040 0016 0015 0016 0040 0016 0040 0016 0040 0016 0040 0016 0040 0016 0040 0016 0014 0016 0040 0016 0015 0016 0015 0016 0014 0016 0040 0016 0040 0016 0014 0016 0040 0016 0015 0016 0040 0016 0040 0016 0040 0016 0014 0016 0015 0016 060b 0155 0055 0016 0e58 0155 0055 0016 00aa

HDMI 1
0000 006d 0026 0000 0155 00aa 0016 0015 0016 0015 0016 0040 0016 0015 0016 0015 0016 0014 0016 0015 0016 0015 0016 0040 0016 0040 0016 0015 0016 0040 0016 0040 0016 0040 0016 0040 0016 0040 0016 0015 0016 0040 0016 0040 0016 0040 0016 0014 0016 0015 0016 0040 0016 0040 0016 0040 0016 0015 0016 0014 0016 0014 0016 0040 0016 0040 0016 0014 0016 0015 0016 060b 0155 0055 0016 0e58 0155 0055 0016 00aa

HDMI 2
0000 006d 0026 0000 0155 00aa 0016 0015 0016 0015 0016 0040 0016 0015 0016 0015 0016 0014 0016 0015 0016 0015 0016 0040 0016 0040 0016 0015 0016 0040 0016 0040 0016 0040 0016 0040 0016 0040 0016 0015 0016 0014 0016 0040 0016 0040 0016 0014 0016 0014 0016 0040 0016 0040 0016 0040 0016 0040 0016 0014 0016 0014 0016 0040 0016 0040 0016 0014 0016 0015 0016 060b 0155 0055 0016 0e58 0155 0055 0016 00aa

HDMI 3
0000 006d 0026 0000 0155 00aa 0016 0015 0016 0015 0016 0040 0016 0015 0016 0015 0016 0014 0016 0015 0016 0015 0016 0040 0016 0040 0016 0015 0016 0040 0016 0040 0016 0040 0016 0040 0016 0040 0016 0040 0016 0014 0016 0015 0016 0040 0016 0014 0016 0040 0016 0040 0016 0040 0016 0015 0016 0040 0016 0040 0016 0015 0016 0040 0016 0014 0016 0014 0016 0015 0016 060b 0155 0055 0016 0e58 0155 0055 0016 00aa

HDMI 4
0000 006d 0026 0000 0155 00aa 0016 0015 0016 0015 0016 0040 0016 0015 0016 0015 0016 0015 0016 0014 0016 0015 0016 0040 0016 0040 0016 0014 0016 0040 0016 0040 0016 0040 0016 0040 0016 0040 0016 0014 0016 0040 0016 0015 0016 0040 0016 0040 0016 0015 0016 0040 0016 0040 0016 0040 0016 0014 0016 0040 0016 0015 0016 0015 0016 0040 0016 0015 0016 0015 0016 060a 0155 0055 0016 0e58 0155 0055 0016 00aa

RCV OFF
0000 006d 0022 0002 0155 00aa 0016 0014 0016 003f 0016 0015 0016 003f 0016 003f 0016 003f 0016 003f 0016 0014 0016 003f 0016 0014 0016 003f 0016 0014 0016 0015 0016 0015 0016 0015 0016 003f 0016 0015 0016 003f 0016 003f 0016 003f 0016 003f 0016 0015 0016 0015 0016 0015 0016 003f 0016 0014 0016 0014 0016 0014 0016 0014 0016 003f 0016 003f 0016 003f 0016 05e6 0155 0055 0016 0e39

RCV ON
0000 006d 0022 0002 0155 00aa 0016 0014 0016 003f 0016 0014 0016 003f 0016 003f 0016 003f 0016 003f 0016 0015 0016 003f 0016 0014 0016 003f 0016 0014 0016 0014 0016 0014 0016 0014 0016 003f 0016 003f 0016 0014 0016 003f 0016 003f 0016 003f 0016 0014 0016 0015 0016 0015 0016 0015 0016 003f 0016 0015 0016 0015 0016 0015 0016 003f 0016 003f 0016 003f 0016 05e6 0155 0054 0016 0e39

RCV HDMI 1 -
0000 006D 0022 0002 0155 00AA 0015 0015 0015 0040 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 0015 0015 0040 0015 0015 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 0015 0015 0015 0015 0015 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0040 0015 0015 0015 0015 0015 05ED 0155 0055 0015 0E47

RCV HDMI 2 -
0000 006D 0022 0002 0155 00AA 0015 0015 0015 0040 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 0015 0015 0040 0015 0015 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0015 0015 0040 0015 0015 0015 0040 0015 0015 0015 0015 0015 0040 0015 0015 0015 0040 0015 0015 0015 0040 0015 0015 0015 0040 0015 0040 0015 0015 0015 0015 0015 05ED 0155 0055 0015 0E47

RCV HDMI 3 -
0000 006D 0022 0002 0155 00AA 0015 0015 0015 0040 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 0015 0015 0040 0015 0015 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0015 0015 0040 0015 0040 0015 0015 0015 0015 0015 0040 0015 0015 0015 0015 0015 0040 0015 0015 0015 0015 0015 0040 0015 0040 0015 0015 0015 0015 0015 05ED 0155 0055 0015 0E47

RCV HDMI 4 -
0000 006D 0022 0002 0155 00AA 0015 0015 0015 0040 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 0015 0015 0040 0015 0015 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0015 0015 0040 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 0015 0015 0040 0015 0015 0015 0015 0015 05ED 0155 0055 0015 0E47

https://irplus-remote.github.io/converter/rcentral.html конвертер кодов для irplus remote
http://files.remotecentral.com/library/3-1/yamaha/receiver/index.html yamaha discrete
http://www.remotecentral.com/cgi-bin/mboard/rc-touch/thread.cgi?3454 yamaha hdmi

Аркадный автомат – сборка

Итак, идея в голове оформилась, стало понятно, что надо браться за работу. Часть деталей у меня валялась уже больше года – raspbery pi & джойстики с кнопками.

Составил список закупок, дождался необходимого с алиэкспресса, остальное докупал позже.
Ключевым моментом стала покупка б/у монитора, после которого все и закрутилось.

Первый прототип. Самый лучший

Первый прототип. Самый лучший

Continue reading

Тиньков vs рокетбанк

Сегодня одновременно получил карту рокетбанка и тинькова.
Соответственно теперь могу сравнить приложения и работу обоих банков

Упаковочка рокета без сомнения симпатичнее тинькова. Но у тинькова тоже неплохая. В любом случае упаковка летит в помойку в первые пять минут.

Дизайн обеих карт никакой. Рокет не умеет делать кастомный дизайн, тинькова я что-то забыл спросить.

Приложения у обоих банков хорошие. Тиньковым я пользовался больше. В нем бесит там только одно – отсылаешь с телефона отзыв или багу, в ответ спрашивают какой у меня телефон. Сами определить платформу и модель не умеют.
У тинькова при переводе между картами карту можно сфотографировать, чтобы не вводить цифры. Это удобно. И этого нет в рокете. С другой стороны, в приложении рокета я могу логиниться отпечатком пальца (андроид), что очень радует. В тинькове этого нет. Еще тиньков умеет зашивать карту в телефон через NFC, но я не решился пока пробовать.

Рокетбанк как-то сразу присылает пуш нотификации об операциях. В тинькове я такой возможности не увидел.

Ну и самое главное. Рокетбанк не осилил забрать деньги с моей белорусской карты. А с карты тинькова выходит комиссия (на стороне тинькова). Удалось из приложения тинькова кинуть денег на рокет без комиссии. Буду еще пробовать кидать деньги переводом, но это занимает существенное время.

Поддержка в обоих банках работает хорошо. У рокета более неформальное общение. У тинькова более официальное. Но в обоих случаях вопросы решают.

В качестве итогов – тиньков пока побеждает благодаря удобству переводов.

Grafana & influxdb на banana pi

Дома крутится медиа сервер, к которому я и решил прикрутить немножко мониторинга.
Пока это датчик температуры и давления на шине I2C

Сервер – это Banana PI. У него есть SATA разъем для жесткого диска, и, что самое главное, GPIO ноги, на которые можно вешать разные устройства.

В качестве фронтэнда для мониторинга я решил взять Grafana. Это ограничило варианты хранилища данных.
Графана поддерживает Graphite, CloudWatch, ElasticSearch, InfluxDB, KairosDB, OpenTSDB, Prometheus.
Graphite – Не осилил документацию 🙁
CloudWatch – Облако от Amazon. Я не хотел полагаться на внешние сервисы
ElasticSearch – Java
InfluxDB – Написана на golang
KairosDB – Java поверх Cassandra
OpenTSDB – Java поверх HBase
Prometheus – Работает по pull модели. Он сам собирает данные. Мне это не понравилось

Java – не вариант. Мне не нравится экосистема Java, от нее пахнет корпоративным душком. Плюс, JVM сожрет больше ресурсов, чем я хочу.

В итоге остановился на InfluxDB – то, что все собирается в бинарный код мне показалось весьма уместным для слабого сервера. Более того, возможности писать в базу разнообразны и удобны. Простой HTTP интерфейс, просто UDP и т.п.

Сначала все показалось простым – забрать код, собрать и запустить.
На деле это конечно не так.

Начнем с golang. Его ставить совсем не очевидно. Самый свежий go1.5.x для установки хочет go1.4.x 🙂
После нескольких попыток поставил gvm, это сильно помогло. gvm, как и его братья из других языков rvm & nvm умеет ставить и переключать версии golang

Нельзя просто взять и сбилдить проект на golang, как я понял. ARM пока вызывает проблемы в golang. Дело еще и в том, что я не сильно знаком с этим стеком. Собирал grafana & influxdb долго и муторно. В установке сильно помогли следующие странички:
http://gridengine.eu/index.php/other-stories/229-installing-influx-db-on-raspberry-pi-2-2015-10-18
http://docs.grafana.org/project/building_from_source/

С этого момента уже легче. Есть БД и фронтэнд к ней.

Совсем бесплатно дался мониторинг состояния системы сервера. InfluxDB отлично интегрируется с кучей систем, в том числе и с collectd. Пришлось поменять всего пару конфигов.

Осталось прочитать данные с датчика. У меня был заранее закуплен датчик bmp180. Забегая заранее – датчик – это чрезвычайно просто.

bmp180

bmp180

Если кратко
– ставим библиотеку python для работы с i2c шиной
– скачиваем готовый скрипт для своего датчика 🙂
– пришлось адаптировать скрипт для записи непосредственно в InfluxDB через UDP
– пришлось адаптировать скрипт, чтобы он писал не миллибары, а миллиметры ртутного столба

На сервере у меня стоит OpenMediaVault, поэтому регулярно запускать скрипт чтения с датчика я настроил прямо мышкой из браузера.

Готовенький скрипт для работы
Как подключить датчик и поставить пакеты

А вот и пример датчика, висящего на i2c шине –

root@bananas:~# ls -l /dev/i2c*
crw-rw---T 1 root i2c 89, 0 Jan 1 2010 /dev/i2c-0
crw-rw---T 1 root i2c 89, 1 Jan 1 2010 /dev/i2c-1
crw-rw---T 1 root i2c 89, 2 Jan 1 2010 /dev/i2c-2
crw-rw---T 1 root i2c 89, 3 Jan 1 2010 /dev/i2c-3
crw-rw---T 1 root i2c 89, 4 Jan 1 2010 /dev/i2c-4
root@bananas:~# i2cdetect -y 2
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- 77

Адаптированный скрипт лежит на гитхабе – https://github.com/Gromina/home_monitoring

Lootbox – секрет “успеха”

Стала ясна схема, по которой лутбокс.ру идет к успеху.

Предыстория такая – Заказал ребенку лутбоксы на 3 месяца.

Первый пришел где-то с опозданием в месяц. Ну, можно понять – послали в конце месяца подписки, злая почта динамила.
Второй задерживался еще дольше, я даже начал писать в саппорт и ВК. Получил отписку, но спустя немного бокс пришел, и я успокоился.

История третьего бокса – бокс декабрьский, в начале февраля ни слуху ни духу. Начинаю писать в саппорт, нет даже отписок. На сайте всплывающее говно с якобы онлайн консультантом динамит. В таком режиме проходит неделя-другая, и вот вчера получаю посылку.
Внимание, смотрим дату отправления. 3 февраля! Ясно, почта не такая уж и злая.

В голове складывается картина успеха. Собираем деньги с подписчиков, отправляем 10% боксов, остальных покупателей динамим, пока не напишут в саппорт. Профит! Кстати, недавно была распродажа лутбоксов прошлых месяцев. Нормально, второй раз можно и дешевле продать.

4246707

План корпуса для аркадного автомата

Давно уже подступаюсь к проекту Arcade bartop cabinet, уже почти закупил все, что необходимо.

Для чертежей корпуса перебрал все бесплатные программы для мака, позволяющие сделать 2Д/3Д чертеж. Это были всякие FreeCAD, QCAD, Google Sketchup

Все, что попробовал – либо унылое говно, либо пакет для космических исследований с перделками. Без бутылки разобраться совсем невозможно, хотя всего-то надо нарисовать несколько линий.

В итоге остановился на старом добром OpenSCAD. Оказалось, что теперь есть еще и онлайн варианты в браузере – раз, два

Получается вот такая штуковина –

arcade bartop cabinet

arcade bartop cabinet

Continue reading

Spotify на Kodi

Правильная инструкция по установке spotlight для kodi@rpi2.
spotlight позволяет слушать музыку со Spotify на своем kodi.
Нужно иметь Premium Spotify аккаунт. В противном случае Spotify не позволяет подключаться сторонним клиентам.