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.

superverbleit

Hallo Leute,
ich bin jetzt endlich dazugekommen, die Funktion in 99_Utils.pm umzusetzen.
Leider bekomme ich noch Fehler im Logfile, bzw. der Aufruf tut nicht richtig, kann mir da jemand weiterhelfen?

Das hier ist ja die Funktion:
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("sleep 120 quiet;set $lname Lamelle.Absolute $slatpos");
  }
  return;
}

Aufgerufen via attr ASC_CommandTemplate:
attr DG.Treppenhaus.Jalousie.Position ASC_CommandTemplate {myASCsub($name,$pos,$slatpos,$cause)}
Hier nochmals das aktuelle list:
Internals:
   DEF        2/1/207:dpt5.001:Pos.Status 2/4/200:dpt5.001:Pos.Absolute:nosuffix
   FUUID      5dfcf3ae-f33f-5687-034a-9ed97a3902dc74ea
   IODev      KNX
   KNX_MSGCNT 4
   KNX_RAWMSG C01102w021cf00
   KNX_TIME   2025-12-21 08:52:10
   LASTInputDev KNX
   MSGCNT     4
   NAME       DG.Treppenhaus.Jalousie.Position
   NR         227
   STATE      0 %
   TYPE       KNX
   eventCount 8
   model      dpt5
   GADDETAILS:
     Pos.Absolute:
       CODE       024c8
       MODEL      dpt5.001
       NO         2
       OPTION     
       RDNAMEGET  Pos.Absolute
       RDNAMESET  Pos.Absolute
       SETLIST    :slider,0,1,100
     Pos.Status:
       CODE       021cf
       MODEL      dpt5.001
       NO         1
       OPTION     
       RDNAMEGET  Pos.Status-get
       RDNAMESET  Pos.Status-set
       SETLIST    :slider,0,1,100
   GADTABLE:
     021cf      Pos.Status
     024c8      Pos.Absolute
   Helper:
   READINGS:
     2025-12-06 09:28:39   ASC_Enable      on
     2025-12-21 08:18:38   ASC_Time_DriveDown 21.12.2025 - 17:30
     2025-12-21 08:18:38   ASC_Time_DriveUp 22.12.2025 - 08:19
     2025-12-20 13:48:53   IODev           KNX
     2025-12-21 08:52:11   Pos.Absolute    0 %
     2025-12-21 08:52:10   Pos.Status-get  0 %
     2025-12-20 13:48:48   associatedWith  AutoShuttersControl
     2025-12-21 08:52:10   last-sender     1.1.2
     2025-12-21 08:52:10   state           0 %
