Ein Nanopi Neo Air steuert das Licht mehrerer Lampen und erkennt die Anwesenheit von Bluetoothgeräten.
Bei Anwesenheit bestimmter Blutetoothgeräte und Dunkelheit werden die Lampen auf 15% gedimmt eingeschalten. Beim Auslösen eines Bewegungsmelders werden die Lampen im entsprechenden Umfeld auf 100% hochgeschalten. Zusätzlich ist ein Doppelwippschalter über EnOcean eingebunden, welcher eine der Lampen schalten kann. Wird über den EnOcean-Taster eine Lampe eingeschalten so übersschreibt dies die Voreinstellungen der Lampe nach Bluetoothanwesenheit, Helligkeit und Bewegungsmeldungen.
==== EnOcean ====
Verwendung mit EnOcean Pi 868 und Doppelwippschalter.
Tastenbezeichnung:
1 | 3
---+---
2 | 4
|Taste 1|Licht 1+2 an 100%|
|Taste 2|Licht 1+2 aus|
|Taste 3|Licht Terasse an 100%, 70%, 50%|
|Taste 4|Licht Terasse aus|
|Tasten 2+4|Licht 1+2 auf 100% und nach 2 Minuten ausschalten|
|Tasten 1+3|Shutdown/Poweroff|
==== Bluetooth ====
in Armbian-config bluetooth enabled
wget https://bootlin.com/pub/mirror/devmem2.c
gcc -o devmem2 devmem2.c
param_uart3_rtscts=1
sudo ln -s /lib/firmware /etc/firmware
libbluetooth-dev installieren
Aufgerufen in /etc/rc.local:
#!/bin/sh
/etc/scripte/devmem2/devmem2 0x1f00060 b 1
echo 205 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio205/direction
echo 0 > /sys/class/gpio/gpio205/value
echo 1 > /sys/class/gpio/gpio205/value
sleep 0.2
echo -en "" > /dev/ttyS3
sleep 1
/usr/bin/hciattach /dev/ttyS3 bcm43xx 1500000
=== enocean.service ===
/etc/systemd/system/enocean.service
[Unit]
Description=Enocean
After=manage_pwm.service network.target bluetooth.service
[Service]
Type=simple
ExecStartPre=/bin/sleep 20
ExecStart=/home/USER/enocean/read_enocean_bluetooth > /tmp/enocean.log 2>&1 &
[Install]
WantedBy=multi-user.target
gcc read_enocean_bluetooth_le.c -lbluetooth -pthread -o read_enocean_bluetooth -pedantic
Der enocean.service scannt nach bekannten Bluetoothgeräten, erkennt Eingaben über den Taster sowie Aktionen an den Bewegungsmeldern (indem er /tmp/gpio/gpio/(A/B)/X ausliest) und steuert dementsprechend das Licht und/oder sonstige Reaktionen.
Zur Steuerung des Lichts werden die Prozentwerte, mit denen die Lampe X leuchten soll nach /tmp/gpio/pwm/X geschrieben.
=== manage_pwm.service ===
gcc manage_pwm.c -pthread -o manage_pwm -pedantic
Der Dienst manage_pwm kümmert sich um das Auslesen der GPIO des MCP23017 und das Steuern der PWM des PCA9685.
Dazu liest er die Prozentwerte unter /tmp/gpio/pwm/x aus, steuert entsprechend PWM x des PCA9685 und liest die Zustände an den Ports des MCP23017 und schreibt diese nach /tmp/gpio/gpio/Port/Pin.
==== MCP23017 ====
Der MCP23017 ist für das Auslesen des Helligkeitssensors und der PIR-Bewegungsmelder zuständig.
Es können bis zu 16 Geräte angeschlossen und gesteuert werden.
/tmp/gpio/gpio/A/0
^Port/Pin^Verwendung^Port/Pin^Verwendung^
|B0|helligkeit |A7|PIR/Bewegung |
|B1| |A6|PIR/Bewegung innen |
|B2| |A5| |
|B3| |A4| |
|B4| |A3| |
|B5| |A2| |
|B6| |A1| |
|B7| |A0| |
==== PCA9685 ====
Über den PCA9685 werden die angeschlossenen Lampen geschalten und gedimmt.
/tmp/gpio/pwm/0
^PWM^Verwendung^
|0|licht1|
|1|licht2|
|2|licht innen|
==== Bewegungsmelder ====
===Mini IR AM312===
* Betriebsspannung ab 3.3 V
* keine Einstellmöglichkeiten
===HC-SR501 PIR Infrarot-Modul===
* Betriebsspannung 5V-20V, aber auch mit 3,3V verwendbar. Stromversorgung dann über den meist vorhandenen Pin
* Empfindlichkeit (wenn PIR nach unten zeigt links)
gegen Uhrzeigersinn zunehmende Empfindlichkeit (3-7m)
* Schaltdauer (wenn PIR nach unten zeigt rechts)
im Uhrzeigersinn zunehmende Zeitspanne (3s bis 5min)
TTL 3.3 V
==== Spannungsversorgung====
Mean Well HDR-60-12 Hutschienen-Netzteil (DIN-Rail) 12 V/DC 4.5 A 54 W
Lampen:
12V, 0,4A, 2,5 W
I2C_0
3 SDA
5 SCL
I2C_1
8 PCM0_SYNC SCK
9 PCM0_CLK SDA