Script für K8055N

Hallo ich bin kein Programmierer, aber ich habe mir das Vellemann K8055N besorg und zusammengelötet. ich habe es auch getestet mit der Vellemann Software alles OK!
Auch kann ich die mit den Eingängen die Mairlist funkionen steuern also wird es schon mal erkannt.
Jetzt möchte ich noch die Ausgänge steuern. Ich habe Gelesen das das nur in vom eines Script geht.
Ich möchte wenn ENCODER INPUT MIC ON ist das der Erste Kanal an geht und natürlich wieder aus wenn das Mic aus geht
dann möchte ich das wenn der Encoder verbunden wird der zweite Kanal an geht.
wie mache ich das?
Ich habe mit dem Windows Editor versucht eine .mls datei zu schreiben das hat aber nicht geklappt ich bekomme immer eine fehlermeldung in Mairlist (Error 4:5 Unknown identifer K8055NRemote)
Folgendes habe ich versucht zu schreiben zum testen:

procedure OnExecuteCommand(Command: string);
begin
if Command = ‘ENCODER INPUT MIC ON’ then
K8055NRemote(0).SetDigitalChannel(1)
else if Command = ‘ENCODER INPUT MIC OFF’ then
K8055NRemote(0).ClearDigitalChannel(1);
end;

habe das so ähnlich gefunden im Forum
was ist Falsch?
kann ich das überhaupt im Editor Schreiben?
Fragen über Fragen :grin:
ich hoffe ihr könnt mir helfen?
Danke schon mal.
Liebe Grüße
Timo
PS ich habe Mairlist 6.1

Hallo Timo,

da ist ein bißchen was mit der Syntax durcheinander. Probiere es mal mit:

procedure OnLoad;
begin
  K8055Remote(0).ClearAllDigital;
end;

procedure OnExecuteCommand(Command: string);
begin
  if Command = 'ENCODER INPUT MIC ON' then begin
    K8055Remote(0).SetDigitalChannel(1);
  end
  else if Command = 'ENCODER INPUT MIC OFF' then begin
    K8055Remote(0).ClearDigitalChannel(1);
  end
  else if Command = 'ENCODER CONNECT' then begin
    K8055Remote(0).SetDigitalChannel(2);
  end
  else if Command = 'ENCODER DISCONNECT' then begin
    K8055Remote(0).ClearDigitalChannel(2);
  end;
end;

procedure OnUnload;
begin
  K8055Remote(0).ClearAllDigital;
end;

begin
end.

(Es fehlten ein paar begin und end.) Ich habe das Script noch um einen Reset beim starten und stoppen des Scriptes (also von mAirList) erweitert, damit definierte Zustände herrschen.

Und ja, das kannst Du im Editor schreiben und als .mls abspeichern.

Ergänzte Grüße

TSD


Edit: Copy-and-paste-Fehler beseitigt.

Edit²: Encoderverbindung nachgetragen.

Danke für deine Antwort. Bin jetzt Leiter und über das Wochenende unterwegs. Werde es gleich nächste Woche mal versuchen. Finde das Forum echt cool da wird noch wirklich geholfen.
Liebe Grüße Timo

Na, warte erst mal ab, ob es überhaupt funktioniert …

Skeptische Grüße

TSD

Habe Den Script nun getestet. Es kommt auch keine Fehlermeldung mehr. Aber es Fukioniert nicht wie ich das möchte… wenn ich beim Encoder auf verbinden Klicke (mit der Maus) geht kein Ausgang an. Auch beim Mikrofon ist das so. Der Ausgang geht nur wenn ich z.b. auf dem K8955N ein einen Eingang auf die Funkion lege. Wahrscheinlich sind das die Falsche Befehle die nicht den zustand des Encoders abfragen… kann das sein??? ich möchte auch wenn ich das MIC und den Encoder mit der Maus ein und ausschalte das die Ausgänge kommen
Sonnst schaut es schon mal gut aus :grinning:
Liebe Grüße
Timo

Das ist zutreffend. Die Funktion Prozedur OnExecuteCommand reagiert nur auf Befehle von irgendwelchen Fernsteuerungen und macht sich nichts aus Geklicke.

