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

Программирование как жонглирование

Недавно осознал, что программировать просто. Также просто, как жонглировать.
ведь для программы любой сложности достаточно возможности выполнять оператор, делать ветвление и циклы. А если Разрешить GOTO, то хватит операторов и ветвления! Шальная мысль пошла дальше, родились ассоциации про жонглирование:

Структурное программирование – жонглирование 3 шарами

ООП – жонглирование пирамидами, шарами, кубами и т.п., внутри которых лежат шары. Опытный ООП программист может одновременно жонглировать 3-7 фигурами произвольной формы. Что включает в себя от 0 до 1000000 шаров

Программирование на фреймворке – подбрасывание вверх конструкции из шаров, подкручивание ее по часовой стрелке или против

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

метапрограммирование – жонглирование жонглерами

программирование на С++ – жонглирование бусинками из разорванных перламутровых бус. Нужно быстро-быстро перебирать руками. Получается красиво. Учиться долго. Тот кто умеет жонглировать бусинками считает, что может жонглировать всем, чем угодно. Но не жонглирует.

программирование на ассемблере – жонглер выходит в зрительный зал и начинает быстро перебирать руками. Говорят, что он жонглирует атомами. Люди, конечно, не верят. Те кто начинают разбираться, выясняют что это возможно и правда, потом сходят с ума. В каждом цирке свой жонглер не похожий на других.

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

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

инфраструктура – цирк, в котором выступают жонглеры

Добавляйте свои ассоциации!

14520787703_77fa4179ab

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.

Coursera / Interactive Computer Graphics

Набрел на интересный курс – Interactive Computer Graphics

Takeo Igarashi is a Professor of Computer Science Department at The University of Tokyo

Takeo Igarashi is a Professor of Computer Science Department at The University of Tokyo

 

Вроде дядька рассказывает про простые вещи, но решения и оптимизации зачастую неожиданные. Демки выглядят классно, хоть и на Java :)

Интересные вещи про UX

улучшение прокрутки, работа с иконками на рабочем столе, управление голосом, более дружелюный к людям графический редактор и т.п.

Рекомендую всем, кто связан с мультимедия, UX.

 

 

Делать игры просто

Сын загорелся идеей создания компьютерной игры.

Я показал ему Tiled.

Вчера разобрались как рисовать карты из тайлов.

говорит – “Я не знал, что делать игры так просто!”
btw думаю использовать MelonJS для его игры