Hallo zusammen,
ich heiße Benedikt, bin Verfahrenstechnik-Ingenieur und interessiere mich hobbymäßig für Elektronik-Basteleien und Automation. Ich selbst habe bisher leider noch kein eigenes Bier gebraut. Mein Vater braut jedoch ganz leckres Bier, und das bisher "von Hand". Sein Wunsch ist eine Brausteuerung für das Maischekochen. Da die fertig beziehbaren Lösungen jedoch äußerst kostspielig sind, dachte ich, "Das geht doch auch selbstgemacht!". Nachdem ich mich zunächst selbst an die Programmierung gewagt habe, hab ich nun mit CraftBeerPi eine bereits fortgeschrittenere und optisch ansprechendere Lösung gefunden. Die nutze ich natürlich gerne! Vielen Dank an dieser Stelle an Manuel!
Da das Projekt low-budget sein sollte, aber ich den 3,50€-32A-china-SSRelais nicht 100% über den Weg traue, fehlte mir noch die Möglichkeit, meine Funksteckdosen in CBP einzubinden.
Hintergund
Die Ansteuerung des Rührwerks und des Heizinstruments wird bis CraftBeerPi V2.1 üblicherweise mittels Relais realisiert, die direkt mit dem Raspberry verdrahtet werden.
Das Hantieren mit 230V-Spannungen birgt jedoch immer ein gewisses Risiko und setzt entsprechende Fachkundigkeit voraus. Hochwertige Relais kosten auch schnell über 10€ das Stück und müssen je nach Bauart zusätzlich gekühlt werden.
Dieses Thema kann jedoch komplett umgangen werden, wenn drahtlos steuerbare Steckdosen verwendet werden, z.B. WLAN- oder Funk-Steckdosen.
Zum Thema WLAN-Steckdosen hat Gottfried bereits eine saubere Anleitung veröffentlicht. Diese WLAN-Steuerungsmöglichkeit der Steckdosen soll laut in V2.2 sogar direkt implementiert sein.
Hier möchte ich nun erläutern, wie man die Steuerung mittels FUNKsteckdosen realisieren kann. Dabei bediene ich mich ganz dreist an Teilen aus Gottfrieds WLAN-Steckdosen-Anleitung, der damit auch die entscheidende Idee geliefert hat! Vielen Dank!
Die Ansteuerung per Funk hat diverse Vorteile, z.B.:
- wenig Bastelei (5 Jumperkabel verbinden)
- günstige Lösung (vor allem, wenn man noch ein paar alte Funkdosen rumliegen hat ;))
- einfache Konfiguration (Steckdosencode anpassen)
(- keine Abhängigkeit von WLAN-Existenz/-Empfang)
Dabei gilt weiterhin:
- Unabhängig von CBP-Versionsänderung
- Minimale Programmierkentnisse erforderlich (Copy+Paste).
Wie funktionierts?
Kurz gesagt: Die durch CBP ausgelöste Zustandsänderung der GPIOs wird durch ein kleines Pythonprogramm erfasst und der entsprechende Befehl per Funk ausgesendet.
Einkaufsliste
- 1 Stück Raspberry Pi (z.B. 2/3 Modell B. Alle auf denen auch CBP läuft). Z.B. hier ca. 35€
- 1-x Stück 433-MHz-Funksteckdosen je nach Bedarf (z.B. 2 Stück, für Heizung und Rührer), deren Code über DIP-Schalter einstellbar ist. Ca. 5-15 €/Stück.
Achtung: Bei vielen modernen "selbstanlernenden" Funksteckdosen ist der Code nicht einfach manuell über DIP-Schalter einstellbar, sondern muss erst umständlich ausgelesen werden, um ihn anschließend mit dem Raspberry versenden zu können. Wie das geht wird in dieser Anleitung jedoch nicht behandelt, daher siehe google ;)
Achtung: Auf die maximale Ausgangsleistung achten und passend zum angeschlossenen Gerät auswählen! Die meisten gehen nur bis 1000W schalten (4,3 A)! Es gibt aber z.B. auch Modelle bis 3680W (16A)
- 1 Stück 433-MHz-Sender Typ "FS1000A", ca. 1-2 € (meist in Kombinaiton mit zusätzlichem Empfangsmodul erhältlich, z.B. hier, 5 Paar für 4,10€)
- 5 Stück Jumperkabel female-female. Cent-Artikel
Was wird noch benötigt?
- Anschließen des Funksenders an den Raspberry
- Installation von wiringPi und raspberry-remote zum Senden der Funkbefehle
- Erstellen einer Python-Datei, die die GPIOs "abhört" und die Steckdose(n) steuert.
LOS GEHT'S!
Schritt 1: Anschließen des Funksenders, Installation von wiringPi und raspberry-remote
Eine super Anleitung dazu gibt es hier, da muss ich das Rad garnicht erst neu erfinden.
Hinweis: Nach Installation nach obiger Anleitung wird standardmäßig GPIO17/PIN11 für den Funksender genutzt. In CBP sollten demnach andere GPIOS gewählt werde, was in den Kettle-Settings ja sehr einfach durchzuführen ist. Alternativ kann auch der raspberry-remote-Standard bei Bedarf angepasst werden durch einen Eintrag in der init-Datei (Anleitung ergoogelbar ;) ).
An dieser Stelle am besten direkt testen, ob die eigene Steckdose auch geschalten wird. Dazu Steckdose einstecken und "sudo /home/pi/raspberry-remote/send [familycode] [steckdosennummer] [1 für "AN" oder 0 für "AUS"]" ausführen
Hinweis: Die Reichweite hängt ab von der verwendeten Steckdose und vom Sender. An der Steckdose selbst kann man meist nichts mehr verbessern, an den Sender kann man jedoch noch eine 17,3cm lange Antenne anlöten. Ohne Antenne reicht die Reichweite bei mir ca. 4-10m, je nach Beschaffenheit auch durch Wände.
Schritt 2: Anschließen der Jumper-Kabelbrücken
Beim Raspberry müssen nun im ausgeschaltenen Zustand die von CBP angesteuerten GPIO-PINs mit noch nicht belegten GPIO-PINS verbunden werden. Z.B.:
Einstellung CBP:
Heizung = GPIO24
Rührwerk = GPIO 23
Jumper:
GPIO24 --> GPIO22 (="Lauschpin". 22 "lauscht" was 24 macht.)
GPIO23 --> GPIO18
Schritt 3: Python Datei erstellen
Auf dem Raspberry nun eine neue Datei erstellen und als "funkdose.py" benennen.
(Wer mit grafischer Oberfläche arbeitet z.B. direkt auf dem Desktop über "rechte maustaste"-->"neu"-->"leere Datei". Der Pfad lautet dann "/home/pi/Desktop/funkdose.py"
Ansonsten über z.B. "sudo nano /home/pi/Desktop/funkdose.py")
In diese Datei nun folgenden Code kopieren:
----------------funkdose.py ---------------------------------
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: utf-8 -*-
### funkdose.py 26.10.2016 ###
import RPi.GPIO as GPIO
import os
import time
# GPIO initialisieren
GPIO.setmode(GPIO.BOARD)
###
### Wenn z.B. Heizung in CBP auf Pin 18 angesteuert wird --> Pin 18 mit Pin 15 verbinden (Jumper).
### Pin 15 ist nun der "Lauschpin" für die Heizung.
###
#Einstellungen
name1 = "Ruehrer" #Name des "belauschten" Aggregats
lauschpin1 = 12 #PIN-Nummer, auf der gelauscht wird (hier: ="GPIO 18")
code1 = "10000 1" #In Dose eingestellter Family- und Dosen-Code
name2 = "Heizung"
lauschpin2 = 15 # ="GPIO 22".
code2 = "10000 3"
GPIO.setup(lauschpin1, GPIO.IN)
GPIO.setup(lauschpin2, GPIO.IN)
# Interrupt-Service-Funktion fuer beide Flanken
def measure(callback):
if callback == lauschpin1: #Aggregatname und Funkcode festlegen
ziel = name1
code = code1
else:
ziel = name2
code = code2
if GPIO.input(callback) == 0:
print (ziel + " wird ausgeschaltet!")
os.system("sudo /home/pi/raspberry-remote/send "+code+" 0") #ziel ausschalten
else:
print (ziel + " wird eingeschaltet!")
os.system("sudo /home/pi/raspberry-remote/send "+code+" 1") #ziel anschalten
# Interrupt fuer beide Flanken aktivieren
GPIO.add_event_detect(lauschpin1, GPIO.BOTH, callback=measure)
GPIO.add_event_detect(lauschpin2, GPIO.BOTH, callback=measure)
while 1:
# rumdümpeln
time.sleep(1)
Speichern mit STRG+O
Schließen mit STRG+X
Schritt 4: Datei beim Booten starten
Um die funkdose.py nach einem Neustart nicht immer manuell starten zu müssen, kann sie beim Booten automatisch gestartet werden.
Dazu im Terminal
sudo nano /etc/rc.local ausführen und vor exit 0 folgendes eintragen:python /home/pi/Desktop/funkdose.py. Anschließend speichern und schließen.
Das wars! Das Brauen kann losgehen!
Viel Spaß!
Benedikt