Zusätzliche Möglichkeiten mit SAS-Fernsteuerung

Hi zusammen,

wie im separaten Thread nach langwieriger Fehlersuche dokumentiert, läuft mein OnAir1000-Pult mit SAS nun einwandfrei. Ich würde die SAS-Anbindung nun noch für einige zusätzliche Dinge nutzen:

  • Wenn (mindestens) ein Mikro geöffnet wird (Kanäle habe ich als zusätzliche Kanäle eingetragen), würde ich gern den Aircheck starten, wenn alle Mikros zu sind wieder stoppen. Kann ich irgendwo auf SAS-Events mit Aktionen reagieren oder läuft es auf ein Script hinaus? Wenn ja, wie kann ich hier auf SAS-Events reagieren?

  • Ich würde gern weitere Kommandos per SAS übertragen, z.B. um die Uhrzeit des Mischpults bei Programmstart zu setzen, bei Nutzung von Extra-PFL automatisch einen anderen Monitoring-Weg einzuschalten etc. → Gibt es eine Möglichkeit über Scripte oder Ähnliches entsprechende Befehle zu versenden? (Die Möglichkeiten unter “Aktionen” habe ich bereits gesehen, die bieten aber nicht das, was ich tun möchte an)

Viele Grüsse,

Christoph

In Hintergrund-Scripts stehen eine Reihe von Prozeduren zur Verfügung. Auszug aus der Background Script Template.mls:

// Called when a command is received from an SAS remote
procedure OnSASCommand(Remote: ISASRemote; Command: byte; Data: string);
begin
end;

// Called when an SAS GPI goes ON
procedure OnSASGPIOn(Remote: ISASRemote; GPI: byte);
begin
end;

// Called when an SAS GPI goes OFF
procedure OnSASGPIOff(Remote: ISASRemote; GPI: byte);
begin
end;

// Called when an SAS sources goes PFL ON
procedure OnSASPFLOn(Remote: ISASRemote; SourceName: string);
begin
end;

// Called when an SAS sources goes PFL OFF
procedure OnSASPFLOff(Remote: ISASRemote; SourceName: string);
begin
end;

Und dann hast du diverse Methoden in ISASRemote zur Verfügung, über die du via SASRemote(0) drankommst: mAirListScript: SASInterfaces: Interface ISASRemote

Produktiv habe ich aber noch nie was damit gebaut, und kann daher wohl wenig Hilfestellung geben.

Das meiste Knowhow in der Richtung dürfte bei @lifechannel sein.

1 Like

Danke für die schnelle Antwort! Dann brauche ich jetzt nur noch etwas Zeit um zu basteln :wink:

@Torben Danke fürs Linken. Einfach melden wenn es Hilfe braucht. Haben einiges per SAS realisiert. PFL, Cartwall usw.

Allenfalls würde es sinn machen SAS durch Ember+ zu ersetzen. Müsste mich mal schlau machen.
LG Michel

Hi @lifechannel,

vielen Dank! Was mir helfen würde wären 1-2 Beispielscripte zum Senden und Empfangen von SAS-Kommandos, falls Du da etwas hast. Es ist ja meist einfacher etwas zu adaptieren, als von Null anzufangen.

Viele Grüsse,

Christoph

Hi zusammen,

heute habe ich mir mal die Zeit genommen, hier weiterzumachen. Mein erstes Mini-Script ist fertig und erlaubt mir PDF ein und auszuschalten (das Pult ignoriert die Knöpfe und “fragt” mAirlist, ob es wirklich PFL machen soll - ich gebe die entsprechenden Kommandos dann zurück):


// Available in SAS module:

// Called when a command is received from an SAS remote
procedure OnSASCommand(Remote: ISASRemote; Command: byte; Data: string);
begin
 SystemLog('SAS-Command: '+Inttostr(Command)+' Value: '+Inttostr(Data[1]));
 if (Command=22) or (Command=23) then // allow to activate and deactivate PFL by echoing the request back to the console
 begin
  Remote.SendCommand(Command,Data);
 end;
	
end;

begin
end.

Jetzt habe ich weitere Fragen:slight_smile: :

  • Wie komme ich an ein SASInterface, wenn ich nicht in der OnSASCommand-Prozedur bin (Beispiel: Ich aktivere PFL in mAirlist und will dem Pult das Kommando per SAS schicken, den entsprechenden Eingang zu aktivieren) - ich habe ja in dem Moment kein passendes Objekt für “SendCommand” zur Verfügung
  • Wie komme ich an die Zuordnung von Kanal zu Kanalname, die mAirlist ermittelt hat? Kann ich direkt herausfinden, welche Fadernummer welchem Kanalnamen zugeordnet wurde?

Danke für Eure Unterstützung!

Viele Grüsse,
Christoph

Geht folgendes?

var
  Remote: ISASRemote;

procedure OnLoad;
begin
  Remote := SASRemote(0);
end;

// und später:
  Remote.SendCommand(iCommand: byte; iData: RawByteString);

(Ungetestete Schreibtischtat, weiteres siehe hier.)

1 Like

Zumindest lässt es sich laden und meckert auch nicht. Ob es auch etwas bewirkt, teste wenn ich wieder vor Ort bin! Danke Dir für den Code-Schnipsel!

Vielleicht wäre es sinnvoll, es nicht Remote zu benennen, sondern OnAirRemote oder ähnlich, damit es keine Kollision mit dem Remote aus der OnSASCommand-Prozedur gibt.

1 Like

Sali Christoph

