===== 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 ==== {{:img_20180217_143124.jpg?300|}} {{:img_20180217_130014.jpg?300|}} {{:img_20180222_193945.jpg?300|}} {{:img_20180222_193414.jpg?300|}} {{:img_20180222_193621.jpg?300|}} {{:img_20180222_193929.jpg?300|}} {{:img_20180304_132611.jpg?300|}} {{:img_20180304_132555.jpg?300|}} {{::treppe_weiss.jpeg?300|}} ==== Hardware ==== - Orange Pi Zero (512MB Version) - DC-DC Step down Wandler auf 5V - Mini Bewegungsmelder - BC 337 Transistoren - 12V LED Streifen (5m Rolle) - Widerstände (220 Ohm) - Stiftleisten - Altes Floppykabel - Lochraster Platine - Ein altes 15m Patchkabel (Adern ausgelöst als Leitung zu den LED / Sensoren. - Ein altes 12V Steckernetzteil - stecker / buchsen / schrumpfschlauch - Kabelkanal - Heisskleber - 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| ====Links==== 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/\\