KNX Jalousiesteuerung mit AutoShuttersControl

Begonnen von superverbleit, 06 Dezember 2025, 10:06:35

Vorheriges Thema - Nächstes Thema

erwin

ZitatDann geht das bei mir nur so, wie ihr es mit 99_myUtils beschrieben habt, richtig?
nicht ganz, du kannst natürlich den perlcode auch direkt in das ASC_CommandTemplate einpacken... würde ich aber davon abraten!
Gründe: -Viele Fehlermöglichkeiten beim erstellen.
-gilt dann nur für diese eine Jalousie, jedoch die sub in 99_myUtils kannst du von jeder Jal aufrufen!
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

superverbleit

Und mal noch Fragen zu eurer Funktion:

Bei mir würde das dann folgendermaßen aussehen:

attr DG.Treppenhaus.Jalousie.Position ASC_CommandTemplate {myASCsub($name,$pos,$slatpos,$cause);}
Woher kommen dann pos und slatpos?

Hierher?
attr DG.Treppenhaus.Jalousie.Position ASC_Open_Pos 50:60
attr DG.Treppenhaus.Jalousie.Position ASC_Closed_Pos 100:90

Also morgens ist pos=50 und slatpos=60, abends pos=100 und slatpos=90. Richtig?

Und die KNX Anpassungen für eure Funktion wären dann noch folgende:
# ...und in der 99_myUtils:
sub myACSsub {
  my ($name,$pos,$slatpos,$cause) = @_;
  fhem("set $name Pos.Absolute $pos");
  if ($slatpos ne '-1') {
    fhem("set DG.Treppenhaus.Jalousie.Lamelle Lamelle.Absolute $slatpos");
  }
  return;
}

Wenn ich eine zeitliche Verzögerung für fhem("set DG.Treppenhaus.Jalousie.Lamelle Lamelle.Absolute $slatpos"); will (die Lamellen), könnte ich es ja auch noch folgendermaßen abändern:
fhem("define Lamellendelay at +00:02:00 set DG.Treppenhaus.Jalousie.Lamelle Lamelle.Absolute $slatpos");.

Dann würde auf jeden Fall die Position angefahren und nach 2 Minuten "delay" die Lamelle verstellt, richtig?

erwin

Lt cmd-ref werden die Variablen $pos und $slatpos ddurch das ASC-device gesetzt.
Die "Verzögerung" würde ich anders implementieren, ist aber offensichtlich für deinen Aktor nicht nötig.
     fhem("sleep 120 quiet;set DG.Treppenhaus.Jalousie.Lamelle Lamelle.Absolute $slatpos");
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

Beta-User

Es sollte auch funktionieren, beide fhem-Kommandos in commandTemplate einzubauen - ohne Perl, halt wie sonst auch üblich durch Semikolon getrennt (vielleicht doppelt).
Server: HP-elitedesk@Debian 13, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

erwin

...noch eine kleine Verbesserung: der device-name Lamelle wird vom Position device abgeleitet...
sub myASCsub {
  my ($name,$pos,$slatpos,$cause) = @_;
  fhem("set $name Pos.Absolute $pos");
  if ($slatpos ne '-1') {
    my $lname = $name =~ s/Position$/Lamelle/rxms;
    fhem("set $lname Lamelle.Absolute $slatpos");
  }
  return;
}
Damit ist die sub für alle Jal geeignet, falls die Namenskonvention immer so ist.
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

superverbleit

Zum ausprobieren könnte ich es ja mal ohne die Funktion probieren.
attr DG.Treppenhaus.Jalousie.Position ASC_CommandTemplate set $name Pos.Absolute $pos; set DG.Treppenhaus.Jalousie.Lamelle Lamelle.Absolute $slatpos;

Mit Verzögerung:
attr DG.Treppenhaus.Jalousie.Position ASC_CommandTemplate set $name Pos.Absolute $pos; sleep 120 quiet; set DG.Treppenhaus.Jalousie.Lamelle Lamelle.Absolute $slatpos;
Wenn ich es via Funktion implementiere, wie kann ich dann den Namen des Lamellendevices mit übergeben?

Ich bräuchte ja dann so was:

attr <device> ASC_CommandTemplate {myASCsub($name,$nameLamelle,$pos,$slatpos,$cause);}
# ...und in der 99_myUtils:
sub myACSsub {
  my ($name,$pos,$slatpos,$cause) = @_;
  fhem("set $name Pos.Absolute $pos");
  if ($slatpos ne '-1') {
    fhem("set $nameLamelle Lamelle.Absolute $slatpos");
  }
  return;
}

Ist das via ASC attr möglich?
Sonst passt es ja erst wieder nur auf ein device, dann macht die Funktion auch keinen Sinn.
Gerade erst gesehen, das Erwin meine Frage schon beantwortet hat. 8) Danke.