Files
2025-04-19 17:11:31 +02:00

74 lines
1.8 KiB
Python

import RPi.GPIO as GPIO
import time
import database
FUNCTIONS = ['green', 'orange', 'red']
class Light:
def __init__(self, pin, name):
self.pin = pin
self.name = name
self.state = database.get_light_state(name)
self.setup()
def setup(self):
GPIO.setmode(GPIO.BCM)
GPIO.setup(self.pin, GPIO.OUT)
self._set(self.state)
def _set(self, state):
if state == self.state:
print('%s is equal %s' % (state, self.state,))
print('setting %s state to: %s' % (self.name, state,))
GPIO.output(self.pin, GPIO.LOW if state == GPIO.HIGH else GPIO.HIGH)
self.state = state
database.set_light_state(self.name, state)
def on(self):
self._set(GPIO.HIGH)
def off(self):
self._set(GPIO.LOW)
def flash(self, count=2, interval=0.2):
for _ in range(count):
self.on()
time.sleep(interval)
self.off()
time.sleep(interval)
class Tower:
def __init__(self, pinList):
self.pins = pinList
self.setupLights()
self.green: Light
self.orange: Light
self.red: Light
def setupLights(self):
if len(FUNCTIONS) != len(self.pins):
raise ValueError("only %s pins provided, but %s available" %
(len(self.pins), len(FUNCTIONS)))
for pin in self.pins:
light = Light(pin['pin'], pin['name'])
if light.name == 'green':
self.green = light
elif light.name == 'orange':
self.orange = light
elif light.name == 'red':
self.red = light
def on(self):
self.green.on()
self.orange.on()
self.red.on()
def off(self):
self.green.off()
self.orange.off()
self.red.off()