Über Button Encoder Optionen öffnen

Über den Trigger des Cartwall-Players nutze ich nur den Trigger, wenn START NEXT erreicht wird, daß dann mein Musikbett zum darüber Sprechen gespielt wird, was als Loop im Hintergrund läuft. Die eigentliche Aktion zum Starten des Encoders realisiere ich über die Element-Eigenschaften des einzelnen Jingles. So kann ich das dann auch den Stream über die Playliste starten, wenn ich das Jingle dort nutze.

Jingle Elemnteigenschaften

Auf Mittag zugehende Grüße
Nick

Woher bekommt der Button seine grüne Farbe? Vom Draufklicken? Man könnte den Farbwechsel davon abhängig machen, ob die Verbindung tatsächlich besteht.
 

Rückgemeldete Grüße

TSD

Ich habe einen erweiterten Button erstellt, der als Umschalt-Button fungiert. Mauszustand bei Aktiv geht auf grün. Den Button lasse ich in den Aktionen mit Scripten laufen.

Aktion wenn angeklickt bzw. aktiviert:

begin
// Turns on Mainstream Encoder 1
Encoder.GetConnections.GetItem(1).SetEnabled(true);
end.

Aktion wenn deaktiviert:

begin
// Turns off Mainstream Encoder 1
Encoder.GetConnections.GetItem(1).SetEnabled(false);
end.

Ich habe noch keinen Weg gefunden oder weiss es nicht, wie ich die Gegenprüfung machen kann und erst, wenn wirklich der entsprechende Encoder aktiviert ist, der Button auf Grün geht.

Scriptige Grüße
Nick

Nachtrag:

Wenn ich Mairlist starte, lasse ich auch ein Script laufen, welches alle Encoder auf einen bestimmten Status stellt (z.B. deaktiviert).

Soweit super. @calypso60 hat etwas ähnliches am Start, welches aber Rückmeldung über den tatsächlichen Encoderzustand gibt. Darüberhinaus ist noch ein Sicherheitsbutton vorgesehen, damit nicht durch versehentliches Klicken falsch geschaltet wird.
 

Verriegelte Grüße

TSD

Und das funktioniert, dank @Tondose, super!
Optisch habe ich das so gelöst:

AngeSender

Einziges Manko ist, dass wohl ein kleines Problem bei den erweiterten Buttons besteht. Das hatte ich vor einiger Zeit mal in diesem Beitrag beschrieben. Ist vielleicht noch in der Mache, @UliNobbe, oder zu weit runtergerutscht?

Grüße aus dem home-office
Martin

Ich konnte das von dir beschriebene Phänomen noch nicht reproduzieren. Das bezog sich doch auf inaktive Stati, oder? Diese werden ja nicht im Normalzustand ausgelöst, sondern nur durch Scripte angetriggert.

Ja, das mag ja sein. Aber müsste es dann nicht trotzdem funktionieren? :thinking:

Und?! Wo ist das Argument?

Hi Martin,

Kannst Du mir vielleicht bitte das Geheimnis verraten, wie Du es umgesetzt hast den tatsächlichen Encoderzustand zu prüfen und zurückzugeben, so daß dann erst der Button in den aktiv (Farbe grün) Zustand geht, wenn der Encoder wirklich aktiv ist? Da habe ich auch schon vor Monaten viel Zeit gelassen und habe es doch nicht hinbekommen. So habe ich mich erst einmal mit dem zufrieden gegeben die Encoder überhaupt über Buttons aktivieren zu können, aber ohne die Gegenprüfung.

Lieb fragende Grüße
Nick

Deshalb habe ich es im Tagesbetrieb noch nicht umgesetzt.
Auf der Arbeit hänge ich ja nicht bloß im Forum rum… war halt keine schnelle Nummer bislang.

Das war ich, der das verbrochen hat. Es gibt keine Funktion, mit der Du den Zustand direkt abfragen kannst (schon lange auf der Wunschliste, @Torben weiß das), sondern Du mußt mittels Timer den Zustand der Verbindung abfragen. Hier ist ein Code, den ich mal für @UliNobbe geschrieben hatte und der den Charme hat, daß man beliebig viele Encoderverbindungen abfragen kann, ohne eingeben zu müssen, wieviele insgesamt. Die Routine läßt eine Lampe leuchten, wenn mindestens eine der Verbindungen besteht:

const
  BUTTONNAME = 'OnAirStatus';   // <-- Hier Namen des Buttons eintragen.

