Velux KLF200 mit Firmware 2.0.0.71 für io-homecontrol

Begonnen von buennerbernd, 06 November 2018, 16:43:00

Vorheriges Thema - Nächstes Thema

buennerbernd

Update

Wenn man von vorn anfängt, zu lesen, stößt man auf einige veraltete Informationen.
Das Modul benötigt ein aktuelles FHEM und lässt sich wie folgt abrufen:
update all https://raw.githubusercontent.com/buennerbernd/fhem/master/KLF200/2.0/controls_KLF200.txt
Die wichtigsten Informationen stehen dann im commandref.

Im Wiki sammle ich weitere nützliche Hinweise: Velux KLF 200 in FHEM

Update Ende


Die KLF200-Box mit der Firmware Version 1.... wird ja von FHEM schon durch das Modul IOHomecontrol unterstützt.

Mit der neuen Firmware 2.0.0.71 sind weitreichende neue Möglichkeiten hinzugekommen:
Man kann alle angeschlossenen Geräte prozentgenau steuern und man bekommt Feedback.
Es sieht auch so aus, als ob die Box nicht nur 5 Geräte unterstützt, sondern bis zu 200. (Konnte ich nicht testen, ich habe nur 5 Rollläden) Es werden nicht nur Rollläden, sondern alles mögliche mit io-homecontrol unterstützt.

Dafür war allerdings eine komplette Neuentwicklung des Moduls notwendig.
Diese Neuentwicklung habe ich ganz inoffiziel und aus Interesse für mich mal gemacht:

Wer mutig ist:

https://github.com/buennerbernd/fhem/tree/master/KLF200/2.0

Die neue Firmware gibt es hier: https://www.velux.com/api/klf200
Warnung: nach dem Firmwareupdate wird das Modul IOHomecontrol nicht mehr laufen!

Die Benutzung ist einfach:

Die Module herunterladen und nach /opt/fhem/FHEM/ kopieren:

83_KLF200.pm
83_KLF200Node.pm


define <name> KLF200 <host> <pwfile>

Example:
    define Velux KLF200 192.168.0.66 /opt/fhem/etc/veluxpw.txt


Die verknüpften Geräte werden per Auto-Create als Instanzen von KLF200Node erzeugt.

Das Modul KLF200 unterstützt das Setzen von Szenen. (Man muss z.Zt. noch die ID wissen)

Die KLF200Node-Geräte unterstützen set on/off/up/down/stop/Prozentangaben

Ob 100% bzw. on oben oder unten bedeutet kann man mit dem Attribute setzen:
directionOn: up/down

Das schwierigste war es, das Modul stabil zu bekommen, denn das neue KLF200-API läuft alles andere als stabil. Ich erreiche das dadurch, dass ich die Box bei Verbindungsproblemen automatisch reboote. Nun läuft das Modul, ohne dass man regelmäßig den Stecker ziehen muss.

Ich werde das Modul noch weiter verbessern.

Viel Spaß, wer sich traut :-)
Stefan.
Modulentwickler von KLF200 und KLF200Node

Dr. Boris Neubert

Hi Stefan,

ein neuer Thread ist gut.

Vielen Dank für das Modul!

Ich brauche ja mein Modul nicht weiterzupflegen, wenn es hier schon eines für das neue API gibt. Lieber schauen wir, dass Dein Modul ins offizielle Repository kommt und ich Beiträge dazu leiste, sofern das überhaupt erforderlich ist. Du hast eine Menge Code geschrieben!

Ich musste eine Queue implementieren, die im Hintergrund abgearbeitet wird, weil das REST-API bei weiteren Befehlen hängt, solange der vorige nicht abgearbeitet ist. Wenn ich das neue API richtig verstanden habe, kann es auch nur einen Befehl gleichzeitig handhaben. Wie gehst Du damit in KLF200.pm um?

Ich komme aus zeitlichen Gründen nicht dazu, mich in den Test einzuklinken. Ich habe auch ein Velux Active, das ich auch dagegen laufen lassen möchte.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

buennerbernd

Hallo Boris,

eine Queue habe ich noch nicht geschrieben. Das habe ich noch vor.
Das neue KLF API verwirft Szenen, die zu dicht nacheinander gesetzt werden. Bei der Einzelsteuerung von Geräten werden mehrere Aufrufe nacheinander akzeptiert.
So eine Queue kann aber auch nützlich sein, wenn Verbindungsprobleme dazwischen kommen.

Sollte das Modul wirklich offiziell werden, wäre es mir recht, wenn es vorher ein zwei Leute testen.

Gruß, Stefan.
Modulentwickler von KLF200 und KLF200Node

Dr. Boris Neubert

Hallo Stefan,

Danke für Deine Antwort. Bei der Queue kannst Du Dich gerne bei 83_IOHomecontrol bedienen. Ich hatte das einigermaßen generisch ausgeführt. Ich nicht per copy&paste nutzbar aber ggf. inspiriert es.

Ich komme vermutlich nicht vor Dezember zum Testen geschweige denn zum Entwickeln.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

pejonp

Hallo Stefan,

hab mal dein Modul auf die Schnelle ausprobiert. Geht leider noch nicht. Das steht im Log. Verbindung zum KLF200 habe ich aber noch, habe ich mit meinem Modul gleich kontrolliert.


2018.11.06 18:49:17 5: HttpUtils url=https://192.168.2.160:51200/
2018.11.06 18:49:21 5: KLF200 (Velux) - error while connecting: https://192.168.2.160:51200/: Can't connect(2) to https://192.168.2.160:51200:  SSL wants a read first
2018.11.06 18:49:57 5: KLF200 (Velux) - Set login
2018.11.06 18:49:57 5: KLF200 (Velux) GW_PASSWORD_ENTER_REQ
2018.11.06 18:49:57 5: KLF200 Velux: unwrapped bytes     3000xxxxxxx000000000000000000000000000000000000000000000000
2018.11.06 18:49:57 5: KLF200 Velux: wrapped bytes c000233000xxxxxxxxxxxxxx00000000000000000000000000000000000000000000000013c0
2018.11.06 18:49:57 5: SW: c000233000xxxxxxxxx00000000000000000000000000000000000000000000000013c0
2018.11.06 18:50:21 5: HttpUtils url=https://192.168.2.160:51200/
2018.11.06 18:50:25 5: KLF200 (Velux) - error while connecting: https://192.168.2.160:51200/: Can't connect(2) to https://192.168.2.160:51200:  SSL wants a read first
2018.11.06 18:51:25 5: HttpUtils url=https://192.168.2.160:51200/
2018.11.06 18:51:29 5: KLF200 (Velux) - error while connecting: https://192.168.2.160:51200/: Can't connect(2) to https://192.168.2.160:51200:  SSL wants a read first
2018.11.06 18:52:29 5: HttpUtils url=https://192.168.2.160:51200/
2018.11.06 18:52:33 5: KLF200 (Velux) - error while connecting: https://192.168.2.160:51200/: Can't connect(2) to https://192.168.2.160:51200:  SSL wants a read first


Mit dem Passwort würde ich noch etwas anders machen. Ich habe es damals bei VBUS so gelöst, das PW ist das mehr oder weniger verschlüsselt in einer Datei, kann aber über die Oberfläche eingegebene werden. Wenn Bedarf besteht kann ich es ja einbauen.


...
sub VBUSIF_DoInit($)
{
my $hash = shift;
if ($hash->{DeviceType} eq "Net" ) {
my $name = $hash->{NAME};
    my $pwd = VBUSIF_readPassword($hash);
   
    unless (defined $pwd) {
      Log3 $hash, 2, "Error: No password set. Please define it (once) with 'set $name password YourPassword'";
      return undef;
   }

delete $hash->{HANDLE}; # else reregister fails / RELEASE is deadly
my $conn = $hash->{TCPDev};
$conn->autoflush(1);
$conn->getline();
$conn->write("PASS ".$pwd."\n");
$conn->getline();
$conn->write("DATA\n");
$conn->getline();
    Log3 $hash, 4,"$name:  VBUSIF_Define: VBUSIF_DoInit ";
}
return undef;
}
...


Jörg

LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

buennerbernd

Modulentwickler von KLF200 und KLF200Node

buennerbernd

Hallo Jörg,

ich habe mir deine Logs noch einmal genauer angesehen.
Also die Anmeldung sollte voll automatisch passieren. Du musst nicht selbst die Login-Funktion aufrufen.
Die Fehlermeldung in deinem Log habe ich während der Entwicklung auch schon ein paar mal gesehen. Dann hat ein Neustart der Box geholfen.
Mein Modul hält ja die Connection ständig offen, um auch Änderungen von außen mitzubekommen. Dabei ist mir aufgefallen, dass irgendwann eine Connection ,,verbraucht" ist. Das heißt, mit diesem Socket kommt keine Kommunikation mehr zustande. Das API unterstützt 2 Sockets. Sind beide verbraucht, ist ein manueller Neustart der Box notwendig.
Ich habe mir so geholfen, dass das Modul sofort auf der 2. Connection einen Reboot auslöst, wenn es Probleme mit der 1. Connection gab. So bewahrt man sich immer die Möglichkeit, die Box am Laufen zu halten.
Das Modul geht also davon aus, dass ihm die Box exklusiv zur Verfügung steht und zum Beginn beide Sockets frei sind und funktionieren. Das war bei dir wohl nicht der Fall.

Schreibe mal, ob es doch noch geklappt hat.

Das mit dem Passwort hatte ich mir von Boris angeschaut und fand es ganz ok. Kann man ja noch einmal überdenken, wenn es ernst wird.

Gruß, Stefan.
Modulentwickler von KLF200 und KLF200Node

pejonp

Hallo Stefan,

bin Grad vom Martinimarkt zurück. Mal sehen was noch geht bei 2-3 Glühlein. So Box neu gestartet. Leider keine Veränderung. Werde diese Woche leider nicht mehr zu weiteren Test kommen. Bleibe aber dran.


2018.11.06 23:17:45 0: Server started with 159 defined entities (fhem.pl:17613/2018-10-24 perl:5.014002 os:linux user:fhem pid:10649)
2018.11.06 23:17:49 1: Velux: Can't connect to 192.168.2.160:51200: Die Wartezeit für die Verbindung ist abgelaufen
2018.11.06 23:17:49 1: Velux: Can't connect to 192.168.2.160:51200: https://192.168.2.160:51200/: Can't connect(2) to https://192.168.2.160:51200:  SSL wants a read first
2018.11.06 23:17:49 5: KLF200 (Velux) - error while connecting: https://192.168.2.160:51200/: Can't connect(2) to https://192.168.2.160:51200:  SSL wants a read first


Grüße Jörg
LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

buennerbernd

Hallo Jörg.

Das ist ja blöd :-(
Erinnerst du dich, dass ich mit deinem Ansatz zuerst voll die Probleme hatte, SSL zum Laufen zu bekommen?
Irgendwas muss bei unserem Linux, Perl, FHEM oder Netzwerk unterschiedlich sein. Vielleicht ist es auch ein Timingproblem.

Für mein Modul habe ich das Hilfsmodul DevIO verwendet. Das hatte Out of the Box gut funktioniert. Der asynchrone Empfang von Nachrichten war komfortabel zu realisieren. Probleme ließen sich immer mit einem Reboot der KLF200 Box lösen.
Ärgerlich, dass es bei 50% der Nutzer nicht funktioniert.

Vielleicht hat Google ja noch Ideen?

Gruß, Stefan.
Modulentwickler von KLF200 und KLF200Node

pejonp

Hallo Stefan,

Bei mir habe ich das crsfToken auf none. Vielleicht hängt es damit zusammen. Ich werde mal weiter suchen, vielleicht kann man noch mehr log- Nachrichten generieren für die Fehlersuche?!

Jörg
LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

CoolTux

Hallo Stefan,

Ich habe das Modul einmal ins ASC (AutoShuttersControl) aufgenommen.
https://forum.fhem.de/index.php/topic,92628.0.html

Hatte Dir Boris bei Gelegenheit mal unsere Bestrebungen hinsichtlich packages erzählt  ;D
Wir wollen versuchen neue Module auf packages auf zu bauen. So das Du für Dein Modul nicht main nimmst sondern Deinen eigenen package Namen.



Grüße
Leon
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

buennerbernd

@pejonp

Ich habe etwas gesucht: Die Fehlermeldung kommt aus HttpUtils_Connect2($)
Da habe ich noch eine Idee: probiere im Modul mal bitte mit Timeouts rum:


sub KLF200_Define($$) {
  my ($hash, $def) = @_;
  my @a = split("[ \t]+", $def);

#  if($a != 4) {
#    my $msg = "wrong syntax: define <name> KLF200 <host> <pwfile>";
#    Log(2, $msg);
#    return $msg;
#  }
   
  my $name = $a[0];
  # $a[1] is always equals the module name "KLF200"
 
  # first argument is the hostname or IP address of the device (e.g. "192.168.1.120")
  my $dev = $a[2];
  # add a default port (51200), if not explicitly given by user
  $dev .= ':51200' if(not $dev =~ m/:\d+$/);
  $hash->{DeviceName} = $dev;
  $hash->{SSL} = 1;
  $hash->{TIMEOUT} = 10; #default is 3
 
  my $pwfile = $a[3];
  $hash->{"pwfile"}= $pwfile;
 
  # close connection if maybe open (on definition modify)
  DevIo_CloseDev($hash) if(DevIo_IsOpen($hash)); 
 
  # open connection with custom init and error callback function (non-blocking connection establishment)
  DevIo_OpenDev($hash, 0, "KLF200_Init", "KLF200_Callback");

  return undef;
}


@CoolTux
AutoShuttersControl kannte ich noch gar nicht und bin schon aufgenommen. Toll ;-)
Ich habe keine Ahnung von Packages. Was muss ich tun?
Noch ist ja nichts im SVN.
Modulentwickler von KLF200 und KLF200Node

CoolTux

Leider ist das Wiki noch nicht so weit. Aber hier gibt es einen Thread mit weiterführenden Link und einem Beispiel.
https://forum.fhem.de/index.php/topic,92007.msg845225.html#msg845225

Das schwierigste ist immer die ganzen Funktionen der main korrekt zu importieren. Da suche ich noch nach einer Automatischen Lösung für den Modulentwickler.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

pejonp

Hallo Stefan,

bin begeistert von deinem Modul.

$hash->{TIMEOUT} = 10; #default is 3

Hat geholfen.
Fensterheber (KSX 100) und Solarrolläden (Solar SSL MK06 0000S) werden eingelesen und können gesteuert werden. Die Prozente hauhen noch nich hin. Fenster konnte geöffnet werden ging dann aber nicht zu. Werde aber weiter testen.

Jörg
LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

buennerbernd

Toll, dass es jetzt geht.

Ich habe den Timeout eingecheckt und auch noch einen Bug in der Prozent-Berechnung gefixed.

Bei mir läuft alles auf directionOn = down.
Deshalb hatte ich das nicht bemerkt.
Danke fürs Testen.
Modulentwickler von KLF200 und KLF200Node