sonoff-Geräte mit tasmota-Firmware auf CCU2 anbinden

sonoff-Geräte mit tasmota-Firmware auf CCU2 anbinden

In diesem Blogpost möchte ich erklären, wie der Sonoff problemlos in Homematic eingebunden werden kann. Ich habe einige Lösungen gefunden, wie die Sonoff-Geräte in Homematic eingebunden werden können. Leider hatten diese Lösungen einen großen Nachteil. Die Statusmeldung von den Sonoff-Geräten wird entweder gar nicht abgefegt, oder wird kontinuierlich abgefragt (z. B. jede 60 Sekunden), was wiederum die CCU auslastet. Somit habe ich mich dazu entschlossen, ein Skript hierfür zuschreiben. Bisher habe ich das Skript mit Sonoff Basic, Sonoff Dual und Sonoff S20 Steckdose getestet, andere Hardware habe ich nicht getestet, sollte aber funktionieren. Zurzeit ist nur das Schalten von Sonoff-Geräte möglich, später werden weitere Funktionen in dem Skript umgesetzt. Außerdem ab Version 6.4.0 von Tasmota-Firmware ist es möglich per „Websend“-Befehl den Status des Geräts per HTTP-Request mitzuteilen, somit wird keine kontinuierliche Abfrage des Status vom Sonoff-Gerät notwendig.

Voraussetzungen

  • CCU/RaspberyMatic
  • installiertes CUxD-Addon auf der CCU
  • FTP Programm mit sFTP Unterstützung (z. B. FileZilla)
  • Sonoff-Gerät mit Sonoff-Tasmota Firmware mit Version 6.4.0+

Konfiguration CCU

Die Einbindung der Sonoff-Geräte erfolgt mithilfe eines Skripts. Das Skript kann hier herunterladen werden:

Herunterladen

Um das Skript auf die CCU einspielen, soll die SSH Schnittstelle auf der CCU eingeschaltet werden. Dazu öffnen wir zuerst die WebUI der Homematic und gehen in die Systemsteuerung in den Punkt Sicherheit

Dort aktivieren wir temporär die SSH Schnittstelle und vergeben ein Passwort.

Danach muss die Skript-Datei mit einem FTP Programm (bpsw. FileZilla) auf die CCU geladen werden. Dazu öffnen wir ein FTP Programm und verbinden uns mit der CCU.

Dazu auf „Neuer Server“ Knopf drücken, es wird ein Servermanager aufgerufen. In dem Servermanager-Dialog auf „Neuer Server“ klicken und einen Servernamen eingeben. Im Textfeld Server soll die IP-Adresse der CCU eingetragen werden. Als Protokoll soll SFTP gewählt werden. Als verbindungsart „Normal“ auswählen. Im Textfeld „Benutzer“ soll „root“ eingetragen werden, im Textfeld „Passwort“ soll das Passwort für die SSH Schnittstelle eingetragen werden, das ich in WebUI gesetzt haben. Abschließend auf „Verbinden“ klicken, um die Verbindung zur CCU2 zu starten. Falls die Verbindung geklappt ist, gehen wir weiter.

Im FileZilla links in den Verzeichnis auf PC/Mac gehen, wo das Skript heruntergeladen wurde. Rechts in das Verzeichniss „/usr/local/addons/cuxd/user/“ gehen. Im FileZilla gehst du eine Verzeichnissebene höher, indem du auf „..“ doppelklickst.

Anschliessend überträgst du die Datei sonoff.sh aus dem lokalen Verzeichnis von deinem PC/Mac in das Verzeichnis /usr/local/addons/cuxd/user/sonoff.sh auf der CCU. Dass kann per Drag & Drop gemacht werden.

Das hochgeladene Skript soll ausführbar gemacht werden, in dem der Datei noch die korrekten Berechtigungen eingeräumt werden. Dies kann auch direkt im FileZilla gemacht werden. Dazu die Datei Eigenschaften anzeigen lassen und die Berechtigung 755 für alle Dateien vergeben.

Die korrekten Berechtigungen können auch in der Console mit folgendem Befehl vergeben werden: chmod +x /usr/local/addons/cuxd/user/sonoff.sh

