Felix Geschrieben March 30, 2012 at 18:34 Geschrieben March 30, 2012 at 18:34 Hui ihr Menschen, nachdem nun auch meine zweite Rutsche an Hardware eingetroffen ist, kann's auch etwas konkreter werden. Ich habe heute angefangen eine primitive Jalousiesteuerung zu basteln, mit folgenden Zutaten: - Master Brick - IO 16 Bricklet - Ambient light Brickelt - Qnap NAS - Außenjalousie mit Funkfernbedienung [*]Fernbedienung vorbereiten Das Gehäuse wurde entfernt, genause wie die (in meinem Fall) 12V Batterie. Nach einem Test hat die Fernbedienung auch mit 5V noch sicher geschaltet, also habe ich sie direkt an die Spannungsversorgungsklemmen vom IO Modul angschlossen, das spart die Batterie. Die Taster der Fernbedienung sind Active-High, weshalb ich direkt die Ausgänge A0 & A1 vom IO16 auf die Tasterausgänge gelegt habe. Nun lässt sich über den Brickviewer ein Tastendruck simulieren. [*]QNAP vorbereiten hier muss über ipkg erst noch python installiert werden, zusammen mit dem twisted paket (die Kombination gab es bei mir in der Version 2.6). Gudev ist nicht verfügbag, das ist aber nicht schlimm, man muss nur beachten, dass USB Hotplug dann nicht funktioniert. Anschließend wird das source Paket von brickd auf dem NAS entpackt (vorzugsweise auf einem Bereich der Festplatte, der Flashspeicher ist sehr knapp bemessen). Nachdem der Masterbrick angeschlossen wurde, kann brickd direkt mit dem Startskript gestartet werden. [*]Lustigen Code schreiben Ich habe mich für Python entschieden. Python sei für Anfänger toll, sagt man, und deshalb wollte ich das mal ausprobieren. Ich war begeistert, wie einfach und schnell alles ging. Anbei mein Code, der bestimmt auf einen Profi wie Dilettantentum wirkt, ich hoffe jedoch, das andere Anfänger wie ich mit den Kommentaren zurecht kommen und auch soviel Spaß damit haben. Das Skript schaut alle 10 min wie hell es draußen ist, und wenn ein Grenzwert unterschritten ist, schließt es die Jalousie und andersrum. Das ist natürlich noch nicht praxistauglich, weil der Lichtsensor in einem anderen Raum sein muss, als die Jalousie, aber es ist ein Anfang. Weitere Dinge die interessant sein könnten: - Zeitabhängigkeit als zusätzliche Bedingung hineinbringen- Script durch cron zyklisch aufrufen, dafür doofe Sleep-Funktion rausschmeißen- Deine Ideen... Ich hoffe der ein oder andere konnte hiermit was anfangen, bei Fragen stehe ich gern zur Verfügung (auch wenn die Antwort mal etwas dauern könnte). So und nu der Code (der natürlich auf den hervorragenden Tinkerforge examples basiert: #!/usr/bin/env python # -*- coding: utf-8 -*- HOST = "192.168.0.122" # Change to "localhost" if brickd runs one the same machine PORT = 4223 # Some definitions UP = 0 # IO Port for UpButton DOWN = 1 # IO Port for DownButton UPPER_LIMIT = 0.8 # Illumniance when the jalousie should go up LOWER_LIMIT = 0.5 # Illumniance when the jalousie should go down # Bricklet UIDs UID_IO16 = "XXX" # Change to your UID for 16IO Bricklet UID_ALIGHT = "XXX" # Change to your UID for Ambient Light Bricklet import time from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_io16 import IO16 from tinkerforge.bricklet_ambient_light import AmbientLight # Function to move the Jalousie def move_jalousie(direction): # Set pin on port a to output high io.set_port_configuration('a', 1 << direction, 'o', True) if direction == 0: print ('Holding UP Button...') if direction == 1: print ('Holding DOWN Button...') time.sleep(2) # Hold 'Button' for 2 secs # Release Button io.set_port_configuration('a', 1 << direction, 'o', False) if __name__ == "__main__": ipcon = IPConnection(HOST, PORT) # Create ip connection to brickd io = IO16(UID_IO16) # Create device object ipcon.add_device(io) # Add device to ip connection al = AmbientLight(UID_ALIGHT) # Create device object ipcon.add_device(al) # Add device to ip connection # Don't use device before it is added to a connection while 1: # Run endlessly # Get current illuminance (unit is Lux/10) illuminance = al.get_illuminance()/10.0 # Get it on the screen (not really necessary) print('Illuminance: ' + str(illuminance) + ' Lux') # Don't use device before it is added to a connection # Jalousie goes up if illuminance > UPPER_LIMIT: move_jalousie(UP) # Jalousie goes down if illuminance < LOWER_LIMIT: move_jalousie(DOWN) # Wait 10 minutes, should be done by cron later time.sleep(600) # You will never get here ipcon.destroy() Zitieren
batti Geschrieben March 31, 2012 at 14:50 Geschrieben March 31, 2012 at 14:50 Coole Sache Wir werden im Wiki bald ein paar Beispielprojekte dokumentieren. Vll. könntest du dein Projekt da auch hinzufügen. Könnte mir vorstellen das viele daran Interesse haben und sowas gerne nachbauen wollen. Mach weiter so, sind gespannt. Grüße Bastian Zitieren
Felix Geschrieben March 31, 2012 at 15:37 Autor Geschrieben March 31, 2012 at 15:37 Klar gerne, wenn die Kategorie steht schreib ich das nochmal wikifreundlich auf. Vielleicht bin ich dann auch schon weiter. Gruß Felix Zitieren
AuronX Geschrieben April 23, 2012 at 14:27 Geschrieben April 23, 2012 at 14:27 Weil ich gerade den "you will never get here" Kommentar gelesen habe: try: # die ursprüngliche while-schleife except KeyboardInterrupt: print('Received request to stop the program (Ctrl+C)') # You will now get here ipcon.destroy() Viele Grüße Jan P.S.: Hoffe keine Syntaxfehler gemacht zu haben, aber denke das Grundprinzip erschließt sich auch so Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.