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

[Frage] [V4.0 IP5] Nachbau Standardlogik mit Customlogik

Informationen und Diskussionen über Logik-Engine und Logik-Editor
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

Ersteller
hans4711
Reactions:
Beiträge: 124
Registriert: Mi Nov 08, 2023 4:24 pm
Hat sich bedankt: 40 Mal
Danksagung erhalten: 65 Mal

[V4.0 IP5] Nachbau Standardlogik mit Customlogik

#1

Beitrag von hans4711 »

Hallo Zusammen,

mit Customlogiken habe ich schon bisschen was gemacht.
Was ich aber noch nicht verstanden habe ist wie ich die Ausgangsfunktionen von Standardlogiken nachbilden kann.
In diesem Fall möchte ich dann ein True oder ein False mit einer Einschaltverzögerung ausrüsten und zusätzlich im Anschluss noch ein Mapping zu Text durchführen. Timer 2 ist Timer1 in der CustomLogik, das habe ich schon rausgefunden, aber wie baue ich die Ausgangsfunktionen nach?
Bild

Vielen Dank und viele Grüße,
Hans
3500 XL ID:1339

Franky
Reactions:
Beiträge: 174
Registriert: Di Dez 24, 2024 1:24 pm
Hat sich bedankt: 78 Mal
Danksagung erhalten: 93 Mal

#2

Beitrag von Franky »

Hallo Hans,

erlaube mir, Deine Anfrage als Versuchsballon für eine LLM-Antwort (Gemini mit Timberwolf-Wissen) zu gebrauchen. Inalt OHNE GEWÄHR

Gruß

Franky
======= GEMINI 2.5 PRO START =======:

Hallo Hans,

das ist eine gute Frage und ein wichtiger Punkt, wenn man von Standard-Logikbausteinen zu Custom-Logiken wechselt! Du hast Recht, die praktischen Ausgangsfunktionen der Standardbausteine (wie Verzögerungen, Mindesteinschaltdauer, Textmapping etc.) sind in Custom-Logiken nicht als separate Funktionen verfügbar, die man einfach "anhängt".

Stattdessen baust du diese Funktionalität explizit mit den vorhandenen Custom-Logik-Modulbausteinen nach. Die Standardbausteine kapseln diese Logik intern, während du sie in Custom-Logik Schritt für Schritt selbst definierst.

Hier ist, wie du die beiden von dir genannten Funktionen nachbilden kannst:

1. Einschaltverzögerung (On-Delay):

Ziel: Ein Ausgang soll erst dann TRUE werden, wenn eine Eingangsbedingung für eine bestimmte Zeit durchgehend TRUE war.

Modul: Der Schlüssel hierfür ist der Monoflop-Baustein (dies entspricht Timer1 bis Timer8 in den Standardbausteinen, wie du schon richtig erkannt hast).

Logik:

Du nimmst deine ursprüngliche Bedingung (das TRUE/FALSE-Signal, das verzögert werden soll) als $Set-Eingang für einen Monoflop.

Als $Reset-Eingang nimmst du die invertierte Bedingung (oder $ConstFalse, je nach Anforderung).

Wähle die passende SetOption für den Monoflop. Für eine reine Einschaltverzögerung (startet nur bei steigender Flanke, nicht retriggerbar) ist Option 2 oft passend.

Die Verzögerungszeit gibst du als $Time-Parameter an.

Der $OutB-Ausgang des Monoflop wird TRUE, wenn der Timer abgelaufen ist.

Dein finaler, verzögerter Ausgang wird dann typischerweise durch eine And-Verknüpfung aus der ursprünglichen Bedingung UND dem $OutB-Ausgang des Monoflop gebildet. So stellst du sicher, dass der Ausgang nur TRUE ist, wenn die Bedingung immer noch anliegt, nachdem die Verzögerungszeit abgelaufen ist.

Beispiel-Snippet (vereinfacht):

Code: Alles auswählen

"Module": [
  // ... vorherige Logik ...

  // Timer für Einschaltverzögerung (startet bei steigender Flanke von $InputCondition, nicht retriggerbar)
  ["Monoflop", "$InputCondition", "-$InputCondition", "$_TimerOutput", "$param_Verzoegerungszeit", 2],

  // Finaler Ausgang: Nur TRUE, wenn Input-Bedingung UND Timer abgelaufen
  ["And", ["$InputCondition", "$_TimerOutput"], "$OutputVerzoegert"]

  // ... weitere Logik ...
],
"Level": [
  ["$InputCondition", "bool", false], // Deine ursprüngliche Bedingung
  ["$param_Verzoegerungszeit", "float", 5.0], // Deine Verzögerungszeit in Sekunden
  ["$_TimerOutput", "bool", false], // Interner Timer-Status
  ["$OutputVerzoegert", "bool", false] // Dein finaler, verzögerter Ausgang
  // ... weitere Variablen ...
]
2. Mapping zu Text:

Ziel: Einen logischen Zustand (z.B. TRUE/FALSE, oder eine Zahl wie einen State) in einen Text umwandeln.

Modul: Der Multiplexer-Baustein ist hierfür ideal.

Logik:

Definiere die gewünschten Texte als Konstanten (Strings) im Level-Array (z.B. "$ConstTextAn", "$ConstTextAus").

Verwende den Zustand, den du mappen möchtest (z.B. dein verzögertes TRUE/FALSE-Signal $OutputVerzoegert aus dem vorherigen Beispiel) als $Select-Eingang für den Multiplexer. Ein bool wird dabei intern als 0 (FALSE) oder 1 (TRUE) behandelt.

Im Eingangs-Array des Multiplexer listest du die Text-Konstanten in der Reihenfolge auf, die dem Index des $Select-Wertes entspricht (Index 0 für FALSE, Index 1 für TRUE).

Der $Out-Ausgang des Multiplexer enthält dann den ausgewählten Text.

Beispiel-Snippet (vereinfacht):

Code: Alles auswählen

"Module": [
  // ... vorherige Logik (z.B. die Verzögerung) ...

  // Mapping des verzögerten Zustands zu Text
  ["Multiplexer", ["$ConstTextAus", "$ConstTextAn"], "$OutputText", "$OutputVerzoegert"]

  // ... weitere Logik ...
],
"Level": [
   ["$OutputVerzoegert", "bool", false], // Das Ergebnis der Verzögerungslogik
   ["$ConstTextAn", "string", "Lüfter AN"], // Text für TRUE
   ["$ConstTextAus", "string", "Lüfter AUS"], // Text für FALSE
   ["$OutputText", "string", "Lüfter AUS"] // Der finale Text-Ausgang
   // ... weitere Variablen ...
],
"Output": [
    ["Angezeigter Text", "Status als Text", "$OutputText", "c"]
     // ... andere Outputs ...
]
Zusammenfassend: Du kombinierst die Grundbausteine (Monoflop, And, Multiplexer, Latch, etc.), um die gewünschte Logik Schritt für Schritt aufzubauen, anstatt eine einzelne Funktion am Ausgang zu konfigurieren.

Tipps:

Konstanten definieren: Definiere feste Werte wie TRUE, FALSE oder Texte wie oben gezeigt im Level-Array. Das macht den Code lesbarer.

Dokumentation nutzen: Schau dir die Details der einzelnen Modulbausteine (Monoflop, Multiplexer, And, Latch usw.) in der Doku an.

DokMode / Grafana: Nutze den DokMode (Grafana-Ansicht im Logikeditor), um die Zwischenwerte ($_TimerOutput, $OutputVerzoegert etc.) zu beobachten. Das hilft enorm beim Debuggen!

Ich hoffe, das hilft dir weiter! Lass es uns wissen, wenn du konkretere Fragen zu deiner Logik hast.

Viele Grüße!

======= GEMINI 2.5 PRO ENDE =======:
Zuletzt geändert von Franky am Mo Apr 28, 2025 12:55 pm, insgesamt 2-mal geändert.
Timberwolf 3500L ID:1642; Support-VPN für ElabNET ist an.

Robosoc
Reactions:
Beiträge: 1908
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 643 Mal
Danksagung erhalten: 797 Mal

#3

Beitrag von Robosoc »

Es gibt aber noch eine einfachere Antwort, die Gemini anscheinend nicht kennt :-)

Wenn Du eine Standardlogik einbindest, kannst Du den Erklärungstext zur Logik erweitern und da gibt es einen Button mit dem Du den Sourcecode der Logik in den Zwischenspeicher kopierst:
Bild
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK

Franky
Reactions:
Beiträge: 174
Registriert: Di Dez 24, 2024 1:24 pm
Hat sich bedankt: 78 Mal
Danksagung erhalten: 93 Mal

#4

Beitrag von Franky »

@Robosoc: Wow, das hatte ich wieder vergessen, das macht es für den Einstieg in Customlogiken echt einfacher und man hat mehr Beispielcode, mit dem man (Mensch) und LLM lernen kann. Sehr nützlich, werde ich in Nutzung von KI (LLM) für Dokumentation und Custom-Logiken integrieren...

Franky
Zuletzt geändert von Franky am Do Mai 01, 2025 11:31 am, insgesamt 1-mal geändert.
Timberwolf 3500L ID:1642; Support-VPN für ElabNET ist an.
Antworten

Zurück zu „Logikengine & Logik-Editor“