Für den Encoder fiele mir folgender Trick ein, der vielleicht ginge:

  • In der Konfiguration wähle Stream Monitor > Aktionen > Wenn Stream On Air > Hinzufügen > Verschiedenes > Befehl ausführen

  • In das Feld schreibst Du STREAM ON AIR

  • In der Scriptzeile else if Command = 'ENCODER CONNECT' then begin änderst Du 'ENCODER CONNECT'in 'STREAM ON AIR'.

  • Entsprechendes für Off Air.

Für das Mikrofon geht auch was, aber da müßte ich forschen, oder jemand anderes weiß es schneller.

Ersetzte Grüße

TSD

Ich habe hier noch etwas älteres gefunden, was man gegebenenfalls umstricken kann. Das Skript fragt jede Sekunde ab, ob ein Mikrofon offen ist und schreibt dann den entsprechenden Zustand in eine Datei. Ob das mit der Version 6 läuft, müssen andere feststellen:

procedure OnTimer;
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    if Encoder.GetMicInputEnabled then
      sl.Add('Mikrofon On Air')
    else
      sl.Add('Mikfrofon nicht On Air');
    sl.SaveToFile('\\irgendeinrechner\pfad\Mikrofonscript.txt');
  finally
    sl.Free;
  end;
end;

procedure OnLoad;
begin
  EnableTimer(1000);
end;

begin
end.

(ungetestet)

Kopierte Grüße

TSD

Jetzt frage ich mal in die Runde: Offenbar kann man den Zustand des Mikrofoneingangs mit Encoder.GetMicInputEnabled abfragen, gut. Aber wie verwurste ich das jetzt weiter? Natürlich könnte man in obiger Routine den Timer auf 10 Millisekunden setzen, aber das ist doch keine saubere Lösung. Einfach in der OnExecuteCommand Bei der if-Abfrage die Variable eintragen? Kann ich mir nicht vorstellen. (Ich kann es gerade nicht ausprobieren.)

Und, man könnte sich einen Button basteln, mit dem man das Mikrofon per Klick einschaltet, das funktioniert auf jeden Fall, halte ich aber auch nur für einen Workaround. Der Button müßte in diesem Beispiel BUTTON.MIC heißen und den Befehl MIC ON von sich geben:

var
  ModeMicOn: boolean;

procedure OnLoad;
begin
  K8055Remote(0).ClearAllDigital;
  ModeMicOn := false
  ExecuteCommand('BUTTON.MIC OFF')
end;

procedure OnExecuteCommand(Command: string);
begin
  if NOT ModeMicOn AND (Command = 'MIC ON') then begin
    ModeMicOn := true;
    ExecuteCommand('BUTTON.MIC ON');
    ExecuteCommand('ENCODER INPUT MIC ON');
    K8055Remote(0).SetDigitalChannel(1);
  end
  else if ModeMicOn AND (Command = 'MIC ON') then begin
    ModeMicOn := false;
    ExecuteCommand('BUTTON.MIC OFF');
    ExecuteCommand('ENCODER INPUT MIC OFF');
    K8055Remote(0).ClearDigitalChannel(1);
  end
  else if Command = 'STREAM ON AIR' then begin
    K8055Remote(0).SetDigitalChannel(2);
  end
  else if Command = 'STREAM OFF AIR' then begin
    K8055Remote(0).ClearDigitalChannel(2);
  end;
end;

procedure OnUnload;
begin
  K8055Remote(0).ClearAllDigital;
end;

begin
end.

@Torben, was liegt denn noch in Deiner Trickkiste für diesen Fall?

Suchende Grüße

TSD

Schaut mal in die aktuelle Background Script Template.mls von der 6.1, es gibt da schon seit einiger Zeit eine Prozedur für:

// Called when an encoder input is turned on or off
procedure OnEncoderInputToggle(Input: TEncoderInput; NewState: boolean);
begin
end;

Im Falle des Mikrofons wird die Prozedur mit den Parametern eiMicund eben true oder falsefür den Zustand des Mikrofons aufgerufen. Eine fertige Prozedur, die einen Velleman-Ausgang abhängig vom Zustand des Mic-Eingangs schaltet, könnte also so aussehen:

// Called when an encoder input is turned on or off
procedure OnEncoderInputToggle(Input: TEncoderInput; NewState: boolean);
begin
  if Input = eiMic then begin
    if NewState = true then
      K8055Remote(0).SetDigitalChannel(2)
    else
      K8055Remote(0).ClearDigitalChannel(2);
  end;
end;

Natürlich beliebig erweiterbar…

Nachtrag:

GetMicInputEnabled gibt es seit einiger Zeit nicht mehr, stattdessen verwendet man jetzt GetInputEnabled(eiMic). Auch die anderen Eingänge kann man damit abfragen:

eiPlayer,
eiSecondary,
eiPlayer3,
eiPlayer4,
eiHighPriority,
eiMic,
eiLine,
eiAux

Nur Mic und Line haben einen Button in der GUI, zusätzlich kann man noch Aux über die entsprechende Aktion schalten, die anderen lassen sich nur per Script schalten, was aber wirklich nur in extremen Hardcore-Anwendungsfällen von Interesse sein sollte :wink:

Heißen Dank! Dann müßte Timo mal folgendes probieren:

procedure OnLoad;
begin
  K8055Remote(0).ClearAllDigital;
end;

procedure OnEncoderInputToggle(Input: TEncoderInput; NewState: boolean);
begin
  if Input = eiMic then begin
    if NewState = true then
      K8055Remote(0).SetDigitalChannel(1)
    else
      K8055Remote(0).ClearDigitalChannel(1);
  end;
end;

procedure OnExecuteCommand(Command: string);
begin
  if Command = 'ENCODER CONNECT' then begin
    K8055Remote(0).SetDigitalChannel(2);
  end
  else if Command = 'ENCODER DISCONNECT' then begin
    K8055Remote(0).ClearDigitalChannel(2);
  end;
end;

procedure OnUnload;
begin
  K8055Remote(0).ClearAllDigital;
end;

begin
end.

Sollte gehen (ich kann es gerade nicht testen) unter der Voraussetzung, daß in der Konfiguration für den Encoder die entsprechenden Befehle (siehe oben) eingetragen sind.

Gespannte Grüße

TSD

Danke euch beiden für die antworten. werde das heute Abend gleich mal versuchen. :grinning:
So macht ein Forum Spaß… :smile:
Melde mich dann zurück ob das geklappt hat!!
Liebe Grüße
Timo

Ich habe es nun Getestet. ich hab es noch mal ein wenig geändert. da ich nur die Home Lizenz habe habe ich kein Stream-Monitor. ich habe das ganze nun über das OFF AIR und ON AIR gemacht… aber sonst geht es Super :+1:
mal sehn was mir noch einfällt was mann noch schalten kann :grinning:
Ich möchte das als Gelb-Grün Rot Steuerung betreiben. So das ich nicht im falschem moment gestört werde :rofl:
Jetzt muss ich noch ein Gehäuse bauen und das eine und andere Relais montieren dann kann es los gehen… :grinning:
In Elektrotechnik bin ich fit… aber mit dem Script schreiben habe ich eine Erfahrung :upside_down_face:
Danke das Ihr mir geholfen habt.
Kann ja in Serie gehen. :grinning:

Liebe Grüße
Timo

Oh sorry, das fällt mir mit Vollausstattung natürlich nicht auf! Aber schön, daß Du es auch so hinbiegen konntest. Für Deine weiteren Ausbaupläne empfehle ich, wie Torben auch, einen Blick in die Background Script Template.mls (der bei mir freilich nichts genützt hat :roll_eyes:), worin noch einige weitere nützliche Prozeduren aufgeführt sind. Viel Spaß!

Gescriptete Grüße

TSD

Ich hänge meinen Beitrag mal hier an, falls es für jemand von Interesse ist.
Gerade eben kam für das aktuelle mAirList 6.2.2 ein neuer Snapshot hinzu:

Snapshot - Build 4125

[+] K8055NRemote: Added OutputAnalogChannel method

Hui!! :grinning:
 

(Na, jetzt kann man doch die Lampe dimmen …!)   :grin:
 

Freche Grüße

TSD

… und dann fallen die Hüllkurven :rofl:

1 Like