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

[Gelöst] [V4.0.1] Frage zur Logikengine / Signalverzögerung

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

Ersteller
piet61
Reactions:
Beiträge: 35
Registriert: Fr Dez 08, 2023 3:50 pm
Hat sich bedankt: 22 Mal
Danksagung erhalten: 17 Mal

#11

Beitrag von piet61 »

Hallo Yves (@starwarsfan),
vielen Dank - super Frage! :handgestures-thumbupright:

Ich habe etwas im Wiki und im Forum gelesen, aber genau auf diese Frage habe ich bisher keine Antwort gefunden :confusion-scratchheadyellow:

Aber ich bin sicher, dass @Robert_Mini das beantworten kann :whistle:

Viele Grüße

Piet
TWS 3500XL ID: 1403 (VPN 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

#12

Beitrag von Robert_Mini »

starwarsfan hat geschrieben: Do Aug 08, 2024 2:55 pm Hallo Robert

Wenn ich mir den Code des UND-Bausteines anschaue, dann frage ich mich, woher da die Optionen für die Ein- und Ausgänge kommen!? Also wie/wo ist definiert, dass man dort eine Verzögerung konfigurieren kann? Wie mache ich das in einem Custom-LBS? :confusion-scratchheadyellow:
Hallo Yves, Piet!

Die Verzögerungen sind nicht im Code sichtbar (im Grunde Funktionalität der Zelle).
Das schöne: so einfache Verzögerungen, Mappings etc am Ausgang sind damit auch bei Custom-Logiken verfügbar!!!

Ansonsten würde man das verzögerte Senden mit Monoflop+Latch im Code umsetzen.

Lg
Robert
Zuletzt geändert von Robert_Mini am Sa Aug 10, 2024 12:16 pm, insgesamt 1-mal geändert.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297
Benutzeravatar

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

#13

Beitrag von starwarsfan »

Hallo Robert
Robert_Mini hat geschrieben: Sa Aug 10, 2024 9:23 am Die Verzögerungen sind noch im Code sichtbar (im Grunde Funktionalität der Zelle).
Was heisst denn, sie sind "noch" im Code sichtbar? Wie lange noch? Ich wäre froh, wenn ich's überhaupt sehen würde... :think:
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

#14

Beitrag von Robert_Mini »

Sorry - autokorrektur… => NICHT

Hab‘s im Posting oben auch geändert.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297
Benutzeravatar

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

#15

Beitrag von starwarsfan »

Hallo miteinander, hallo Robert
Robert_Mini hat geschrieben: Sa Aug 10, 2024 9:23 am Die Verzögerungen sind nicht im Code sichtbar (im Grunde Funktionalität der Zelle).
Das schöne: so einfache Verzögerungen, Mappings etc am Ausgang sind damit auch bei Custom-Logiken verfügbar!!!
Du hast meine Frage nicht verstanden. Wenn das in Custom-Logiken verfügbar wäre, dann hätte ich nicht danach gefragt wie man das macht! ;)

Aber anhand Deiner Antwort habe ich mich gerade nochmal hingesetzt und mir den Code von verschiedenen Logiken angeschaut und wie diese im Logikeditor aussehen. Nun meine ich, den Unterschied bzw. den relevanten Punkt gefunden zu haben: Es ist von Typ abhängig, welche Funktionalitäten zur Verfügung stehen! Oder anders gesagt, es gibt nur beim Typ "bool" entsprechende Optionen:

Bild

Bei allen anderen Typen ist die Liste leer.

String:
Bild

Int:
Bild

Float:
Bild

Da brauch' ich mich natürlich nicht wundern, dass ich für einen Float-Wert nichts am Ausgang einstellen kann... :doh:
Zuletzt geändert von starwarsfan am So Aug 11, 2024 10:18 am, insgesamt 1-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

#16

Beitrag von Robert_Mini »

Hallo Yves!
Danke für die Info. Das war mir nicht ganz bewusst.
Für Mapping hatte ich das schon mal gesehen (nachvollziehbar), aber für die Verzögerungen bin ich jetzt überrascht. Wäre doch ein sehr sinnvolles Feature.

Brauchst du noch eine Erklärung, wie man die Verzögerung selbst umsetzen kann?

Lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
piet61
Reactions:
Beiträge: 35
Registriert: Fr Dez 08, 2023 3:50 pm
Hat sich bedankt: 22 Mal
Danksagung erhalten: 17 Mal

#17

Beitrag von piet61 »

Hallo Robert (@Robert_Mini),
ich würde mich freuen, wenn Du mir hierzu noch einen Tipp geben könntest.

Ich fasse die Ausgangslage und meine Idee nochmal zusammen:
Ich bekomme zwei Statusinformationen von meinem Fenstergriff mit folgender Logik:

Code: Alles auswählen

STATUS 1=0 UND STATUS 2=0 -> geschlossen
STATUS 1=1 UND STATUS 2=0 -> gekippt
STATUS 1=1 UND STATUS 2=1 -> geöffnet
Wenn man den Fenstergriff zwischen geschlossen und gekippt bewegt, tangiert er mechanisch immer auch kurz den 'geöffnet' Zustand, was dazu führt, dass in einer entsprechenden Zeitserie immer so hässliche Peaks aufgezeichnet werden. Um dies zu verhindern, müsste der Wert von STATUS 2 kurz verzögert werden.

In getrennten verknüpften Logiken funktioniert das bereits. Eine UND Logik mit STATUS 2 als Eingang und einer entsprechenden Ausgangsverzögerung. Der Ausgang der UND Logik sowie STATUS 1 als Eingänge für eine 'Binärmultiplexlogik'. Als Ausgang der Binärmultiplexlogik bekomme ich ein Integer Wert nach folgender Logik:

Code: Alles auswählen

Ausgang=0 -> geschlossen
Ausgang=1 -> gekippt
Ausgang=3 -> geöffnet
Zusätzlich habe ich bei dem Binärmultiplexer noch einen Trigger mit einem Intervall eingerichtet, womit ich ein zyklisches Senden und eine durchgehende Darstellung im Grafana erreiche.

Das Ganze möchte ich nun in einer Custom Logik umsetzen. Am besten fände ich, wenn ich die Verzögerungszeit für STATUS 2 und die Intervalldauer für das zyklische Senden als Eingangsparameter angeben kann.
Das könnte dann so aussehen:
Bild

Mir ist aber absolut unklar, wie ich die Verzögerungszeit und den Trigger in der Custom Logik verarbeiten kann, um das gewünschte Ziel zu erreichen.
Geht das überhaupt?
Der Ausgang meiner Gesamtlogik ist ja ein Integer Wert, den man nicht so einfach verzögern kann, wie Ives herausgefunden hat. Müsste man das mit einem 'Monoflop+Latch' machen, wie Du vorher geschrieben hast?

Wahrscheinlich denke ich zu kompliziert und das ist alles ziemlich einfach :confusion-scratchheadyellow:
Ich würde mich über einen kleinen Schubs in die richtige Richtung freuen :bow-yellow:

Vielen Dank und viele Grüße

