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).
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.0
usw. 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