Taster Mehrfachklick

Hi Leute,

habe da eine für mich recht schwierige Anforderung. Ich habe einen einzigen Taster und möchte damit 3 verschiedne Lichtszenen aktivieren können.

Also z.B.:

1 Click -> Lichtszene1
2x Click -> Lichtszene 2
3x Click -> Lichtszene 3

Wichtig dabei ist, dass ich nicht jede Szene durch Clicken aktivere sondern das Program wartet und zählt (über einen bestimmten Zeitraum z.B. 3 Sekunden) wieviele Klicks gemacht wurden und dann die Szene startet.

Hat irgend jemand einen Ansatz für mich wie ich das umsetzen könnte?

Gruß
Benjamin

Da müsstest du uns vielleicht noch verraten um welchen Schalter es sich den handelt?

Und evtl. noch ein Screenshot des Schalters aus der IPS Konsole. Dann sieht man die Variablen/Werte die der Schalter/Taster liefert.

Ganz grob: vorausgesetzt Du bekommst jeden einzelnen Klick mit!

Erster Klick startet ein Skript mit SkriptTimer 3 Sek. In eine Integer-Variable schreibst die Klicks innerhalb der 3 Sekunden.
Nach den 3Sek. führt der SkriptTimer das Skript aus und wertet die Anzahl der Klicks in der Variablen aus und führt die entsprechende Szene aus. Anschließend setzt das Skript die Klick-Zähler-Variable wieder auf Null.

Das würde aber bedeuten, das bei Szene 1 ( 1 Klick ) trotzdem die 3 Sek. gewartet werden.

Gruß,
Peter

Ps : Willst Loxone simulieren?!

Ich persönlich habe mich auf „Press Short“ und „Press Long“ beschränkt >> Homematic.

Das hilft schon enorm.

Wenn Du ausreichend Adern hast, würde ich ne Wippe nehmen und dann hast Du schon 4 Zustände.

Oder den GIRA SPS Taster mit Unterputz-Modul, dann hast du schon 12 Zustände + 6 LEDs.

Wir brauchen mehr Infos für bessere Vorschläge

Hi,

momenatn stehe ich in der Planung für unser Haus samt Homematic Wired.

@Peter: Ja genau ich will Loxone simulieren. Finde die Idee absolut klasse und das Spart mir eine Armader an Tastern. Der WAF wird auch erhöht, wenn in jedem Raum die gleichen Taster mit der gleichen Belegung ist :wink:

Folgendes ist geplant:

In jedem Raum soll 1 Taster zum Schalten des Lichts und ein 4-fach SPS Taster für Rolläden und Lautsärker der Laustprecher.

Der 1 taster soll dann quasi für die Lichtscenarien auch herhalten.

Also so z.B:

1 Klick: Hauptbeleuchtung (normale Lampe an der Decke)
2x Klicks: Stimmungsbeleuchtung1 anschalten (LED Spots an den Wänden)
3x Klick Stimmungsbeleuchtung2 (RGB LED)

Die Stimmungsbeleuchtungen sollen später ganz normale Skripte sein, die alle Lampen vordefiniert schalten (Dimmen)

Ich würde das dann so machen, dass ich den Taster and das Wired HM Modul anschleiße aber nicht direkt verknüpfe, damit ich die Abfragen per Skript mache.

State sollte dann ON/Off Sein also ganz normales Boolean.

Gruß
Benjamin

Ein Arbeitskollege hatte auch noch einen guten Vorschlag:

Ich frage den Timestamp der letzen Aktualisiertung ab der State Variable. Und gucke ob sich der Status innerhalb von 3-5 Sekunden geändert hat. Wenn nicht, dann führt er mein Skript aus anhand der Klick-Zähl Variable aus.

Hallo,

das lässt sich ganz einfach über einen PoKeys machen.
Ohne Homatic etc. und direkt mit IPS gesteuert und zu einem kleine Preis.
Schau dir mal die Posts von Helmut an.

Hallo Benjamin,
ich habe das mit 2 Skripten und einem Timer gelöst. Es wird bei bei mir für die Rolladensteuerung eingesetzt.
Das 1. Skript ist für die Steuerung zuständig, welches die neue Position per Sprachausgabe ausgibt und danach den 8 Sekunden-Timer für das 2. Skript startet.

Das 1. Skript wird z.B. über einen Knopf ausgelöst und bestimmt die bisherige Position der Rollade.

Die Idee ist, dass mit jedem Klick die PositionNew erhöht wird, und wenn der Benutzer nicht innerhalb einer gewissen Zeit von 8 Sekunden regariert der Timer abläuft und dann das zweite Skript ausführt.

Zur Ermittelung der Ausgangsposition habe ich hier zusätzlich die letzte Aktualisierungszeit der Variablen herangezogen.
Wenn PositionNew danach gesetzt wird, dann ist diese höher als die Position der Rolladen.

Hier nun das erste Skript:


  $positionIsID=ICE_VariableCreate_Integer($parentID,"Position"); // existing position from shutter
  $positionNewID=ICE_VariableCreate_Integer($parentID,"PositionNew",3,$var_hide); // new position

  $pos=$positionNewID; 

  $eventFahren=ICE_EventCreate_TimeDelay(ICE_ScriptCreate($parentID,"fahren"),"TimerDelay",8);

  if (IPS_GetVariable($pos)["VariableUpdated"]<IPS_GetVariable($positionIsID)["VariableUpdated"])
	  {
	  $pos=$positionIsID;
	  }

  $new=getvalueinteger($pos);

  if ($new==0) // offen
  {
    SetValueInteger($positionNewID,50);
    ICE_voice("Roll 50.mp3");
  }else
  if ($new==50)
  {
   SetValueInteger($positionNewID,99);
    ICE_voice("Roll 99.mp3");
  } else
  if ($new==99)
  {
    SetValueInteger($positionNewID,100);
    ICE_voice("Roll 100.mp3");
  } else
  {
    SetValueInteger($positionNewID,0);
    ICE_voice("Roll 0.mp3");
  }
  IPS_SetEventActive($eventFahren,true); // start the timer of 2nd script

Und hier das 2. Skript, dass sich um die Ausführung kümmert:


 if ($IPS_SENDER == "TimerEvent")
  {
	 echo "ID:".$_IPS['EVENT'];
	 IPS_SetEventActive($_IPS['EVENT'],false); // stop timer
  }

  $positionNew=getvalueinteger(ICE_VariableCreate_Integer($parentID,"PositionNew",3,$var_hide,0));
  ICE_voice("und los.mp3");
  SC_MOVE($parentID,$positionNew);


ICE_voice dient nur zur Sprachausgabe, ICE_VariableCreate_Integer der einfacheren Erstellung von Variablen durch das Skript, damit die benötigten Variablen selbst erzeugt werden und man das Skript bei allen Rolladen OHNE Anpassung verwenden kann.
Sicher kann man das Skript auch zusammenfügen und über IPS_SENDER und IF THEN auswerten, aber ich denke, es ist so vielleicht verständlicher.

Ich hoffe, dass du das Skript und die Beschreibung gut nachvollziehen kannst und bald eingesetzt wird.
Viel Erfolg!