NEU! UPGRADE IP 11 verfügbar!
NEU! LICHTWIDGET - DPT 7.600 - Logik Manager Update - sowie viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/B9MUEJj2

Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Ab sofort kann jeder die neue VISU & IFTTT testen. Info: viewtopic.php?f=8&t=5074

Release V 4 am 15. Juni 2024
Es gibt nun einen fixen Termin. Info: viewtopic.php?f=8&t=5117

NEU! Ausführliches Video Tutorial zur VISU
Jetzt werden alle Fragen beantwortet. Das Video: https://youtu.be/_El-zaC2Rrs

[Beantwortet] [V4.0 IP3] Position des Garagentors zeitabhängig

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
coolrunnings
Reactions:
Beiträge: 6
Registriert: Sa Apr 09, 2022 10:23 pm
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

[V4.0 IP3] Position des Garagentors zeitabhängig

#1

Beitrag von coolrunnings »

Hallo zusammen,

ich finde endlich so langsam die Zeit meine plugins aus dem Wiregate auf den TWS zu übertragen. Mit den einfachen Dingen wie "sind noch Fenster auf?" oder "Ist irgendwo das Licht an?" bin ich auch schon durch. Jetzt hänge ich aber an der Logik für mein Garagentor.

Mein altes Plugin hatte 3 Trigger:
1. Fahrbefehl Garagentor
2. Endlage oben erreicht
3. Endlage unten erreicht.

Zusätzlich wurde nach dem Durchlauf ein trigger gestartet, der das Plugin nach 30s wieder aufgerufen hat um festzustellen, ob die Endlage erreicht wurde oder das Tor angehalten hat.

Abhängig von den 3 Parametern kann am Ausgang folgendes rauskommen:
0: oben
1: unten
2: fährt
3: steht

Der Ablauf war folgender:

Wenn "Endlage oben erreicht == 1" und "Endlage unten erreicht == 0" dann 0 (oben)
Wenn "Endlage oben erreicht == 0" und "Endlage unten erreicht == 1" dann 1 (unten)
Wenn "Endlage oben erreicht == 0" und "Endlage unten erreicht == 0" und "letzter fahrbefehlt nicht älter als 30s" dann 2 (fährt)
Wenn "Endlage oben erreicht == 0" und "Endlage unten erreicht == 0" und "letzter fahrbefehlt älter als 30s" dann 3 (steht)

Ich vermute mal, dass sich das nur mit einer Custom Logik lösen lässt. Aber ich lass mich auch gerne eines besseren belehren.
Leider stehe ich vollkommen auf dem Schlauch, wie ich das hinbekommen.
Vielleicht hat von euch jemand eine Idee.

Gruß
Michael
Zuletzt geändert von Parsley am Fr Okt 27, 2023 12:47 pm, insgesamt 2-mal geändert.
TWS 2500 ID:605 VPN und Reboot nach Vereinbarung

blaubaerli
Reactions:
Beiträge: 2337
Registriert: Sa Sep 15, 2018 10:26 am
Wohnort: Kerpen
Hat sich bedankt: 902 Mal
Danksagung erhalten: 704 Mal

#2

Beitrag von blaubaerli »

Hallo Michael,

herzlich wilkommen im Forum und Glückwunsch zum ersten Post.

Bitte passe doch noch den Titel deines Threads und deine Signatur entsprechend der Forenreglen (siehe blauer Kasten oben) an.

Ich würde das mit einer Custom-Logik lösen, bin aber selbst immer wieder überrascht, was unsere Logik-Spezis hier so zu zaubern wissen.

Ggf. ist es ja sinnvoll den Quellcode des Plugins hier zu posten…?

Beste Grüße
Jens
Zuletzt geändert von blaubaerli am Do Okt 26, 2023 10:52 pm, insgesamt 1-mal geändert.
wiregate1250 & timberwolf168 (2600er), VPN offen, Reboot nach Vereinbarung
Bitte WIKI lesen.

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

#3

Beitrag von Robosoc »

Moin Michael,

Deine Frage scheint zumindest im momentanen Stand der Diskussion sehr unabhängig von der Version aber da sich der Funktionsumfang des TWS ja auch entwickelt, ist es einfach auch sinnvoll festzuhalten für welche Version die Antwort gegeben wird und die Forenregel gibt vor, dass dies bitte im Betreff zu stehen hat.

Ich gehe davon aus, dass Du nachlieferst und antworte daher schon einmal.

Ich bin recht fit in custom Logiken arbeite aber selber nur mit diesen, wenn die Aufgabe nicht durch zwei oder drei Standardlogiken gelöst werden kann (oder sie häufigiger eingesetzt werden). Beim Erstellen einer Customlogik nutzt man letzten Endes auch nur Module, die nahezu deckend mit den Standard Modulen sind und somit ist der Gedankenprozess auch sehr nah beieinander.

In deinem Fall würde ich mir als erstes eine Timerlogik wählen, um den Status zu Ermitteln ob das Tor fährt oder steht.

Hierfur (also um den richtigen Timer zu ermitteln) musst du wissen, ob Du auf eine steigende oder fallende Flanke reagierst oder ob einfach jedes True eine Fahrt auslöst, egal ob bereits eine negative Flanke stattgefunden hat.

In einer zweiten Logik ermittelt Du dann bereits den gewünschten Statuswert.
Ich würde es wahrscheinlich mit einer "Freien Formel" lösen (wenn-dann-Formel).

