Module für SELVE (Rolladen etc.)

Begonnen von turo, 13 Juni 2020, 17:14:30

Vorheriges Thema - Nächstes Thema

turo

Ich poste hier eine Reihe von Modulen zur Steuerung von Produkten der Firma SELVE.

Es gibt zur Entwicklungsgeschichte einen älteren Thread https://forum.fhem.de/index.php/topic,55581.0.html, den ich hier an besserer Stelle weiterführe.

Die Module sind auch nach 2 Jahren immer noch etwas "work in progress" und speziell die Dokumentation könnte noch wesentlich verbessert werden. Aber sie laufen schon bei einigen FHEMlern erfolgreich.

Bei Änderungen werde ich die Versionen in diesem Post aktualisieren.

Als Hardware braucht man (zusätzlich zu den Funkmotoren) noch ein "USB-RF Gateway commeo", das per USB angeschlossen wird und wiederum per Funk mit den anderen Geräten kommuniziert.

Als Module gibt es:

  • 70_SELVEGateway.pm - wird genau einmal benötigt und kommuniziert mit dem Gateway per USB
  • 70_SELVECommeo.pm - steuert (neuere) Geräte mit dem "Commeo" Protokoll
  • 70_SELVE.pm - steuert Geräte mit dem "Iveo" Protokoll
  • 70_SELVEsensor.pm - empfängt Informationen von Sensoren (z. B. Markisensensor mit Windstärke, Regen und Sonnenerkennung)
  • 70_SELVEsender.pm - kann mit SELVE Fernbedienungen als "virtuelles Gerät" gekoppelt werden und damit dann etwa "fremde" Rollos steuern oder einfach alles, was aus FHEM erreichbar ist
  • 70_SELVEgroup.pm - kann im Gateway definierte Gruppen von Geräten ansprechen
Besonderes Merkmal dieser Rollosteuerung ist es, dass bidrektional und asynchron mit den Geräten kommuniziert wird: Die Module erhalten detaillierte Rückmeldungen von den Motoren über aktuelle Position und aufgetretene Alarme (Hindernisse, Frost, Überlast, ...). Auch wenn die Motoren nicht über FHEM gefahren werden (etwa mit einer SELVE Fernbedienung oder über direkt angeschlossene Taster), ist die in FHEM verfügbare Position immer korrekt.

Umgekehrt lassen sich die Befehle von SELVE Fernbedienungen und Sensoren direkt in FHEM empfangen und in beliebige Aktionen umsetzen.

Am Schluss noch mein Dank an die Fa. SELVE, die die Schnittstelle zum Gateway vollständig offengelegt hat und mich auch bei der Entwicklung der Module unterstützt hat!

Gruss,
Turo
3xRaspberry PI, Homematic, SELVE Rollos, 1-wire, Logitech Harmony, Alexa, Fussbodenheizung (ESP8266), Netatmo

turo

Hier noch die Kurzanleitung zu Installation:

  • USB Gateway kaufen.
  • USB Gateway an einen Windows PC anschließen und mit der Software von SELVE konfigurieren (Rollos anlernen etc.)
  • Module aus dem 1. Post in das FHEM Verzeichnis kopieren.
  • USB Gateway an den FHEM Rechner anschließen.
  • Gateway in FHEM definieren "define Rollo_GW SELVEGateway /dev/serial/by-id/usb-FTDI_FT230X_Basic_UART_DM00B2KS-if00-port0" (der Pfad zum Device muss natürlich angepasst werden).
  • Rollos und andere Geräte sollten per autocreate angelegt werden.
3xRaspberry PI, Homematic, SELVE Rollos, 1-wire, Logitech Harmony, Alexa, Fussbodenheizung (ESP8266), Netatmo

sugieser79

Hallo turo,

erst einmal vielen Dank für die große Mühe die du in die Module bisher schon gesteckt hast, ich verfolge die Foren Beiträge zum Thema Selve Motoren schon eine ganze Weile. Nun habe ich mir einen Raspberry 4 zugelegt und mit FHEM bespielt, der RF USB Stick sollte heute in der Post sein und dann werde ich mich daran versuchen das zum laufen zu bringen.

Eine Frage hätte ich allerdings im Vorfeld.

Du schreibst hier in diesem Beitrag das ich den Pfad ( Des USB Sticks ) an mein System anpassen muss. Kannst du mir sagen wie ich den Pfad auf einem Raspberry auslesen kann ?

Nochmals danke für deine Bemühungen.