Wenn alles erfolgreich ist kann man den SSH Zugang in der HM WebUI wieder deaktivieren.

CUxD Device anlegen und konfigurieren

Das Sonoff-Gerät wird im Homatic System mit einem virtuellen CUxD-Gerät dargestellt. Mit diesem virtuellen Gerät wird der jeweilige Sonoff-Gerät gesteuert. Dazu ist ein neues CUxD Device anzulegen. Dazu die CuXD-Console öffnen, die ist unter Startseite > Einstellungen > Systemsteuerung zu finden.

cuxd02

Danach auf die Geräte-Seite wechseln. Dort das Gerät (28) System auswählen. Als Funktion Exec auswählen und als Control Schalter auswählen. Optional kann der Namen eingetragen und der Geräte-Icon ausgewählt werden.  Bei der Seriennummer kann die Vorgabe verwendet werden. Abschließend „Gerät auf der CCU erzeugen!“ drücken und auf die CCU2 Web Oberfläche wechseln.

Auf der CCU Oberfläche fügen wir nun ein neues Gerät hinzu, im Posteingang sollte das soeben erstelle neue Gerät bereits angezeigt werden. Es wird anschließend in der WebUI ein virtuelles Gerät mit 16 Kanälen erzeugt. Mit einem einzelnen CUxD Gerät mit 16 Kanälen sind somit 16 verschiedene Sonoff-Geräte steuerbar.

Nun soll der zuvor erstellte CUxD-Gerät konfiguriert werden, dazu im WebUI in die Einstellungen->Geräte gehen, den zuvor erstellten CUxD-Gerät aussuchen und auf das „Einstellen“ drücken:

Hier kann die Steuerung der Sonoff-Geräte eingerichtet werden:

Folgende Geräteparameter sollen eingetragen werden:

  • PARAM1 /usr/local/addons/cuxd/user/sonoff.sh

Folgende Kanalparameter sollen für Sonoff Geräte mit einem Relais (z. B. Sonof Basic, S20 usw.) eingetragen werden:

Kanalparameter (tasmota mit Passwort im WebIf)

  • Unter „SWITCH|CMD_SHORT“ wird der Ausschaltbefehl eingetragen:
    $_P1$ -f power -c $CHANNEL$ -i $_C1$ -u $_C2$ -p $_C3$ -o 0
  • Unter  „SWITCH|CMD_LONG“ wird der Einschaltbefehl eingetragen:
    $_P1$ -f power -c $CHANNEL$ -i $_C1$ -u $_C2$ -p $_C3$ -o 1
  • Unter  „SWITCH|CH_PARAM1“ wird die IP-Adresse des Sonoff-Geräts eingetragen:
    192.168.XXX.XX
  • Unter  „SWITCH|CH_PARAM2“ kann der User-Name eingetragen werden:
    username
  • Unter  „SWITCH|CH_PARAM3“ kann der Passwort eingetragen werden:
    password

Kanalparameter (tasmota ohne Passwort im WebIf):

  • SWITCH|CMD_SHORT: $_P1$ -f power -c $CHANNEL$ -i $_C1$ -o 0
  • SWITCH|CMD_LONG: $_P1$ -f power -c $CHANNEL$ -i $_C1$ -o 1
  • SWITCH|CH_PARAM1: 192.168.XXX.XX

Falls ihr einen Gerät mit zwei Relais (z. B. Sonoff Dual) an Homematic einbinden wolltet, braucht ihr pro Relais einen Kanal. Jedes Kanal steuert dann ein Relais.

Kanalparameter des 1. Kanals für die Steuerung des 1. Relais sehen dann so aus:

Mit Passwort im WebUI

  • SWITCH|CMD_SHORT: $_P1$ -f power -c $CHANNEL$ -i $_C1$ -u $_C2$ -p $_C3$ -o 0 -n 1
  • SWITCH|CMD_LONG: $_P1$ -f power -c $CHANNEL$ -i $_C1$ -u $_C2$ -p $_C3$ -o 1 -n 1
  • SWITCH|CH_PARAM1: 192.168.XXX.XX
  • SWITCH|CH_PARAM2: username
  • SWITCH|CH_PARAM3: password

