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

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

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

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

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

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

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

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

arcade bartop cabinet

arcade bartop cabinet

Continue reading

Про Single-board компьютеры

Уже несколько лет не стихает волна одноплатных компьютеров поднятая raspberry pi.
Трудно поверить, но первый настоящий одноплатный компьютер появился в далеком 1976 году.
Нынешняя волна по всей видимости связана с несколькими вещами – небольшой размер, мощность достаточная для большинства обычных задач и чрезвычайно низкая стоимость и энергопотребление.

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

Raspberry pi

Мощным маркетингом этого компьютера двинули весь рынок. Самым важным моментом была низкая стоимость (от $25) и наличие так называемых GPIO. GPIO – порты ввода-вывода, позволяющие несложно подключать внешние устройства – диоды, кнопки, датчики и т.п. В обычных PC такие подключения затруднительны.
С момента зпуска вышли 2 модели raspberry pi, raspberry pi 2, а также совсем недавно raspberry pi zero.

На raspberry pi можно поставить один из дистрибутивов Linux, коих существует множество.
Также есть RTOS (Real time operating system) дистрибутивы, для решения задач, критичных по времени.
Большим преимуществом является поддержка технологии HDMI CEC, об этом чуть позже.

Компьютер справляется с Full HD видео, поэтому для него собрано несколько дистрибутивов с медиацентроами.
Из существенных минусов – отсутствие SATA. Из-за этого к raspberry pi нельзя подключить жесткие диски большого объема на большой скорости. Их, конечно, можно подключить через USB, но это не позволит качать данные на максимально возможной скорости.

Cubieboard

Производится китайской компанией. Существует несколько разных компьютеров. Я себе приобретал Cubieboard2. В основном из-за SATA разъема, для того, чтобы собрать на этом компьютере сетевое хранилище.
Ничего особо нового по сравнению с raspberry pi сказать не могу. Точно также есть ряд дистрибутивов Linux, на которых можно запустить хоть сервер, хоть десктоп. Есть также дистрибутивы Android.
Также заявляется возможность играть Full HD и даже больше.
Сетевое хранилище на этом компьютере у меня работает уже несколько лет и качает торенты.

Banana Pi

Также китайская компания. Несмотря на это, компьютер относится к категории open source hardware. Что позволяет собирать на базе этого компьютера более сложные или заточенные под задачу устройства.
Также есть несколько разных моделей. Радует наличие Wifi на борту некоторых устройств (Banana pi pro), вместе с SATA. Прямо на борту есть микрофон.
Естественно, также есть GPIO (совместимые по раскладке с raspberry pi).
можно устанавливать Linux и Android
Я брал Banana pi Pro для очередного сетевого хранилища.

Beaglebone black

В некотором роде выделяющийся компьютер. Open source hardware. Как и все предыдущие модели, позволяет поставить разнообразные Linux дистрибутивы. Конечно, можно сделать на базе этого компьютера как десктоп, так сервер.

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

Области применения одноплатных компьютеров

Медиацентр

На базе бывшего XBMC теперь называющегося Kodi созданы дистрибутивы для raspberry pi, превращающие этот небольшой компьютер в полноценный медиацентр. Прелесть raspberry pi в поддержке HDMI CEC. Эта технология позволяет управлять по HDMI внешними устройствами с одного пульта. Таким образом подключенная к телевизору малинка успешно управляется с пульта телевизора (практически любой модели). Производители телевизоров склонны называть HDMI CEC своими названиями непонятно зачем.
Я пробовал 2 дистрибутива Kodi для raspberry pi – openelec и osmc
Openelec позиционирует свою заточенность на скорость, поэтому производители ограничили доступ к системе и выпилили часть системных программ и утилит. Для обычного пользователя это не очень критично.
Я же остановился на OSMC – полноценный линукс с Kodi.

Сетевое хранилище / сервер

Благодаря низкому энергопотреблению, а также отсутствию шума (вентиляторов нигде нет) одноплатные компьютеры отлично подходят для домашнего сервера. На сервере можно поднять качалку торентов, хранилище файлов, даже собственное облако
Если позволяют знания, можно просто настроить Linux под себя, установив transmission, smb и т.п.
Если хочется настраивать мышкой – тоже есть варианты. Недавно я установил сервер на базе OpenMediaVault – После установки дистрибутива на компьютер, можно заходить на него из браузера и все настраивать, очень удобно.

Хочу отметить, что для сервера (особенно для торентов) важен большой объем данных, поэтому тут предпочтение падает на компьютеры с SATA. Я использовал Cubieboard2 и Banana pi pro.

Умный дом

По тем же свойствам, что и выше, одноплатные компьютеры хорошо подходят для автоматизации дома. Это может быть что угодно – видеонаблюдение, управление замками, сигнализацией, кондиционерами, аудио-видеотехникой.
наличие GPIO позволяют подключить практически любые периферийные устройства – камеры, датчики, радио и IR трансмиттеры. Остается только все это интегрировать, что конечно непросто. Я знаю, что уже появились некоторые решения для умных домов, но пока не пробовал ни одного из них.
Пробовал делать видеонаблюдение на базе motion & Cubieboard2 – работает.

роботы

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

игровая консоль

Интересный вариант использования одноплатных компьютеров – создание игровой консоли-эмулятора для ретроигр.
мощности вполне хватает для эмуляции (но лучше брать raspberry pi 2, а не 1)
Разного софта достаточно много, GPIO позволяют подключить любые внешние устройства ввода – джойстики, геймпады, коврики и т.п.
Я пробовал пару дистрибутивов –
retropie – Дистриб для raspberyy pi. работает из коробки, поддерживает кучу джойстиков. Будет немного гемороя для некоторых консолей (надо будет искать их BIOS)
BeagleSNES – дистриб для Beaglebone Black. Эмулирует SNES. Немного тормозит
recalbox – Выглядит симпатично, но толком еще не пробовал
Lakka – Тоже пока не смотрел, но для эмуляторов еще один дистрибутив

Вообще есть желание собрать аркадный кабинет на базе raspberry pi2 – но пока не дошли руки и не все необходимое железо еще собрал

Arduino toolchain in OS X

Давно уже не возился с Arduino. Настолько давно, что обнаружил на обоих маках отсутствие тулчейна Ардуино 🙁

Я предпочитаю программировать Arduino непосредственно на С/C++ без всяких там IDE (если не считать vim за IDE). Как все это установить на мак написано ниже:

brew tap osx-cross/avr
brew install avr-libc
brew install avrdude --with-usb

Более подробно можете почитать тут.

avr-libc собирается довольно долго, не пугайтесь. Более того, оно может падать примерно так:

configure: updating cache ./config.cache
configure: creating ./config.status
config.status: creating Makefile
config.status: creating po/Makefile.in
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
config.status: executing default-1 commands
config.status: creating po/POTFILES
config.status: creating po/Makefile
make: *** [all] Error 2

Это тоже не беда. Просто вы не установили системные хедеры. Это делается так –


xcode-select --install

Подробнее про это

Happy coding!

arduino loves servo

arduino loves servo

Да, собираю я все проекты при помощи Make файла, позаимствованного отсюда и немного доработанного.

Почта России докатилась

Наша почта докатилась до того, что доходят вот такие посылки:
IMG_0432-2.JPG
 

IMG_0433.JPG

 

Поясняю, трудолюбивые китайцы не удосужились никак обернуть коробку, она открывается легким движением руки.
Посылка дошла. Целая. Невредимая. За 20 дней.

Радуюсь новенькому Beagle Bone black.