Grüße

Andreas

turo

Hallo Andreas,

ich hoffe, Du hast Deinen Stick inzwischen ;-)

Eigentlich sollte der Stick automatisch angelegt werden und dann muss man ein bisschen suchen:
Auf einem "Terminal" heraus:
cd /dev/serial/by-id/
ls -t
Die oberste Zeile sollte dann der USB-Stick sein (wenn man den gerade angesteckt hat).
Bei mir etwa usb-FTDI_FT230X_Basic_UART_DM00B2KS-if00-port0

Das bedeutet dann, dass die Konfiguration so aussehen muss:
define Rollo_GW SELVEGateway /dev/serial/by-id/usb-FTDI_FT230X_Basic_UART_DM00B2KS-if00-port0

Gruss,
Turo
3xRaspberry PI, Homematic, SELVE Rollos, 1-wire, Logitech Harmony, Alexa, Fussbodenheizung (ESP8266), Netatmo

manxie

Hi,

Ich fange gerade an, meine bestehende Commeo Rollladen in meinem vorhandenen fhem zu integrieren. Das Commeo System wurde bislang mit einem Multi-Send eingerichtet und gepflegt.

Beim Anlegen des Gateways gibt es einen kleinen Syntaxfehler (ein Komma fehlt).

--- 70_SELVEGateway.pm 2020-09-15 11:20:09.865459447 +0200
+++ /usr/share/fhem/FHEM/70_SELVEGateway.pm 2020-09-15 11:47:56.499160746 +0200
@@ -186,7 +186,7 @@
"selve.GW.iveo.setRepeater" => "<methodCall><methodName>selve.GW.iveo.setRepeater</methodName><array><int>§§</int></array></methodCall>",
"selve.GW.iveo.commandManual" => "<methodCall><methodName>selve.GW.iveo.commandManual</methodName><array><base64>§§</base64><int>§§</int></array></methodCall>",
"selve.GW.iveo.commandManualGroup" => "<methodCall><methodName>selve.GW.iveo.commandManual</methodName><array><base64>§§</base64><int>§§</int></array></methodCall>",
- "selve.GW.iveo.commandAutomatic" => "<methodCall><methodName>selve.GW.iveo.commandAutomatic</methodName><array><base64>§§</base64><int>§§</int></array></methodCall>"
+ "selve.GW.iveo.commandAutomatic" => "<methodCall><methodName>selve.GW.iveo.commandAutomatic</methodName><array><base64>§§</base64><int>§§</int></array></methodCall>",
"selve.GW.iveo.commandAutomaticGroup" => "<methodCall><methodName>selve.GW.iveo.commandAutomatic</methodName><array><base64>§§</base64><int>§§</int></array></methodCall>"
);


Nun habe ich also das Gateway definiert und frage mich, ob es eine Möglichkeit gibt, die Konfiguration zu übernehmen. Das autocreate von fhem findet scheinbar nichts in diese Situation. Auch mit einem Windows PC werden keine "neuen" Aktoren gesehen. Sie sind aber alle da und sichtbar z.B. in einem Multi-Send Backup (xml <SELVE_COMMEO_MULTISEND>). Hat jemand einen Tipp?

turo

Hallo,

das mit dem fehlenden Komma stimmt. Danke für den Hinweis!

Die Rollos müssen auf jeden Fall erst einmal beim Gateway angelernt werden. Dazu muss man sie einzeln in den "Programmiermodus" versetzen und dann findet sie das Gateway auch als neue Geräte. Im Handbuch ist das meiner Erinnerung nach als das Anlernen weiterer Sender beschrieben.

Eine komplette Übertragung geht wohl nicht: Die Information über die Sender ist in den Rollomotoren gespeichert und daher müssen sie einzeln den neuen Sender/Gateway kennenlernen.

Gruss,
Turo
3xRaspberry PI, Homematic, SELVE Rollos, 1-wire, Logitech Harmony, Alexa, Fussbodenheizung (ESP8266), Netatmo

trabantp60

Hallo Turo,
da ich mit meinem Workaround zum Neuverbinden des Sticks nach den unregelmäßigen Verbindungsabbrüchen (derzeit mit notify alle 3h) immer noch nicht ganz zufrieden bin, hatte ich mir heute vorgenommen, den Zeitpunkt des State "disconnect" als Trigger für's Neuverbinden zu testen.
Das hat leider nicht funktioniert, da bei mir bei disconnect irgendwie kein Event gesendet wird.
Ich habe dann mal im Modul des Gateway nach der Stelle gesucht, die meiner Phantasie nach, dafür verantwortlich ist und frage nun, ob sich die Subroutine "SELVEGateway_Ready" noch im Status der Rubrik work in process befindet?
Ich kann aufgrund mangelndem Wissens leider nichts zur Weiterentwicklung beitragen, aber vielleicht helfen, weiter gezielt zu testen.

