Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pi@raspberrypi:~ $ cat btc-start.sh
- #!/bin/bash
- nice bitcoind -daemon
- sudo -H -u pi bash -c 'nohup /home/pi/btc-monitor.sh & >/dev/null 2>&1'
- sudo -H -u pi bash -c 'nohup python /home/pi/btc-display.py & >/dev/null 2>&1'
- pi@raspberrypi:~ $ cat btc-stop.sh
- #!/bin/bash
- kill `ps aux | grep btc-monitor | grep -v grep | awk '{print $2}'`
- kill `ps aux | grep btc-display | grep -v grep | awk '{print $2}'`
- cat <<EOF | python
- from sense_hat import SenseHat
- SenseHat().clear()
- EOF
- bitcoin-cli stop
- tail -f ~/.bitcoin/debug.log
- pi@raspberrypi:~ $ cat btc-monitor.sh
- #!/bin/bash
- while true; do
- bitcoin-cli getblockcount >/home/pi/btc-blockcount.txt
- sleep 30
- done
- pi@raspberrypi:~ $ cat btc-display.py
- from sense_hat import SenseHat
- from time import sleep
- import subprocess
- import requests
- import thread
- import json
- import math
- import time
- import os
- sense = SenseHat()
- black = (0,0,0)
- red = (64,0,0)
- blue = (0,0,64)
- green = (0,64,0)
- white = (64,64,64)
- yellow = (64,64,0)
- orange = (128,64,0)
- chars = {'0': [3, 7,5,5,5,7],
- '1': [3, 2,2,2,2,2],
- '2': [3, 7,1,7,4,7],
- '3': [3, 7,1,3,1,7],
- '4': [3, 5,5,7,1,1],
- '5': [3, 7,4,7,1,7],
- '6': [3, 7,4,7,5,7],
- '7': [3, 7,1,2,2,2],
- '8': [3, 7,5,7,5,7],
- '9': [3, 7,5,7,1,1],
- '.': [1, 0,0,0,0,1],
- ' ': [1, 0,0,0,0,0],
- }
- def draw_char(ch,x,y,col):
- w = chars[ch][0]
- for r in chars[ch][1:]:
- for b in range(0,w):
- if r & 2**(w-1-b):
- sense.set_pixel(x+b, y, col)
- else:
- sense.set_pixel(x+b, y, black)
- y += 1
- def draw_price(p):
- s = str(p/1000.0)
- if s[0] == '0': s = s[1:]
- s = s[:3]
- if s[-1] == '.': s = s[:-1]
- col = white
- x = 0
- for ch in s:
- if ch == '.': col = green
- draw_char(ch,x,3,col)
- if ch == '.':
- x += 1
- col = blue
- else:
- x += chars[ch][0]
- if x <= 7: draw_char('.',x,3,black)
- x += 1
- def behind():
- try:
- cnt = int(open('/home/pi/btc-blockcount.txt').readline().replace("\n",""))
- lst = int(requests.get("https://blockchain.info/q/getblockcount").text)
- if cnt > lst: lst = cnt
- return lst - cnt
- except:
- return -1
- def price():
- # return int(float(requests.get("https://api.coinbase.com/v2/prices/spot?currency=USD").json()['data']['amount']))
- return int(float(requests.get("https://api.cryptowat.ch/markets/bitfinex/btcusd/price").json()['result']['price']))
- def draw_line(r,l,c1,c2):
- for i in range(0,l):
- sense.set_pixel(i,r,c1)
- for i in range(l,8):
- sense.set_pixel(i,r,c2)
- def draw_status(n):
- if n < 0:
- draw_line(0, 8, red, red)
- elif n < 8:
- draw_line(0, 8-n, green, orange)
- else:
- draw_line(0, 8, orange, orange)
- def draw_temp(t):
- min = 45
- max = 70
- n = 8*(t-min)/(max-min)
- if n < 0: n = 0
- if n > 8: n = 8
- draw_line(1, n, red, yellow)
- def cpu_temp():
- temp = os.popen("vcgencmd measure_temp").readline()
- return int(float(temp.replace("temp=","").replace("'C\n","")))
- lock = thread.allocate_lock()
- def wait(t):
- r = 0
- dt = t/8.0
- for p in range(0,8):
- lock.acquire()
- px = sense.get_pixel(p, r)
- hi = [0,0,0]
- for i in range(0,3):
- if px[i] > 0: hi[i] = min(px[i]+64,255)
- sense.set_pixel(p, r, (hi[0],hi[1],hi[2]))
- sleep(dt)
- sense.set_pixel(p, r, (px[0],px[1],px[2]))
- lock.release()
- sleep(0.01)
- display_on = 1
- b = 0
- p = 0
- t = 0
- def draw(b,p,t):
- lock.acquire()
- if display_on:
- sense.clear()
- draw_status(b)
- draw_temp(t)
- draw_price(p)
- else:
- sense.clear()
- lock.release()
- def toggle_display(event):
- global display_on
- if event.action == 'pressed':
- display_on = 1 - display_on
- draw(b,p,t)
- sense.stick.direction_any = toggle_display
- while True:
- try:
- b = behind()
- p = price()
- t = cpu_temp()
- draw(b,p,t)
- wait(5)
- except KeyboardInterrupt:
- break
- sense.clear()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement