UPGRADE IP 9 verfügbar!
Timberwolf VISU jetzt mit NEUEM Layout Editor
Freie Anordnung, Reihenfolge und Größe der Widgets - viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/06SeuHRJ

NEU! Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Damit kann nun jeder das Upgrade vornehmen und VISU & IFTTT testen. Alle Info hier: viewtopic.php?f=8&t=5074

[DISKUSSION] Logik-Unterstützung - mehrere Trigger zeitversetzt

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

Ersteller
adimaster
Reactions:
Beiträge: 375
Registriert: So Apr 14, 2019 11:12 am
Hat sich bedankt: 203 Mal
Danksagung erhalten: 198 Mal

Logik-Unterstützung - mehrere Trigger zeitversetzt

#1

Beitrag von adimaster »

Hallo zusammen,

irgendwie komme ich auf keine sinnvolle Lösung/Idee oder denke einfach zu kompliziert. Daher möchte ich mal fragen, ob jmd. eine pragmatische Idee für folgende Logik hat.

Funktion: Setze n verschiedene Trigger (für HTTP-API um die Calls/minute nicht zu überschreiten) nach einer am Eingang definierten Verzögerungszeit.

Eingang: Verzögerungszeit (z. B. 5 sec.)

Ausgang 1: True nach 1x Verzögerungszeit (also true nach 5 sec.)
Ausgang 2: True nach 2x Verzögerungszeit (also true nach 10 sec.)
Ausgang 3: True nach 3x Verzögerungszeit (also true nach 15 sec.)
...
Ausgang n: True nach nx Verzögerungszeit (also true nach n x 5 sec.)

Nach einer Kombination mit CalcFormula, Monoflop, Latch, SendExplicit erhalte ich in Grafana immer noch nicht die gewünschten Ergebnisse :angry-banghead: . Nun brauche ich erst mal eine Pause und freue ich mich in der Zwischenzeit auf Ideen oder Minimalbeispiele. :confusion-waiting: :confusion-helpsign:

Besten Dank!

Grüß
Adi
Zuletzt geändert von adimaster am Sa Feb 05, 2022 8:32 pm, insgesamt 1-mal geändert.
Grüße, Adi
TWS 2600 ID: 331, VPN geschlossen, Reboot nach Rücksprache

Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#2

Beitrag von Robosoc »

Hallo Adi,

Bin momentan leider stark eingeschränkt, würde ein paar Tage dauern, bis ich nen Code erstellt haben kann... aber vielleicht hilft dir diese Diskussion als Ideengeber
viewtopic.php?p=24628#p24628

Dort wird nur ein Ausgang geschaltet, aber es läuft auch eine Zeitenabhängige Kette... das müsste eigentlich im Grunde ähnlich sein.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

gbglace
Reactions:
Beiträge: 3585
Registriert: So Aug 12, 2018 10:20 am
Hat sich bedankt: 1253 Mal
Danksagung erhalten: 1649 Mal

#3

Beitrag von gbglace »

Das geht doch mit dem Taktsignalgeber, der Standardlogiken.

Einen Eingang der den Taktgeber Startet/Stoppt und den zweiten Wert als fixen Parameter 5s, am Ausgang ein Mapping auf true = 1 und false = 1 und Sendebedingung A allways.

Kommt auf dem Start-Stop ein true an, dann sendet das Ding alle 5s eine 1 wohin, bis an dem Start/Stopp Eingang ein false kommt.
Grüße
Göran

#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#3 PBM 3 Kanäle, #4 Modbus-Extension

Ersteller
adimaster
Reactions:
Beiträge: 375
Registriert: So Apr 14, 2019 11:12 am
Hat sich bedankt: 203 Mal
Danksagung erhalten: 198 Mal

#4

Beitrag von adimaster »

Danke Sven und Göran!
Robosoc hat geschrieben: Sa Feb 05, 2022 10:20 pm Dort wird nur ein Ausgang geschaltet, aber es läuft auch eine Zeitenabhängige Kette... das müsste eigentlich im Grunde ähnlich sein.
Das schau ich mir genauer an.

gbglace hat geschrieben: So Feb 06, 2022 12:21 am Das geht doch mit dem Taktsignalgeber, der Standardlogiken.
[...]
Kommt auf dem Start-Stop ein true an, dann sendet das Ding alle 5s eine 1 wohin, bis an dem Start/Stopp Eingang ein false kommt.
Ja, klingt super einfach. Du ziehst hier aber nur einen einzigen Ausgang in Betracht. Richtig?
Wäre es möglich, den Takt nicht direkt an einen Ausgang zu legen, sondern:
- mit jedem Takt einen Zähler mittels Addition mit 1 (CalcFormula) hochzählen
- mittels Multiplexer und
- nachgeschalteten Latches
den richtigen Ausgang schreiben?
Dann würde ich aber noch Sendexplicit anstelle von "always" benötigen um nicht jedes Mal auf allen Ausgängen zu senden, schätze ich.
Wenn dann alle durch sind --> mit einem break stoppen, bis der Zähler wieder neu getriggert wird.
Wobei das dann auch schon wieder kompliziert klingt :think:

Die andere Möglichkeit wären n "And-Module" mit Trigger (würden wahrscheinlich so 15 Stück bei mir werden). Das wäre sicherlich das effizienteste und schnellste. Allerdings finde ich das irgendwie nicht so smart wie eine einzige CustomLogik die ein HTTP-API Sub-System triggert. :confusion-scratchheadyellow:

Ich stelle mir vor, dass zu einer bestimmten Uhrzeit n verschiedene Ausgänge jeweils im Abstand von x Sekunden nacheinander true senden. So werden die calls/min des APIs nicht überschritten. In jeder Programmiersprache eine einfach Schleife mit nem Delay drin ... :doh: .

Grüße
Adi
Zuletzt geändert von adimaster am So Feb 06, 2022 1:49 am, insgesamt 1-mal geändert.
Grüße, Adi
TWS 2600 ID: 331, VPN geschlossen, Reboot nach Rücksprache

Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#5

Beitrag von Robert_Mini »

Hallo Adi!

Ich grüble auch mit , insbesondere ob sich das mit variabler Anzahl von Ausgängen machen lässt.

Ein paar Fragen:
- geht es nur um ein True oder muss irgendwann ein false gesendet werden?
- was passiert bei Sperre - nichts? oder false? Trigger sollen dann ignoriert werden?
- Du schreibst Eingang Verzögerungszeit: soll dieser nur Triggern und das Intervall festlegen? Würde ich trennen und ggf. 2x das gleiche Obj. verknüpfen
- Verzögerungszeit ist nach dem Triggern fest - ok oder noch während der Abarbeitung dynamisch änderbar?

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

Ersteller
adimaster
Reactions:
Beiträge: 375
Registriert: So Apr 14, 2019 11:12 am
Hat sich bedankt: 203 Mal
Danksagung erhalten: 198 Mal

#6

Beitrag von adimaster »

Robert_Mini hat geschrieben: So Feb 06, 2022 10:27 am Ich grüble auch mit , insbesondere ob sich das mit variabler Anzahl von Ausgängen machen lässt.
Cool, freut mich! Und ja, macht sogar wirklich Sinn mit einer variablen Anzahl, da dann für sämtlichen HTTP-API Anfragen anwendbar. Ggf. dann sogar auch als festes Modul für den TWS interessant?!

Ich werde mich später hinsetzen und die Problem-/Funktionsbeschreibung inkl. Anwendungsbsp. visualisieren; ist sicherlich leichter als mit Text.

Grüße
Adi
Grüße, Adi
TWS 2600 ID: 331, VPN geschlossen, Reboot nach Rücksprache
Benutzeravatar

Eraser
Reactions:
Beiträge: 646
Registriert: So Aug 12, 2018 1:51 pm
Wohnort: Amstetten, Österreich
Hat sich bedankt: 205 Mal
Danksagung erhalten: 275 Mal

#7

Beitrag von Eraser »

So eine Logik im Logikeditor wäre wirklich interessant, hab das zur Zeit in NodeRed am Laufen zur Abfrage von Werten per MQTT, da ich keine einfache Lösung im Logikeditor gefunden habe.
mfg
Wolfgang