Ohne Passwort im WebUI

  • SWITCH|CMD_SHORT: $_P1$ -f power -c $CHANNEL$ -i $_C1$ -o 0 -n 1
  • SWITCH|CMD_LONG: $_P1$ -f power -c $CHANNEL$ -i $_C1$ -o 1 -n 1
  • SWITCH|CH_PARAM1: 192.168.XXX.XX

Kanalparameter des 2. Kanals für die Steuerung des 2. Relais sehen dann so aus:

Mit Passwort im WebUI

  • SWITCH|CMD_SHORT: $_P1$ -f power -c $CHANNEL$ -i $_C1$ -u $_C2$ -p $_C3$ -o 0 -n 1
  • SWITCH|CMD_LONG: $_P1$ -f power -c $CHANNEL$ -i $_C1$ -u $_C2$ -p $_C3$ -o 1 -n 1
  • SWITCH|CH_PARAM1: 192.168.XXX.XX
  • SWITCH|CH_PARAM2: username
  • SWITCH|CH_PARAM3: password

Ohne Passwort im WebUI

  • SWITCH|CMD_SHORT: $_P1$ -f power -c $CHANNEL$ -i $_C1$ -o 0 -n 1
  • SWITCH|CMD_LONG: $_P1$ -f power -c $CHANNEL$ -i $_C1$ -o 1 -n 1
  • SWITCH|CH_PARAM1: 192.168.XXX.XX

Am Beispiel der Sonoff S20 Geräte sieht es nun bei mir wie folgt aus:

Ich habe 3 Sonoff S20 Geräte eingerichtet, einen Gerät pro Kanal.

Konfiguration Sonoff-Gerät

Hier wollte ich nochmal betonen, dass die Sonoff-Tasmota-Firmware die Version 6.4.0+ haben soll. Falls es nicht der Fall sein sollte, die Firmware zuerst updaten. Dafür im Browser die IP-Adresse von dem Sonoff-Gerät eingeben, in der geöffneter Webseite des Geräts auf „Firmware Upgrade“ klicken und weiteren Anweisungen auf der geöffneter Webseite folgen.

Sonoff-Gerät mit einem Relais (z. B. Sonoff Basic)

Hier wird der Sonoff-Gerät konfiguriert, damit der Geräte-Status an die Homematic CCU geliefert wird, sobald der Gerät manuell (durch Hardware-Button) ein- bzw. ausgeschaltet wird. Um diese zu realisieren, muss eine entsprechende Regel definiert werden. Dazu in dem Browser die IP-Adresse von dem Sonoff-Gerät eingeben, Webseite des Geräts wird geöffnet.

Dort auf die „Console“ clicken, die Console zur Konfiguration des Geräts wird geöffnet. 

Hier soll folgendes Test (mit eigenen Daten ergänzt) eingegeben werden:

rule1 on power1#state=1 do WebSend [192.168.XXX.XXX:8181] /Test.exe?Status=dom.GetObject('CUxD.CUXxxxxxxx:x.STATE').State(true) endon on power1#state=0 do WebSend [192.168.XXX.XXX:8181] /Test.exe?Status=dom.GetObject('CUxD.CUXxxxxxxx:x.STATE').State(false) endon

Anstatt 192.168.XXX.XXX soll die IP-Adresse des CCU eingegeben werden.

Anstatt CUXxxxxxxx:x soll die Bezeichnung des virtuellen Kanals eingegeben werden, der den Sonoff-Gerät steuern soll, z. B. CUX2801002:1

Die Regel muss noch eingeschaltet werden, dazu in der Console folgendes eingegeben wird:

rule1 ON

Somit sind wir fertig! Sobald der Sonoff-Gerät ein- bzw. ausgeschaltet wird, wird ein WEBSEND-Befehl ausgeführt, der ein HTTP-Request an die CCU sendet und dem virtuellen CUxD-Gerät sein aktuellen Status mitteilt.

Sonoff-Gerät mit zwei Relais (z. B. Sonoff Dual)

Regel (mit eigenen Daten ergänzt):

