Da wir unseren Flur renovieren und auch die Treppe neu lackieren wollten entstand die Idee hier eine Beleuchtung einzubauen.
Als Basis dient hier ein Orange Pi Zero. Dieser hat einen 26 pin GPIO welcher mit dem Raspi 1 kompatibel ist.
Die komplette Schaltung ist auf einer Lochraster Platine realisiert.
Unter jeder Stufe klebt ein Streifen mit 9 12V LED.
Oben im Geländer und unten unter der ersten Stufe ist je ein Bewegungsmelder angebracht.
Die Kabel dazu sind für den oberen Melder, sowie die oberen 3 Stufen im Holz eingelassen. Darunter direkt mit einem kleinen Loch durch die Treppe geführt.
Geht nun jemand an diesem vorbei, so wird die Treppe von dort ausgehend Stufe für Stufe beleuchtet.
Nach 10 Sekunden ohne aktivierung eines Melders werden die Streifen der Reihe nach wieder abgeschaltet.
Der Pi hat effektiv 17 nutzbare I/O pins. Davon werden 2 für die Melder und 15 zur LED Steuerung verwendet.
Er ist nur mit der Platine mittels Floppy Kabel verbunden.
Die Melder haben 3 Anschluesse +(Hier 12V) / Masse / Output (3.3V). Die beiden Outputs gehen direkt zu je einem GPIO Pin.
Die Transistoren werden mittels Vorwiderstand vom Pi gesteuert und in Emitterschalung betrieben (Masse am Emitter / Collector über den LED Streifen gegen 12V).
Die Logik liegt im angehangenen Python Script.
Damit das ganze von der schon vorhandenen Hausautamation, welche mit FHEM realisiert ist, ist der Orange Pi mit dem FHEM Server per MQTT verbunden.
Beschreibung siehe unten.
Als kleines Gimmick habe ich fuer meine Kids noch ein kleines Spiel eingebaut.
Wenn sie nun Zur Alexa „Starte Game“ sagen, fangen die Lichter an der Treppe an Random an und aus zu gehen.
Nach 3 Durchgängen wird dann eine nur Stufe fuer 15sec. beleuchtet. Derjenige hat gewonnen dessen Füsse beleuchtet werden, oder am nächsten dransteht.
Hier gab es eine kleine Herausforderung.
Ich hatte den Broker (2 Zeile hier.) erst per Web oberfläche (kleines Eingebefeld oben.) eingerichtet und den Rest direkt mit der Option „Edit Files“ in der Konfig Datei eingetragen.
Das hatte zur Folge das die Schalter ziemlich in der Mitte definiert wurden der Broker aber erst zum Schluss.
Das Ergebniss war dann, das keine Events gesendet wurden.
Nachdem der Broker nun erst definiert wird, funktionierte dann alles wie gewollt.
Der Zusätzliche Schalter „Stufenspiel“ wurde nötig, da Alexe den Befehl „Schalte Treppe auf spielen“ nicht verstanden hat.
### MQTT
define Mosquitto MQTT localhost:1883
### Hilfsvariablen
### Dummy is Day
define is_Day dummy
attr is_Day room Dev
attr is_Day setList on off
define mqtt_bridge_is_Day MQTT_BRIDGE is_Day
attr mqtt_bridge_is_Day IODev Mosquitto
attr mqtt_bridge_is_Day publishState fhem/TW/is_Day
attr mqtt_bridge_is_Day room MQTT
attr mqtt_bridge_is_Day stateFormat transmission-state
### Dummy Treppe
define Treppe dummy
attr Treppe alexaName Treppe
attr Treppe group alexa
attr Treppe room Flur
attr Treppe setList on off spielen
define mqtt_bridge_Treppe MQTT_BRIDGE Treppe
attr mqtt_bridge_Treppe IODev Mosquitto
attr mqtt_bridge_Treppe publishState fhem/Flur/Treppe
attr mqtt_bridge_Treppe room MQTT
attr mqtt_bridge_Treppe stateFormat transmission-state
attr mqtt_bridge_Treppe subscribeSet fhem/Flur/Treppe/set
define Stufenspiel dummy
attr Stufenspiel alexaName game
attr Stufenspiel group alexa
attr Stufenspiel room Dev
attr Stufenspiel setList on off
## IsDay
define isDay_wt_twilight WeekdayTimer is_Day {twilight("T","ss_weather","16:00","21:00")}|off {twilight("T","sr_weather","04:00","11:00")}|on
attr isDay_wt_twilight commandTemplate set $NAME $EVENT
define Stufenspiel_nfy notify Stufenspiel:on {fhem ("set Stufenspiel off;;set Treppe spielen")}
### MQTT
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
print "Connected with result code %s" % rc
# Subscribing in on_connect() means that if we lose the connection and
# reconnect then subscriptions will be renewed.
client.subscribe("fhem/TW/is_Day")
#client.subscribe([("fhem/TW/is_Day"), ("fhem/Flur/Treppe")])
client.subscribe("fhem/Flur/Treppe")
# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
global day
global state
print "Topic: ", msg.topic+"\nMessage: "+str(msg.payload)
if msg.topic == "fhem/TW/is_Day":
print "Topic matched"
if msg.payload == "on":
day = True
if msg.payload == "off":
day = False
if msg.topic == "fhem/Flur/Treppe":
state = msg.payload
topic = "fhem/Flur/Treppe/set"
global act
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("192.168.1.10", 1883, 60)
# Blocking call that processes network traffic, dispatches callbacks and
# handles reconnecting.
# Other loop*() functions are available that give a threaded interface and a
# manual interface.
print "Start MQTT Listener"
client.loop_start()
###
| treppe.tgz | - Initiale Version |
| treppe0.2.tgz | - Im Automodus wird die Ansteuerung in Forks ausgelagert. - Anbindung an FHEM - Ein Spiel |
| treppe0.3.tgz | - Bugfix, behandlung der Child Prozesse |