ich stehe auf dem schlauch :-(

Ich würde gerne einem Taster mehrere Funktionen geben:

1 mal drücken lich1 an

2 mal drüclem licht 2 an

ich dachte mir ok ich baue einen Zähler, das habe ich hinbekommen.

Aber wie stelle ich es an, das nur Licht 2 angeht wenn ich Taster 2 x drücke.

Ich hbae mir über eine Zeit abfrage gedacht aber k.a. wie ich das schreiben soll ?

Könnte Ihr mir helfen ?

Hi,
ich habe mal vor einiger Zeit eine ähnliche Funktion gebaut (wollte ich eigentlich auch nochmal säubern :D). Im Code sind zwar Funktionen aus meinen eigenen Libs, aber die Logik kannst Du dir sicher abgucken (bzw. direkt Deine Ids statt meinen Funktionen einsetzen).

Das Skript wird bei mir von der Daten Variable (FS20) des Lichts Boden Treppe bei einem Update angestartet. Ich schalte damit das bei doppeltem Drücken des Lichts auf dem Dachboden zusätzlich das Licht unten auf dem Flur an oder aus.

Prinzipiell (z.B. bei FS20) müsstest Du im ersten Teil Schaltbefehle für Geräte, welche beim Doubleclick geschaltet werden sollen einbauen können. Zusätzlich müsstest Du, im von mir unbenutzen Teil, nach dem zweiten else, die Schaltbefehle für Single Click auslösen. Bei Fs20 z.B. vorbereitend ein Dummy Device anlegen und einen Schalter darauf programmieren und das Skript an die Daten Variable hängen.



<?

// Evaluate Event Sender
if($IPS_SENDER == "Execute")    {
    echo "Sender: Execute; Diese Skript kann nicht manuell ausgeführt werden (jedenfalls nicht mit einem sinnvollen Ergebnis).
";
}
// Function in dev to handle time and behaviour on fs20 presses

require "functions.inc.php";



// last data is previous data, repeated press?
if($IPS_VALUE == br_objGetVar($IPS_SELF,"last_data")){
// User sent the same command repeadedly
		print "Last Data is previous data; ";
		
			if((time() - GetUpdateTime(12649 /*[Boden\Licht Treppe\Status]*/) >= 2 )){
					// 2 seconds
					print "Time is greater than 2 seconds; ";
			} else {
					// doubleclick
					print "Time is NOT greater.";

				// Status Switch by FS20
				if($IPS_VALUE == 0){
					// off
					if(!GetValueBoolean(12649)){
						print "Switch Flur off";
						br_switch(array(59848),false);
					}
	  			}
			   if($IPS_VALUE == 20){

				}
			   if($IPS_VALUE == 17){
						// on
						print time();
						print " update " .GetUpdateTime(12649);
					if((GetValueBoolean(12649)) && (
					time() - GetUpdateTime(12649) <= 2 )){
						print "Switch Flur on ";
						br_switch(array(59848),true);
					}
				}
			   if($IPS_VALUE == 19){
						// nothing
				}

			}
} else  {
	print "Last Data is NOT prev. data; ";
			if((time() - GetUpdateTime(12649 /*[Boden\Licht Treppe\Status]*/) >= 2 )){
					// 2 seconds
					print "Time is greater than 2 seconds; But no doubleclick. ";
			} else {
			      // doubleclick
					print "Time is NOT greater. But no doubleclick.";

			}

}


// Save last Data under var last_data skript as parent
br_objSetVar($IPS_SELF,"last_data",$IPS_VALUE);

?>

Grüße, Benjamin

Ich habe hier einiges mit kurzem Drücken und langem Drücken gelöst. Vielleicht ne Alternative?

Gruß,
Christoph

Einfach einen IPS_SetScriptTimer($IPS_SELF, xx Sekunden); mit jedem Tastendruck neu aufziehen und einen Zähler benutzen.
Hier dann den Code zum Licht anschalten:


if ($IPS_SENDER == "TimerEvent")
{
   if($Zähler == 1) .... führe diesen Code aus
   if($Zähler == 2) .... führe diesen Code aus
   IPS_SetScriptTimer($IPS_SELF, 0);
   return;
}

Hi wäre auch ok :slight_smile:

Kannst duu mal deinen Code Posten ?

Was ist den das Timerevent ?

Aber ich würde gerne 5sec warte und dann schaut wie hoch der Zähler ist und dann entsprechend des Zählerstanfs auslöst.

Danke für deine Hilfe.

PS: Ich habe FS20 im Einsatz !

Da ist nicht viel mit Code. Ich beschreibe, wie ich es mache:

Bei den FS20 Fernbedienungen hast Du ja pro Taste eine Boolean Variable, die sich bei jedem Druck ändert von TRUE auf FALSE, bzw. umgekehrt. Dann hat jede Taste noch eine Integer Variable. Bei einem kurzen Druck geht die Integer Variable auf 18, hält man die Taste länger gedrückt geht die Variable auf 26 (habe gerade kein IPS zur Hand, bin mir aber fast sicher, dass das so ist).

Die Scripte, die Du bei kurzem Tastendruck ausführen willst, triggerst Du auf „ausgelöstes Ereignis“, dort die Data Variable der Taste der FS20 Fernbedienung „bei bestimmtem Wert“ --> 18 und die Scripte, die Du bei langem Tastendruck ausführen willst triggerst Du auf den Wert 26.

Klar soweit? :wink:

Gruß,
Christoph

Hammer Idee habs verstanden.

Muss nur noch rausfinden warum wenn z.B. der Taster On im Büro drücke, das Licht im Wohnzimmer gedimmt wird ?

Dier Coder für Büro Schalter ist 2111
Der Code für Wohnzimmer Licht ist 1214

Es läuft nicht über IPS !

Also wenn ich IPS Dienst ausschalte macht er es genauso.

Waran liegt das ?

Modul: FS20 S8M

Brauchst nicht suchen, da hat jemand beim Anlernen gepennt … :smiley:

Gruß
Bruno

Wie meinst du das ?

Was mache ich beim anlernen falsch ?

Du hast wohl die Fernbedienung auf den Dimmaktor angelernt, oder verstehe ich was falsch ?

Gruß
Bruno

Hi nicht ganz ich habe den 4/8 Kanal Sender benuzt, und habe dem den code für das Bürolicht gegeben. (21-11)

Aber wenn ich die für Licht an dauerhaft drücke, sendet er den code 11-114.

Habe rausgefunden warum das Wohnzimmerlicht anging: ich hatte 11-14 eingestellt, sollte aber 12-14 sein.

Habs geändert. Jetzt geht das Wohnzimmerlicht wenigstens nicht an.

Ich habe mal das S8M mal auf Werkseinstellungen zurück gesetzt. Und habe die Codes neu eingestellt.

Jetzt sendet es immer, wenn ich eine Taste gedrückt halte den Code von der Werkseinstellung.

Z.B. ich drücke Taste 1 kurz: Code 11-12

drücke ich Taste 1 lang: Code 11-11

Ich finde nichts in der Anleitung wo man das einstellen kann bzw. das es überhaupt eine Funktion gibt, die lang und kurzes drücken unterscheidet ?

Wie kann das sein ?

Fragen bitte nur einmal stellen … hier geht es weiter :confused:

Gruß
Bruno

Sorry wollte alle dran teil haben lassen.

Ich habe bei mir eine Excel-Tabelle mit den Codes angelegt. Klingt im ersten Moment blöd, aber wenn was neues dazukommt oder es irgendwo Probleme geben sollte, dann kann die unter Umständen weiterhelfen … :slight_smile:

Hi hab ich auch gemacht.

Aber beim S8M kann mann das lange drücken nur per IR PC Programmierer einstellen.

Also ich habe alles richtig gemacht. NUR EVL hätte es besser beschreiben sollen in der Anleitung :slight_smile: