Shellenberg Funk-Rollos in FHEM mit SmartFriends oder SH1

Begonnen von Matze89, 17 Juli 2021, 10:24:57

Vorheriges Thema - Nächstes Thema

Matze89

NOCH IN ENTWICKLUNG! - Ich werde dies nach und nach vervollständigen.


Liebe FHEM-Community,

gerne möchte ich euch, als Dank für viele andere Lösungen, meine Lösung inkl. Anleitung mit HomeKit und Alexa-Einbindung vorstellen.
Nachdem etliche Jahre vergangen sind und etliche Anfragen zu einer Lösung hier gekommen sind, fand ich eine elegante Lösung.

Kurz Zusammengefasst, wie ich vorgehe:
Es wird eine Clientverbindung (wie von der Smartphone-App SmartFriends) zur Bridge der Shellenberg-Devices aufgebaut und durchgängig beibehalten. Befehle lassen sich lesen oder senden über MQTT, was wir wiederum in FHEM nutzen.

Shellenberg-Funk Rollo <- SmartFriends-Bridge oder SH1 <-> smart-friends-bridge-api <-> MQTT <-> Modul MQTT-Client <-> Modul ROLLO

Welche Funktionen stehen zur Verfügung:
- Shellenberg-Rollos hoch und runterfahren
- Dank ROLLO-Modul: Die Rollo-Position wird in 10%-Schritten von 0% (offen) bis 100% (geschlossen) zwischengespeichert
- Optional: Kostenlose Alexa-Einbindung und HomeKit-Einbindung

Dank geht auch an:
airthusiast - https://github.com/airthusiast/smart-friends-bridge

Was habe ich verwendet:

  • FHEM auf einem (bevorzugt) Raspberry mit Raspbian (normale Version)
  • FHEM Modul MQTT eingerichtet - https://wiki.fhem.de/wiki/MQTT
  • npm
  • SmartFriends-Bridge oder SH1 und bereits eingerichtet/konfiguriert und mit der App auf dem Smartphone verbunden
  • Shellenberg Funk-Rollo verbaut


Installation:
1. Zuerst eine SSH-Verbindung zum Raspberry als pi aufbauen und folgende Befehle ausführen:
npm install https://github.com/airthusiast/smart-friends-bridge.git
2. Die Konfigurationsdatei muss jetzt angepasst werden. Hierzu bitte diese Seite besuchen und die Informationen übernehmen: - Anleitung, wo man spezielle Angaben findet

nano /home/pi/node_modules/smart-friends-bridge/config.json.sample


Zusätzlich noch die MQTT Daten für die FHEM-Verbindung eintragen:

    "mqtt": {
        "url": "mqtt://127.0.0.1",
        "username": "admin",
        "password": "admin"
    },

3. Danach speichern und umbenennen:
mv /home/pi/node_modules/smart-friends-bridge/config.json.sample /home/pi/node_modules/smart-friends-bridge/config.json

4. Jetzt einen Test ausführen
node /home/pi/node_modules/smart-friends-bridge /home/pi/node_modules/smart-friends-bridge/config.json

5. Wenn alles einwandfrei funktioniert, einen Autostart anlegen und den Prozess im Hintergrund zum laufen bringen
sudo nano /etc/systemd/system/smartfriendshome.service

Folgende Daten einfügen:

[Unit]
Description=Smart Friends Home
After=syslog.target network-online.target

[Service]
Type=simple
User=pi
EnvironmentFile=
ExecStart=node /home/pi/node_modules/smart-friends-bridge /home/pi/node_modules/smart-friends-bridge/config.json

Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target


6. Speichern und folgende Befehle danach ausführen:
sudo systemctl daemon-reload
sudo systemctl enable smartfriendshome
sudo systemctl start smartfriendshome
sudo systemctl status smartfriendshome


Jetzt läuft der Dienst im Hintergrund und es müsste schon eine erfolgreiche Verbindung in FHEM-MQTT vorhanden sein.