rule1 on power1#state=1 do WebSend [192.168.XXX.XXX:8181] /Test.exe?Status=dom.GetObject('CUxD.CUXxxxxxxx:x.STATE').State(true) endon on power1#state=0 do WebSend [192.168.XXX.XXX:8181] /Test.exe?Status=dom.GetObject('CUxD.CUXxxxxxxx:x.STATE').State(false) endon on power2#state=1 do WebSend [192.168.XXX.XXX:8181] /Test.exe?Status=dom.GetObject('CUxD.CUXxxxxxxx:y.STATE').State(true) endon on power2#state=0 do WebSend [192.168.XXX.XXX:8181] /Test.exe?Status=dom.GetObject('CUxD.CUXxxxxxxx:y.STATE').State(false) endon

Anstatt 192.168.XXX.XXX soll die IP-Adresse des CCU eingegeben werden.

Anstatt CUXxxxxxxx:x und CUXxxxxxxx:y sollen die Bezeichnungen der beiden virtuellen Kanälen eingegeben werden, die den Sonoff-Gerät steuern sollen, z. B. CUX2801002:1 und CUX2801002:2

Regel einschalten:

rule1 ON

Sonoff-Gerät mit 4 Relais (z. B. Sonoff 4CH)

Regel (mit eigenen Daten ergänzt):

rule1 on power1#state=1 do WebSend [192.168.XXX.XXX:8181] /Test.exe?Status=dom.GetObject('CUxD.CUXxxxxxxx:x.STATE').State(true) endon on power1#state=0 do WebSend [192.168.XXX.XXX:8181] /Test.exe?Status=dom.GetObject('CUxD.CUXxxxxxxx:x.STATE').State(false) endon on power2#state=1 do WebSend [192.168.XXX.XXX:8181] /Test.exe?Status=dom.GetObject('CUxD.CUXxxxxxxx:y.STATE').State(true) endon on power2#state=0 do WebSend [192.168.XXX.XXX:8181] /Test.exe?Status=dom.GetObject('CUxD.CUXxxxxxxx:y.STATE').State(false) endon on power3#state=1 do WebSend [192.168.XXX.XXX:8181] /Test.exe?Status=dom.GetObject('CUxD.CUXxxxxxxx:z.STATE').State(true) endon on power3#state=0 do WebSend [192.168.XXX.XXX:8181] /Test.exe?Status=dom.GetObject('CUxD.CUXxxxxxxx:z.STATE').State(false) endon on power4#state=1 do WebSend [192.168.XXX.XXX:8181] /Test.exe?Status=dom.GetObject('CUxD.CUXxxxxxxx:w.STATE').State(true) endon on power4#state=0 do WebSend [192.168.XXX.XXX:8181] /Test.exe?Status=dom.GetObject('CUxD.CUXxxxxxxx:w.STATE').State(false) endon

Anstatt 192.168.XXX.XXX soll die IP-Adresse des CCU eingegeben werden.

Anstatt CUXxxxxxxx:x; CUXxxxxxxx:y; CUXxxxxxxx:z; CUXxxxxxxx:w sollen die Bezeichnungen der vier virtuellen Kanälen eingegeben werden, die den Sonoff-Gerät steuern sollen, z. B. CUX2801002:1; CUX2801002:2; CUX2801002:3; CUX2801002:4

Regel einschalten:

rule1 ON

