Seite 1 von 1

[V4.0.1] Raffstoren Lamellenwinkel nach Höhenänderung wiederherstellen

Verfasst: Do Aug 01, 2024 7:16 pm
von starwarsfan
Hallo miteinander,

im Moment versuche ich mich daran, die Raffstoren-Bedienung in der Visu abzubilden. Mein aktueller Versuch sieht so aus, dass ich jeweils zwei Pegelsteller verwende, um Behanghöhe und Lamellenwinkel vorgeben zu können. Das Problem dabei ist nun, dass bei einer Änderung der Behanghöhe im Anschluss daran der Behangwinkel wiederhergestellt werden muss, da der Behangwinkel ansonsten beim Verfahren nach unten ganz geschlossen bzw. beim Verfahren nach oben ganz geöffnet ist.

Dazu habe ich mir die Logik "Behangpositionierung" geschrieben, welche als Input Behanghöhe und Lamellenwinkel erwartet. Der Baustein macht nun nichts anderes als die Inputwerte auf die Outputs zu schreiben, wobei der Lamellenwinkel auf "always" steht. Die Verkettung im TW sieht damit sowohl für Höhe als auch für Winkel wie folgt aus:

KNX-Statusobjekt -> Pegelsteller auf der Visu -> Logik "Behangpositionierung" -> KNX-Positionsobjekt

Das funktioniert wunderbar und wenn nun doch irgendwie manuell am Behang "gedreht" wird, fährt dieser im Anschluss daran den vorherigen Lamellenwinkel wieder an.

Hier der Code der Logik:

Code: Alles auswählen

/**
  This logic is intented to set shutter angle after modification of shutter height.
  
  This is required if the used actor modifies shutter height without restoring
  shutter angle afterwards. To do so, this logic always write shutter angle to the
  output, even if only height was changed.
**/
{
  "Level": [
    ["$Input_Height", "float", 0.0],
    ["$Input_Angle", "float", 0.0],

    ["$Output_Height", "float", 0.0],
    ["$Output_Angle", "float", 0.0],

    ["$Const_Timeout", "int", 1],
    ["$Select", "int", 1]
  ],
  "Input": [
    ["Behanghöhe Tür/Fenster (%)", "Höhe des Behangs", "$Input_Height", "c"],
    ["Lamellenwinkel Tür/Fenster (%)", "Winkel der Lamellen", "$Input_Angle", "a"]
  ],
  "Module": [
    ["Monoflop","$Input_Height","$Input_Height","$Select","$Const_Timeout", 6],
    ["Multiplexer",["$Input_Height"],"$Output_Height","$Select"],
    ["Multiplexer",["$Input_Angle"],"$Output_Angle","$Select"]
  ],
  "Output": [
    ["Behanghöhe Tür/Fenster (%)", "Anzufahrende Behanghöhe der Tür bzw. des Fensters", "$Output_Height", "c"],
    ["Lamellenwinkel Tür/Fenster (%)", "Anzufahrender Lamellenwinkel der Tür bzw. des Fensters", "$Output_Angle", "a"]
  ]
}
/**Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht.*/
Auch wenn es bis jetzt wunderbar funktioniert wäre ich froh, wenn die Logik-Cracks da mal ein Auge drauf werfen würden. Besser geht's ja bekanntlich fast immer irgendwie... :bow-yellow:

PS:
1. Dieses Problem ist Aktor-abhängig, es mag Aktoren geben, welche den Behangwinkel nach einer Höhenänderung von sich aus wiederherstellen.
2. Ich hoffe, dass das mit dem kommenden Beschattungswidget auf der Visu komplett überflüssig ist!

Re: [V4.0.1] Raffstoren Lamellenwinkel nach Höhenänderung wiederherstellen

Verfasst: Di Aug 06, 2024 12:22 pm
von Robert_Mini
Hallo Yves!

