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

[NEUHEIT] Logikbaustein Trigger startet einfache Sequenz

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

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

Logikbaustein Trigger startet einfache Sequenz

#1

Beitrag von Robert_Mini »

Hallo zusammen!

Ich hatte heute wieder mal Lust auf Logik :D .

Funktion:
Der Baustein wartet auf ein "True" am Eingang "Trigger" und sendet danach nach Ablauf der Verzögerungszeit 1 den Wert vom Eingang 1 auf Ausgang 1. Nach Ablauf der Verzögerungszeit 2 wird der 2. Ausgang mit dem aktuellen Wert von Eingang 2 gesendet.
Wird keine Verzögerungszeit angegeben, wird sofort beim Empfang des Triggers gesendet.
Es wird nur bei True getriggert. Die Trigger-Option des Einganges "Trigger" sollte daher auf "a" always verbleiben.

Anwendungsbeispiele:
Mein Anwendungsfall: Am Morgen kann ich die Beschattungsautomatik manuell starten, indem ich auf den Auf-Befehl der EG-Jalousie höre. Dabei wird dann das KNX-Objekt der Zeitschaltuhr "True" für Lamelle und danach verzögert "True" für die Behanghöhe gesendet.

Eingänge:
  • Trigger: Startet die Sequenz.
  • Wert1: Eingang für den Wert, der auf Ausgang 1 gesendet werden soll. Es kann dynamisch der Wert aus einem Objekt verwendet oder per Parameter fix true/false gesetzt werden.
  • Verzögerung Ausgang1: Verzögerungszeit, nach deren Ablauf Ausgang 1 den Wert1 sendet.
  • Wert2 / Verzögerung Ausgang2: Analoge Einstellungen für den 2. Ausgang.
Ausgänge:
  • Ausgang1: Sendet nach Ablauf der Verzögerungszeit 1 den Wert, der zu diesem Zeitpunkt am Eingang Wert1 anliegt.
  • Ausgang2: Sendet nach Ablauf der Verzögerungszeit 2 den Wert, der zu diesem Zeitpunkt am Eingang Wert2 anliegt.
Der Baustein ist für boolsche Werte konzipiert. Sollte Bedarf an einem Baustein bestehen, der Zahlenwerte sendet, so kann ich das gerne nachreichen.

Nutzungsrechte:
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.

Falls wer einen freiwilligen Beitrag zur Motivation leisten will: Klick

Viel Spaß damit und gerne Rückmeldung, wenn was fehlt oder euch die Sache gefällt.
Robert

Der Baustein:
Sequenz.png

Code: Alles auswählen

/**===========================================================
Trigger "True" für einfache Sequenz mit 2 boolschen Ausgängen:
- Ausgang 1 Sendet Wert 1 mit Verzögerung 1
- Ausgang 2 Sendet Wert 2 mit Verzögerung 2
============================================================*/

