10_SOMFY.pm - Somfy RTS (und kompatible)

Begonnen von viegener, 12 Mai 2016, 21:06:46

Vorheriges Thema - Nächstes Thema

andies

Ich würde versuchen direkt den Code zu ändern. Bei meinem Screenshot wäre das Zeile 85, unten in ,,translations" müssen dann aber auch zwei Zeilen für 95 und 98 hinzugefügt werden.
Nach dem Ändern das Modul neu einlesen (geht mit reload).
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

stef1938

#586
Hallo viegener,

die Fuktion inverse ist genau die, welche mir hilft. Allerdings funktioniert damit der Befehl set manual nicht mehr. Der Befehl set Wohnzimmer_Fenster_Sued manual 10 ergibt die Fehlermeldung SOMFY_set: 100 must be between 0 and 100 or on/off for manual
Hast du vielleicht eine Lösung?
Vielen Dank!

LG Stef

Zitat von: viegener am 17 Oktober 2016, 23:36:29Es gibt eine neue Version des Somfy-Moduls in github, diese enthält eine erste Version einer umgedrehten Positionslogik, wie in diesem Thread andiskutiert:

https://forum.fhem.de/index.php/topic,24158.msg501349.html#msg501349

Es gibt dazu ein spezielles Attribut aufnehmen ([tt]positionInverse[/tt] mit dem Wert 1 wird die neue Logik eingeschaltet). Dann würde zwar intern weiter mit den Werten 0 bis 100/200 gerechnet, aber die externen Readings würden umgerechnet sodass dann:

Jetziger Wert 0 --> Neu: 100
Jetzt 100 --> Neu: 10
Jetzt 200 --> Neu: 0

Also ist dann 10 der Rolladen unten und 0 wäre geschlossen. Damit wäre das auch in derselben Richtung wie bei Homematic?

Die Umrechnung wird nur gemacht, wenn das Attribut gesetzt ist, so dass sich für existierende Nutzer nichts ändern muss.



stef1938

#587
Hallo andies,

vielen Dank, das sollte klappen!

Habe in line 749 einfach die 98 im code ergänzt:

if($cmd eq 'manual') {
    $mode = 'virtual';   # manual is virtual setting - no command to be sent
                return "SOMFY_set: No manual position given"  if(!defined($arg1));
                return  "SOMFY_set: $arg1 must be between 0 and 100 or on/off for manual " if($arg1 !~ /^(on|off|200|150|98|[1-9]?0)$/ );

LG Stef