ich bastel gerade an einem Programm rum, dass mir ermöglicht mittels eines TSL45315-Lichtsensors die Raumbeleuchtung zu prüfen und je nach Lichtlevel - eine Funksteckdose via 434-MHz-Empfänger zu schalten. Der Code funktioniert soweit, allerdings habe ich folgendes Problem:
In dem Modul "read_sensor_data" lese ich die Werte datalow, datahigh aus und möchte die - wie im Main zu sehen, in dem Modul "calc_lux" weiterverarbeiten. Allerdings bekomme ich die Übertragung der Werte nicht hin, ohne die Variable als global zu deklarieren (was ja bäh ist). Wie schaffe ich es, dieses Problem zu beheben ohne die Variablen als global zu deklarieren?
Code: Alles auswählen
#!/usr/bin/env python
#Importiere Librarys
from smbus import SMBus
from time import sleep
import os
import subprocess
#Variablen:
bus = SMBus(1)
light_switch_value = 75
socket_on = False
def init():
#Search for active sensor
sensor_status = bus.read_byte_data(0x29,0x80)
if sensor_status != 3:
#Set sensor to normal operation mode
bus.write_byte_data(0x29,0x80,0x3)
#Set sensor to Time = 400 ms
bus.write_byte_data(0x29,0x81,0x01)
def read_sensor_data():
global datalow, datahigh
datalow = bus.read_byte_data(0x29,0x84)
datahigh = bus.read_byte_data(0x29,0x85)
def calc_lux():
global lux
lux = 2*((datahigh<<8)+datalow)
def switch_light():
global lux, socket_on
if lux > light_switch_value and socket_on == False:
print "Messwert: ", lux
print "Messwert uber ", light_switch_value, " - schalte Licht AUS"
subprocess.call(["sudo", "/home/user/raspberry-remote/send", "11111", "3", "0"], stdout=open(os.devnull, 'wb'))
socket_on = True
if lux < light_switch_value and socket_on == True:
print "Messwert: ", lux
print "Messwert unter ",light_switch_value, " - schalte Licht EIN"
subprocess.call(["sudo", "/home/user/raspberry-remote/send", "11111", "3", "1"], stdout=open(os.devnull, 'wb'))
socket_on = False
def main():
init()
while True:
read_sensor_data()
calc_lux()
switch_light()
print lux
sleep(0.2)
if __name__ == '__main__':
main()