Steuerung der Lüftungsanlage

Warum die Lüftungsanlage steuern?

Im Winterurlaub 2016 / 17 habe ich mich wieder dem Projekt “Lüftungssteuerung” zugewandt. Mein Elektriker sagte mir, dass man die Steuerung über ein Relais realisieren könne. Das war der entscheidende Tipp! Ich besorgte mir ein 4-Wege-Relais für den Raspi und legte los. Allerdings war das Relais nicht so ohne weiteres für den Raspi geeignet. Es benötigte eine 5-V-Versorgung, welche nicht OotB (Out of the Box) realisiert werden konnte.
Nach einiger Recherche habe ich dann das PIFACE RELAY+ gefunden. Es besitzt 4 Anschlüsse und kann über eine zusätzliche Platine um weitere Relais erweitert werden. Über einfache Steuerbefehle können die einzelnen Relais geöffnet und geschlossen werden.

Installation

Im ersten Schritt wird das Relais mit dem Raspi verbunden und die Jumper korrekt gesetzt. Bei den letzten Boards die ich bekommen habe, waren die Jumper unterschiedlich gesetzt, und ich musste erstmal recherchieren, warum es nicht funktioniert. (Bild!)

Danach wird wiringpi installiert. Damit ist die Steuerung sehr einfach zu realisieren.

sudo mkdir wiringPi
cd wiringPi
wget http://archive.raspberrypi.org/debian/pool/main/w/wiringpi/wiringpi_2.31_armhf.deb
sudo dpkg -i wiringpi_2.31_armhf.deb
dpkg: warning: downgrading wiringpi from 2.46 to 2.31
(Reading database ... 133215 files and directories currently installed.)
Preparing to unpack wiringpi_2.31_armhf.deb ...
Unpacking wiringpi (2.31) over (2.46) ...
Setting up wiringpi (2.31) ...
Processing triggers for libc-bin (2.24-11+deb9u3) ...
Processing triggers for man-db (2.7.6.1-2) ...

gpio -v
gpio version: 2.31
Copyright (c) 2012-2015 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Damit ist es auch schon erledigt. Über einfache Befehle können nun die einzelnen Relais gesteuert werden. Ein kleiner Test:

gpio -p write 200 1
gpio -p write 200 0

Das Scripting

Die Schwierigkeit, eine geeignete Lüftungssteuerung umzusetzen, liegt darin, dass es kaum geeignete Werte gibt, die man als Referenz oder Marker für die Steuerung nehmen kann. Deshalb habe ich mir einen anderen Weg ausgedacht. Ich habe im ersten Schritt eine Zeitsteuerung umgesetzt, die die einzelnen Stufen in Abhängigkeit von der Tageszeit (je volle Stunde) durchschaltet.

Dazu habe ich einen Listener gebaut, der auf eine pipe hört. Hat den Vorteil, dass ich bei dem Konstrukt, auch von außen eingreifen kann, ohne die eigentliche Steuerung ausschalten zu müssen. Aber dazu später mehr. Der Listener sieht folgendermaßen aus:

#!/bin/bash

HOMEPATH=/root/steuerung

##########################################
# Entferne beim Reboot bestehende piepe! #
# lege neue Pipelines an                 #
# Setze Berechtigungen der Pipe          #
# Warte in einer while Schleife, bis     #
# Werte kommen und schalte dann das      #
# Relais!                                #
##########################################

# Listener Anfang #
rm -rf /root/steuerung/stufen_pipe
mknod /root/steuerung/stufen_pipe p
chmod 666 /root/steuerung/stufen_pipe
while true
do
# Listener Ende! #
#################################
# Wartet auf Daten aus der Pipe #
#################################
STUFE=($(cat /root/steuerung/stufen_pipe ))

case "$STUFE" in
1) gpio -p write 200 0
gpio -p write 201 0
gpio -p write 202 0
gpio -p write 203 0
sleep 1
gpio -p write 200 1;;
2) gpio -p write 200 0
gpio -p write 201 0
gpio -p write 202 0
gpio -p write 203 0
sleep 1
gpio -p write 201 1;;
3) gpio -p write 200 0
gpio -p write 201 0
gpio -p write 202 0
gpio -p write 203 0
sleep 1
gpio -p write 202 1;;
4) gpio -p write 200 0
gpio -p write 201 0
gpio -p write 202 0
gpio -p write 203 0
sleep 1
gpio -p write 203 1;;
0) echo "AUS!!!"
gpio -p write 200 0
gpio -p write 201 0
gpio -p write 202 0
gpio -p write 203 0 ;;
esac
done 