Timberwolf 2500 #151 / VPN offen / Reboot nach Rücksprache
+ PBM #938

Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#8

Beitrag von Robert_Mini »

Ergänzend: Ich habe mal eine Logik gepostet, die eine parametrierbare Sequenz absetzt (Sendeverzögerung und Wert). Läuft bei mir erweitert auf 3 Werte.
viewtopic.php?f=65&t=2412&p=26817&hilit ... ger#p26817

Damit würde deine Anwendung schon mal abgedeckt sein. Ich schau mir aber gerade noch eine 2. Lösung an.

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

Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#9

Beitrag von Robert_Mini »

Hallo Adi!

Ich hab mal eine schnelle Lösung gebaut. Nicht parametrisch und ohne Reset / Break.

Im Prinzip ganz einfach gehalten: Timer startet mit Verzögerung, beim Timerablauf wird ein SendExplicit mit fallender Flanke ausgelöst.
Diese fallende Flanke startet gleichzeitig den nächsten Timer...

Lässt sich durch kopieren von einzelnen Zeilen einfach erweitern.

Man könnte auch gleich 16 Ausgänge festlegen und per "+" einblendbar machen. Das wäre nur bedingt smart, denn die restlichen Timer laufen im Hintergrund trotzdem...

lg
Robert

Code: Alles auswählen

/**===========================================================
Trigger mit definierbarem Intervall
============================================================*/
{
    "Level":[
        ["$I_Interval","float",5.0],
        ["$I_Trigger","bool",false],
	["$I_Enable","bool",false],
	["$Status","bool",false],
	["$Reset","bool",false],
		
	["$Output1","bool",true],
	["$Output2","bool",true],
	["$Output3","bool",true],
	["$Output4","bool",true],     // ggf. weitere Variablen mit ansteigender Nr. anlegen
		
	["$Touched","bool",false],
	["$Timer1Status","bool",false],
	["$Timer2Status","bool",false],
	["$Timer3Status","bool",false],
	["$Timer4Status","bool",false],   // ggf. weitere Variablen mit ansteigender Nr. anlegen
		
        ["$Konst1","float",1.0],
        ["$Konst0","float",0.0],
        ["$KonstTrue","bool",true],
	["$KonstFalse","bool",false]
    ],
    "Module":[
        // Auswerten, ob der Triggereingang getriggert hat
	["Triggered", "$I_Trigger", "$Touched" ],
	// Timer 1 wird durch Trigger gestartet
	["Monoflop","$Touched","$Reset","$Timer1Status","$I_Interval",0],
	// Ablaufender Timer startet jeweils mit fallender Flanke den nächsten Timer
	["Monoflop","$Timer1Status","$Reset","$Timer2Status","$I_Interval",4], 
	["Monoflop","$Timer2Status","$Reset","$Timer3Status","$I_Interval",4], 
	["Monoflop","$Timer3Status","$Reset","$Timer4Status","$I_Interval",4],    // weiter kopieren und TimerNr anpassen
	    
	["SendExplicit","$Timer1Status","$Output1",2],
	["SendExplicit","$Timer2Status","$Output2",2],
	["SendExplicit","$Timer3Status","$Output3",2],
	["SendExplicit","$Timer4Status","$Output4",2]    // weiter kopieren und TimerNr + OutputNr anpassen    
    ],
    "Input":[
        ["Interval","Input","$I_Interval","u"],
	["Trigger","Input","$I_Trigger","a"]
    ],
    "Output":[
        ["Output1","Output","$Output1","x"],
        ["Output2","Output","$Output2","x"],
        ["Output3","Output","$Output3","x"],
        ["Output4","Output","$Output4","x"]    // weiter kopieren und OutputNr anpassen
    ]
}

Zuletzt geändert von Robert_Mini am So Feb 06, 2022 2:22 pm, insgesamt 1-mal geändert.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

StefanW
Elaborated Networks
Reactions:
Beiträge: 9689
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 4831 Mal
Danksagung erhalten: 7633 Mal
Kontaktdaten:

#10

Beitrag von StefanW »

Eine Möglichkeit könnte auch der State Machine Baustein darstellen
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.
Antworten

Zurück zu „Zusätzliche Logikbausteine“