Streamname aus Streammonitor auslesen

Hallo,

ich habe nun erste Erfahrung mit dem Mairlist Script gemacht und finde die Möglichkeiten sehr gut.

Ich konnte ein Script bauen, welches mir über einen Webhook eine Whatsapp schickt, die mir mitteilt, dass der Streammonitor ON bzw. OFF schaltet. Die beiden Scripte rufe dann dann jeweils als Aktion bei ON Air oder OFF Air in Streammonitoreinstellungen auf.

Jetzt fehlt mir nur noch, dass ich auch mitsende, welcher unserer drei Studiostreams im Streammontitor geschaltet ist. Da nicht jeder Stream im Streammonitor “eigene” Aktionen bei ON oder OFF haben kann, frage ich hier mal, ob man über eine Funktion den Namen des geschalteten Streams oder auch eine ID des geschalteten Streams abfragen und dann weiter berarbeiten kann.

Weiß jemand etwas dazu und kann mir einen Hinweis geben?

@Tondose Du hast mir da schon so sehr auf die Sprünge geholfen, vielleicht auch hierzu?

Danke schonmal an alle und viele Grüße
Martin

Die Frage, ob sich Variablen per E-Mail erfolgreich versenden lassen, ist noch offen.

Falls ja, sollte, folgende Lösung eigentlich klappen:

Als Aktion bei on-air folgendes Skript ausführen:

var
  i: integer;

begin
  for i := 0 to StreamMonitor.GetStreams.GetCount - 1 do
    if StreamMonitor.GetStreams.GetItem(i).GetState = mssOnAir then
      SetRuntimeData('StreamName', StreamMonitor.GetStreams.GetItem(i).GetDescription);
end.

In die E-Mail dann irgendwo die Variable %R{StreamName} einbauen.

ok, verstehe. Dankeschön!

Das müsste dann ja auch über meine bereits funktionierenden Webhooks gehen, oder?

so hab ich es mal probiert:

var
  i: integer;

begin
  for i := 0 to StreamMonitor.GetStreams.GetCount - 1 do
    if StreamMonitor.GetStreams.GetItem(i).GetState = mssOnAir then
      SetRuntimeData('StreamName', StreamMonitor.GetStreams.GetItem(i).GetDescription);

HTTPGet('https://api.callmebot.com/whatsapp.php?phone=49174xxx&apikey=xxx&text=*StreamName+ON+AIR*');

end.

das habt aber vorerst noch zu diesem Fehler geführt:

grafik

irgendwie hat es mit “GETSTATE” zu tun?

ich seh grad selbst, dass da noch ein fehler ist, mal sehen, ob ich es selbst hinbekomme.

hab den Code nochmal korrgiert, aber die Fehlermeldung kommt trotzdem wegen dem GETSTATE

var
  i: integer;

begin
  for i := 0 to StreamMonitor.GetStreams.GetCount - 1 do
    if StreamMonitor.GetStreams.GetItem(i).GetState = mssOnAir then
      SetRuntimeData('StreamName', StreamMonitor.GetStreams.GetItem(i).GetDescription);

HTTPGet('https://api.callmebot.com/whatsapp.php?phone=49174xxx&apikey=xxx&text=' + StreamName + '+ON+AIR*');

end.

@Tondose hast Du da noch eine zündende Idee (wie immer)?

Ja, so geht’s natürlich auch. Mit dem GetState hatte ich zunächst auch Probleme, wollte mich schon lautstark bei @Torben beschweren, bis es auf einmal bei mir zu gehen schien. Irgendetwas stimmt da nicht, zumal z. B. GetDescription tadellos funktioniert.

es kommt weiterhin diese Fehlermeldung: Unknown Identifier ‘GETSTATE’. (siehe auch weiter oben).

bedeutet das, dass GETSTATE kein gültiger Befehl ist?

hmmm, da kommen wir ohne Torben leider nicht weiter. @Torben kannst Du uns da bitte auf die Sprünge helfen?

Viele Grüße
Martin

Welche Version hast du denn im Einsatz? GetState gibt es z. B. in der 6.3.
Ich nutze den Stream-Monitor nicht und habe da ehrlicherweise gesagt auch noch nie etwas zu gescripted, daher sozusagen ein theoretischer Erklärversuch:
Vielleicht ist das Objekt (hier: der überwachte Stream) intern nicht initialisert, weil er nicht genutzt wird. Probier mal, dir über einen zusätzlichen Check zu behelfen:

var
  i: integer;

