SKRIPT: Autostart Playlist on Encoder Connected

Hallo Leute,

ich bastle im Moment noch an einem weiteren Script, dass die Playlist automatisch starten soll, sobald der Encoder seine Verbindung hergestellt hat.

Soweit funktioniert das aber auch, nur finde ich noch nicht die Option, wie ich das stoppe wenn es denn einmal gestartet hat.

[code]procedure OnLoad;
begin
EnableTimer(1000);
end;

procedure OnTimer;
begin
if Encoder.GetConnections.GetItem(1).GetState = ecsConnected then begin
ExecuteCommand(‘PLAYLIST 1 NEXT’);
end

end;

begin
end.[/code]

In dem Beispiel startet das Script die Playlist ja dann wieder und wieder.

Wenn du vorher auf Automation geschaltet hast, kannst du AUTOMATION 1 PLAY verwenden.

Das wars :slight_smile: Danke …

Sieht nun wie folgt aus

[code]procedure OnLoad;
begin
EnableTimer(1000);
end;

procedure OnTimer;
begin
if Encoder.GetConnections.GetItem(1).GetState = ecsConnected then begin
ExecuteCommand(‘AUTOMATION 1 ON’);
ExecuteCommand(‘AUTOMATION 1 PLAY’);
ExecuteCommand(‘AUTOMATION 1 OFF’);
end

end;

begin
end.
[/code]

Mist … doch noch ein Denkfehler drin :slight_smile:

Das Script durchläuft ja noch imemr die Endlosschleife und so wird die Automation immer wieder neu gesartet.

Ich werde nochmal ein paar andere Versuche testern.

Wie wäre es abzufragen of Auto oder Assist Mode?

   if CurrentPlaybackControl.GetAutomation = false then begin
      ...
   end;

Alternativ in deinem Script in der Encoder.GetConnections Abfrage den Timer disablen. Dann wird’s auch nur einmal ausgeführt.
Bei Encoder disconnect dann den Timer wieder auf Enable setzen.

Gruss:
-Serge-

Meintest Du etwas in dieser Richtung?

Ich kenne allerdings nicht den Abfragewert für das Disconneted - ecsConnected <=> ecsDisconnected ???

Demnach würde es dann so aussehen?

[code]procedure OnLoad;
begin
EnableTimer(1000);
end;

procedure OnTimer;
begin
if Encoder.GetConnections.GetItem(1).GetState = ecsConnected then begin
ExecuteCommand(‘AUTOMATION 1 ON’);
ExecuteCommand(‘AUTOMATION 1 PLAY’);
ExecuteCommand(‘AUTOMATION 1 OFF’);
DisableTimer;
end
else if Encoder.GetConnections.GetItem(1).GetState = ecsDisconnected then begin
EnableTimer(1000);
end;

end;

begin
end.[/code]

Hi, da ich den mAirList Encoder nicht benutze, weiss ich jetzt auch nicht ob “ecsDisconnected” richtig ist.
Vom Ansatz her ist das Script richtig. (Schon getestet ob es so funzt?)

Eventuell gibt die Scriptinghelp dazu Aufschluss, ansonsten muss der Doktor die Antwort geben.

Gruss:
-Serge-

Es gibt ecsDisconnected, ecsConnecting und ecsConnected.

Danke Serge und Torben,

Nun das Script funktioniert teilweise, auch wenn ich den Wert “Disconnected” richtig erraten habe :slight_smile:

Das Problem in dem Script ist, dass nach der ersten If-Schleife der Timer deaktiviert wird und somit das Script beendet ist. Den Timer darf ich eigentlichnie stoppen, sondern muß nach dem Start der Automation usw. das Scripot in eine Warteschleife schicken, bis es eben merkt, dass der Encoder wieder getrennt ist.

Das war der entscheidende Punkt …

Nach dem Einbau einer Repeat-Schleife, die den Encoder überwacht funktioniert das Script fehlerfrei. :smiley:

[code]procedure OnLoad;
begin
EnableTimer(1000);
end;

procedure OnTimer;
begin
if Encoder.GetConnections.GetItem(1).GetState = ecsConnected then begin
ExecuteCommand(‘AUTOMATION 1 ON’);
ExecuteCommand(‘AUTOMATION 1 PLAY’);
ExecuteCommand(‘AUTOMATION 1 OFF’);
repeat;
until Encoder.GetConnections.GetItem(1).GetState = ecsDisconnected;
end

end;

begin
end.[/code]

Ganz, ganz schlechte Idee! Damit schickst du das Script in eine Endlosschleife, in der unaufhörlich der Zustand der Encoder-Verbindung abgefragt wird, ohne Pause dazwischen. Achte mal auf die CPU-Auslastung von mAirList, die dürfte kräftig nach oben gehen!

Ich würde das folgendermaßen lösen: Mach dir eine globale Variable “wasDisconnected” vom Typ boolean, in der gespeichert ist, ob die Verbindung zwischenzeitlich getrennt war. Nur wenn das der Fall ist wird das Script im Timer aktiv.

var
  wasDisconnected: boolean;

procedure OnLoad;
begin
  wasDisconnected := true;
  EnableTimer(1000);
end;

procedure OnTimer;
begin
  if wasDisconnected and (Encoder.GetConnections.GetItem(1).GetState = ecsConnected) then begin
    ExecuteCommand('AUTOMATION 1 ON');  	
    ExecuteCommand('AUTOMATION 1 PLAY');
    ExecuteCommand('AUTOMATION 1 OFF');
    wasDisconnected := false;
  end
  else if Encoder.GetConnections.GetItem(1).GetState = ecsDisconnected then
    wasDisconnected := true;
end;

begin
end.

OK :slight_smile:

Soweit bin ich mit meinem Wisse noch nicht, aber ich lerne ja auch immer gern dazu.

Es funktionuiert wunderbar, auch wenn ich es noch nicht wirklich verstehe, aber das werde ich wohl auch noch ändern :smiley:

Danke vielmals.

Ich weiß das Thema ist schon sehr alt aber sollte ja noch funktionieren. Ich habe auch nach so etwas gesucht. Ist dieser Code schon fertig oder muss man da vorher noch diese Variable erstellen? Wenn ja bitte wie soll das aussehen?
Wäre für eine Hilfe echt Dankbar.

Gruß
Erwin

Sir,

die Deklaration dieser Variablen steckt in den ersten beiden Zeilen

var
  wasDisconnected: boolean;

Das Skript sollte also so funktionieren. Es schaut alle Sekunde nach der Verbindung und startet die nach einer Trennung die Automation.

Komplette Grüße

TSD