Dieser Beitrag hat 26 Kommentare

  1. Guten Abend,

    ich habe mich an ihre Anleitung für einen Sonoff CH4 gehalten, bekomme jedoch den Status nicht an die Raspmatic zurück geliefert. Schalten funktioniert über Raspmatic einwandfrei. Die Rule habe ich mit IP und CuxD-Bezeichnung angepasst, über die Console eingespielt und auf On gesetzt. Rufe ich den WebSend im Browser auf, wird der Status korrekt gesetzt. Über den Sonoff kommt aber nichts an.
    Woran kann das liegen?
    Danke

    Grüße Markus

    1. Welche Firmaware-Version haben Sie? Das Ganze funktioniert nur mit 6.4.0 oder höher.

      Geben Sie in der Konsole rule1 ein, was bekommen Sie als „RESULT“?

      Bei mir steht dan so was:
      15:06:55 RSL: RESULT = {„Rule1″:“ON“,“Once“:“OFF“,“StopOnError“:“OFF“,“Free“:257,“Rules“:“on power1#state=1 do WebSend [192.168.178.24:8181] /Test.exe?Status=dom.GetObject(‚CUxD.CUX2801003:2.STATE‘).State(true) endon on power1#state=0 do WebSend [192.168.178.24:8181] /Test.exe?Status=dom.GetObject(‚CUxD.CUX2801003:2.STATE‘).State(false) endon“}

  2. Hallo,
    habe die 6.4.1 geflashed. Könnte das Problem soeben lösen. Laut Doku wird eine maximale Länge von 511 Zeichen genannt. Die gesamte Rule besteht aber aus 1009 Zeichen. Ich habe nun zwei Rules erstellt und jetzt klappt es auch.

    Grüße Markus

    1. Hallo,
      Danke für die Rückmeldung. Ich werde es in dem Artikel vermerken.
      Grüße
      Dmitri

  3. Hallo, habe gerade zwei Obi-Steckdosen mit deiner Anleitung erfolgreich an meiner CCU2 in Betrieb genommen.
    Super Anleitung und super erklärt – großes Dankeschön und schon mal ein paar Tassen Kaffee bezahlt…
    Es gibt ja noch andere Anleitungen im Netz, wie ich Tasmota mit Homematic verknüpfe. Die eine funktioniert mit eigener FW – wird aber nicht weiter gepflegt
    Die Andere ist scheinbar eingeschlafen, funktioniert aber bei mir überhaupt nicht, da das Script auf CCU2 (akt FW) mit getopts und curl Fehlern abbricht.
    Nun mein Wunschdenken: Du erweiterst Dein Script, so das ich z.B. einen Sonoff SV mit Temp+Hygro-Sensor an meiner CCU2 nutzen kann.
    Bleibt das Wunschdenken – oder bist Du noch an weiteren Projekten?
    Großes Dankeschön bis hier schon mal – Grüße Dirk

    1. Das Update ist auf jeden Fall geplant, die Zeit kann ich leider nicht nennen, da ich im Moment viel zu tun habe…
      P.S.
      Vielen Dank für den Kaffee 🙂

  4. Danke, da beruhigt mich – ich bleibe dann mal in entspannt-gespannter Erwartungshaltung – was lange dauert wird gut 🙂

  5. Hallo, ein Frage ich habe ein Sonoff 4CH. Die ersten beiden Kanäle sind ansteuerbar. Nur Kanal 3 und 4 nicht.
    $_P1$ -f power -c $CHANNEL$ -i $_C1$ -o 0 -n 1
    $_P1$ -f power -c $CHANNEL$ -i $_C1$ -o 0 -n 2
    $_P1$ -f power -c $CHANNEL$ -i $_C1$ -o 0 -n 3
    $_P1$ -f power -c $CHANNEL$ -i $_C1$ -o 0 -n 4

    $_P1$ -f power -c $CHANNEL$ -i $_C1$ -o 1 -n 1
    $_P1$ -f power -c $CHANNEL$ -i $_C1$ -o 1 -n 2
    $_P1$ -f power -c $CHANNEL$ -i $_C1$ -o 1 -n 3
    $_P1$ -f power -c $CHANNEL$ -i $_C1$ -o 1 -n 4

    Was mache ich falsch?

    Gruß Jochen

    1. In der Theorie sollte es funktionieren. Ich habe das Skript aber nicht mit einem Sonoff 4CH getestet, daher kann der Fehler am Skript liegen. Ich gucke mir das Skript noch mal an…

      1. Super Danke. Ansonsten hat das super geklappt. Vielen Dank

      2. Hi, es muss etwas mit den Channels zu tun haben. Wenn ich in den ersten Channel den dritten Kanal von der 4Ch anspreche, geht es. Dieses also in Channel 1 rein geschrieben, was bei normalerweise in Channel 3 ist.
        $_P1$ -f power -c $CHANNEL$ -i $_C1$ -o 0 -n 3

  6. Zum Script für Anfänger:

    muss hier die IP des Tasmota-Gerätes eingetragen werden?
    Mir ist das ganze Vorhehen viel zu „professionell“ gehalten. Bitte Schritt-für Schritt erklären. Danke.

    usage() {
    cat <<EOM

    -f powstate -c CUX2801xxx:x -i 192.168.x.x -u user -p password # status switch
    -f powstate -c CUX2801xxx:x -i 192.168.x.x -u user -p password -n 2 # status switch relay nr 2
    -f power -c CUX2801xxx:x -i 192.168.x.x -u user -p password -o 0 # switch off
    -f power -c CUX2801xxx:x -i 192.168.x.x -u user -p password -o 1 # switch on
    -f power -c CUX2801xxx:x -i 192.168.x.x -u user -p password -o 0 -n 2 # switch off relay nr 2
    -f power -c CUX2801xxx:x -i 192.168.x.x -u user -p password -o 1 -n 2 # switch on relay nr 2
    EOM
    exit 0

    1. Das Script muss doch sicherlich vor dem Upload editiert werden…
      Was ist, wenn weitere Geräte hinzu kommen – dann muss doch sicherlich das Script erweitert werden. Bitte auf beides eingehen. Danke.

  7. Das Script muss doch sicherlich vor dem Upload editiert werden…
    Was ist, wenn weitere Geräte hinzu kommen – dann muss doch sicherlich das Script erweitert werden. Bitte auf beides eingehen. Danke.

  8. Das Skript soll nicht editiert werden.
    Der jeweilige Sonoff-Gerät kann durch Eingabe der IP-Adresse gesteuert werden, zum Beispiel um den Gerät mit IP-Adresse 192.168.178.54 einzuschalten, braucht man folgenden Befehl:
    /usr/local/addons/cuxd/user/sonoff.sh -f power -c CUX2801002:1 -i 192.168.178.54 -o 1

    Der Einschaltzustand wird zusätzlich an den CuxD-Gerät CUX2801002:1 gemeldet.

  9. Gibt es eine Möglichkeit auch einen am sonoff angeschlossen Temperatursensor so in Homematic anzeigen zu lassen

    1. Es ist möglich, funktioniert ähnlich wie mit Relais, man soll nur entsprechende Regel definieren…

  10. Wow,, tolle Anleitung! Jetzt kann ich meine Obisteckdosen direkt in der CCU2 mit den Schaltern verknüpfen. Über iobroker und javascript ist das zu fehlerträchtig. Der WAF (women accepting factor) war zu schlecht bei einem Ausfall pro Woche.
    Eine Ergänzung: ich hab fast alle Geräte über Fritzbox mit DHCP und festgebunden Adresse eingerichtet.
    Wenn die Fritzbox als Dns Server sowohl in der CCU2 als auch im Sonoff-Tasmota eingetragen ist, kann man an allen Punkten, wo die IP Adresse einzutragen ist, auch den Namen eingeben. Z.B: ObiWLANKenobi01.fritz.box oder homematic.fritz.box.
    Grüße Thomas

  11. Super Anleitung! Super Script. Dankeschön. Jetzt muss ich nur noch den SonOff updaten 🙂

  12. Hallo, ich habe alles so wie in der Anleitung beschrieben eingerichtet. Aber ich verstehe nicht wo ich den Status dann sehen kann? Ändern sich der Button aufomatisch auf EIN oder AUS?

    Für eine kurze Antwort wäre ich dankbar.
    Gruß,
    Thomas

    1. Ich habe außerdem verschiedene Systemvariablen angelegt, aber ich bekomme keinen Status zugesendet. Was mache ich falsch?
      In der Konsole wird der WebSend Befehl ausgeführt und das entsprechende Cux Device ansprochen.

      Gruß,
      Thomas

      1. Weiss hier niemand Rat?

        Gruß,
        Thomas

        1. Hat noch immer keiner eine Idee?
          Gruß,
          Thomas

    2. Ja. Die Statusänderung siehst du beispielsweise unter „Status und Bedienung“ -> „Geräte“

      1. Muss ich dann keine Variable anlegen und dem Kanal oder so zu ordnen? Weil der Status ändert sich z.B. nicht wenn ich den Schalter am Gerät nutze.

Schreibe einen Kommentar zu Joki1968 Antworten abbrechen

Menü schließen