Felix
-
Gesamte Inhalte
5 -
Benutzer seit
-
Letzter Besuch
Posts erstellt von Felix
-
-
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() - - Zeitabhängigkeit als zusätzliche Bedingung hineinbringen
-
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.
-
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.
-
Ui klasse, fein, dass es jetzt losgeht. Dann hab ich endlich eine sinnvolle Beschäftigung für die Osterzeit.
Ich freu mich!
Jalousiesteuerung
in Projektvorstellungen und Projektideen
Geschrieben
Klar gerne,
wenn die Kategorie steht schreib ich das nochmal wikifreundlich auf. Vielleicht bin ich dann auch schon weiter.
Gruß
Felix