X1>0?3:X2+2*X3
X1 : fährt = 0, steht = 1
X2 : Position oben
X3 : Position unten
Zuletzt geändert von Robosoc am Fr Okt 27, 2023 6:37 am, insgesamt 2-mal geändert.
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK

Ersteller
coolrunnings
Reactions:
Beiträge: 6
Registriert: Sa Apr 09, 2022 10:23 pm
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

#4

Beitrag von coolrunnings »

blaubaerli hat geschrieben: Do Okt 26, 2023 10:52 pm Bitte passe doch noch den Titel deines Threads und deine Signatur entsprechend der Forenreglen (siehe blauer Kasten oben) an.
Ist erledigt.
blaubaerli hat geschrieben: Do Okt 26, 2023 10:52 pm Ggf. ist es ja sinnvoll den Quellcode des Plugins hier zu posten…?
Hier mal der Teil meiner Logik, der den Status berechnet hat:

Code: Alles auswählen

sub calc_logik {

	my $val_pos_oben = knx_read($ga_pos_oben,300,"1.001");
	my $val_pos_unten = knx_read($ga_pos_unten,300,"1.001");
	my $val_logik = 4;
	
	if ( $val_pos_oben == 1 && $val_pos_unten == 0 ) {
		$val_logik = 0;
	}
	elsif ( $val_pos_oben == 0 && $val_pos_unten == 1 ) {
		$val_logik = 1;
	}
	elsif ( $val_pos_oben == 0 && $val_pos_unten == 0 ) {
		# check if cycle run
		if ( $plugin_info{$plugname.'_checkRunFinished'} == 1 ) {
			# not finished run within time limit
			$val_logik = 3;
		}
		else {
			$val_logik = 2;
		}
	}
			
	return $val_logik;

}
Robosoc hat geschrieben: Fr Okt 27, 2023 6:30 am In deinem Fall würde ich mir als erstes eine Timerlogik wählen, um den Status zu Ermitteln ob das Tor fährt oder steht.

Hierfur (also um den richtigen Timer zu ermitteln) musst du wissen, ob Du auf eine steigende oder fallende Flanke reagierst oder ob einfach jedes True eine Fahrt auslöst, egal ob bereits eine negative Flanke stattgefunden hat.
Da es nu eine GA für den Fahrbfehl gibt und der entweder 0 oder 1 sein kann, wäre es Timer7 oder Timer8.
Robosoc hat geschrieben: Fr Okt 27, 2023 6:30 am In einer zweiten Logik ermittelt Du dann bereits den gewünschten Statuswert.
Ich würde es wahrscheinlich mit einer "Freien Formel" lösen (wenn-dann-Formel).

X1>0?3:X2+2*X3
X1 : fährt = 0, steht = 1
X2 : Position oben
X3 : Position unten
Du würdest das aber beides in einer Custom Logik unterbringen?
TWS 2500 ID:605 VPN und Reboot nach Vereinbarung

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

#5

Beitrag von Robosoc »

coolrunnings hat geschrieben: Fr Okt 27, 2023 11:34 am Du würdest das aber beides in einer Custom Logik unterbringen?
Nein, ich würde auf keinen Fall eine Custom Logik daraus machen, sondern zwei einzelne Standardlogiken, die ich sinnvoll benennen und mit Tags versehen würde. Z. B. Tag: Garagentor.
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK

Ersteller
coolrunnings
Reactions:
Beiträge: 6
Registriert: Sa Apr 09, 2022 10:23 pm
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

#6

Beitrag von coolrunnings »

Robosoc hat geschrieben: Fr Okt 27, 2023 12:35 pm Nein, ich würde auf keinen Fall eine Custom Logik daraus machen, sondern zwei einzelne Standardlogiken, die ich sinnvoll benennen und mit Tags versehen würde. Z. B. Tag: Garagentor.
Gestern hatte ich dann endlich Zeit deine Tipps in die Tat umzusetzen. Es sind insgesamt 4 Logiken nötig gewesen (zumindest brauche ich 4 :) )

Da die Position oben/unten ein boolean ist, musste ich die beiden erstmal in einen Integer umwandeln. Dafür habe ich den Binärmultiplexer genommen.

Der Timer startet mit dem Fahrbefehlt (true oder false). Das ist momentan auch noch die einzige "unschöne" Sache. Ich kann das Tor anhalten, indem ich beim hochfahren, einmal auf runterfahren tippe (true). Wenn das Tor dann nach 30s nicht in der Endlage angekommen ist, wird auch richtigerweise "steht" ausgegeben.
Wenn ich dann aber wieder runterfahren tippe (true), startet der Timer natürlich nicht erneut, weil der Eingang ja immer noch auf true steht. Es wird also keine Fahrt angezeigt. Erst wenn das Tor dann in der Endlage unten angekommen ist, ist der Status wieder korrekt.

Bild

Für die Logik habe ich die freie Formel verwendet, allerdings in etwas abgewandelter Form:

X1>0?2:(X2==1?0:(X3==1?1:3))

Bild

Danke für eure Hilfe. Damit läuft die Logik schon mal wieder. Jetzt begebe ich mich mal an die KWL Steuerung :)
TWS 2500 ID:605 VPN und Reboot nach Vereinbarung
Antworten

Zurück zu „Logikengine & Logik-Editor“