SetExtensions für UNIRoll

Begonnen von C_Herrmann, 30 Dezember 2013, 21:16:50

Vorheriges Thema - Nächstes Thema

C_Herrmann

Hallo,

ich habe mal versucht, die SetExtensions in das Modul 10_UNIRoll.pm zu integrieren, um eine Beschattungssteuerung zu ermöglichen. Im Prinzip klappt das auch. Aber z.B. bei on-for-timer sendet SetExtensions zunächst ein "on" und dann nach der eingestellten Zeit ein "off". Mit on fährt der Rolladen in die gewünschte Richtung. Das "off" lässt den Rolladen aber wieder in die umgekehrte Richtung fahren. Für die gewünschte Funktion müsste der zweite Befehl - also nach der eingestellten Pause - aber "stop" oder gleich wie der erste sein, was auch einen Stop bewirkt.

Läßt sich der zweite Parameter der SetExtensions irgendwie umbiegen?

Gruß,
Christian
FHEM auf RPi, CUL868, FHT, UNIRoll, verschiedene FS20 Komponenten, IT, Zigbee zum Testen

rudolfkoenig

Wuerde mich auch interessieren, ich tippe mal auf nein.

C_Herrmann

Hallo Rudi,

schade, es hätte doch so einfach sein können. Die Funktion wäre auch für Geräte interessant, die per Toggle geschaltet werden.

Ich hätte da 2 Ideen, wie es sich vielleicht machen ließe, den gleichen Befehl 2 mal zu senden:

1. Ein zusätzlicher Parameter im Befehlsaufruf
z.B. set xyz on-for-timer toggle

2. Ein gerätespezifisches Attribut
z.b. attr xyz SetExtToggle 1

Bei der ersten Lösung müssten wohl alle Module angepasst werden, die SetExtensions benutzen, da sich die Parameteranzahl ändert.

Die zweite Möglichkeit scheint mir einfacher umzusetzen zu sein, da hierfür nur eine kleine Änderung in der SetExtension,pm notwendig wäre. Ich denke, die u.g. Änderungen würden reichen. Ich weiß allerdings nicht, wie die Abfrage des Attributs eingebaut werden kann.

sub
SetExtensionsFn($)
{
  my (undef, $name, $cmd) = split(" ", shift, 3);
  return if(!defined($defs{$name}));


# Abfrage auf Toggle hier
  if($cmd eq "on-for-timer") {
    DoSet($name, "off") if {toggle = 0};
    DoSet($name, "on") if {toggle = 1};

  } elsif($cmd eq "off-for-timer") {
    DoSet($name, "on") if {toggle = 0};
    DoSet($name, "off") if {toggle = 1};



Würde das reichen oder ist es von mir zu einfach gedacht?

Gruß,
Christian
FHEM auf RPi, CUL868, FHT, UNIRoll, verschiedene FS20 Komponenten, IT, Zigbee zum Testen