var
  Recurring: boolean;
  EncoderStatus: Array[0 .. 255] of boolean;

procedure OnLoad;
begin
  EnableTimer(1000);
end;

procedure OnTimer;
var
  Test: boolean;
  i, k: integer;
begin
  try
    for i := 0 to 255 do
    begin
      if Encoder.GetConnections.GetItem(i).GetState = ecsConnected then
      begin
        EncoderStatus[i] := true;
      else
        EncoderStatus[i] := false;
    end;      
  except 
    k := i - 1;
  end;
  for i := 0 to k do  
  begin
    Test := true;
    if NOT EncoderStatus[0] AND (EncoderStatus[i] = EncoderStatus[i + 1]) then
    begin
      Test := false;
      Break;
    end;    
  end; 
  if Recurring <> Test then 
    if Test then
      ExecuteCommand(BUTTONNAME + ' ON') 
    else
      ExecuteCommand(BUTTONNAME + ' OFF'); 
  Recurring := Test;
end;

Mit zwei Verbindungen getestet, müßte aber auch mit mehreren gehen. Das Konzept sollte sich auf mehrere Buttons aufbohren lassen. (Martins Skript habe ich gerade nicht zur Hand.)

Abgefragte Grüße

TSD

Sorry @Tondose , daß ich nochmal nachhaken muss. Wenn ich das Script starte, dann bekomme ich einen Fehler angezeigt.

[Error] (24:7): Identifier expected

Wenn ich das noch richtig in Erinnerung habe würde hier der Fehler in Zeile 24 sein, aber dort befindet sich die Schleifenabfrage und ich weiss nicht, was ich verkehrt mache.

Geht das nur mit bestimmten Buttontypen?
Als BUTTONNAME habe ich die Bezeichnung des Buttons probiert, sowohl auch die ID vom Button.

Kannst Du mir da bitte noch einmal helfen?

Lieb fragende Grüße
Nick

Hier muß das Semikolon weg! Sorry! (Hatte vorher noch was rumprobiert. Man soll von funktionierenden Sachen die Finger lassen!) Der Button muß heißen wie in der zweiten Zeile angegeben, in diesem Beispiel OnAirStatus. Heißt Dein Button („ID für Fernsteuerung“) etwa HERBERT, so muß die zweite Zeile lauten

BUTTONNAME = 'HERBERT';

Anführungen nicht vergessen.

Korrigierte Grüße

TSD

Hier ist die Überwachung für mehrere Steams mit mehreren Buttons. Diese müssen heißen <ButtonName>.0, <ButtonName>.1 usw., so viele wie Encoder vorhanden sind, und zwar nullbasiert – der erste Encoder hat die Numero 0.

const
  BUTTONNAME = 'OnAirStatus';   // <-- Hier Namen des Buttons eintragen.

var
  EncoderStatus: Array[0 .. 255] of boolean;

procedure OnLoad;
var
  i: integer;
begin
  for i := 0 to 255 do
    EncoderStatus[i] := false;
  EnableTimer(1000);
end;

procedure OnTimer;
var
  Test: boolean;
  i, k: integer;
begin
  Test := false;
  try
    for i := 0 to 255 do
    begin
      if Encoder.GetConnections.GetItem(i).GetState = ecsConnected then
      begin
        if NOT EncoderStatus[i] then
        begin
          EncoderStatus[i] := true;
          Test := true;
        end; 
      end
      else
        begin
          if EncoderStatus[i] then
          begin
          Test := true;
          EncoderStatus[i] := false;
        end;
      end;
    end; 
  except
    k := i - 1;
  end;
  if Test then
  begin
    for i := 0 to k do
    begin
      if EncoderStatus[i] then
        ExecuteCommand(BUTTONNAME + '.' + IntToStr(i) + ' ON') 
      else
        ExecuteCommand(BUTTONNAME + '.' + IntToStr(i) + ' OFF'); 
     end;
  end;
end;


Vereinzelte Grüße

TSD

Hi @Tondose,

erst einmal vielen Dank für Deine ganze Hilfe. Das mit dem zweiten Script zur Überwachung mehrerer Streams mit mehreren Buttons klingt als passend für mich.

Ich sehe offenbar aber den Wald vor lauter Bäume nicht, weil ich es gerade nicht hinbekomme. Du wirst jetzt bestimmt die Hände über dem Kopf zusammenschlagen.

Das Script muss ich wahrscheinlich als Hintergrundscript laufen lassen. Oder?

