-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Hier wird beschrieben wie man eine HEYtech Rolladensteuerung mit ganz einfachen Linux-Skripten ansprechen kann. Durch diesen rudimentären Ansatz kann die Rolladensteuerung in alle Heimautomatisierungslösungen eingebunden werden wie z.B.
- openHAB
- ioBroker (Hier gehts zu einem eigenen ioBroker-Projekt)
- FHEM
- Home Assistant
- NodeRed
Die Rolladensteuerung wird mittels eines Telnet-Aufrufs angesprochen, während dessen die Steuerungsbefehle übergeben werden. Dies ist grundsätzlich auch unter Windows möglich, hier widme ich mich jedoch nur dem Aufruf unter Linux.
Das hier gezeigte funktioniert in jedem Fall mit der Firmware-Version V8.027r. Mit einer älteren Version funktionierte bei mir z.B. die Übergabe eines Prozentwertes (z.B. für Verschattungen) nicht.
Geteste OS-Umgebungen bei mir:
- Raspberry Pi 4 mit openhabian (raspbian 10 (buster)) --- Kernel v5.10.11-v7l+ --- Telnet v0.17-41.2
- Ubuntu 18.04.1 LTS --- Kernel 4.15.0-38-generic --- Telnet v0.17-41
Nachdem man eine Telnet-Verbindung aufgebaut hat, ist dies die grundlegende Befehlsstruktur, die vom LAN-Modul mittels RS232-Schnittstelle übergeben wird:
rhi <CR><CR> // Receive Handsteuerung Initialisierung --> Display wechselt auf Handsteuerungsmaske
rhb <CR> // Receive Handsteuerung Befehl
5 <CR> // Anzusteuernder Kanal, hier beispielsweise 5
up <CR><CR> // Richtung up, down oder off (für Stop) / oder Öffnungsprozent / oder Prozentwert für Dimmer
--> also z.B. 30 für 30%
rhe <CR> // Receive Handsteuerung Exit --> Display zurück zur Grundstellun (Anzeige von Uhrzeit und Datum)
In dem Ordner Testaufrufe habe ich ein paar ganz einfache Linux-Skripte abgelegt mittels derer die Funktion getestet werden kann.
Die Skripte mit "EOF" im Namen geben die Befehle ohne Verzögerung nacheinander an die Rolladensteuerung weiter, dies funktioniert bei mir einwandfrei und diese Methode wird hier als Standard verwendet. Da ein Freund von mir Probleme damit hatte, habe ich noch die Testskripte mit "echo" im Namen eingefügt. Dort kann man zwischen den einzelnen an die Steuerung übergebenen Befehlen noch eine Verzögerung von z.B. 50ms einbauen.
Und hier ist nun das fertige Testskript (Quellcode):
telnet 192.168.1.151 1002 <<EOF
rhi
rhb
1
down
rhe
EOF
Die Zeilenumbrüche stellen den <CR>
bzw. "Return" dar.
Das Bash-Skript besteht aus mehreren Dateien. Diese können aus diesem Ordner heruntergeladen werden: Rolladen
Dateistruktur:
- Rolladen_steuern.sh --> Dies ist das Haupt-Skript, welches aufgerufen wird.
- Rolladen_Variablen.config --> In dieser Datei werden Variablen definiert um den Rolladen und Verschattungswerten sprechende Namen zu geben.
- Szenario_Dein_Szenario_Name.sh --> Für jedes Szenario wird eine eigene Skript-Datei angelegt, die vom Haupt-Skript aufgerufen wird.
Innerhalb der Skript-Dateien habe ich versucht alles so detailliert wie möglich zu dokumentieren, so dass die Erklärung direkt vor Ort stattfindet.
Das Skript Rolladen_steuern.sh wird mit 1 bis 2 Parametern aufgerufen, welche ich hier einfach mit Beispielen erkläre:
- Rolladen_steuern.sh EG_Buero hoch
- Rolladen_steuern.sh EG_Buero runter
- Rolladen_steuern.sh EG_Buero stopp
- Rolladen_steuern.sh EG_Buero verschatten
- Rolladen_steuern.sh Szenario_alle_hoch
- Rolladen_steuern.sh Szenario_Verschattung_Sued_West
Einzelne Rolladenaktionen wie z.B. hochfahren benötigen also 2 Parameter und für ein Szenario muss nur der Name des Szenarios übergeben werden.
Da ich selbst openHAB einsetze, stelle ich meine Einbindung hier ebenfalls kurz dar.
String Rolladen_Kommando "Rolladen Kommando"
String Rolladen_Szenario "Rolladen Szenario"
rule "Rolladen einzeln steuern"
when
Item Rolladen_Kommando changed
then
logInfo("Hinweise", "Rolladen werden einzeln gesteuert")
var Parameter1 = Rolladen_Kommando.state.toString.split(' ').get(0)
var Parameter2 = Rolladen_Kommando.state.toString.split(' ').get(1)
executeCommandLine(Duration.ofSeconds(20),"/home/openhabian/scripts_prod/Rolladen/Rolladen_steuern.sh",Parameter1,Parameter2)
Thread::sleep (200)
Rolladen_Kommando.postUpdate(NULL)
end
rule "Rolladen Szenario"
when
Item Rolladen_Szenario changed
then
logInfo("Hinweise", "Rolladen Szenario wird ausgeführt")
executeCommandLine(Duration.ofSeconds(20),"/home/openhabian/scripts_prod/Rolladen/Rolladen_steuern.sh",Rolladen_Szenario.state.toString)
// 200ms warten, so dass der Knopf in der Sitemap kurz gedrückt bleibt
Thread::sleep (200)
Rolladen_Szenario.postUpdate(NULL)
end
Text label="Rolladen Szenarien / Verschattung" icon="rolladen" {
Frame label="alle" {
Switch item=Rolladen_Szenario label="alle hoch" icon="none" mappings=["Szenario_alle_hoch"=" aktivieren "]
Switch item=Rolladen_Szenario label="alle runter" icon="none" mappings=["Szenario_alle_runter"=" aktivieren "]
}
Frame label="Verschattungen" {
Switch item=Rolladen_Szenario label="Süd/Ost" icon="" mappings=["Szenario_Verschattung_Sued_Ost"=" aktivieren "]
Switch item=Rolladen_Szenario label="Süd/West" icon="" mappings=["Szenario_Verschattung_Sued_West"=" aktivieren "]
Switch item=Rolladen_Szenario label="West" icon="" mappings=["Szenario_Verschattung_West"=" aktivieren "]
}
}
Text label="Rolladen einzeln verschatten" icon="rolladen" {
Frame label="EG" {
Switch item=Rolladen_Kommando label="Büro" icon="none" mappings=["EG_Buero verschatten"="Verschattung aktivieren"]
Switch item=Rolladen_Kommando label="Dusch-WC" icon="" mappings=["EG_DU_WC verschatten"="Verschattung aktivieren"]
Switch item=Rolladen_Kommando label="Küche" icon="" mappings=["EG_Kueche verschatten"="Verschattung aktivieren"]
Switch item=Rolladen_Kommando label="Essen Links" icon="" mappings=["EG_Esszimmer_Links verschatten"="Verschattung aktivieren"]
Switch item=Rolladen_Kommando label="Essen Rechts" icon="" mappings=["EG_Esszimmer_Rechts verschatten"="Verschattung aktivieren"]
Switch item=Rolladen_Kommando label="Wohnz. Links" icon="" mappings=["EG_Wohnzimmer_Links verschatten"="Verschattung aktivieren"]
Switch item=Rolladen_Kommando label="Wohnz. Rechts" icon="" mappings=["EG_Wohnzimmer_Rechts verschatten"="Verschattung aktivieren"]
}
}
Text label="Rolladen einzeln steuern" icon="rolladen" {
Frame label="EG" {
Switch item=Rolladen_Kommando label="Büro" icon="" mappings=["EG_Buero hoch"=" /\\ ","EG_Buero stopp"=" X ","EG_Buero runter"=" \\/ "]
Switch item=Rolladen_Kommando label="Dusch-WC" icon="" mappings=["EG_DU_WC hoch"=" /\\ ","EG_DU_WC stopp"=" X ","EG_DU_WC runter"=" \\/ "]
Switch item=Rolladen_Kommando label="Küche" icon="" mappings=["EG_Kueche hoch"=" /\\ ","EG_Kueche stopp"=" X ","EG_Kueche runter"=" \\/ "]
Switch item=Rolladen_Kommando label="Essen Links" icon="" mappings=["EG_Esszimmer_Links hoch"=" /\\ ","EG_Esszimmer_Links stopp"=" X ","EG_Esszimmer_Links runter"=" \\/ "]
Switch item=Rolladen_Kommando label="Essen Rechts" icon="" mappings=["EG_Esszimmer_Rechts hoch"=" /\\ ","EG_Esszimmer_Rechts stopp"=" X ","EG_Esszimmer_Rechts runter"=" \\/ "]
Switch item=Rolladen_Kommando label="Wohnz. Links" icon="" mappings=["EG_Wohnzimmer_Links hoch"=" /\\ ","EG_Wohnzimmer_Links stopp"=" X ","EG_Wohnzimmer_Links runter"=" \\/ "]
Switch item=Rolladen_Kommando label="Wohnz. Rechts" icon="" mappings=["EG_Wohnzimmer_Rechts hoch"=" /\\ ","EG_Wohnzimmer_Rechts stopp"=" X ","EG_Wohnzimmer_Rechts runter"=" \\/ "]
}
}
Hier möchte ich noch kurz eine Übersicht der Rolladensteuerungsbefehle von der Firma HEYtech dokumentieren:
'*********************** Serielle Schnittstelle ***************************************************************************
'
' Rollladensteuerung sendet Daten Rollladensteuerung empfängt Daten
'
' sdt - send date rdt - receive Date and Time
' sti - send time
' smo - send model
' sfi - send firmware
' sgn - send Geräte-Nummer
' smc - send max channel
' smn - send Motor Namen rmn - receive Motor Namen
' szn - send Szenario-Namen rzn - receive Szenario-Namen
' sfs - send Feste Schaltzeiten rfs - receive Feste Schaltzeiten
' sft - send FeierTage rft - receive FeierTage
' sbp - send Beschattungs-Parameter rbp - receive Beschattungs-Parameter
' sdm - send Dämmerungsst. Morgens Parameter rdm - receive Dämmerungsst. Morgens Parameter
' sda - send Dammerungsst. Abends Parameter rda - receive Dammerungsst. Abends Parameter
' swp - send Wind-Parameter rwp - receive Wind-Parameter
' srp - send Regen-Parameter rrp - receive Regen-Parameter
' sjp - send Jalousie-Parameter rjp - receive Jalousie-Parameter
' sta - send Tast-Automatik-Parameter rta - receive Tast-Automatik
' sgz - send Gruppen-Zentralsteuerung rgz - receive Gruppen-Zentralsteuerung
' sgr - send Gruppen
' sip - send Innentemperatursteuerung Param. rip - receive Innentemperatursteuerung Param.
' shp - send Heizungssteuerung Parameter rhp - receive Heizungssteuerung Parameter
' shh - send Heizungssteuerungs-Hysterese rhh - receive Heizungssteuerung Hysterese
' sfp - send Feuchtesteuerung Param. rfp - receive Feuchtesteuerung Param.
' sap - send Außentemperatursteuerung Param. rap - receive Außentemperatursteuerung Param.
' spp - send Proportionalsteuerung Param. rpp - receive Proportionalsteuerung Param.
' ssp - send Sonderf.param.-Profil rsp - receive Sonderf.param.-Profil
' sas - send Alarm-Setup ras - receive Alarm Setup
' sld - send Logbuch Data
' slf - send Logbuch File
' sla - send Logbuch Anzahl_Datensätze
' slr - send Logbuch Reset
' she - send Helligkeit
' shm - send Helligkeits-Mittelwert
' sit - send Innen-Temperatur
' sig - send Innentemperatur Größtwert
' sik - send Innentemperatur Kleinstwert
' sat - send Außen-Temperatur
' sag - send Außentemperatur Größtwert
' sak - send Außentemperatur Kleinstwert
' swi - send Wind-Geschwindigkeit
' saw - send Auslöseverzögerung Wind raw - receive Auslöseverzögerung Wind
' swm - send Windgeschwindigkeit Max-Wert
' sal - send Alarm-Signal
' sre - send Regen-Signal
' sbh - send Beschattungs-Hysterese rbh - receive Beschattungs-Hysterese
' szz - send Zufalls-Zeitspanne rzz - receive Zufalls-Zeitspanne
' soi - send Offset Innentemperatur roi - receive Offset Innentemperatur
' soa - send Offset Außentemperatur roa - receive Offset Außentemperatur
' rhi - receive Hand-Steuerung Initialisierung
' rhb - receive Hand-Steuerungs-Befehl
' rhe - receive Hand-Steuerung exit
' rsc - receive Sicherheits Code
' skd - send Klima-Daten (u.a.)
' sll - send Logbuch löschen
' swl - send Wind_max löschen
' srs - send Relay Status
' sop - send Oeffnungs-Prozent
' sau - send Automatik-Status (externer Automatik EIN/AUS-Schalter)
' sav - send App-Version
' sss - send security status
' ssz - send Szenarien rsz - receive Szenarien
' rsa - receive Szenario-Aktivierung
ioBroker Adapter: https://github.com/Jey-Cee/ioBroker.heytech
Rest Endpunkt für openHAB (Wird nicht mehr gepflegt und hat bei mir nicht funktioniert, daher bin ich auf die Skripte umgestiegen) https://github.com/ansgarschulte/heytech_rest_endpoint