{
    "Level":[
        // Inputs
		["$I_Trigger","bool",false],
		["$I_Wert1","bool",false],
		["$I_Wert2","bool",false],
        ["$I_Verzoegerung1","float",100.0],
		["$I_Verzoegerung2","float",100.0],
		
		// Outputs
		["$O_Wert1","bool",false],
		["$O_Wert2","bool",false],
        
        // Interne Variablen
		["$Trigger","bool",false],
		["$Timer1","bool",false],
		["$Timer1_Last","bool",false],
		["$Timer1_Ende","bool",false],
		["$Timer1_CResult","bool",false],
		["$Timer2","bool",false],
		["$Timer2_Last","bool",false],
		["$Timer2_Ende","bool",false],
		["$Timer2_CResult","bool",false],
		// Konstanten
        ["$Konst1","float",1.0],
        ["$Konst0","float",0.0],
        ["$KonstTrue","bool",true],
		["$KonstFalse","bool",false]
		
    ],
    "Module":[
	    // Eingang getriggert?
	    ["Triggered", "$I_Trigger", "$Trigger" ],
	    
	    // Timer-Status merken
	    ["Latch","$Timer1","$Timer1_Last","$KonstTrue",0],
	    ["Latch","$Timer2","$Timer2_Last","$KonstTrue",0],
	    
	    // Wenn getriggert, Verzögerungstimer starten
	    ["Monoflop","$Trigger",0,"$Timer1","$I_Verzoegerung1",0],
	    ["Monoflop","$Trigger",0,"$Timer2","$I_Verzoegerung2",0],
	    
	    // Wenn Verzoegerung 0, dann direkt beim Trigger reagieren => 
	    // TimerLast auf True setzen, damit abgelaufener Timer simuliert wird
	    ["Comparator", "$I_Verzoegerung1", "$Timer1_CResult", "$Konst0"],
	    ["Comparator", "$I_Verzoegerung2", "$Timer2_CResult", "$Konst0"],
	    ["Latch","$Trigger","$Timer1_Last","-$Timer1_CResult",0],
	    ["Latch","$Trigger","$Timer2_Last","-$Timer2_CResult",0],
	    
	    // Timer abgelaufen?, Timer1_Ende wird nur true, wenn in diesem Aufruf der Timer ausgelaufen ist
	    ["And" , ["-$Timer1","$Timer1_Last"],"$Timer1_Ende"],
	    ["And" , ["-$Timer2","$Timer2_Last"],"$Timer2_Ende"],
	    
	    // Eingangswert auf Ausgang übernehmen
	    ["Latch","$I_Wert1","$O_Wert1","$Timer1_Ende",0],
	    ["Latch","$I_Wert2","$O_Wert2","$Timer2_Ende",0],
	    
	    // Senden
	    ["SendExplicit","$Timer1_Ende","$O_Wert1",0],
	    ["SendExplicit","$Timer2_Ende","$O_Wert2",0]
	    
	    
	  //["Polynomial", "$Konst1", "$Temp_Soll",["$I_Temp_Soll", "$I_Offset"]],	
      //["Ratio","$Konst100","$Steigung","$I_Delta_T_Max"],
	  //["Limiter","$Hoehe_Soll","$Hoehe_Soll_Lim","$Val_ok",["$I_Hoehe_Min", "$I_Hoehe_Max"]],
	  //["Comparator", "$I_Hoehe_Min", "$SelectHoehe", "$Hoehe_Soll"],
      //["Multiplexer",["$Konst0","$Hoehe_Soll_Lim"],"$Hoehe_Soll_Lim","-$SelectHoehe"],			
	  //["Or" , ["$Val_Large1" , "$Val_Large2"], "$Val_Large"],
	  //["And" , ["-$Val_Large" , "-$Val_Null"], "$Val_Small"],
	  //["Monoflop","$Val_Large",0,"$Timer_Large","$I_Delay",1],
	  //["Latch","$Hoehe_Soll_Step","$Hoehe_Soll_StepB","$Val_Large",0],
	  //["Clocksignal","$ConstTRUE","$Clk","$Period"],
	  //["HobbsMeter","$State","$Time","$Reset"],
	  //["Cron","$KonstTrue","$ResetTag",0,"$StartZeitTag"],
	  //["BinaryMultiplexer",["$In_D","$In_E","$In_F"],"$Output"],
	  //["Triggered", "$Input", "$Touched" ],
	  //["SendExplicit","$Send","$Out_val",0],
	  //["Interpolation","$In", "$Out", [ [x1,y1] , [x2,y2] , ... , [xn,yn ] ] ]
    ],
    "Input":[
        ["Trigger","Eingang True triggert Output","$I_Trigger","a"],
		["Wert 1","Wert der an Ausgang 1 gesendet wird","$I_Wert1","u"],
		["Verzögerung Ausgang1","Wert der an Ausgang 1 gesendet wird","$I_Verzoegerung1","u"],
		["Wert 2","Wert der an Ausgang 2 gesendet wird","$I_Wert2","u"],
		["Verzögerung Ausgang2","Wert der an Ausgang 1 gesendet wird","$I_Verzoegerung2","u"]
    ],
    "Output":[
        ["Ausgang1","Ausgang 1 sendet nach Verzögerung 1","$O_Wert1","x"],
		["Ausgang2","Ausgang 2 sendet nach Verzögerung 2","$O_Wert2","x"]
	  //["Debug Val_Small","","$Val_Small","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. */
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
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: 7632 Mal
Kontaktdaten:

#2

Beitrag von StefanW »

Sehr schön,

wunderbar. Danke dass Du das mit uns allen teilst und damit tolle Bausteine zur Verfügung stellst.

Sobald wir dazu kommen, machen wir mit Euch zusammen eine Liste der besten zusätzlichen Bausteine und integrieren diese dann in den Server, so dass es gleich zur Verfügung steht.

lg

Stefan
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.

Zelkin
Reactions:
Beiträge: 38
Registriert: Fr Jan 07, 2022 2:02 pm
Hat sich bedankt: 23 Mal
Danksagung erhalten: 10 Mal

#3

Beitrag von Zelkin »

Hallo Robert

Klasse Logik :)

Kann man diese erweitern, dass man auf dem Trigger=1 einen wert senden kann und auf trigger=0 einen anderen?
Ich steig bei dem code leider nicht ganz durch, sonst würde Ich es gerne selbst probieren :)