begin
  for i := 0 to StreamMonitor.GetStreams.GetCount - 1 do
    if StreamMonitor.GetStreams.GetItem(i) <> nil then
      if StreamMonitor.GetStreams.GetItem(i).GetState = mssOnAir then
        SetRuntimeData('StreamName', StreamMonitor.GetStreams.GetItem(i).GetDescription);

HTTPGet('https://api.callmebot.com/whatsapp.php?phone=49174xxx&apikey=xxx&text=' + StreamName + '+ON+AIR*');

end.

Bringt das Besserung?

1 Like

Guter Ansatz. Ich habe 7.3.5. Allerdings zickte die Funktion auch bei einem nachweislich aktiven Stream herum. Na, wir werden sehen …

Hallo @mgie ,

vielen Dank für Deinen Input. Ich werde das gleich mal testen. Wir nutzen aktuell Version 6.3.24.

Zur Info schomal vorab: Mit diesem Code (siehe unten) konnte ich es schonmal hinbekommen, dass mir die Message Box nacheinander meine 3 Streams im Streammonitor ausgibt. Sprich es wird erkannt, dass dort 3 Streams angelegt sind und ich kann die Benennung auslesen. Das ist schonmal gut.
Spannend finde ich an der Stelle dass die “for” Schleife rückwärts läuft.
Ist das korrekt?

Hier der Code (wichtig: ich bin ein totaler Anfänger mit den Scripts):

var
  streams: integer; // Menge an Streams im Streammonitor
  i: integer; //Zähler für die Prüfung
  description: string; //Name der einzelnen Streams
  
begin
  streams := StreamMonitor.GetStreams.GetCount;

  for i := 0 to StreamMonitor.GetStreams.GetCount - 1 do
  begin
    description := StreamMonitor.GetStreams.GetItem(i).GetDescription;
	ShowMessage('Description: ' + description + ' - ID: ' + IntToStr(i));
  end;
end.

so, ich hab das nun mit dem Scipt getestet, den @mgie mir geschickt hat und leider meckert Mairlist hier auch wegen “GETSTATE” (gleiche Fehlermeldung).

Hallo zusammen,

ich habe es nun mit folgendem Script geschafft, Name und Prioritäten unserer im Streammonitor angelegten Streams abzufragen. Das klappt alles. Lediglich den Zustand kann ich nach wie vor nicht abfragen.

Ich habe anstatt GETSTATE auch ein paar andere Befehle ausprobiert, aber nichts hat funkttioniert um noch den jeweiligen Zustand der Streams abzufragen und daraus dann über IF eine Nachricht abzuleiten welcher der drei Streams On Air gegangen ist.

Ich komme also leider nicht weiter.

@Torben kannst Du mir / uns hier behilflich sein?

Danke schonmal und viele Grüße
Martin

var
  streams: integer;    //Menge an Streams im Streammonitor
  i: integer;          //Zähler für die Prüfung
  description: string; //Name der einzelnen Streams
  prio: integer;       //Priorität der einzelnen Streams
  state: string;       //Zustand der einzelnen Streams
  
begin
  streams := StreamMonitor.GetStreams.GetCount;

  for i := 0 to StreamMonitor.GetStreams.GetCount - 1 do
  begin
    description := StreamMonitor.GetStreams.GetItem(i).GetDescription;
 	prio := StreamMonitor.GetStreams.GetItem(i).GetPriority;
	state := StreamMonitor.GetStreams.GetItem(i).GetState; 
	
	ShowMessage('STREAM: ' + description + ' - ID: ' + IntToStr(i) + ' - PRIORITÄT: ' + IntToStr(prio) + ' - ZUSTAND: ' + state);
  
  end;
end.

Ja, dann hast Du auch die Prioritäten. Wozu?

Meine eigentliche Idee war, beim on-air-schalten zu schauen, welcher der eingetragenen Streams gemeint war, und dessen Namen weiterzureichen. Du kannst auch gerne noch alle möglichen weiteren Informationen abfragen, es wird Dich aber nicht weiterbringen, weil Du eben nicht weißt, um welchen Stream es sich handelt. Wir brauchen also Klarheit über das Verhalten der Funktion GetStatus. Bis dahin ist alles Spieler- oder Glaskugelleserei.

da hast Du 100% Recht und so hatte ich Deinen Vorschlag auch verstanden.
Ich hatte heute einfach rumprobiert und hab GetPrioritiy getestet und gesehen, dass das auch geht. Aber ohne GetState geht es nicht, klar, genau wie Du schreibst.
Ich hoffe Torben meldet sich dazu.

Funktioniert es denn im Dark Mode?