Benutzer-Werkzeuge

Webseiten-Werkzeuge


software:frontends:ledpi

Dies ist eine alte Version des Dokuments!


LEDpi - Visualisierung des Stromverbrauchs / PV Einspeisung per farbiger LEDs

Hardware

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.1413118546.txt.gz · Zuletzt geändert: 2014/10/12 14:55 von der_vitti