Ein Tasten Rolladen Steuerung FS20

Moin alle…

Habe folgendes Problem…
(Suchfunktion hab ich auch benutzt, aber bisher nichts brauchbares gefunden)

Möchte ganz gerne meine Rolladensteuerung (Hubmotor für ein Dachfenster),
über einen Taster schalten (S4UB im 4 Kanal Modus und TC6 im Einzelkanal modus)…

Also Quasi mit einer taste hoch, runter und stoppen…

Hatte auch schon die idee, das Dimmerscript umzuschreiben, aber dieses schlägt leider fehl(10er Schritte im script eingetragen)… Die Variablen sind, meiner meinung nach, auch richtig angepasst, aber leider fängt er an, den ersten 10er schritt zu machen, und dann fährt er wieder in die andere richtung.

Falls einer schon sowas realisiert hat, bzw. mir helfen kann (hab IPS erst seit ein paar Tagen und bin mich noch am reinfinden, trotz PHP kentnissen, gar nicht so einfach) wäre ich echt dankbar…

Wäre auch im DriveUp DriveDown modus ok, wobei mir die SetPosition Anweisung besser gefallen würde…

MFG
Korny

Hallo korny und willkommen im Forum.

Eigentlich musst du nur deinen Taster auf onChange ein Script triggern lassen. Dann benötigst du eine Variable, die sich den aktuellen Vorgang (öffnen/schließen) merkt. Im Script prüfst du den Modus und entscheidest was als nächstes passieren soll.

Ich gehe mal davon aus, dass dein Fenster einen Taster für öffnen und einen für schließen vorsieht. So wie meine…

Modus 1 soll mal für Öffnen stehen und die 2 für Schließen


// Alle Settings im Funktionskopf
$OpenID = 12345; // Die InstanzID deines Fensterschalters für öffnen
$CloseID = 12346; // Die InstanzID deines Fensterschalters für schließen
$State=getValueInteger('FensterRichtung');



// Switch Block öffnen
switch($State)  
{
  case 1: 
      // Öffnen
      FS20_SwitchMode($CloseID, false); // sicherheitshalber den "Runterfahrtaster" loslassen, falls noch "jemand am drücken" ist     
      FS20_SwitchMode($OpenID, true);  // Hochfahrtaster drücken
      setValueInteger('FensterRichtung', 2); // öffnen wurde angestoßen, nächste aktion muss also, wann auch immer, schließen sein
      break;
  case 2:
      // Schließen
      FS20_SwitchMode($OpenID, false); // sicherheitshalber den "Hochfahrtaster" loslassen, falls noch "jemand am drücken" ist     
      FS20_SwitchMode($CloseID, true);  // Runterfahrtaster drücken
      setValueInteger('FensterRichtung', 1); // schließen wurde angestoßen, nächste aktion muss demnach öffnen sein
      break; 
}     
// Ende des switch Blocks


So, das wäre jetzt eine Wechselschaltung mit einem Taster (aus dem Stand getippt und ungetestet). Das solltest du erstmal ausprobieren bevor du weitermachst. Zwischendrin Stoppen ist noch nicht möglich. Dafür müssen wir noch etwas ergänzen.

Lektion 2: Stoppen

Um zu wissen wann man das Fenster Stoppen muss und wann nicht, weil es evtl schon vollkommen geschlossen oder vollkommen geöffnet ist, musst du wissen wie lange es dauert bis es soweit ist. Also mit der Stoppuhr messen. Wir brauchen Ausserdem eine Info was das Fenster grade macht. Fährt es noch oder ist es bereits fertig? Das merken wir uns in einer Boolean Variable. Nennen wir sie mal „FensterInAction“.

Erstmal die Änderungen in dem ersten Script:


// hier der Funktionskopf von eben

if (getValueBoolean('FensterInAction'))  // Wenn das fenster noch fährt (egal in welche Richtung)
{
   // Alles anhalten...     
   FS20_SwitchMode($OpenID, false);    
   FS20_SwitchMode($CloseID, false);  
}
else  // ...und wenn nicht...
{
  // ...Dein Switchblock von oben
}

Jetzt wirst du dich sicher Fragen woher wir wissen ob das Fenster in Action ist oder nicht? Richtig, wissen wir nicht. Und darum kommt deine Stopuhr zum Einsatz. Wir setzen die Variable selbst auf Action wenn wir das Fenster starten und lassen sie nach X Sekunden sich selbst zurücksetzen. Das geht mit einem Timer.

Also. Im Switchblock den Status auf Action setzen und den Timer mit der gemessenen Laufzeit für das Fenster füttern.


  case 1: 
      // Öffnen
      SetValueBoolean('FensterInAction', true);
      IPS_SetScriptTimer('ResetFensterAction', 20); //20 gemessene Sekunden angenommen

diese zwei zusätzlichen neuen Zeilen müssen natürlich auch bei Schließen (case 2) rein.

Der Scripttimer wird in diesem Beispiel nach 20 Sekunden das Script mit dem Namen „ResetFensterAction“ aufrufen. Und da steht nun folgendes drin:


// neues Script
SetValueBoolean('FensterInAction', false);
IPS_SetScriptTimer('ResetFensterAction', 0); // ende scripttimer 

Wir starten also den Fenstermotor und merken uns in einer variable, dass wir es getan haben. Nach der gemessenen Laufzeit des Motors setzen wir die Variable zurück. Nun können wir prüfen ob der Motor läuft und ob der Druck auf den Taster eine Stopaktion oder eine Anfahraktion auslösen muss. Das ist alles.

Gruß,

Toni

Kleine bemerkung uber das Toni script:

Der script-timer wird niemals quittiert… (Das heist: das script wird jede 20e sekunde wieder ausgefuhrt)

Wurde vorschlagen:

If $IPS_SENDER=="Timer"{
    setValueInteger('FensterRichtung', 0); //keine richtung
    IPS_SetScriptTimer('ResetFensterAction', 0); // ende scripttimer
    FS20_SwitchMode($CloseID, false); // reset var     
    FS20_SwitchMode($OpenID, false);  // reset var
}

am ende oberiges script hineu zu fugen.

Stimmt, hab ich vergessen…

Aber auf garkeinen Fall „keine Richtung“ setzen. Dann geht garnix mehr. Switch Block erkennt weder modus 1 noch modus 2 und beendet das Script ohne Aktion. Wieder und wieder und wieder…

Gruß,

Toni

Upps, sry…
Hab ich vergessen zu schreiben, der Motor wird über die FS20 MS gesteuert. Also eigentlich ja nur eine Taste für Hoch und Runter (im 2 Kanal zwar zwei Taster, aber da gibt er mir ja auch nur ein An bzw. Aus signal (bzw. DimmUp / Down).

Falls ich jetzt falsch liege, verstehe ich leider die 2 Taster geschichte nicht sooo ganz :frowning:

Geht mir halt darum, das die Software wissen soll, ob das Fenster auf oder zu ist…

Trotzdem, schonmal danke für die bisherige mühe…