Du bist hier:Start»Wissen»Smarthome»Shades 3

Smart Shades 3 fürs Fenster mit dem Raspberry Pi steuern

23.03.2024

Vorhang

Im Jahr 2017 hatte ich mir das erste Modell der Smart Shades zur Steuerung eines Rollos gekauft. Mittlerweile gibt es "SOMA Smart Shades 3" mit größerem Akku und stärkerem und schnellerem Motor. Zusätzlich gibt es eine Gestensteuerung direkt am Gerät, mit der ein Rollo über eine Wischbewegung hoch und runtergefahren werden kann. Dafür kostet das Smart Shades 3 mit 180 Euro auch 100 Euro mehr als das erste Modell.

Hintergrund

Das "Smart Shades 3" Gerät funktioniert immer noch mit Bluetooth Low Energy und lässt sich vom Raspberry Pi aus mit dem gatttool steuern.

# become root
sudo bash

# install bluetooth and the tools, if not done yet
apt-get install expect bluez bluetooth
# gatttool is contained in bluez

# unblock bluetooth - just in case
rfkill unblock bluetooth

# enable the first bluetooth device
hciconfig hci0 up

# if you have several bluetooth devices
# then search for the bluetooth address (e.g. 00:1A):
export BLUETOOTH_DEVICE=$(hciconfig -a | grep -B1 " 00:1A:" | head -n 1 | sed 's|:.*||g')
hciconfig $BLUETOOTH_DEVICE up

# search bluetooth low energy devices
hcitool lescan

Nach der Installation des Gatttools kann man sich mit dem Smart Shades 3 Gerät verbinden und Befehle absenden. 11:22:33:44:55:66 wurde hier beispielhaft als Bluetooth-Adresse verwendet.

# start gatttool
gatttool -I -i <bluetooth_device> -b <bluetooth_address> -t random

# e.g.
gatttool -I -i hci0 -b 11:22:33:44:55:66 -t random

connect

# prepare to read the position / height value
char-write-req 0x0019 0a00

# read the position of the roller blind from the device - in the third byte (0-64)
char-read-hnd 0x001b

# output of the position (third byte)
Characteristic value/descriptor: 0a 01 64

disconnect

Das dritte Byte der Antwort ist eine hexadezimale Zahl, die die prozentuale Position des Rollos angibt. 0x64 hexadezimal ist 100 dezimal und bedeutet, dass das Rolle zu 100% geschlossen ist. 0 würde bedeuten, dass das Rollo ganz geöffnet wäre.

# prepare to read the battery value
char-write-req 0x0019 0b00

# read the battery value - in the third byte (0-64)
char-read-hnd 0x001b

# output of the battery value (third byte)
Characteristic value/descriptor: 0b 01 51

Das dritte Byte der Antwort auf "0b00" gibt den Ladestand des Akkus in Prozent an. In dem Beispiel bedeutet 0x51, dass der Akku zu 81% geladen ist.

Zum Einstellen der Höhe des Rollos funktioniert das Handle 0x0019 mit "0801", bei dem das dritte Byte die prozentuale Schließung des Rollos angibt. In folgendem Beispiel bedeutet 0x54, dass das Rollo zu 84% geschlossen ist.

# write the height in percent, 0x54 == 84%
char-write-req 0x0019 080154

Expect Skript

Ich habe die Befehle in einem kleinen Expect-Skript zusammengehackt: shades_3_blindsControl.exp. Keine Garantie, dass es funktioniert.

# set the position
./shades_3_blindsControl.exp 11:22:33:44:55:66 setheight 0
./shades_3_blindsControl.exp 11:22:33:44:55:66 setheight 100

# get the position and battery value
./shades_3_blindsControl.exp 11:22:33:44:55:66 getheight
./shades_3_blindsControl.exp 11:22:33:44:55:66 getbattery

Falls noch etwas unklar sein sollte, dann schreib einen Kommentar:

Kommentar schreiben

Ihre Daten werden verschlüsselt übertragen. Der Kommentar wird gelesen und eventuell veröffentlicht.
Wenn der Inhalt des Kommentars oder Teile des Kommentars nicht veröffentlicht werden, dann werden die gespeicherten Daten nach maximal 4 Wochen gelöscht. Um zukünftigen Missbrauch der Kommentarfunktion zu verhindern, werden die zum Kommentar gehörenden IP Adressen maximal 4 Wochen gespeichert.