Inhaltsverzeichnis

Treppenlich Steuerung

Beschreibung

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.

Bilder

Hardware

  1. Orange Pi Zero (512MB Version)
  2. DC-DC Step down Wandler auf 5V
  3. Mini Bewegungsmelder
  4. BC 337 Transistoren
  5. 12V LED Streifen (5m Rolle)
  6. Widerstände (220 Ohm)
  7. Stiftleisten
  8. Altes Floppykabel
  9. Lochraster Platine
  10. Ein altes 15m Patchkabel (Adern ausgelöst als Leitung zu den LED / Sensoren.
  11. Ein altes 12V Steckernetzteil
  12. stecker / buchsen / schrumpfschlauch
  13. Kabelkanal
  14. Heisskleber
  15. Abstandshalter aus Nylon

Software

FHEM Ausschnite

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")}

Ausschnitte aus dem Python Script

 ### 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()
    
    ###
 

Das Python Script

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

https://wiki.fhem.de/wiki/MQTT_Einf%C3%BChrung
http://www.steves-internet-guide.com/category/mqtt/
https://www.eclipse.org/paho/clients/python/docs/