7. Das kommende Beispiel beruht auf ein Rollo im Schlafzimmer. Die folgende Device-ID lautet "14700". Device ID wird hier erklärt.
define mqtt_rollo_sz MQTT2_DEVICE
attr mqtt_rollo_sz readingList schellenberg/device/value/14700:.* cover_state
attr mqtt_rollo_sz room System
attr mqtt_rollo_sz setList up:noArg    schellenberg/device/value/update/14700 1\
stop:noArg     schellenberg/device/value/update/14700 0\
down:noArg schellenberg/device/value/update/14700 2


8. Jetzt ein Set-Befehl ausführen, ob das Device auch funktioniert:
set mqtt_rollo_sz down
set mqtt_rollo_sz up


9. Wenn alles funktioniert, dann legen wir das mächtige ROLLO-Device an, wodurch wir dann alle Möglichkeiten der perfekten Einbindung haben:
define rollo_sz ROLLO
attr rollo_sz alexaName Rollo Schlafzimmer
attr rollo_sz alias Rollo Schlafzimmer
attr rollo_sz cmdIcon closed:control_centr_arrow_down stop:audio_stop open:control_centr_arrow_up
attr rollo_sz devStateIcon open:fts_shutter_10:closed closed:fts_shutter_100:open half:fts_shutter_50:closed drive-up:fts_shutter_up@red:stop drive-down:fts_shutter_down@red:stop pct-100:fts_shutter_10:open pct-90:fts_shutter_10:closed pct-80:fts_shutter_20:closed pct-70:fts_shutter_30:closed pct-60:fts_shutter_40:closed pct-50:fts_shutter_50:closed pct-40:fts_shutter_60:open pct-30:fts_shutter_70:open pct-20:fts_shutter_80:open pct-10:fts_shutter_90:open pct-0:fts_shutter_100:closed
attr rollo_sz genericDeviceType blind
attr rollo_sz group Rolladen
attr rollo_sz icon fts_shutter_1w
attr rollo_sz rl_autoStop 1
attr rollo_sz rl_commandDown set mqtt_rollo_sz down
attr rollo_sz rl_commandStop set mqtt_rollo_sz stop
attr rollo_sz rl_commandUp set mqtt_rollo_sz up
attr rollo_sz rl_excessBottom 0
attr rollo_sz rl_excessTop 0
attr rollo_sz rl_secondsDown 19
attr rollo_sz rl_secondsUp 18
attr rollo_sz rl_switchTime 2
attr rollo_sz rl_type HomeKit
attr rollo_sz room Home,HomeKit,Räume->Schlafzimmer
attr rollo_sz webCmd open:closed:stop


Dieses Device ist schon für Homebridge und Alexa vorkonfiguriert und auch einsetzbar.
FHEM mit RPi4 ::: SIGNALduino ::: Homebridge + homebridge-fhem ::: Zigbee = RaspBee + Hue + Paulmann + Ikea + Xiaomi ::: DECT = FritzBox 6590 + FRITZ!DECT ::: IR = Harmony ::: SIRO Akku-Rolloantrieb ::: EchoDots + alexa-fhem

Alpha_DE

#1
Danke für den Beitrag, beim Umsetzen ist mir noch aufgefallen, dass das Config-File statt des $ im systemd unit file angegeben werden muss, sonst startet (zumindest auf meinem RPi 4B) das Interface nicht.

ExecStart=node /home/pi/node_modules/smart-friends-bridge /home/pi/node_modules//smart-friends-bridge/config.json

Ansonsten bin ich noch am Experimentieren, die Rollläden fahren manchmal, aber nicht immer.

Mit meiner Box sind

- Schellenberg Rohrmotor mit Funkmodul
- Schellenberg Schalter (zur Steuerung "normaler" Rohrmotoren)
- Schellenberg Gurtwickler und
- ABUS Rauchmelder

verbunden. Ich probiere mal aus, ob ich dazu hier passende Devices posten kann.