Piet
TWS 3500XL ID: 1403 (VPN 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

#18

Beitrag von Robert_Mini »

Hallo Piet!

An sich relativ leicht umsetzbar, vom Handy aus aber tue ich mir etwas schwer…
Im Prinzip:
$Griffstatus2 als Trigger eines Monoflops mit steigender Flanke, $TimerStatus als Variable
Dann ein Latch mit fallender Flanke auf $TimerStatus und $Griffstatus2 auf $GriffStatus2_verzoegert kopieren
Dann wie gewohnt $GriffStatus1 und $GriffStatus2_verzoegert per Multiplexer weiterverarbeiten.

Hoffe das hilft schon mal.
Ansonsten das Tutorial „Entkalkungsanlage“ durcharbeiten, da ist vieles mit drin.
viewtopic.php?f=24&t=2001&hilit=Entkalk ... age#p21681

Lg
Robert
Zuletzt geändert von Robert_Mini am Di Aug 13, 2024 10:19 pm, insgesamt 2-mal geändert.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
piet61
Reactions:
Beiträge: 35
Registriert: Fr Dez 08, 2023 3:50 pm
Hat sich bedankt: 22 Mal
Danksagung erhalten: 17 Mal

#19

Beitrag von piet61 »

Hallo Robert (@Robert_Mini),
vielen Dank für die Info - ich versuche mal, das hinzubekommen :think:

Viele Grüße

Piet
TWS 3500XL ID: 1403 (VPN offen, Reboot nach Rücksprache)

Ersteller
piet61
Reactions:
Beiträge: 35
Registriert: Fr Dez 08, 2023 3:50 pm
Hat sich bedankt: 22 Mal
Danksagung erhalten: 17 Mal

#20

Beitrag von piet61 »

Hallo Robert (@Robert_Mini),
habe nun eine Custom Logik angelegt - leider klappt es noch nicht ganz so wie gewünscht :crying-yellow:

Ich nutzte keine Binärmultiplexerlogik um aus den beiden Statuswerten ein Integer zu machen sondern ich addiere die Werte der beiden Statuseingänge einfach. Das ist zwar mathematisch nicht korrekt, funktioniert in diesem Fall aber, so dass ich folgende Ausgangswerte bekomme:

Code: Alles auswählen

Ausgang=0 -> geschlossen
Ausgang=1 -> gekippt
Ausgang=2 -> geöffnet
Den Trigger für ein zyklisches Senden füge ich als zusätzlichen Eingang hinzu.
Die Custom Logik sieht zurzeit so aus (das Triggerintervall von 5 sec ist nur zum testen):
Bild

Leider gibt es noch ein Problem beim Wechsel von geöffnet nach gekippt oder geschlossen. Ich vermute, das hängt mit dem 'Reset' Eingang vom Monoflop zusammen. Ich habe hier verschiedene Variablen ausprobiert - leider bisher ohne das gewünschte Ergebnis zu erhalten.

Der Code sieht Zurzeit so aus:

Code: Alles auswählen

/**
 * Auswertung Status Fenstergriff
 * Eingänge:
 *   Griffstatus 1 (bool) ($in_1)
 *   Griffstatus 2 (bool) ($in_2)
 *     Status 1=0 UND Status 2=0 -> geschlossen
 *     Status 1=1 UND Status 2=0 -> gekippt
 *     Status 1=1 UND Status 2=1 -> geöffnet
 *   Werteänderung verzögern (int) ($in_3)
 * 
 * Ausgang:
 *   Griffstatus (int) -> 0=geschlossen, 1=gekippt, 2=geöffnet ($out_1)
 *  
 */

{
  "_Meta": { // Optional
    "Description": "Auswertung Status Fenstergriff",
    "Version": "1.00",
    "Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
 }, 
  "Input": [
      ["Griffstatus 1", "Griff Status 1", "$in_1", "c"],    // Griff Status 1
      ["Griffstatus 2", "Griff Status 2", "$in_2", "c"],    // Griff Status 2
      ["Verzögerung Griffstatus 2 (s)", "Verzögerung Griffstatus 2 (s)", "$in_3", "u"]    // Werteänderung von Griffstatus 2 verzögern (in sec)
  ],
  "Output": [
      ["Griffstatus", "Griffstatus", "$out_1", "a"]
  ],
  "Level": [
      // Eingangs Variablen
      ["$in_1","bool",false],      
      ["$in_2","bool",false],      
      ["$in_3","integer",1], //Änderunge Griffstatus 2 um 1 Sekunde verzögern      
      
      //Zwischenvariablen
      ["$ausgang_monoflop","bool",false],
      ["$ausgang_latch","bool",false],
      ["$griffstatus_berechnen","string","(X1 + X2)"],
      
      // Ausgangs Variablen
      ["$out_1","integer",0]

  ],
  "Module": [
      ["Monoflop","$in_2","-$in_2","$ausgang_monoflop","$in_3",3],
      ["Latch","$in_2","$ausgang_latch","$ausgang_monoflop",2],
      ["CalcFormula",["$in_1","$ausgang_latch"],"$out_1", "$griffstatus_berechnen"]
  ]
}
Beim schnellen Wechsel von 'geschlossen' nach 'gekippt' und umgekehrt funktioniert alles wie gewünscht, allerdings wird bei der Änderung von 'geöffnet' nach 'gekippt' bzw. 'geschlossen' der Ausgangswert nicht richtig gesetzt.

Hier mal ein Signalverlauf:
Bild

Die rote Linie zeigt eine Änderung von 'geöffnet' nach 'gekippt', der Wert am Ausgang bleibt aber bei '2'.
Bei der orangenen Linie hat der Ausgangswert einen Peak - warum kann ich (noch) nicht sagen.

Ich versuche weiter, das hinzubekommen...

Viele Grüße

Piet
TWS 3500XL ID: 1403 (VPN offen, Reboot nach Rücksprache)
Antworten

Zurück zu „Logikengine & Logik-Editor“