LCN UPP T8 SWS4 SKH IPS ESP UAP1 → 1Knopf

Mehr Abkürzungen sind mir nicht eingefallen…

Ich habe an einem LCN-UPP mittels T8 zwei Shelly Wall Switch 4 (für die Garage ausreichende
Qualität würde ich sagen) hängen.

Ein Vierfachtaster steuert per SKH zwei Tore an deren UAP1 ein ESPeasy angeschlossen ist.

Das SKH hat mit viel lesen im Forum (@tomgr’s unermüdliche Hinweise auf die mygekko Doku sowie @UweR‘s (:relieved:) & @ralf 's Beiträge) letztendlich zu einem Ergebnis geführt.

Eine Taste ist also jeweils für eine Fahrtrichtung (kurzer Tastendruck) und Stopp (langer Tastendruck).

FALLS mir mal die Tasten ausgehen sollten – wie kann man das mit einer Einknopfbedienung lösen?

Ich habe von dem Profil ~ShutterMoveStop und der Vorlage gelesen:

// Vorlage für Aktionsskript
    switch($_IPS['VALUE']) {

        case 0:
            // Hier der Befehl für Öffnen
            break;

        case 1: // Nur bei ~ShutterMoveStep
            // Hier der Befehl für Schritt-Öffnen
            break;

        case 2:
            // Hier der Befehl für Stoppen
            break;

        case 3: // Nur bei ~ShutterMoveStep
            // Hier der Befehl für Schritt Schließen
            break;

        case 4:
            // Hier der Befehl für Schließen
            break;
    }

    SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);

Aber das bekomme ich leider nicht zusammen…

Kann mir da jemand weiterhelfen :slightly_smiling_face:

Und bitte langsam sprechen, bin gelernter Zerpaner… :wink:

Gruß
Holger

Ich habe versucht, zu verstehen was du eigentlich machen möchtest, aber es ist ein bisschen Information Overload. Spielt die Tatsache, dass der Taster von Shelly ist, das Modul ein bestimmtes LCN-Modul usw.usf. überhaupt eine Rolle, oder geht es um die Frage, wie du in Reaktion auf ein Tasterereignis dein Tor abwechselnd hoch- und herunterfahren kannst?

Wo ist denn der Code der das aktuell macht bei der Zwei-Knopf-Bedienung?

Ja, spielt eigentlich keine Rolle was mit wem zusammen spielt. Könnte höchstens für jemanden interessant sein, der es ähnlich lösen möchte.

Die Kernfrage ist die Einknopfbedienung. Also ‚Hoch-Stopp-Runter‘ auf einer Taste.

Aktuell wird von LCN bei Tastendruck eine Zahlenfolge in den Bus geschickt, die IPS per ausgelösten Ereignis auswertet und an den ESPeasy mittels PHP-Code (z.B. file_get_contents („http://192.xxx.xxx.xx/tools?cmd=event,down“)) weiterleitet.

LCN wertet auch die Länge des Tastendruckes aus. Kurz für die Fahrtrichtung, lang für Stopp. So komme ich auf vier Tasten für zwei Tore.

Ob das so der Richtige Weg ist – keine Ahnung, aber es funktioniert.

Braucht aber auch sechs mal das ausgelöste Ereigniss, sprich sechs ‚wertvolle‘ ID‘s.

Aber mich interessiert halt, wie ich das per Einknopfbedienung lösen könnte.

Gruß
Holger

Okay also zunächst einmal würde ich für Fälle wie das SKH (also eine Kennzahl welche du aus dem LCN-Bus heraus sendest um bspw Tastenbetätigungen an IPS zu melden) nicht für jeden möglichen Wert ein Ereignis erstellen, sondern ein allgemeines „bei Änderung“-Ereignis und dann erst im Skript unterscheiden, welcher Wert nun kommt und was der für mich bedeutet. Das spart schon mal viel Arbeit und ist am Ende oft auch übersichtlicher.

Dann ist bei der Einknopfbedienung die Frage, ob der Zielaktor so ein Kommando bereits unterstützt. Falls ja ist es trivial, dann sendest du eben genau dieses an den Aktor. Falls nicht musst du halt unterscheiden, was der Aktor gerade tut bzw. was er zuletzt getan hat:

  • Fährt das Tor gerade, soll die Fahrt angehalten werden.
  • Ist das Tor angehalten, so muss es nach oben fahren falls es zuletzt abwärts gefahren ist. Falls es zuletzt aufwärts gefahren ist, muss es nun abwärts fahren. So weit so simpel.

Die Frage ist, wie du das heraus bekommst. Vernünftige Aktoren bspw HmIP-Jalousieaktoren haben dafür einen eigenen Datenpunkt, welcher die aktuelle Fahrtrichtung angibt. Damit du sehen kannst, welche dies zuletzt war musst du es vielleicht im Moment des Fahrens in einer separaten Variable abspeichern.

…nicht für jeden möglichen Wert ein Ereignis erstellen, sondern ein allgemeines „bei Änderung“-Ereignis und dann erst im Skript unterscheiden…

Das wäre eleganter, scheitert an meinen PHP-Kentnissen…

Dann ist bei der Einknopfbedienung die Frage, ob der Zielaktor so ein Kommando bereits unterstützt.

Nein, die UAP1 unterstützt die Funktionen:

  • HOCH
  • STOPP
  • RUNTER
  • LÜFTEN
  • BELEUCHTUNG (am Antrieb)

Vernünftige Aktoren bspw HmIP-Jalousieaktoren haben dafür einen eigenen Datenpunkt, welcher die aktuelle Fahrtrichtung angibt. Damit du sehen kannst, welche dies zuletzt war musst du es vielleicht im Moment des Fahrens in einer separaten Variable abspeichern.

Die Endlagenmeldung, sowie Fahrtrichtung werden auch ausgewertet.

Hier habe ich die entsprechenden ID‘s

Und hier erstelle ich - sicher auch eleganter zu lösen - den aktuellen Torstatus

Du, solange es funktioniert… sieht jedenfalls nicht falsch aus.

Du hast ja anscheinend eine Variable „Öffnen“ und eine „Schließen“. Falls diese beim entsprechenden Vorgang (auch wenn nicht aus IPS ausgelöst) den Wert true annehmen, könntest du die letzte Fahrtrichtung durch Vergleich der Zeitstempel

$ts_open = IPS_GetVariable(38244)["VariableChanged"];
$ts_closed = IPS_GetVariable(47083)["VariableChanged"];

if($ts_open > $ts_closed) {
  // schließen
} else {
  // öffnen
}

ermitteln.

Du hast ja anscheinend eine Variable „Öffnen“ und eine „Schließen“. Falls diese beim entsprechenden Vorgang (auch wenn nicht aus IPS ausgelöst) den Wert true annehmen, könntest du die letzte Fahrtrichtung durch Vergleich der Zeitstempel

Hmm, tatsächlich ist mir jetzt zum ersten mal aufgefallen, das die Tore, bzw. die UAP1 bei Betätigung per Handsender nur die Endlage rückmelden.
Also ‚Geöffnet‘ oder ‚Geschlossen‘.

Wenn ich über Webfront/App das Tor fahre, wird z.B. ‚Öffnen‘ kurz von ‚false‘ auf ‚true‘ gesetzt und sofort wieder auf ‚false‘.
Reicht auf jeden Fall um die Fahrtrichtung per Ereignis auszuwerten.