Wir verwenden bei uns 5 Kanäle auf dem Pult. Player A, B, C, Cartwall und MAPFL
Diese sind unter Fernsteuerung und SAS-Konfiguration eingetragen. Den MAPFL nutzen wir für das PFL in der Playlist bzw. Editor.

Die meisten Funktionen sind bereits in mAirList integriert. Ich nutze noch zwei Scripts für die Umschaltung von Auto/Assist. Cartwall Softbutton auf dem Pult.

SendCommand würde ich nicht mehr nutzen. Hatte bei mir nicht immer 100% funktioniert.

Nutze nur noch:
SASRemote(0).SetFaderLevel
SASRemote(0).SetGPI(8,1);
SASRemote(0).SetFaderStart(‘Cart’, 0);

Wichtig: Du musst sicherstellen, dass die Sourcen für mAirList immer am Pult “assigned” sind. Sonst kriegt mAirList ein Problem. Wenn Du die Fader auf der Oberflache anders nutzen willst, kannst Du diese automatisch auf einen virtuellen Fader legen. MAPFL ist bei uns fix auf einem virtuellen Fader.

LG Michel

2 Likes

Sehr gute Punkte, vielen Dank!
Mein Punkt ist, dass ich im Pult ein “Extra-PFL” habe, das man unter keinem Kanalnamen ansprechen kann. Es funktioniert aber mit dem entsprechenden SendCommand bisher einwandfrei. Ich starte PFL und das Pult aktiviert Extra-PFL.

Hi zusammen,

mühsam ernährt sich das Eichhörnchen - habe leider wahnsinnig wenig Zeit aktuell und arbeite somit Häppchen für Häppchen. Folgendes kann ich mit Euch teilen, vielleicht ist es auch für Euch nützlich:

Initialisieren:

var
  OnAir1000Remote: ISASRemote;
  MicrophoneActiveCount: Integer;

procedure OnLoad;
begin
  OnAir1000Remote := SASRemote(0);
  OnAir1000Remote.SendCommand(1,chr(0))
  MicrophoneActiveCount:=0;
end;

Das Folgende passiert im OnSASCOmmand:

Kanalaktivierung und Deaktivierung monitoren (On/Off) und wenn ein Kanal mit “MIC” oder “MOD” anfängt zählen, wieviele Mikrofonkanäle offen sind. Falls mindestens einer geöffnet wurde, entsprechende Kommandos für Aircheck start und Rotlicht an ausführen, sobald alle geschlossen sind Aircheck stoppen und Rotlicht abschalten (Rotlicht läuft über mein Home Assistant, der dann die entsprechenden LEDs und Zigbee-Steckdosen ansteuert)

if (Command=36) then
 begin
  if (Data[9]=chr(1)) then 
  begin
   SystemLog('Channel Activation: '+Copy(Data,1,8));
   // Check if Microphone was activated by channel label
   if (Copy(Data,1,3)='MIC') or (Copy(Data,1,3)='MOD') then
   begin
    MicrophoneActiveCount:=MicrophoneActiveCount+1;
	if (MicrophoneActiveCount=1) then
	begin 
	 MicChange:=true;
	end;
   end;
  end;
  if (Data[9]=chr(0)) then
  begin
   SystemLog('Channel Deactivation: '+Copy(Data,1,8));
   // Check if Microphone was deactivated by channel label
   if (Copy(Data,1,3)='MIC') or (Copy(Data,1,3)='MOD') then
   begin
    MicrophoneActiveCount:=MicrophoneActiveCount-1;
	if (MicrophoneActiveCount=0) then
	begin 
	 MicChange:=true;
	end;
   end;
  end;
  if (MicrophoneActiveCount>0) then
  begin
   ExecuteCommand('AIRCHECK OPEN');
   ExecuteCommand('TALKTIMER RESET');
   ExecuteCommand('AIRCHECK ON');
   ExecuteCommand('TALKTIMER START');
   HTTPGet('https://MeinHomeAssistant/api/webhook/StudioMic-On');
  end else
  begin
   ExecuteCommand('AIRCHECK OFF');
   ExecuteCommand('AIRCHECK CLOSE');
   ExecuteCommand('TALKTIMER STOP');
   HTTPGet('https://MeinHomeAssistant/api/webhook/StudioMic-Off');
  end;
 end;
 
 
 
 if MicChange then
 begin
  SystemLog('Microphone change');
 end;
 

Ausserdem hab ich noch das hier, damit das Pult automatisch auf “EXT PFL” schaltet, sobald ich vorhöre, den Mix-Editor aktiviere etc.:

// Called when cue editor, mix editor... (but not a player) starts playback
// ExtPFLCount is the number of active such ExtPFL sources
procedure OnExtPFLOn(Item: IPlaylistItem; ExtPFLCount: integer);
begin
	SystemLog('Number of Ext-PFL Source: '+Inttostr(ExtPFLCount))
	if(ExtPFLCount>0) then
	begin
	 OnAir1000Remote.SendCommand(22,chr(254));
	 end;
end;

// Called when cue editor, mix editor... (but not a player) stops playback
// ExtPFLCount is the number of active such ExtPFL sources
procedure OnExtPFLOff(Item: IPlaylistItem; ExtPFLCount: integer);
begin
	SystemLog('Number of Ext-PFL Source: '+Inttostr(ExtPFLCount))
	if(ExtPFLCount=0) then
	begin
	 OnAir1000Remote.SendCommand(23,chr(254));
	 end;
end;


Noch nicht weitergekommen bin ich mit der Uhrzeitsynchronisierung.

Ich hoffe die Scripte nützen jemandem schonmal etwas!

Viele Grüsse,

Christoph