Die Schalter und die Gurtwickler listen 3 Devices (Motor, Position und Status), die Rauchmelder 2 (Batterie in % und Rauchmelder 0 und wohl 1)


Matze89

Hallo Alpha_DE,

vielen Dank für die Korrektur.
Im übrigen habe ich auch zur Anfangszeit ab und an die Verbindung verloren. Daher habe ich täglich um Mitternacht ein Script laufen für:

sudo systemctl restart smartfriendshome

Seitdem funktioniert es schon Wochen/Monate.
FHEM mit RPi4 ::: SIGNALduino ::: Homebridge + homebridge-fhem ::: Zigbee = RaspBee + Hue + Paulmann + Ikea + Xiaomi ::: DECT = FritzBox 6590 + FRITZ!DECT ::: IR = Harmony ::: SIRO Akku-Rolloantrieb ::: EchoDots + alexa-fhem

Alpha_DE

#3
Mit der aktuellen Firmware in der Smartfriends-Box funktioniert es bei mir wie folgt: Die Statusseite liefert je Gerät drei IDs, status,  motor und position. Status habe ich mal aufgenommen, ist aber ohne Funktion. Position funktioniert bei den Gurtwicklern Premium und bei den Funkwandschaltern Premium (die einen "dummen" Motor ansteuern) und lässt damit eine pct Steuerung zu:

Gurtwickler/Wandschalter

defmod <name> MQTT2_DEVICE
attr <name> devStateIcon up:fts_shutter_10:down [0-9]:fts_shutter_10:down 100:fts_shutter_100:up down:fts_shutter_100:up 5[0-9]:fts_shutter_50:down 9[0-9]:fts_shutter_90:down 8[0-9]:fts_shutter_80:down 7[0-9]:fts_shutter_70:down 6[0-9]:fts_shutter_60:down 5[0-9]:fts_shutter_50:down 4[0-9]:fts_shutter_40:up 3[0-9]:fts_shutter_30:up 2[0-9]:fts_shutter_20:up 1[0-9]:fts_shutter_10:up
attr <name> genericDeviceType blind
attr <name> readingList schellenberg/device/value/<motor>:.* motor\
schellenberg/device/value/<status>:.* status\
schellenberg/device/value/<position>:.* pct\
schellenberg/device/value/<position>:.* state
attr <name> room MQTT2_DEVICE
attr <name> setList up:noArg schellenberg/device/value/update/<motor> 1\
stop:noArg schellenberg/device/value/update/<motor> 0\
down:noArg schellenberg/device/value/update/<motor> 2\
pct:slider,0,1,100 schellenberg/device/value/update/<position> $EVTPART1


Beim Rolladenmotor Premium funktioniert bei mir nur die Ansprache über die Motor-ID, dafür braucht man dann zusätzlich ein ROLLO Device, wenn man mehr als "auf" und "ab" realisieren möchte.

defmod <name> MQTT2_DEVICE
attr <name> devStateIcon up:fts_shutter_10:down down:fts_shutter_100:up
attr <name> genericDeviceType blind
attr <name> readingList schellenberg/device/value/<motor>:.* cover_state
attr <name> room MQTT2_DEVICE
attr <name> setList up:noArg schellenberg/device/value/update/<motor> 1 \
stop:noArg schellenberg/device/value/update/<motor> 0 \
down:noArg schellenberg/device/value/update/<motor> 2


Den ABUS Rauchmelder habe ich wie folgt eingebunden:

defmod <name> MQTT2_DEVICE
attr <name> devStateIcon 0:Wecker.Wochentags 1:Wecker.Immer
attr <name> icon secur_smoke_detector
attr <name> readingList schellenberg/device/value/<batterie>:.* batterie\
schellenberg/device/value/<state>:.* state


und sorge mit einem Notify dafür, dass bei einem Alarm die Rollläden an den Terassentüren hochfahren, so dass dieser Fluchtweg offensteht.