Skip to content
Maddin0815 edited this page Apr 30, 2021 · 23 revisions

HEYtech Rolladensteuerung mittels Linux-Skripts ansprechen

Thema:

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.

Funktionsbeschreibung

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.

Voraussetzungen

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

Grundlegende Befehlsstruktur der HEYtech-Rolladensteuerung

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)

Funktionstest

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.

Fertiges Linux-Skript

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.

openHAB Integration

Da ich selbst openHAB einsetze, stelle ich meine Einbindung hier ebenfalls kurz dar.

Items-Datei:

String Rolladen_Kommando "Rolladen Kommando"
String Rolladen_Szenario "Rolladen Szenario"

rules-Datei:

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

sitemaps-Datei:

    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"="  \\/  "]
        }
    }

Restliche Befehlsübersicht der HEYtech-Rolladensteuerung

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

Ähnliche Projekte / Andere HEYtech Anbindungen

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