Attributes:
   ASC        1
   ASC_BrightnessSensor Aussenbereich.DachOst.Lux 150:15
   ASC_Closed_Pos 80:90
   ASC_CommandTemplate {myASCsub($name,$pos,$slatpos,$cause)}
   ASC_Down   astro
   ASC_Drive_Delay 300
   ASC_Drive_DelayStart 65
   ASC_Open_Pos 50:60
   ASC_Pos_Reading Pos.Status-get
   ASC_Time_Down_Early 17:30
   ASC_Time_Down_Late 22:00
   ASC_Time_Up_Early 06:30
   ASC_Time_Up_Late 08:30
   ASC_Time_Up_WE_Holiday 08:00
   ASC_Up     astro
   IODev      KNX
   group      Jalousien
   icon       fts_shutter_updown
   room       Flur_DG
   userattr   ASC_Adv:on,off ASC_Antifreeze:off,soft,hard,am,pm ASC_Antifreeze_Pos:5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100 ASC_AutoAstroModeEvening:REAL,CIVIL,NAUTIC,ASTRONOMIC,HORIZON ASC_AutoAstroModeEveningHorizon:-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9 ASC_AutoAstroModeMorning:REAL,CIVIL,NAUTIC,ASTRONOMIC,HORIZON ASC_AutoAstroModeMorningHorizon:-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9 ASC_BlockingTime_afterManual ASC_BlockingTime_beforeDayOpen ASC_BlockingTime_beforeNightClose ASC_BrightnessSensor ASC_Closed_Pos:0,10,20,30,40,50,60,70,80,90,100 ASC_ComfortOpen_Pos:0,10,20,30,40,50,60,70,80,90,100 ASC_CommandTemplate ASC_Down:time,astro,brightness,roommate ASC_DriveUpMaxDuration ASC_Drive_Delay ASC_Drive_DelayStart ASC_ExternalTrigger ASC_GuestRoom:on,off ASC_LockOut:soft,hard,off ASC_LockOut_Cmd:inhibit,blocked,protection ASC_Mode_Down:absent,always,off,home ASC_Mode_Up:absent,always,off,home ASC_Open_Pos:0,10,20,30,40,50,60,70,80,90,100 ASC_Partymode:on,off ASC_Pos_Reading ASC_PrivacyDownValue_beforeNightClose ASC_PrivacyDown_Pos ASC_PrivacyUpValue_beforeDayOpen ASC_PrivacyUp_Pos ASC_RainProtection:on,off ASC_Roommate_Device ASC_Roommate_Reading ASC_Self_Defense_AbsentDelay ASC_Self_Defense_Mode:absent,gone,off ASC_Shading_BetweenTheTime ASC_Shading_InOutAzimuth ASC_Shading_MinMax_Elevation ASC_Shading_Min_OutsideTemperature ASC_Shading_Mode:absent,always,off,home ASC_Shading_Pos:10,20,30,40,50,60,70,80,90,100 ASC_Shading_StateChange_SunnyCloudy ASC_Shading_WaitingPeriod ASC_Shutter_IdleDetection ASC_ShuttersPlace:window,terrace,awning,EG_window ASC_SlatPosCmd_SlatDevice ASC_Sleep_Pos:0,10,20,30,40,50,60,70,80,90,100 ASC_TempSensor ASC_Time_Down_Early ASC_Time_Down_Late ASC_Time_Up_Early ASC_Time_Up_Late ASC_Time_Up_WE_Holiday ASC_Up:time,astro,brightness,roommate ASC_Ventilate_Pos:10,20,30,40,50,60,70,80,90,100 ASC_Ventilate_Window_Open:on,off ASC_WiggleValue ASC_WindParameters ASC_WindProtection:on,off ASC_WindowRec ASC_WindowRec_PosAfterDayClosed:open,lastManual ASC_WindowRec_subType:twostate,threestate
   webCmd     Pos.Absolute
   widgetOverride Pos.Absolute:slider,0,1,100

Hier die Fehler logs:
ASC_DEBUG!!! 2025.12.21 08:18:38 - FnSetDriveCmd: DG.Treppenhaus.Jalousie.Position - versetztes fahren
ASC_DEBUG!!! 2025.12.21 08:18:38 - FnSetDriveCmd: DG.Treppenhaus.Jalousie.Position - NoDelay: NEIN
ASC_DEBUG!!! 2025.12.21 08:18:38 - FnShuttersCommandSet: DG.Treppenhaus.Jalousie.Position - Das Rollo wird gefahren. Kein Partymodus aktiv und das zugordnete Fenster ist entweder nicht offen oder keine Terassentür
ASC_DEBUG!!! 2025.12.21 08:21:15 - FnSetCmdFn: DG.Treppenhaus.Jalousie.Position - Rollo wird gefahren, aktuelle Position: 100, Zielposition: 50. Grund der Fahrt: day open
2025.12.21 08:21:15 1: ERROR evaluating my $cause=   $evalSpecials->{'$cause'};my $name=   $evalSpecials->{'$name'};my $pos=   $evalSpecials->{'$pos'};my $slatPos=   $evalSpecials->{'$slatPos'};{myASCsub($name,$pos,$slatpos,$cause)}: Global symbol "$slatpos" requires explicit package name (did you forget to declare "my $slatpos"?) at (eval 11428) line 1


Beta-User

In der commandref heißt der bemängelte Parameter auch anders... Schon mal da reingeschaut?!?
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