Line 721


sub SELVEGateway_Notify($$)
{
  my ($own_hash, $dev_hash) = @_;
  my $ownName = $own_hash->{NAME}; # own name / hash

  return "" if(IsDisabled($ownName)); # Return without any further action if the module is disabled

  my $devName = $dev_hash->{NAME}; # Device that created the events

  return undef if $dev_hash->{NAME} ne $own_hash->{NAME};

  my $events = deviceEvents($dev_hash,1);
  return if( !$events );

  foreach my $event (@{$events}) {
    $event = "" if(!defined($event));
    Log3 $own_hash, 2, "SELVEGateway_Notify: received event: $event";
    if ($event eq "CONNECTED"){
    ;
    }
    # Examples:
    # $event = "readingname: value"
    # or
    # $event = "INITIALIZED" (for $devName equal "global")
    #
    # processing $event with further code
  }
}

sub SELVEGateway_Ready($)
{
my ($hash) = @_;
     
# Versuch eines Verbindungsaufbaus, sofern die Verbindung beendet ist.
return DevIo_OpenDev($hash, 1, "SELVEGateway_DoInit" )
if($hash->{STATE} eq "disconnected");

# This is relevant for Windows/USB only
if(defined($hash->{USBDev})) {
my $po = $hash->{USBDev};
my ( $BlockingFlags, $InBytes, $OutBytes, $ErrorFlags ) = $po->status;
return ( $InBytes > 0 );
}
}

sub SELVEGateway_Reconnect($) {
my ($hash) = @_;
Log3 $hash, 5, "SELVEGateway: Reconnect CALLED";
DevIo_CloseDev($hash);
my $ret = DevIo_OpenDev($hash, 0 , "SELVEGateway_DoInit");
InternalTimer(gettimeofday()+2, "SELVEGateway_RescanTimer", $hash);
return $ret;
}

ERI

das ist  ja spannend ... und ich wollte schon neue Rolladenmotoren kaufen :D
Meine sind von ca.2007 bis 2009 und ichhabe nur eine Fernbedinung wird das auch funktionieren ohne Beinverrenkung ?

Faerylnahr

Hi Turo,

vielleicht kannst du mir bei nachfolgendem Problem einen Denkanstoß geben: ich habe die Fhem-Module für Selve seit 2019 problemfrei im Einsatz. Seit heute kann ich seltsamerweise die Rollläden nicht mehr steuern. Der USB-Stick wird problemfrei auf dem Raspberry-Pi erkannt und lt. FHEM Log auch problemfrei eingebunden/angesprochen. Sicherheitshalber habe ich den Selve-USB-Stick am Laptop angeschlossen und über die Selve-Software nach dem Firmwarestand geschaut. Alles noch wie gehabt. Über diese Software kann ich auch die Rolläden problemfrei steuern. Schließe ich ihn wieder an den Raspi an, geht keine Steuerung mehr. Komischerweise aktualisiert FHEM sämtliche Werte, wenn ich mit der Selve-eigenen Funkfernbedienung die Rolläden steuere. Ein "Lesen" ist also möglich. Schicke ich aber den Befehl den Rolladen runterzufahren, bekomme ich im FHEM Log nur den Eintrag, dass der Command abgeschickt worden ist - passieren tut aber nix. Ich habe den FHEM-Container (Docker) ein paar Mal neugestartet und auch die aktuellste Version der Selve-FHEM-Module ausprobiert - ohne Erfolg.

Im Logfile habe ich noch ein paar Einträge gefunden, die mir nicht ganz "sauber" erscheinen - einordnen kann ich sie aber leider nicht so ganz. Hast du vielleicht eine Idee was ich noch prüfen könnte?
VIelen lieben Dank schonmal im Voraus.
Stefi

Hier noch die Auszüge aus dem FHEM Log:

2021.01.31 18:44:30.601 3: SELVEGateway: Queuing command: selve.GW.command.device, selve.GW.command.device 7 0 2 0,
2021.01.31 18:41:05.078 2: SELVEGateway: ERROR: discarding unreadable input: "<methodCall><methodName>selve.GW.event.device</methodName><array><int>7</int><int>3</int><int>63616</int><int>65535</int><int>0</int><int>3</int><string>Wohnzimm",
2021.01.31 18:41:05.221 2: SELVEGateway_Notify: received event: rf-status: sending,
2021.01.31 18:41:05.221 2: SELVEGateway_Notify: received event: rf-usage: 1,
2021.01.31 18:44:12.735 3: SELVEGateway: Queuing command: selve.GW.command.device, selve.GW.command.device 7 7 2 0,
2021.01.31 18:44:22.120 3: SELVEGateway: Queuing command: selve.GW.command.device, selve.GW.command.device 7 7 2 65535,
2021.01.31 18:44:29.582 3: SELVEGateway: Queuing command: selve.GW.command.device, selve.GW.command.device 7 7 2 49152,
2021.01.31 18:44:31.602 3: SELVEGateway: Queuing command: selve.GW.command.device, selve.GW.command.device 7 0 2 0


2021.01.31 19:04:03.648 2: SELVEGateway_Notify: received event: DISCONNECTED,
2021.01.31 19:04:08.402 3: Setting SelveGatewayEG serial parameters to 115200,8,N,1,
2021.01.31 19:04:08.412 1: /dev/ttyUSB0 reappeared (SelveGatewayEG),
2021.01.31 19:04:08.414 2: SELVEGateway_Notify: received event: CONNECTED,
2021.01.31 19:04:13.351 3: SELVECommeo (SELVECommeo_0): PARSE CALLED: SELVECommeo_0, cmd: selve.GW.event.device, AktorID: 0,
2021.01.31 19:04:14.635 3: SELVECommeo (SELVECommeo_1): PARSE CALLED: SELVECommeo_1, cmd: selve.GW.event.device, AktorID: 1,
2021.01.31 19:04:14.667 3: SELVECommeo (SELVECommeo_2): PARSE CALLED: SELVECommeo_2, cmd: selve.GW.event.device, AktorID: 2,
2021.01.31 19:04:14.674 3: SELVECommeo (SELVECommeo_3): PARSE CALLED: SELVECommeo_3, cmd: selve.GW.event.device, AktorID: 3,
2021.01.31 19:04:14.681 3: SELVECommeo (SELVECommeo_4): PARSE CALLED: SELVECommeo_4, cmd: selve.GW.event.device, AktorID: 4,
2021.01.31 19:04:14.688 3: SELVECommeo (SELVECommeo_5): PARSE CALLED: SELVECommeo_5, cmd: selve.GW.event.device, AktorID: 5,
2021.01.31 19:04:14.695 3: SELVECommeo (SELVECommeo_6): PARSE CALLED: SELVECommeo_6, cmd: selve.GW.event.device, AktorID: 6,
2021.01.31 19:04:14.703 3: SELVECommeo (SELVECommeo_7): PARSE CALLED: SELVECommeo_7, cmd: selve.GW.event.device, AktorID: 7,
2021.01.31 19:04:14.713 3: SELVECommeo (SELVECommeo_8): PARSE CALLED: SELVECommeo_8, cmd: selve.GW.event.device, AktorID: 8,
2021.01.31 19:04:14.728 3: SELVECommeo (SELVECommeo_9): PARSE CALLED: SELVECommeo_9, cmd: selve.GW.event.device, AktorID: 9,
2021.01.31 19:04:14.740 3: SELVECommeo (SELVECommeo_10): PARSE CALLED: SELVECommeo_10, cmd: selve.GW.event.device, AktorID: 10,
2021.01.31 19:04:54.828 3: SELVEGateway: Queuing command: selve.GW.command.device, selve.GW.command.device 7 1 2 0,
2021.01.31 19:05:29.163 1: /dev/ttyUSB0 disconnected, waiting to reappear (SelveGatewayEG),
2021.01.31 19:05:29.164 2: SELVEGateway_Notify: received event: DISCONNECTED,
2021.01.31 19:14:05.305 3: Setting SelveGatewayEG serial parameters to 115200,8,N,1,
2021.01.31 19:14:05.316 1: /dev/ttyUSB0 reappeared (SelveGatewayEG),


