Привет Хабр!
Представляю вниманию общественности свою Железную Бюджетную Хабрамерку.
ЖБХ позволяет измерять и отображать параметры кармы, рейтинга и позиции в общем рейтинге. Кроме этого, выгодно отличается от софтовых аналогов и позволяет следить за свежим хабратопиком, показывая, кто сколько плюсанул, минусанул, добавил в избранное и общее количество просмотров. Все это безобразие реализовано на ардуине (да-да, унылая ардуина, но и тут есть изюминка, читайте дальше) и в качестве ворот в интернет использовался роутер TP-link wr1043nd с прошивкой openWRT (Роутер пойдет любой, который поддерживает openwrt_)
Уже зачесались руки собрать такую штуку?
Нам понадобится всего несколько вещей, Экран LCD 1602, переменный резистор любого номинала, ардуино про мини и дешевый usb-ttl переходник на pl-2303. Очень бюджетный набор для творчества. Экран LCD — 80 рублей, резистор — даром, ардуино про мини — 100 рублей, usb-ttl — 30 рублей, опыт — бесценно.
Экран подключается посредством стандартной инструкции в картинках, найденной в интернете, настраивается яркость, подключается USB.
Вторая важная вещь — роутер. Список поддерживаемого оборудования каждый найдет вот тут wiki.openwrt.org/toh/start
Прошивка каждого роутера — индивидуальна, но подробно расписана в Вики на сайте OpenWRT, так что описывать не буду. Замечу, что сразу лучше всего вывести внутренний UART разъем наружу, так и можно его вернуть к жизни, и через putty легче отлаживать скрипты — через серийный порт выводятся ВСЕ данные, в то время как по ssh видно далеко не все. За время тестов я уже несколько раз восстанавливал прошивку через COM + ttftp сервер. Все мануалы по работе с железом и начальной установке есть на сайте.
После прошивки настраиваем интернет, обычно хватает вставить кабель с домашнего роутера в WAN роутера с openWRT и интернет в устройстве уже есть. Я себе настроил интернет через wi-fi, использую Веб интерфейс. Не во всех прошивках сразу стоит веб-интерфейс, смотрите документацию по своему роутеру.
Итак, будем считать, что прошло пол дня, на роутере стоит Openwrt, на роутере настроен интернет, через Putty под рутом мы зашли и готовы выполнять любые команды.
Добавляем нужные пакеты. (мне пришлось обновить wget — версия на роутере не поддерживала кукисы — об этом подробнее дальше)
Если вы используете другой usb переходник для ардуины — нужно будет поставить свой пакет под этот переходник. В результате действий должно появится устройство /dev/ttyUSB0 (Оно может называться и иначе, зависит от прошивки и пакета под USB-com переходник)
Заходим в /usr/ и создаем скрипт, например up.sh со следующим содержимым ( уважаемые хабровцы, в коде нужно убрать 0000 (четыре нуля) — получилось, что текст хабратопика неправильно парсится из-за присутствия в коде тригеров, по которым выбирались значения, переделывать лень, чтобы хабраметр работал добавил нули)
Тут необходимы пояснения.
1) Авторизация на Хабре — это что-то с чем-то. Без авторизации не отдаются данные о рейтинге хабратопика, т.е. гость просто не увидит нужных цифр. Поэтому используется кукисы, сохраненный из браузера, после успешного входа на хабр.Я использовал Cookie Exporter 1.5 — дополнение для FF, которое экспортирует ВСЕ кукисы в формате, понятном Wget Из файла со всеми кукисами я удалил все, что не относится к хабру, сам файл залил через WinSCP на роутер в папку /usr/ Передавать свои кукисы кому-то постороннему крайне не рекомендую.
2) Парсинг нужных значений сделан через awk — шикарную вещь, но совершенно чуждую простому пользователю=). Очень долго мучался c awk, сделал прикольные костыли, в результате получил результат, уверен, можно лучше, но, для меня это работает (с)
3) Значения кармы я взял из официального источника, хотя можно было спарсить тем же образом, что и данные по хабратопику.
4) Данные передаются в ардуину очень интересным способом! После соединения ардуины по USB с роутером, становится доступна коммуникация в обе стороны через порт на скорости 9600 (именно такая скорость по умолчанию для моего пакета под pl-2303? менять не стал, незачем) Можно было бы отправлять в ардуину строку с данными, ардуина парсила бы строку и выводила на экран. Но! Удачнейшим образом наткнулся на вот это bitlash.net (Если кто впервые видит — посмотрите обязательно, шикарная вещь.) Если в двух словах — это интерпретатор команд. Позволяет программировать ардуину через командную строку. В моем случае — передавать значения переменных и отображать их на экране. Советую почитать доки, для меня было открытием. Перед тем, как запустить код, скачиваем и ставим библиотеку bitlash
Код для ардуины
Остается запустить выполнение скрипта up.sh через крон, соединить ардуину с роутером по USB и хабромерка готова!
Представляю вниманию общественности свою Железную Бюджетную Хабрамерку.
ЖБХ позволяет измерять и отображать параметры кармы, рейтинга и позиции в общем рейтинге. Кроме этого, выгодно отличается от софтовых аналогов и позволяет следить за свежим хабратопиком, показывая, кто сколько плюсанул, минусанул, добавил в избранное и общее количество просмотров. Все это безобразие реализовано на ардуине (да-да, унылая ардуина, но и тут есть изюминка, читайте дальше) и в качестве ворот в интернет использовался роутер TP-link wr1043nd с прошивкой openWRT (Роутер пойдет любой, который поддерживает openwrt_)
Уже зачесались руки собрать такую штуку?
Нам понадобится всего несколько вещей, Экран LCD 1602, переменный резистор любого номинала, ардуино про мини и дешевый usb-ttl переходник на pl-2303. Очень бюджетный набор для творчества. Экран LCD — 80 рублей, резистор — даром, ардуино про мини — 100 рублей, usb-ttl — 30 рублей, опыт — бесценно.
Экран подключается посредством стандартной инструкции в картинках, найденной в интернете, настраивается яркость, подключается USB.
Вторая важная вещь — роутер. Список поддерживаемого оборудования каждый найдет вот тут wiki.openwrt.org/toh/start
Прошивка каждого роутера — индивидуальна, но подробно расписана в Вики на сайте OpenWRT, так что описывать не буду. Замечу, что сразу лучше всего вывести внутренний UART разъем наружу, так и можно его вернуть к жизни, и через putty легче отлаживать скрипты — через серийный порт выводятся ВСЕ данные, в то время как по ssh видно далеко не все. За время тестов я уже несколько раз восстанавливал прошивку через COM + ttftp сервер. Все мануалы по работе с железом и начальной установке есть на сайте.
После прошивки настраиваем интернет, обычно хватает вставить кабель с домашнего роутера в WAN роутера с openWRT и интернет в устройстве уже есть. Я себе настроил интернет через wi-fi, использую Веб интерфейс. Не во всех прошивках сразу стоит веб-интерфейс, смотрите документацию по своему роутеру.
Итак, будем считать, что прошло пол дня, на роутере стоит Openwrt, на роутере настроен интернет, через Putty под рутом мы зашли и готовы выполнять любые команды.
Добавляем нужные пакеты. (мне пришлось обновить wget — версия на роутере не поддерживала кукисы — об этом подробнее дальше)
opkg update
opkg install wget
opkg install kmod-usb-acm
opkg install kmod-usb-serial-pl2303
Если вы используете другой usb переходник для ардуины — нужно будет поставить свой пакет под этот переходник. В результате действий должно появится устройство /dev/ttyUSB0 (Оно может называться и иначе, зависит от прошивки и пакета под USB-com переходник)
Заходим в /usr/ и создаем скрипт, например up.sh со следующим содержимым ( уважаемые хабровцы, в коде нужно убрать 0000 (четыре нуля) — получилось, что текст хабратопика неправильно парсится из-за присутствия в коде тригеров, по которым выбирались значения, переделывать лень, чтобы хабраметр работал добавил нули)
Скрытый текст
wget --load-cookies /usr/cookies.txt -U "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0" http://habrahabr.ru/post/220893/ -O /tmp/index.html
awk -F ';' '/&ua0000rr;/ {print substr($2,0,index($2," " ))}' /tmp/index.html>/usr/up.txt
UP=`awk 'NR == 1' /usr/up.txt`
echo 'u='$UP > /dev/ttyUSB0
awk -F ';' '/&ua0000rr;/ {print substr($3,0,5)}' /tmp/index.html>/usr/down.txt
sed 's/\"/ /g' /usr/down.txt>/usr/down2.txt
DOWN=`awk 'NR == 1{print$1}' /usr/down2.txt`
echo 'd='$DOWN > /dev/ttyUSB0
VW=`awk -F '>' '/pageviews/ {print substr($2,0,index($2,"<" )-1)}' /tmp/index.html`
echo 'v='$VW > /dev/ttyUSB0
FW=`awk -F '>' '/favs_count/ {print substr($2,0,index($2,"<" )-1)}' /tmp/index.html`
echo 'f='$FW > /dev/ttyUSB0
wget http://habrahabr.ru/api/profile/romanvl/ -O /tmp/index2.html
KARMA=`awk -F '>' '/karma/ {print int(substr($2,0,index($2,"<" )-1))}' /tmp/index2.html`
echo 'k='$KARMA > /dev/ttyUSB0
RATE=`awk -F '>' '/rating>/ {print int(substr($2,0,index($2,"<" )-1))}' /tmp/index2.html`
echo 'r='$RATE > /dev/ttyUSB0
POS=`awk -F '>' '/ratingPosition/ {print substr($2,0,index($2,"<" )-1)}' /tmp/index2.html`
echo 'p='$POS > /dev/ttyUSB0
Тут необходимы пояснения.
1) Авторизация на Хабре — это что-то с чем-то. Без авторизации не отдаются данные о рейтинге хабратопика, т.е. гость просто не увидит нужных цифр. Поэтому используется кукисы, сохраненный из браузера, после успешного входа на хабр.Я использовал Cookie Exporter 1.5 — дополнение для FF, которое экспортирует ВСЕ кукисы в формате, понятном Wget Из файла со всеми кукисами я удалил все, что не относится к хабру, сам файл залил через WinSCP на роутер в папку /usr/ Передавать свои кукисы кому-то постороннему крайне не рекомендую.
2) Парсинг нужных значений сделан через awk — шикарную вещь, но совершенно чуждую простому пользователю=). Очень долго мучался c awk, сделал прикольные костыли, в результате получил результат, уверен, можно лучше, но, для меня это работает (с)
3) Значения кармы я взял из официального источника, хотя можно было спарсить тем же образом, что и данные по хабратопику.
4) Данные передаются в ардуину очень интересным способом! После соединения ардуины по USB с роутером, становится доступна коммуникация в обе стороны через порт на скорости 9600 (именно такая скорость по умолчанию для моего пакета под pl-2303? менять не стал, незачем) Можно было бы отправлять в ардуину строку с данными, ардуина парсила бы строку и выводила на экран. Но! Удачнейшим образом наткнулся на вот это bitlash.net (Если кто впервые видит — посмотрите обязательно, шикарная вещь.) Если в двух словах — это интерпретатор команд. Позволяет программировать ардуину через командную строку. В моем случае — передавать значения переменных и отображать их на экране. Советую почитать доки, для меня было открытием. Перед тем, как запустить код, скачиваем и ставим библиотеку bitlash
Код для ардуины
Скрытый текст
#include "bitlash.h"
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
byte UP[8] = {
0b00100,
0b01010,
0b10001,
0b11011,
0b01010,
0b01010,
0b01010,
0b01110
};
byte DWN[8] = {
0b01110,
0b01010,
0b01010,
0b01010,
0b11011,
0b10001,
0b01010,
0b00100
};
byte FW[8] = {
0b00100,
0b10101,
0b11111,
0b01110,
0b01110,
0b11011,
0b10001,
0b00000
};
byte VW[8] = {
0b00000,
0b00000,
0b01110,
0b10001,
0b10101,
0b10001,
0b01110,
0b00000
};
void setup(void) {
lcd.createChar(0, UP);
lcd.createChar(1, DWN);
lcd.createChar(2, FW);
lcd.createChar(3, VW);
initBitlash(9600);
lcd.begin(16, 2);
}
void loop(void) {
lcd.setCursor(0,0);
// lcd.print("U");
lcd.write((uint8_t)0);
lcd.print(getVar(20));
// lcd.print("D");
lcd.write((uint8_t)1);
lcd.print(getVar(3));
// lcd.print("F");
lcd.write((uint8_t)2);
lcd.print(getVar(5));
//lcd.print("V");
lcd.write((uint8_t)3);
lcd.print(getVar(21));
lcd.setCursor(0, 1);
lcd.print("K");
lcd.print(getVar(10));
lcd.print(" R");
lcd.print(getVar(17));
lcd.print(" P");
lcd.print(getVar(15));
runBitlash();
}
Остается запустить выполнение скрипта up.sh через крон, соединить ардуину с роутером по USB и хабромерка готова!