Im Prinzip ein einfacher If Baustein
wenn trigger = 1 dann wert von eingang 1 (float oder int) auf ausgang 1
sonst / wenn trigger = 0 dann wert von eingang 2 (float oder int) auf ausgang 1

die Idee mit der Verzögerung mit drin und man hat eine super licht Steuerung

Ich schalte mein Licht abhängig vom Zustand des Hauses und Uhrzeit und verwende dazu 4 verschiedene werte und einen Wert aktuell --> diesen könnte man dann auf Eingang 1 setzen

gruß

Kai
Kai
TWS 3500L ID:641 VPN offen, Reboot nach Rücksprache

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

#4

Beitrag von Robert_Mini »

Hallo Kai!

Gehen tut fast alles.
Das lässt sich in diesem Fall leicht mit einem Multiplexer realisieren.
Damit kann man mit dem Trigger 0/1 zwischen den Eingangswerten umschalten.

Noch zum Verständnis:
Muss es wirklich der Trigger sein, der umschaltet? Wenn es ein Zustand ist, könnte man am einfachsten einen getrennten Multiplexer anlegen, der abhängig vom Zustand den Wert1 und Wert2 setzt.
Zb. Objekt Tag/Nacht = 1 => Setze Wert1 auf 100%, wenn 0 => Wert1 auf 20%
Das gleiche für den Eingang Wert2.

Das würde dann out of the box gehen oder man erstellt einen Mehrfach-Multiplexer mit 4 Eingängen/2 Ausgängen (das würde ich auch bereitstellen).

Ansonsten kann man den Multiplexer auch in die Logik oben einbauen und abhängig vom Trigger true/false auf den Ausgang durchreichen.
Bräuchte dann eben Wert1_true, Wert1_false, Wert1_Verzögerung und das gleiche nochmal für Wert2.

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

Zelkin
Reactions:
Beiträge: 38
Registriert: Fr Jan 07, 2022 2:02 pm
Hat sich bedankt: 23 Mal
Danksagung erhalten: 10 Mal

#5

Beitrag von Zelkin »

Hi Robert

In dem Fall handelt es sich um einen zustand!
Mein trigger ist der vewegungsmelder, der eine Bewegung erkannt hat oder eben auch nicht!
Dementsprechend hemd sollte es so gehen mit einem getrennten multiplexer..........wenn ich jetzt wüsste was du damit meinst ;)


Ich muss mir die Funktionsweise nochmal näher anschauen, leider habe ich sie bisher noch nicht durschaut!
Kannst du mir mal zeigen wie das aussehen müsste nach deinem Bsp. Das sollte ich dann adaptieren können

Gruß

Kai
Zuletzt geändert von Zelkin am Di Jan 18, 2022 12:26 am, insgesamt 2-mal geändert.
Kai
TWS 3500L ID:641 VPN offen, Reboot nach Rücksprache
Antworten

Zurück zu „Zusätzliche Logikbausteine“