So, das ist der Listener. Läuft ohne Probleme und wartet brav auf Anweisungen. Die kommen aus der Zeitsteuerungstabelle und einem Script, welches stündlich nachsieht, auf welcher Stufe die Anlage laufen soll. Können aber auch durch die Home-App kommen, wenn mal mehr oder weniger Luft benötigt wird.

Hintergrund zur Pipe: Wenn man erreichen will, dass ein Prozess von mehreren anderen Prozessen gesteuert werden kann, ist die Pipe mit dem while – do Konstrukt das Mittel der Wahl. Ich habe einige Tage dazu recherchieren müssen, bis ich diese Konstrukt hatte. Es läuft wirklich sehr stabil und man kann es in Kombination mit HomeKit sehr gut immer wieder verwenden. Es ist mit diesem Konstrukt sogar möglich, andere Dienste wie “Alexa”, “Google-Home” oder KNX Systeme einzubinden. Sie müssen nur in der Lage sein, Zahlen in die Pipe zu schreiben! 

Hier das Skript, mit dem ich die Zeitsteuerung Umgesetz habe:

 #!/bin/bash
HOMEPATH=/root/steuerung

##########################
# AUS und Notaus-Prüfung!#
##########################
date=1
actdate=2

if [ -f notaus ]
   then
   date=($(cat notaus | awk '{print $2}' | awk -F "." '{print $1}'))
   actdate=($(date | awk '{print $2}' | awk -F "." '{print $1}'))
fi

if [ -f AUS ]
   then
   echo "AUS gesetzt!" >> /root/steuerung/logs.log

   if [ -f notaus ]
      then
      rm notaus
      echo "lösche notausdatei" >> /root/steuerung/logs.log
   fi

   else

   if [ $date -eq $actdate ]
      then
      echo "Notaus Datei gefunden!" >> /root/steuerung/logs.log
      echo "Tue nix! Notaus gedrückt" >> /root/steuerung/logs.log
      exit

      else
      echo "Datumssteuerung wird verwendet!" >> /root/steuerung/logs.log
      echo "Setze Steuerung korrekt!" >> /root/steuerung/logs.log

##################################
#   prüfen ob listener läuft     #
##################################

ps ax | grep 'listener' | grep -v 'grep'  ||  /root/steuerung/listener.sh &

##################################
# Setzen des Datums und der Zeit #
##################################

datum=($(date +%d.%m))
# echo $datum

zeit=($(date +%H:%M))
#echo $zeit

stunde=($(date +%H))

##################################
# Luefterstufe waehlen           #
##################################
# cat $HOMEPATH/zeittabelle.txt | grep -i $stunde | awk '{print $2}'
cat /root/steuerung/zeittabelle.txt | grep -i $stunde | awk '{print $2}' > /nas/data/luefterstufe.txt
cat /root/steuerung/zeittabelle.txt | grep -i $stunde | awk '{print $2}' > /root/steuerung/stufen_pipe
date >> /root/steuerung/logs.log
   fi
fi

Wichtig ist, dass der Listener läuft; wenn er nicht läuft, muss er erstmal gestartet werden. Das geht unproblematisch mit dem Befehl:

ps ax | grep 'listener' | grep -v 'grep' || /root/steuerung/listener.sh &

Die Steuer-Tabelle zur Zeitsteuerung sieht so aus:

00:00 0
01:00 0
02:00 0
03:00 0
04:00 0
05:00 0
06:00 0
07:00 1
08:00 3
09:00 2
10:00 1
11:00 1
12:00 4
13:00 4
14:00 1
15:00 1
16:00 1
17:00 1
18:00 4
19:00 4
20:00 2
21:00 1
22:00 0
23:00 0

Das Script läuft seit ca. einem Jahr ohne einen Aussetzer. Es waren keine Reboots notwendig.

Aber nun zu der interessanten Steuerung über das iPhone und die Home-App.

Homekit Integration

Es gibt eine NodeJS Integration, welche es erlaubt, einen Raspi oder andere Geräte, einfach in HomeKit verfügbar zu machen. Dazu ist dann aber auch eine Steuerzentrale notwendig. Im ersten Schritt musste dazu mein iPad herhalten. Ich bestellte mir aber auch ein Apple TV 4k.

Auf dem Raspi muss die Software HomeBridge installiert werden. 3 Wege hierzu:

  1. Entweder das Image von hier runterladen oder
  2. die ausführliche Installation bei smartapfel finden oder
  3. unter Tipps und Tricks nachsehen und die verkürzte Anleitung “abarbeiten”.

Nun aber zu den Eigentlichen Plug-ins, mit denen man nun die Lüftungssteuerung nutzen kann. Das Plug-in heißt cmdswitch2 und kann hier runtergeladen werden. Darüber ist es möglich, Unix / Linux Scripte auszuführen. Die Installation erfolgt über:

npm install -g homebridge-cmdswitch2

In der readme-Datei in dem Repository ist die genaue Konfiguration beschrieben. Meine Anpassungen findet Ihr hier:

{
    "bridge": {
        "name": "Lüftung",
        "username": "CC:22:3D:E3:CE:33",
        "port": 51826,
        "pin": "031-45-154"
    },
"accessories": [
],

"platforms": [{
"platform": "cmdSwitch2",
"name": "CMD Switch",
"switches": [{
"name" : "Stufe 1",
"on_cmd": ". /root/steuerung/stufe_1.sh &",
"off_cmd": ". /root/steuerung/stufe_0.sh &",
"state_cmd": "cat /nas/data/luefterstufe.txt | grep -i 1",
"polling": true,
"interval": 2
}, {
"name" : "Stufe 2",
"on_cmd": ". /root/steuerung/stufe_2.sh &",
"off_cmd": ". /root/steuerung/stufe_0.sh &",
"state_cmd": "cat /nas/data/luefterstufe.txt | grep -i 2",
"polling": true,
"interval": 2
}, {
"name" : "Stufe 3",
"on_cmd": ". /root/steuerung/stufe_3.sh &",
"off_cmd": ". /root/steuerung/stufe_0.sh &",
"state_cmd": "cat /nas/data/luefterstufe.txt | grep -i 3",
"polling": true,
"interval": 2
}, {
"name" : "Stufe 4",
"on_cmd": ". /root/steuerung/stufe_4.sh &",
"off_cmd": ". /root/steuerung/stufe_0.sh &",
"state_cmd": "cat /nas/data/luefterstufe.txt | grep -i 4",
"polling": true,
"interval": 2
}, {
"name" : "Stufe 0",
"on_cmd": ". /root/steuerung/stufe_0.sh &",
"off_cmd": ". /root/steuerung/stufe_0.sh &",
"state_cmd": "cat /nas/data/luefterstufe.txt | grep -i aus",
"polling": true,
"interval": 2
}, {
"name" : "Automatik",
"on_cmd": "/root/steuerung/automatik.sh &",
"off_cmd": ". /root/steuerung/stufe_0.sh &",
"state_cmd": "cat /nas/data/luefterstufe.txt | grep -i automatik",
"polling": true,
"interval": 2
}]
}]
}

Damit ist es möglich über die noch fehlenden Scripte das Relais zu steuern. Hier nun die Scripte: stufe_1.sh.

#!/bin/bash
HOMEPATH=/root/steuerung
ps ax | grep 'listener' | grep -v 'grep'  ||  /root/steuerung/listener.sh &
echo 1 > /root/steuerung/stufen_pipe
echo 1 > /nas/data/luefterstufe.txt

Die stufe 2 – 4 sind analog anzupassen. Die stufe_0.sh sieht so aus:

#!/bin/bash
HOMEPATH=/root/steuerung
ps ax | grep 'listener' | grep -v 'grep'  ||  /root/steuerung/listener.sh &
echo 0 > /root/steuerung/stufen_pipe
echo aus > /nas/data/luefterstufe.txt

Das war’s! Das Relais läßt sich über HomeKit ansteuern und die einzelnen Stufen lassen sich schalten bzw. es wird die momentan laufende Stufe angezeigt.

Es gibt noch weitere Plug-ins, mit denen z. B. auch Temperaturen oder Feuchtigkeit dargestellt werden können. https://alexbloggt.com/homebridge-einrichten-erweitern/ 

Hier noch Bilder vom Raspberry:

Alter Schalter der ersetzt wurde:

Viel Spass mit diesem Projekt!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.