Dann kommt die nächste Hürde. Was für einen Button soll ich nutzen (normaler Button oder erweiterter Button)?

Mir ist auch nicht ganz klar, muss dann bei dem Feld “ID für Fernsteuerung” folgendes eingetragen werden (<ButtonName>.0,) ohne bei “ButtonName” was anderes zu vergeben oder muss ich da nur die “0” für den ersten Encoder eintragen? Was muss ich da eintragen?

Muss ich im Script dann auch noch Sachen ändern?

Ich probiere hier vieles hin und her, aber es will nicht laufen.
Es wäre cool, wenn Du mir da noch einmal unter die Arme greifen könntest.

Abendliche hilfesuchende Grüße
Nick

Du nimmst pro Stream einen erweiterten Button. Um beim obigen Beispiel zu bleiben, nennst Du sie HERBERT.0, HERBERT.1, HERBERT.2 usw. Die zweite Zeile im Skript heißt unverändert

 BUTTONNAME = 'HERBERT';

Das Skript wird als Hintergrundskript installiert. Es dient nur der Anzeige der Stati. Sollen die Buttons auch noch schalten, mußt Du die entsprechenden Befehle noch bei der Button-Definition eintragen. „Aktion ausführen bei Fernsteuerung“ nicht anhaken.

Hast Du das getan, wäre der Ablauf so: Du klickst drauf, deshalb wird der Button grün. Kommt die Verbindung zustande, bleibt das so – alles gut. Falls nicht, wird der Button innert der nächsten Sekunde wieder rot. (Und überhaupt, wenn der Stream getrennt wird.) Dann kannst Du durch erneutes Klicken den Encoder wiedereinschalten.

Erläuterte Grüße

TSD


Edit: Und das schließliche

begin
end.

am Ende des Codes nicht vergessen!

Hi Tondose,

seit Stunden dreh ich hier nun schon meine Runden in der Mairlist-Konfiguration und es will nicht laufen. Ich habe das Script als Hintergrundscript integriert. Am Ende habe ich natürlich noch die Codeschnipsel(begin end.) eingefügt. Fehler werden keine angezeigt.

Nun habe ich einen erweiterten Button erstellt als Umschalt-Button und jeweils das Script hinterlegt, was beim anklicken passieren soll und habe dann HERBERT.0 bei dem entsprechenden Status eingetragen.

Wenn ich nun Mairlist starte, dann sieht das wie folgt und sehr seltsam aus, denn auf den Buttons steht HERBERT.0 und selbst wenn der Encoder deaktiviert ist und der Status “Aktiv” (Grün) angezeigt wird, springt der Button nicht auf den Status “Inaktiv” (Rot).

Erweiterter Button5 Erweiterter Button6

Es wird somit auch der Status des Encoders ignoriert.
Entweder habe ich einen gewaltigen Denkfehler und kann vielleicht Deinen Ausführungen nicht richtig folgen, oder es hat sich irgendwo der Fehlerteufel eingeschlichen.

Ratlose Grüße
Nick

Zum Einrichten von Hintergrundskripts und einigem weiteren in Sachen Scripting Wissenswerten siehe hier.

Zum Einrichten des Buttons:

  • Standard-Text: Was auf dem Button stehen soll.
  • Name: Leer.
  • Erweitert > ID für Fernsteuerung: HERBERT.0usw. Man könnte sich aber auch treffendere Namen ausdenken …
  • Aktionen > Aktionen, wenn aktiviert: Der Befehl, der Deinen Encoder einschaltet.
  • Entsprechend mit „… deaktiviert“ (ausschalten).

Geordnete Grüße

TSD

Hi Tondose,

vielen lieben Dank für Deine Hilfe. So wie Du es zuletzt beschrieben hast, hatte ich es auch schon versucht. Ich hatte in den Stunden viele Kombinationen angeschaut und auch das Forum durchsucht, wo ich auch einige Ansätze gefunden hatte, die ich auch ohne Erfolg getestet habe.
Das System erkennt einfach nicht, wenn der Stream nicht aktiv ist und läßt den Status des Buttons auf “Aktiv” stehen.

Ich gebe auf und ich danke Dir trotzdem für Deine aufgebrachte Zeit. Ich hoffte ja das Martin nach meiner Frage sich dazu noch äußert, da es ja bei ihm zu funktionieren scheint.

Tondose Ihr seid echt ein klasse Support, auch wenn vielleicht nicht alles gelöst werden kann.

Nochmals vielen lieben Dank an Euch.

Dankende Grüße
Nick