Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
samodelkin
7 лет назад

Автономный информатор "Golos Notify" на Raspberry Pi 3 + Piston

Автономный информатор "Golos Notify"

Приветствую Вас, друзья! С первого дня пребывания на этой платформе было желание применить свои знания в электронике для поддержки, продвижения и развития Голоса! По принципу - делай то, что у тебя лучше всего получается =) Размышляя на эту тему, я представлял некое устройство, которое помогало бы взаимодействовать с Голосом, наподобие ассистента Alexa от Amazon, c возможностью интеграции в умный дом. Планы, конечно, амбициозные, но почему бы и не попробовать реализовать эту идею?! Тем более что проект будет открытым, и к нему сможет присоединиться любой желающий, вместе мы сможем больше! Для решения столь большой задачи её нужно разделить на несколько простых, решая их шаг за шагом. Так появилось первое автономное устройство “Golos Notify”. Автономное, потому что не требует включенного компьютера или мобильного телефона, для его работы нужен лишь интернет через Wi-Fi или кабельное подключение. Как основную платформу для разработки я выбрал Raspberry Pi 3 по нескольким причинам:

  1. Это довольно мощное железо в сочетании с малым потреблением энергии
  2. Развитое комьюнити, что упрощает решение многих задач
  3. Наличие Linux на борту, с возможностью использовать Python

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

Как я уже написал, буду двигаться от простого к сложному, добавляя к конструкции новые функции и возможности. Поэтому Golos Notify пока умеет только отображать информацию:

Зеленый треугольник – это ваша репутация
Справа – текущая дата
Ниже текущий баланс вашего кошелька
Внизу зеленый прогресс-бар - это ваша сила голосования, т.е. power voting

В качестве основного языка программирования я выбрал Python, познакомился я с ним год назад, когда ходил на курсы в местный FabLab. Полностью изучить его, конечно, не получилось, но это дало некую базу и представление. Затем очень помогли уроки на Голосе от уважаемого @pythono. Для получения информации о балансе сначала пробовал парсить страницу, даже были некоторые результаты, но это оказалось бесперспективным направлением =) Решить эту проблему помог Piston, на Голосе регулярно появляются статьи о его установке и применении. Мне очень понравился пост, где его ставили с бубном и шаманом на Windows XP, но это было похоже на подгонку замочной скважины к ключу, а не наоборот.
Мы же будем ставить Piston на Raspbian, мне в этом отчасти помогла инструкция, сейчас расскажу подробней:

Скачиваем образ Raspbian на сайте «малинки» и записываем его на microSD. Там можно выбрать как полную версию, так и облегченную. Я решил установить полную версию дистрибутива, так как он уже содержит большинство нужных для работы библиотек, и есть GUI, в котором работать удобней, чем в консоли, при необходимости графику можно всегда отключить. Первым делом настраиваем соединение с Wi-Fi , зачем нам лишний провод? Затем заходим в Raspberry Pi Configuration и включаем следующие опции: SSH (он нам понадобится для удаленного администрирования), SPI (он необходим для работы дисплея).

Крайне желательно обновить дистрибутив

sudo apt-get update
sudo apt-get upgrade
sudo reboot

Нужный для работы Python уже есть в системе, но если посмотреть его версию

python3  --version

Видим Python 3.5.3. Често говоря, я так и не понял, почему piston не захотел работать в этой версии пайтона, причём устанавливается без ошибок, но не работает))) Когда пробовал piston на Ubuntu, все было без проблем, а тут ну ни в какую! Возможно, из-за дистрибутива, который адаптирован под Raspberry pi. Погоревал малость, да и решил скомпилировать ручками свежую версию питончика 3.6
Тут процесс длительный, можно пить чай и есть печеньки

sudo apt-get install libssl-dev
wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz
tar xzvf Python-3.6.0.tgz
cd Python-3.6.0/
./configure
make  -j4
sudo make install
sudo python3.6 -m pip install --upgrade pip

Далее выяснилось, что в скомпилированном пайтоне нет нужной либы sqlite3, ставим и её

sudo apt-get install libsqlite3-dev

Перекомпилируем пайтон

./configure --enable-loadable-sqlite-extensions && make && sudo make install

Накатываем системные библиотеки

sudo apt-get install python3-dev
sudo apt-get install git make automake cmake g++ libssl-dev autoconf libtool

sudo apt-get install libboost-thread-dev libboost-date-time-dev libboost-system-dev libboost-filesystem-dev libboost-program-options-dev libboost-signals-dev libboost-serialization-dev libboost-chrono-dev libboost-test-dev libboost-context-dev libboost-locale-dev libboost-coroutine-dev libboost-iostreams-dev

sudo apt-get install doxygen perl libreadline-dev libncurses5-dev

И наконец-то сам Piston

sudo pip3.6 install piston-lib piston-cli

Подключим к ноде Голоса

piston set node wss://ws.golos.io

Далее можно проверить свой или чей-нибудь баланс, например, группы "Волшебная Индия!" @vp-magic-india

piston balance vp-magic-india

Если нет ошибок, поздравляю, половина пути пройдена! Используя Python, попробуем получить информацию об аккаунте. Создадим файлик с расширением .py, или можно использовать Idle.

import json
from piston.account import Account
account = Account("samodelkin")
print(account)

Запускаем...

В итоге мы получаем множество данных в виде словаря Dict (это неупорядоченная коллекция произвольных объектов с доступом по ключу). Собственно говоря, используя «ключ – значение», мы и будем выдирать нужные нам параметры. У меня получилось вот так:

import json
from piston.account import Account
account = Account("samodelkin")

print ("Golos:", account['balance'])
print ("Zoloto:", account['sbd_balance'])
print ("Balans sily:", account['voting_power']/100)
print ("Reputacia:", account.reputation())
print ("Reiting:", account.balances['VESTS']/1000000)


Кстати говоря, с этими значениями можно выполнять разные действия, например, можно добавить строки

if account['voting_power'] > 80:
print("Уровень в норме")

Выполнить программу пайтона можно из среды разработки или в командной строке, набрав "python3 имя вашего файла"

Подробней о возможностях пистона можно прочитать на странице http://lib.piston.rocks/en/develop/

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

P.s. Я не гуру Linux, описанный метод установки и настройки не является единственным правильным, возможно, есть варианты, как это сделать проще и быстрей, всё в ваших руках=)

С уважением, @samodelkin 73!

6
143.387 GOLOS
На Golos с August 2017
Комментарии (33)
Сортировать по:
Сначала старые