Jump to content

Felix

Members
  • Gesamte Inhalte

    5
  • Benutzer seit

  • Letzter Besuch

Posts erstellt von Felix

  1. 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()

  2. Hi ihr tollen tinkerforge Menschen,

    ich habe nun endlich meine Ware (Master Brick + Ambient Light) bekommen, und konnte es nicht erwarten das gleich mal zu testen. Etwas skeptisch habe ich zunächst den daemon und den viewer installiert, und war positiv überrascht, dass alles auf Anhieb ohne Konfiguration funktioniert hat. Alles weitestgehend selbsterklärend, super!

    Dann dachte ich, is ja ganz nett, aber wenn ich (als absoluter Anfänger) jetzt selbst was programmieren möchte...

    Also flugs die Python Beispiele geladen, und dank der hervorragenden Dokumentation innerhalb von <10min ein eigenes kleines lauffähiges Programm gebastelt, was genau das machte, was ich wollte.

    Das macht Spaß & motiviert. Ich freue mich schon auf's Wochenende, dann werde ich mich etwas genauer damit befassen. ;)

     

  3. Hi there,

    we used to have the same discussion during another project a couple of years ago. It turned out, that some of the guys there, who were able to understand both languages, volunteered for writing some kind of weekly summary of the most interesting topics.

    This was very much apprechiated and we called it the "Forum Gazette".

    Maybe we'll find some members who would make the effort to do something like this here as well.

     

×
×
  • Neu erstellen...