Ständig "Keine Rückmeldung", ewige Reaktionszeiten und durcheinander in den Titeln

Das ist einfach gesagt, wenn der Fehler nur einmal im Monat auftritt.

Das habe ich zur Fehlersuche getan. Und dann wieder aktiviert, nachdem Mairlist ohne Probleme für zwei Tage durch gelaufen ist.

Naja, wir können hier nur auf Dinge reagieren, die Du uns auch mitteilst um gemeinsam nach der Ursache zu suchen.

Diese Information hast Du uns bisher vorenthalten.

Anscheinend passiert es ja doch oft genug um jetzt einen Bugreport zu haben.
Wenn der Fehler so selten auftritt, warum hast Du dann schon nach 2 Tagen die Scripte wieder aktiviert?
Deiner Aussage nach müsstest Du also mindestens 2 Monate durch testen um definitiv zu sagen dass die Scripte die Ursache sind.

Nun weist der Bug-Report, laut Torben darauf hin. Also alle Scripte prüfen, anpassen und wieder testen.

Aber bitte immer eines nach dem anderen. Niemals mehrere Dinge gleichzeitig verändern, wenn man nach einem Fehler sucht.

Ja, sorry das wollte ich euch noch mitteilen. Das war aber auch nur probehalber.

Ich habe mit dem Script tatsächlich so ein paar Probleme. Ich habe jetzt eine Zeile verändert, die in meinen Augen fehlerhaft war, jetzt meckert mAirlist rum dass in dem Script was fehlerhaft ist. Das ist aber auch echt kompliziert mit den Scripts. Ich hab das Script so von jemand anderem übernommen und an meine Bedürfnisse angepasst. Ich versuch mich da mal durchzukämpfen.

MAirlist meckert nicht irgendwie rum, es sagt Dir ziemlich genau wo der Fehler liegt. Allerdings ohne die Meldung und ohne den Quellcode zu kennen, wird Dir hier auch niemand bei dem Problem weiterhelfen können.

Ja ich habe die Stelle auch schon gefunden. Aber ich wüsste nicht wo der Fehler liegen soll.
Das PlayerIndex schmeckt ihm nicht (Unknown Identifier ‘PlayerIndex’). Nehme ich es raus, kommt die Fehlermeldung Invalid number of parameters.

procedure OnPlayerEOFWarning(PlaylistIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);
begin
Item := PlaybackControl(PlaylistIndex).GetPlayer (PlayerIndex) .GetItem;
if (Item.GetItemType = pitMusic) then begin
  ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 1 4"');
  SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 1 4"');
end;

Gehen wir mal bitte schrittweise vor:

  1. Hast du die Datei
    Background Script Template.mls
    gefunden?
    Bei einer Standardinstallation liegt sie im Verzeichnis
    C:\Program Files (x86)\mAirList 6.3
    Randnotiz: Mein Windows Explorer hat für so etwas u.a. eine Suchfunktion.

  2. Das fehlerhafte Script:
    Wäre es möglich, dass du das hier mal veröffentlichst?
    Bitte dazu das Format Code benutzen wie hier von Tondose beschrieben. Das erleichtert das Lesen erheblich.

  3. Wie shorty.xs schon sagte, meckert mAirList nicht einfach rum, sondern teilt dir in der Fehlermeldung recht präzise mit, wo es ein Problem bei der Ausführung des Scripts hat.
    Bitte sei doch mal entgegenkommend und lass’ uns nicht ständig um die :crystal_ball: tanzen.


Ich sehe gerade, du hast zwischenzeitlich geantwortet. Gut!
Vielleicht schaffen wir ja noch mal eine etwas produktivere Zusammenarbeit. Wir sind inzwischen bei Beitrag #45

{--
const
// aktuelle Version
VERSION='1.0';
// Scriptname
SCRIPTNAME='Lichtsteuerscript';
--}
procedure OnOnAir;
begin
  ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 1 1"');
  ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 1 18"');
  SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 1 1"');
end;

procedure OnOffAir;
begin
  ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 2 8"');
  SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 2 8"');
end;

procedure OnStartup;
begin
  ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 1 5"');
  SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 1 5"');
end;

procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);
begin
if (Item.GetItemType = pitVoice) or (Item.GetItemType = pitNews) or (Item.GetItemType = pitWeather)  or (Item.GetItemType = pitBed) or (Item.GetItemType = pitSilence)then begin
  ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 1 1"');
  SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 1 1"')

  ExecuteCommand('TALKTIMER RESET');
  ExecuteCommand('TALKTIMER START');

end;
if (Item.GetItemType = pitMusic) then begin
  ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 1 1"');
  SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 1 1"');
    ExecuteCommand('TALKTIMER STOP');
end;


//Sommerfest Countdown + Opener
if (Item.GetDatabaseID = '1543') then begin
  //ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 2 2"');
  //ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 1 11"');
  ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 1 10"');
  //SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 2 2"');
  //SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 1 11"');
  SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 1 10"');
end;

if (Item.GetDatabaseID = '1544') then begin
  ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 1 11"');
  SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 1 11"');
end;
if (Item.GetDatabaseID = '2646') then begin
  ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 2 8"');
  //SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 2 8"');
end;


end;
{--
procedure OnPlayerStop;
begin
ExecuteCommand('TALKTIMER STOP');
end;
--}
procedure OnPlayerEOFWarning(PlaylistIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);
begin
Item := PlaybackControl(PlaylistIndex).GetPlayer(PlayerIndex) .GetItem;
if (Item.GetItemType = pitMusic) then begin
  ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 1 4"');
  SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 1 4"');
end;

Item := PlaybackControl(PlaylistIndex).GetPlayer(Player-Index) .GetItem;
if (Item.GetItemType = pitVoice) or (Item.GetItemType = pitNews) or (Item.GetItemType = pitWeather) or (Item.GetItemType = pitBed) then begin
  ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 1 3"');
  SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 1 3"');
end;
end;

procedure OnPFLOn(PlaylistIndex: integer; PlayerIndex: integer; PFLCount: integer);
begin
ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 1 6"');
end;

procedure OnPFLOff(PlaylistIndex: integer; PlayerIndex: integer; PFLCount: integer);
begin
ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 1 6"');
end;
1 Like

Dieses snippet sieht nicht nach dem aktuellen Template aus, das ist irgendwas relativ altes.

procedure OnPlayerEOFWarning(PlaylistIndex: integer; PlayerIndex: integer);
begin
  ShellExecute ('C:\ProgramData\mAirList\6.1\sfk174.exe', 'udpsend 192.168.51.103 3310 "LED2:ON"');
  SystemLog ('C:\ProgramData\mAirList\6.1\sfk174.exe udpsend 192.168.51.103 3310 "LED2:ON"');
end;

Ich habe das mal schnell aus diesem Faden hier abgeschrieben.

Was wäre denn die Alternative dazu?
Ach so sorry, dein zweiter Code ist die Version wie es richtig ist? @shorty.xs

Ich habe aus:

procedure OnPlayerEOFWarning(PlaylistIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);
begin
Item := PlaybackControl(PlaylistIndex).GetPlayer (PlayerIndex) .GetItem;
if (Item.GetItemType = pitMusic) then begin
  ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 1 4"');
  SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 1 4"');
end;

Jetzt mal

procedure OnPlayerEOFWarning(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem);
begin
if (Item.GetItemType = pitMusic) then begin
  ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 1 4"');
  SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 1 4"');
end;

gemacht.
Immerhin ist der Fehler weg, der beim Laden des Scriptes angezeigt wurde. Nun kommt im “Auslösemoment” des EOF folgende Meldung:
23.09.2021 20:57:48 Fehler Runtime error “Null Pointer Exception” in background script R:#PC-Config\mAirlist\Master-Scripts\QLCRemote-via-Companion.mls (line 73, column 1) handling message:

Muss vor der if Abfrage vermutlich stehen bleiben.

1 Like

Das Funktioniert, jetzt kommt aber ein neuer Fehler

