Ü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.
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.
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.
Und das funktioniert, dank @Tondose, super!
Optisch habe ich das so gelöst:
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?
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.
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.
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.)
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.
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
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;
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.
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.
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(beginend.) 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).
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.
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.