Viele Wege führen nach Rom, wie du schon angemerkt hast.
Ich persönlich würde statt dem Multiplexer in dem Fall mit Latch arbeiten. Damit ist klar definiert, dass in deinem Fall bei fallender Flanke der Wert übernommen wird. Das „c“ beim Output erledigt den Rest.
Beim Multiplexer mit nur einem Wert musste ich jetzt ein Weilchen grübeln.

Lg
Robert

Re: [V4.0.1] Raffstoren Lamellenwinkel nach Höhenänderung wiederherstellen

Verfasst: Di Aug 06, 2024 10:47 pm
von starwarsfan
Hallo Robert,

danke für's drauf schauen!
Robert_Mini hat geschrieben: Di Aug 06, 2024 12:22 pm Ich persönlich würde statt dem Multiplexer in dem Fall mit Latch arbeiten. Damit ist klar definiert, dass in deinem Fall bei fallender Flanke der Wert übernommen wird. Das „c“ beim Output erledigt den Rest.
Ich tue mich extrem schwer damit, einfache logische Konstrukte auf diese Art und Weise abzubilden. Das ist wirklich nichts für Softwareentwickler. :think:

Woher bekomme ich denn dann das true/false, um den Latch zu triggern? Muss ich mir das erst irgendwie zusammenbauen? :confusion-scratchheadyellow:

Re: [V4.0.1] Raffstoren Lamellenwinkel nach Höhenänderung wiederherstellen

Verfasst: Di Aug 06, 2024 11:07 pm
von Robert_Mini
Das True/False kommt ja vom Timer in der Zeile oberhalb des Multiplexers.
Timer läuft ab => Status ändert sich von True auf False = fallende Flanke.

Robert

Re: [V4.0.1] Raffstoren Lamellenwinkel nach Höhenänderung wiederherstellen

Verfasst: Fr Aug 09, 2024 10:30 pm
von starwarsfan
Hallo Robert
Robert_Mini hat geschrieben: Di Aug 06, 2024 11:07 pm Das True/False kommt ja vom Timer in der Zeile oberhalb des Multiplexers.
Timer läuft ab => Status ändert sich von True auf False = fallende Flanke.
Sorry, ich versteh's nicht. :doh:

Ich versuche mal zu erklären, wie ich es mir vorstelle:

- Ich habe zwei Float-Inputs
- Diese beiden Inputs gehen jeweils auf den Eingang eines Latch
- Die Outputs der beiden Latches gehen jeweils auf einen Output des Bausteines
- Somit habe ich zweimal die Kette "Input -> Latch -> Output", einmal für die Höhe und einmal für den Winkel

Passt das soweit? Was ich nicht hinbekomme ist, einen Boolean zu erzeugen, um damit die beiden Latches zu triggern!?

Was schlussendlich passieren soll:
- Wird der Eingang "Höhe" beschrieben, sollen beide Ausgänge aktualisiert resp. beschrieben werden. Also Höhe und Winkel
- Wird der Eingang "Winkel" beschrieben, soll nur der Winkel-Ausgang beschrieben werden

Wenn ich das wie folgt ändere, macht der Baustein gar nichts resp. die Outputs bleiben auf 0 stehen:

Code: Alles auswählen

{
  "Level": [
    ["$Input_Height", "float", 0.0],
    ["$Input_Angle", "float", 0.0],

    ["$Output_Height", "float", 0.0],
    ["$Output_Angle", "float", 0.0],

    ["$Const_Timeout", "int", 1],
    ["$Select", "bool", false]
  ],
  "Input": [
    ["Behanghöhe Tür/Fenster (%)", "Höhe des Behangs", "$Input_Height", "c"],
    ["Lamellenwinkel Tür/Fenster (%)", "Winkel der Lamellen", "$Input_Angle", "a"]
  ],
  "Module": [
    ["Monoflop", "$Input_Height", "$Input_Height", "$Select", "$Const_Timeout", 6],
    ["Latch", "$Input_Height", "$Output_Height", "$Select", 2],
    ["Latch", "$Input_Angle", "$Output_Angle", "$Select", 2]
  ],
  "Output": [
    ["Behanghöhe Tür/Fenster (%)", "Anzufahrende Behanghöhe der Tür bzw. des Fensters", "$Output_Height", "c"],
    ["Lamellenwinkel Tür/Fenster (%)", "Anzufahrender Lamellenwinkel der Tür bzw. des Fensters", "$Output_Angle", "a"]
  ]
}
Bitte um Erleuchtung!