23.09.2021 21:12:14 Fehler       Runtime error "List index out of bounds (6)" in background script C:\Scripts\QLCRemote-via-Companion.mls, handling message: PLAYERCONTROL_EOFWARNING 43CBF91C3056D191 00 00000000 00000001

Ich habe das Scrippt mittlerweile auch mal auf den lokalen PC verschoben um Netzwerk-Fehler auszuschließen.

GetItem liefert keinen String mehr zurück, wenn ich diesen Beitrag von @Tondose hier richtig lese.

Bin hier gerade nur eingeschränkt handlungsfähig mit dem Tablet.

Ersetze mal pitMusic durch 1

Das Script scheint schon sehr alt zu sein. Da hast Du noch einiges an Arbeit vor Dir.

Edit, hat nichts mit dem Problem zu tun: Da hängt QLC oder QLC plus dahinter? Über welche Schnittstelle nimmt das die Daten entgegen?

Ja tut es. Aber auf einem RaspberryPi. Die Eingaben im Script gehen an sfk.exe und dieses sendet die Befehle an Companion weiter, welches Art-Net Kanäle verändert.

Zwischenfrage: Hat sich denn mittlerweile das Startverhalten von mAirList geändert oder läuft immer noch alles sehr schleppend?

Das hat sich etwas beschleunigt, nachdem ich eine Server-Datenbank deaktiviert habe.

1 Like

Nein, Item wird doch schon im Prozeduraufruf mitgeliefert. Das noch einmal zu definieren ist sinnlos.

Weiter:

  • Der Prozeduraufruf
    procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);
     
    ist falsch. Es muß laut Background Script Template.mls heißen:
     
    procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem);

    • In der Zeile
      SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 1 1"')
       
      fehlt das abschließende Semikolon.

 

  • Der Prozeduraufruf
    procedure OnPlayerEOFWarning(PlaylistIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);
     
    ist falsch. Es muß laut Background Script Template.mls heißen:
     
    OnPlayerEOFWarning(PlaylistIndex: integer; PlayerIndex: integer);

    • In der Zeile
      Item := PlaybackControl(PlaylistIndex).GetPlayer(Player-Index) .GetItem;
       
      ist die Variable Player-Index nicht definiert. Es müßte heißen: PlayerIndex. Ist aber egal, da …
       
    • … die beiden Zeilen, die mit Item := beginnen, zu tilgen sind (siehe oben).

 

  • Am Schluß des Skripts fehlt
     
    begin
    end.
     

  • Statt procedure OnStartup würde ich die procedure OnLoad verwenden.
     

  • Inwieweit die Programmausführung von sfk.exe die Leistung des Sytems beeinflußt, ist zu klären.
     

  • Anmerkung: procedure OnPFLOn und procedure OnPFLOff senden jeweils denselben Befehl über sfk.exe. Inwieweit das sinnvoll ist, mußt Du selber wissen.

3 Likes

Danke @Tondose Ich nutze sfk.exe ja auch, nur nicht ganz so exzessiv. Ich konnte da keine Performance Verluste feststellen. Die OBS Fernsteuerung zickt da schon eher, die bleibt nämlich hängen, wenn OBS nicht antwortet/ nicht läuft.
Trotzdem, kann mAirlist nicht direkt UDP Pakete senden und man kann sfk weg lassen?

Was zum teufel ist eigentlich dieses „Companion“? Übersetzt sich als Begleiter, Weggefährte. Im Modellnau kenne ich die 9x companion.
Wird mit dem eigentlichen Problem nichts zu tun haben aber wenn schon, hätte ich versucht, QLC+ irgendwie direkt anzusteuern.
Artnet oder OSC sind ja auch nur UDP Pakete, die muss man zwar einmal ermitteln aber so spart man sich den Umweg über noch ein Stück Software dazwischen.

Grundsätzlich ja. Dann müsste man die OSC-Pakete irgendwie von Hand (binär) im Script zusammenbauen.

OSC-Fernsteuerung ist in Planung aber (wie so vieles) noch nicht fertig.

Eine alternative Steuersoftware für das Elgato Streamdeck.

Aber jetzt machen wir erstmal das.

2 Likes