2021.01.31 19:14:05.316 2: SELVEGateway_Notify: received event: CONNECTED,
2021.01.31 19:14:07.065 2: SELVEGateway: Command did not complete: <methodCall><methodName>selve.GW.service.getState</methodName></methodCall>,
2021.01.31 19:14:07.066 2: SELVEGateway: Retrying command, failed attempts: 1,
2021.01.31 19:14:07.100 2: SELVEGateway: ERROR: discarding unreadable input: "
<?xml version="1.0"?>",
2021.01.31 19:14:07.105 3: SELVEGateway: changed state to Bootloader,
2021.01.31 19:14:07.142 2: SELVEGateway: ERROR: discarding unreadable input: "
<?xml version="1.0"?>",
2021.01.31 19:14:07.147 1: SELVEGateway: FAULT FOUND: message: Bootl: Method not supported!, ID: 40,
2021.01.31 19:14:07.185 2: SELVEGateway: ERROR: discarding unreadable input: "
<?xml version="1.0"?>",
2021.01.31 19:14:07.190 1: SELVEGateway: FAULT FOUND: message: Bootl: Method not supported!, ID: 40,
2021.01.31 19:14:09.193 2: SELVEGateway: Command did not complete: <methodCall><methodName>selve.GW.param.getEvent</methodName></methodCall>,
2021.01.31 19:14:09.193 2: SELVEGateway: Retrying command, failed attempts: 1,
2021.01.31 19:14:10.310 3: SELVECommeo (SELVECommeo_0): PARSE CALLED: SELVECommeo_0, cmd: selve.GW.event.device, AktorID: 0

turo

Hi Stefi,

bevor ich mir das tiefer anschaue, erst mal eine ganz einfache Frage: Die Rollos stehen nicht zufällig jetzt auf "manual" statt auf "automatic"?

Gruss,
Stefan
3xRaspberry PI, Homematic, SELVE Rollos, 1-wire, Logitech Harmony, Alexa, Fussbodenheizung (ESP8266), Netatmo

turo

Hi Stefi,

das mit dem DISCONNECTED / CONNECTED sieht nicht so gut aus. Das kenne ich so nicht.

Hypothese #2: Der Stick bekommt nicht genug Strom über USB und die Spannung bricht zusammen, wenn er senden will. Dann bootet er neu.
Das passt zu der Beobachtung, das der Stick am PC funktioniert. (Hypothese #1 "manual" passt aber auch: Die PC Software sendet vermutlich
"manual" commands. Meine Routinen senden "automatic".)

Das müsste sich aber leicht mit einem gepowerten USB-Hub verifizieren lassen.

Gruss,
Turo
3xRaspberry PI, Homematic, SELVE Rollos, 1-wire, Logitech Harmony, Alexa, Fussbodenheizung (ESP8266), Netatmo

Faerylnahr

Zitat von: turo am 31 Januar 2021, 22:29:09
bevor ich mir das tiefer anschaue, erst mal eine ganz einfache Frage: Die Rollos stehen nicht zufällig jetzt auf "manual" statt auf "automatic"?

Manchmal sollten die Männer im Haus die Finger weglassen ^^ mein Göttergatte hat wohl in einem Wahn an "ich versuch mal was" die "Zentrale" auf MAN gestellt... ein Blick in Fhem hat gereicht, um das zu verifizieren: automatic=off
Und siehe da... kaum dass er es wieder zurückgestellt hat, geht es auch wieder.
Hab vielen lieben Dank für den Hinweis! Jetzt muss ich erstmal das Nudelholz holen :D

Lg Stefi

P.S. Deine zweite Hypothese werde ich mal im Auge behalten. Wir haben derzeit einen ConbeeII, einen CUL und einen Selve Stick am Raspi - vllt ist das zu viel für den Raspi/das Netzteil.

trabantp60

gepowerter USB-Hub klingt gut.
Hab ich hier.
Probier' ich aus...

trabantp60

Hallo Turo,
die oben gepostete Version der 70_SELVEGateway.pm lässt sich bei mir nicht laden.
Hast Du vielleicht noch eine Idee, warum?

Inflagranti

#14
Zitat von: trabantp60 am 09 Februar 2021, 23:11:06
Hallo Turo,
die oben gepostete Version der 70_SELVEGateway.pm lässt sich bei mir nicht laden.
Hast Du vielleicht noch eine Idee, warum?

Ich habe gerade gleiches Problem, dass das Modul nicht geladen werden kann und ich die Fehlermeldung "Cannot load module SELVEGateway" bekomme.
Habe das Modul geöffnet und in Zeile 189 ein Komma ergänzt. Jetzt läuft es wieder...
@Toru: Könntest Du eine korrigierte Version hier hochladen?