KNX Data Secure Unterstützung
für KNX Logger und KNX Busmonitor

KNX Diagnose Monitor, Import des ETS Projektes deutlich beschleunigt, Suche in der Navigation
Mehr Informationen dazu hier im Forum

Insider Version 6 zur 4.5 jetzt für alle Mitglieder des Insider Clubs installierbar
Alle Infos zum Update im Timberwolf Wiki

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

Hier stellen Foristen und Kunden Ihre EIGENEN Logikbausteine vor. Diese Logikbausteine stehen jedem im Rahmen der vom Autor eingeräumten / genannten Lizenz zur Verfügung.
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
Antworten
Benutzeravatar

Ersteller
starwarsfan
Reactions:
Beiträge: 1395
Registriert: Mi Okt 10, 2018 2:39 pm
Hat sich bedankt: 863 Mal
Danksagung erhalten: 1199 Mal

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

#1

Beitrag 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!
Zuletzt geändert von Parsley am So Aug 04, 2024 3:31 pm, insgesamt 2-mal geändert.
Kind regards,
Yves

TWS 2500 ID:159 / TWS 3500 ID:618 / TWS 3500 ID:1653 + PBM ID:401 / ProxMox / 1-Wire / iButtons / Edomi (LXC / Docker) / evcc / ControlPro
(TW-VPN jeweils offen, Reboot nach Rücksprache)

Robert_Mini
Reactions:
Beiträge: 3903
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1263 Mal
Danksagung erhalten: 2213 Mal

#2

Beitrag 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
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297
Benutzeravatar

Ersteller
starwarsfan
Reactions:
Beiträge: 1395
Registriert: Mi Okt 10, 2018 2:39 pm
Hat sich bedankt: 863 Mal
Danksagung erhalten: 1199 Mal

#3

Beitrag 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:
Kind regards,
Yves

TWS 2500 ID:159 / TWS 3500 ID:618 / TWS 3500 ID:1653 + PBM ID:401 / ProxMox / 1-Wire / iButtons / Edomi (LXC / Docker) / evcc / ControlPro
(TW-VPN jeweils offen, Reboot nach Rücksprache)

Robert_Mini
Reactions:
Beiträge: 3903
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1263 Mal
Danksagung erhalten: 2213 Mal

#4

Beitrag 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
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297
Benutzeravatar

Ersteller
starwarsfan
Reactions:
Beiträge: 1395
Registriert: Mi Okt 10, 2018 2:39 pm
Hat sich bedankt: 863 Mal
Danksagung erhalten: 1199 Mal

#5

Beitrag 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!
Zuletzt geändert von starwarsfan am Fr Aug 09, 2024 10:33 pm, insgesamt 2-mal geändert.
Kind regards,
Yves

TWS 2500 ID:159 / TWS 3500 ID:618 / TWS 3500 ID:1653 + PBM ID:401 / ProxMox / 1-Wire / iButtons / Edomi (LXC / Docker) / evcc / ControlPro
(TW-VPN jeweils offen, Reboot nach Rücksprache)

Robert_Mini
Reactions:
Beiträge: 3903
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1263 Mal
Danksagung erhalten: 2213 Mal

#6

Beitrag 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
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297
Benutzeravatar

Ersteller
starwarsfan
Reactions:
Beiträge: 1395
Registriert: Mi Okt 10, 2018 2:39 pm
Hat sich bedankt: 863 Mal
Danksagung erhalten: 1199 Mal

#7

Beitrag 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:
Kind regards,
Yves

TWS 2500 ID:159 / TWS 3500 ID:618 / TWS 3500 ID:1653 + PBM ID:401 / ProxMox / 1-Wire / iButtons / Edomi (LXC / Docker) / evcc / ControlPro
(TW-VPN jeweils offen, Reboot nach Rücksprache)
Benutzeravatar

Ersteller
starwarsfan
Reactions:
Beiträge: 1395
Registriert: Mi Okt 10, 2018 2:39 pm
Hat sich bedankt: 863 Mal
Danksagung erhalten: 1199 Mal

#8

Beitrag 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:
Kind regards,
Yves

TWS 2500 ID:159 / TWS 3500 ID:618 / TWS 3500 ID:1653 + PBM ID:401 / ProxMox / 1-Wire / iButtons / Edomi (LXC / Docker) / evcc / ControlPro
(TW-VPN jeweils offen, Reboot nach Rücksprache)
Antworten

Zurück zu „Zusätzliche Logikbausteine“