Jump to content

Jalousiesteuerung


Recommended Posts

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

  • 4 weeks later...

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 ;)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...