Ankündigung

Einklappen
Keine Ankündigung bisher.

Mit Logikprozessor auf Szene reagieren

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] Mit Logikprozessor auf Szene reagieren

    Hi

    ich bin gerade dabei den das Logikprozessorplugin fürs Wiregate auszuprobieren. Das Plugin macht schonmal nen super Eindruck und beitet viele Möglichkeiten.
    Leider habe ich noch nicht herausgefunden, wie ich mit nur einer Zeile Code auf verschiedene Szenen reagieren kann.

    Ziel: Deaktivierung des PMs am Esstisch bei einer aktiven Szene im Wohn-/Esszimmer.

    folgendes funktioniert:
    Code:
    # sperrt den PM Esszimmer bei aktivierter Szene 5 im Wohnbereich
        SperrePmEssen => { receive=>'6/1/0', transmit=>'0/0/21', translate => sub { return ($input eq 4) ? 1 : 'cancel';}, },
        EntsperrePmEssen => { receive=>'0/0/33', transmit=>'0/0/21', translate => sub { return ($input eq 4) ? 0 : 'cancel';}, },
    folgendes meldet einen Syntaxfehler
    Code:
    # sperrt den PM Esszimmer bei aktivierter Szene 4,5,6 im Wohnbereich
        SperrePmEssen => { receive=>'6/1/0', transmit=>'0/0/21', translate => sub { return ([MARKIEREN]($input eq 4) || ($input eq 5)[/MARKIEREN]) ? 1 : 'cancel';}, },
        EntsperrePmEssen => { receive=>'0/0/33', transmit=>'0/0/21', translate => sub { return ($input eq 4) ? 0 : 'cancel';}, },
    Natürlich könnte ich nun die Zeile oben kopieren für jede Szenennummer - ich möchte es aber schöner lösen.

    Vielen Dank
    Schönes Wochenende

    tobias

    #2
    Hat keiner eine Idee?
    Das Statement für jede Szenennummer zu kopieren scheint nicht zu funktionieren wie ich das erhofft hatte. Bzw. das "cancel" funktioniert nicht, es wird eine 0 ausgegeben, wenn die Bedingung nicht zutrifft. Somit sind die if-Anweisungen widersprüchlich. Es scheint bei widersprüchlichen Anweisungen die letzte ausgeführt zu werden. Sprich die Sperre reagiert nur, auf die letzte meiner Zeilen.

    Kommentar


      #3
      Hast du das Logikprozessor.conf_sample angeschaut?

      Cancel wirkt sich nur auf einen Delay-Timer aus, den hast du hier aber gar nicht, du musst undef zurückgeben, wenn du nix senden willst. Beispiel dafür ist im Sample.

      Kommentar


        #4
        Vielen Dank für den Hinweis - leider funktioniert es trotzdem nicht.
        Ja, die Samples hatte ich mir bestimmt schon 2h lang angesehen und rumprobiert. Das "undef" habe ich wohl übersehen, da in den Samples kein Beispiel dazu ist (Code habe ich aus dem CometVisu git).
        https://github.com/OpenAutomationPro...plugin/generic

        Folgender Code steht nun in der Logikprozessor.conf:
        Code:
        # sperrt den PM Esszimmer bei aktivierter Szene 3,5,7 im Wohnbereich
        SperrePmEssenSz3 => { receive=>'6/1/0', transmit=>'0/0/21', translate => sub { return ($input eq 2) ? 1 : 'undef'; }, },
        SperrePmEssenSz5 => { receive=>'6/1/0', transmit=>'0/0/21', translate => sub { return ($input eq 4) ? 1 : 'undef';}, },
        SperrePmEssenSz7 => { receive=>'6/1/0', transmit=>'0/0/21', translate => sub { return ($input eq 6) ? 1 : 'undef';}, },
        führt ebenso wieder dazu, dass alle drei Logiken senden und somit das Ergebnis der letzten Logik stehen bleibt. Also bei Nichtzutreffender Anweisung wird eine 0 gesendet anstatt nicht zu reagieren. Siehe Screenhot bei gesendeter Szene 5 ($04).
        You do not have permission to view this gallery.
        This gallery has 1 photos.

        Kommentar


          #5
          Thema erledigt.

          So funktioniert es (ohne Hochkommata um undef):
          Code:
          # sperrt den PM Esszimmer bei aktivierter Szene 3,5,7 im Wohnbereich
           SperrePmEssenSz3 => { receive=>'6/1/0', transmit=>'0/0/21', translate => sub { return ($input eq 2) ? 1 : [MARKIEREN]undef[/MARKIEREN]; }, },

          Kommentar

          Lädt...
          X