software:frontends:ledpi
Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
LEDpi - Visualisierung des Stromverbrauchs / PV Einspeisung per farbiger LEDs
Hardware
- raspberry PI
- WS2801 LEDs (http://www.ebay.de/sch/?_nkw=WS2801%20RGB%20LED)
- stärkeres 5V Netzteil (je nach Anzahl der LEDs 2-4 Watt)
Verkabelung / Aufbau
Bild
Software
import httplib2 as http import json from pprint import pprint import argparse import csv import socket import time try: from urlparse import urlparse except ImportError: from urllib.parse import urlparse headers = { 'Accept': 'application/json', 'Content-Type': 'application/json; charset=UTF-8' } targetELW = urlparse('http://sqlserver/middleware.php/data/f2059450-bbbe-11e3-aabc-7bfab5f4b02e.json?from=now') targetHeizung = urlparse('http://sqlserver/middleware.php/data/26bce7c0-bbc2-11e3-b634-3334d2c934ae.json?from=now') targetHaus = urlparse('http://sqlserver/middleware.php/data/32e8d3d0-bbc2-11e3-8f42-eb76d7115f4b.json?from=now') targetPV = urlparse('http://sqlserver/middleware.php/data/4186f3e0-bbc2-11e3-a87a-8b10388c97ce.json?from=now') gamma = bytearray(256) spi_dev_name = '/dev/spidev0.0' PIXEL_SIZE = 3 SCALE = 500 BLACK = bytearray(b'\x00\x00\x00') BLUE = bytearray(b'\x00\x00\xff') CYAN = bytearray(b'\x00\xff\xff') FUCHSIA = bytearray(b'\xff\x00\xff') GREEN = bytearray(b'\x00\xff\x00') RED = bytearray(b'\xff\x00\x00') WHITE = bytearray(b'\xff\xff\xff') YELLOW = bytearray(b'\xff\xff\x00') # Apply Gamma Correction and RGB / GRB reordering # Optionally perform brightness adjustment def filter_pixel(input_pixel, brightness): output_pixel = bytearray(PIXEL_SIZE) input_pixel[0] = int(brightness * input_pixel[0]) input_pixel[1] = int(brightness * input_pixel[1]) input_pixel[2] = int(brightness * input_pixel[2]) output_pixel[0] = gamma[input_pixel[0]] output_pixel[1] = gamma[input_pixel[1]] output_pixel[2] = gamma[input_pixel[2]] return output_pixel def write_stream(pixels): spidev.write(pixels) return # MAIN spidev = file(spi_dev_name, "wb") for i in range(256): gamma[i] = int(pow(float(i) / 255.0, 2.5) * 255.0) Blinker = 0 pixel_output = bytearray(16 * PIXEL_SIZE + 3) method = 'GET' body = '' h = http.Http() while True: responseELW, contentELW = h.request(targetELW.geturl(),method,body,headers) ELW = json.loads(contentELW) ELWled = int(float(ELW["data"]["tuples"][0][1])) / SCALE responseHeizung, contentHeizung = h.request(targetHeizung.geturl(),method,body,headers) Heizung = json.loads(contentHeizung) Heizungled = int(float(Heizung["data"]["tuples"][0][1])) / SCALE responseHaus, contentHaus = h.request(targetHaus.geturl(),method,body,headers) Haus = json.loads(contentHaus) Haus["data"]["tuples"][0][1] = Haus["data"]["tuples"][0][1] - ELW["data"]["tuples"][0][1] Hausled = int(float(Haus["data"]["tuples"][0][1])) / SCALE responsePV, contentPV = h.request(targetPV.geturl(),method,body,headers) PV = json.loads(contentPV) PVled = int(float(PV["data"]["tuples"][0][1])) / SCALE led = 0 print "Haus: ", int(float(Haus["data"]["tuples"][0][1])), " Hausled: ",Hausled, "PV: ", int(float(PV["data"]["tuples"][0][1])) , " PVled ",PVled for led in range(19): pixel_output[led * PIXEL_SIZE:] = filter_pixel(BLACK, 1) if Hausled > led: pixel_output[(led * PIXEL_SIZE)+0] = '\xff' elif (Hausled == led) and (int(float(Haus["data"]["tuples"][0][1])) > 440): pixel_output[(led * PIXEL_SIZE)+0] = int(( float(Haus["data"]["tuples"][0][1]) % SCALE) / SCALE * 255) if -Hausled > led: pixel_output[(led * PIXEL_SIZE)+1] = '\xff' elif (-Hausled == led) and ( int(float(Haus["data"]["tuples"][0][1])) < -440): pixel_output[(led * PIXEL_SIZE)+1] = int(( float(Haus["data"]["tuples"][0][1]) % SCALE) / SCALE * 255) if (PVled > led) and (PVled > -Hausled) and (PVled > Hausled): pixel_output[(led * PIXEL_SIZE)+2] = '\xff' elif PVled == led: pixel_output[(led * PIXEL_SIZE)+2] = int(( float(PV["data"]["tuples"][0][1]) % SCALE) / SCALE * 255) if (led == 18): if (Blinker == 0): Blinker = 1 pixel_output[led * PIXEL_SIZE:] = filter_pixel( bytearray(b'\x00\x1C\x00'), 1) else: Blinker = 0 pixel_output[led * PIXEL_SIZE:] = filter_pixel(BLACK, 1) for c in pixel_output: print(c), print('\n') write_stream(pixel_output) spidev.flush() time.sleep(2)
software/frontends/ledpi.1413118589.txt.gz · Zuletzt geändert: 2014/10/12 14:56 von der_vitti