codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#!/usr/bin/python import smbus import sys import time import os # Pi USV+ Adresse address = 0x18 # StatusByte data_0 = 1 # Version data_1 = 12 # Parameter (I/U) data_2 = 10 # Globale Variablen par = [0,0,0,0,0,0,0,0,0,0] par_2 = [0,0,0,0,0] par_3 = [0,0,0,0,0] par_name = ["U_Batt (V)", "I_Rasp (A)", "U_Rasp (V)", "U_USB (V)", "U_ext (V)"] log = "" version = "" status = "" stati = "" optionen = "Moegliche Optionen:\n version \n status \n all \n log \n U_Batt \n I_Rasp \n U_Rasp \n U_USB \n U_ext" # Handle piusv = smbus.SMBus(1) # Statusbyte auslesen def get_status(piusv, address): piusv.write_byte(address, 0x00) try: status = (piusv.read_byte(address)) except IOError, err: print "Fehler beim Lesen von Device 0x%02X" % address sys.exit(-1) return status # Firmware Version auslesen und in eine lesbare Zeile umwandeln def version(piusv, address, data_1): version = "" piusv.write_byte(address, 0x01) for i in range (data_1): try: version = version + chr(piusv.read_byte(address)) except IOError, err: print "Fehler beim Lesen von Device 0x%02X" % address sys.exit(-1) return version # Die Parameter der PIUSV+ byteweise auslesen def get_parameter(): piusv.write_byte(address, 0x02) for i in range (data_2): try: par[i] = piusv.read_byte(address) except IOError, err: print "Fehler beim Lesen von Device 0x%02X" % address exit(-1) return par # Umwandlung der Parameter in lesbare Werte(V,A) def word2float(par, data_2): for i in range (data_2/2): par_2[i] = (256*float(par[i*2])+(float(par[1+(i*2)])))/1000 return par_2 # Umwandlung der Parameter in lesbare Werte(mV,.A) def word2int(par, data_2): for i in range (data_2/2): par_2[i] = int(256*float(par[i*2])+(float(par[1+(i*2)]))) return par_2 # Werte mit Namen versehen def line(par_2, data_2): log = "" for i in range (data_2/2): log = log+" |"+"% 2.3f"% (par_2[i])+" "+par_name[i] log = ("%02s"% get_status(piusv, address))+log return log # Statusbyte auswerten, Mehrfachnennung moeglich def status2sent(): stati = "StatusByte Bedeutung \n" status = get_status(piusv, address) if status&0x01==0x01: stati = stati + " 0000.0001 Spannungsversorgung von Micro-USB-Buchse" + "\n" if status&0x02==0x02: stati = stati + " 0000.0010 Spannungsversorgung von Uext" + "\n" if status&0x04==0x04: stati = stati + " 0000.0100 (Zu?) niedrige Batteriespannung" + "\n" if status&0x08==0x08: stati = stati + " 0000.1000 Akku wird geladen" + "\n" if status&0x10==0x10: stati = stati + " 0001.0000 Akku ist voll" + "\n" if status&0x20==0x20: stati = stati + " 0010.0000 Taster S1 betaetigt" + "\n" return (stati) def U_Batt(): get_parameter() word2int(par, data_2) return par_2[0] def I_Rasp(): get_parameter() word2int(par, data_2) return par_2[1] def U_Rasp(): get_parameter() word2int(par, data_2) return par_2[2] def U_USB(): get_parameter() word2int(par, data_2) return par_2[3] def U_ext(): get_parameter() word2int(par, data_2) return par_2[4] def main(): # Script mit diversen Optionen abarbeiten # Ohne Option wird eine Hilfe-Seite ausgegeben try: option = sys.argv[1] except: print optionen sys.exit(1) # Firmwareversion if option == "version": print version(piusv, address, data_1) # Status und Bedeutung elif option == "status": print status2sent() # Logdatei schreiben elif option == "log": get_parameter() word2float(par, data_2) log = time.strftime("%Y%m%d-%H%M%S")+" |"+line(par_2, data_2) + "\n" with open('/var/log/PIUSV.log', 'a') as fh: fh.write(log) # Kommandozeilenausgabe komplett elif option == "all": get_parameter() word2float(par, data_2) all = line(par_2, data_2) print all + "\n" + status2sent() # Nur eine Zahl zur Weiterverarbeitung elif option == "U_Batt": print U_Batt() elif option == "I_Rasp": print I_Rasp() elif option == "U_Rasp": print U_Rasp() elif option == "U_USB": print U_USB() elif option == "U_ext": print U_ext() # Falsche Option, Hilfeseite ausgeben else: print optionen if __name__ == '__main__': main() #EOF
Private
[
?
]
Run code
Submit