Re: [V4.0.1] Raffstoren Lamellenwinkel nach Höhenänderung wiederherstellen

Verfasst: Sa Aug 10, 2024 9:19 am
von Robert_Mini
Hallo Yves!
Zum erkennen, welcher getriggert hat, gibt es das Modul Triggered. Man könnte damit abfragen, welcher Eingang ausgelöst hat und dann mit UND/ODER einen Wert bauen, der dann das Latch triggert.

Ich würde es aber anders lösen:
- Die Logik wie sie ist ohne Monoflop
- Eine Konstante „True“ auf den Trigger des Latches
- Den Eingang Höhe auf „c“ (nur bei Änderung triggern)
- Den Eingang Lamelle auf „u“ (nur update, nicht triggern)
- Beide Ausgänge auf „a“
Damit ist dein Fall 1 fertig.

Für Fall 2 eine abgespeckte Form als separate Logik mit nur einem Latch, Eingang „Lamelle“ auf „c“, Ausgang wieder „a“.

Man kann das auch in einer Logik machen, braucht dann aber Triggered zum Erkennen und wahrscheinlich ein SendExplicit um das Senden einzuschränken.

Lg
Robert

Re: [V4.0.1] Raffstoren Lamellenwinkel nach Höhenänderung wiederherstellen

Verfasst: Sa Aug 10, 2024 5:35 pm
von starwarsfan
Hallo Robert
Robert_Mini hat geschrieben: Sa Aug 10, 2024 9:19 am Zum erkennen, welcher getriggert hat, gibt es das Modul Triggered. Man könnte damit abfragen, welcher Eingang ausgelöst hat und dann mit UND/ODER einen Wert bauen, der dann das Latch triggert.
Ahhh, danke, das leuchtet ein.

Robert_Mini hat geschrieben: Sa Aug 10, 2024 9:19 am Ich würde es aber anders lösen:
Thx, das muss ich mir in Ruhe durch den Kopf gehen lassen... :handgestures-thumbupright:

Re: [V4.0.1] Raffstoren Lamellenwinkel nach Höhenänderung wiederherstellen

Verfasst: Sa Aug 10, 2024 11:50 pm
von starwarsfan
Hallo Robert
Robert_Mini hat geschrieben: Sa Aug 10, 2024 9:19 am - Eine Konstante „True“ auf den Trigger des Latches
- Den Eingang Höhe auf „c“ (nur bei Änderung triggern)
- Den Eingang Lamelle auf „u“ (nur update, nicht triggern)
- Beide Ausgänge auf „a“
Damit ist dein Fall 1 fertig.

Für Fall 2 eine abgespeckte Form als separate Logik mit nur einem Latch, Eingang „Lamelle“ auf „c“, Ausgang wieder „a“.
Das habe ich jetzt so wie beschrieben umgesetzt. Allerdings mit dem Lamellen-Eingang auf "a" und dem Höhen-Ausgang auf "c". Damit werden beide Varianten korrekt gehandhabt:
- Ändere ich die Höhe, wird im Anschluss der aktuelle Winkel wieder angefahren.
- Ändere ich den Winkel, wird nur der Winkel geändert, die Höhe bleibt wie sie ist.

Funktioniert wunderbar so. Oder habe ich noch einen Sonderfall übersehen? :confusion-scratchheadyellow: