Nachrichten mit Fix-Zeit über MiniScheduler einplanen, HowTo?

Moin Moin,
lange her, aber ich hab mal wieder eine Frage, bzw. mir fehler der Lösungsansatz.

Wir möchten News ins Programm nehmen, aber nicht zu jeder vollen Stunden, sondern nur tagsüber.
Ausserdem nicht, während 2 stündige Wiederholungen laufen.
Daher möchte ich gerne den MiniScheduler nutzen um die News, gleich in die Playliste zu planen.

Das klappt auch, ein Nachrichtenelement in der DB, ohne Cue-Punkte, die zugehörige Datei wird ausgetauscht, wenn wir ein Update erhalten. Dateiname nachrichten.mp3 bleibt also gleich.

Wie kriege ich es jetzt hin, dass ich dieses Element zur Fix-Zeit starten kann? Sind fertig verpackte Nachtichten, also nur diese eine Datei. Da ich immer den gleichen DB Eintrag verwende, kann ich ja keine Fix-Zeit für das Element setzen, dann würde es nur einmal am Tag zu dieser Fix-Zeit starten.

Alle Playlisten generell mit Fix-Zeit starten geht auch nicht, weil dann die 2h Wiederholungen unterbrochen würden.

Wir sind auf mAirList 3.1 pro

Greetz
Malte

Keiner eine Idee?

mAirList 4 kann Fixzeiten auch auf Vorlagen-Ebene…

Also bei mAirList 3, keine Chance?
Das ist blöd, denn das Upgrade von 3.x auf 4.x pro ist nicht zu finanzieren.

Ich muss das Thema noch mal hoch holen.
Kann ich nicht über die DB das Nachrichtenelement ohne fix-Zeit einplanen und die dann über ein Script setzen, nach dem die Ausspielinstanz die Playliste geladen hat?
Ich kann nur leider selber keine Scripte schreiben, jemand ein Idee?

Hi Malte, ich würde einfach ein “AutomationNext” script benutzen und dies per Event ausführen.
Abhängig davon wieviele 2-Stunden Blöcke du hast, musst du eben entsprechend viele Events aufsetzen.
Würde aber so funktionnieren.

Gruss:
-Serge-

Hi Serge,
dann könnte ich die News auch gleich per Event einfügen. Dadurch gerate ich aber in eine relativ starre Struktur bzw. ich müsste neben der Playliste auch noch die events verändern.

Mein Idee ist, dass ich jede Stunde mit einem Script nach schaue, ob News da sind, und wenn ja, diese auf Fixzeit setzen. Wenn nein, dann passiert eben nix und die Playliste läuft einfach so weiter, wie sie ist.

Das Hat den Vorteil, dass ich nur die Playliste innerhalb der Datenbank pflegen muss. Wenn ich keine Nachrichten will, dann werfe ich dort das Element einfach raus.

Mir ist klar, dass das eine relativ exotische Arbeitsweise ist, und wohl bei den meisten Sendern nicht zutreffend ist.

Greetz
Malte

OK verstehe,

ja dann könntest du ja das Script so aufbauen dass jede Stunde (falls vorhanden) die News in die Playliste als nächstes Element eingefügt werden und dann gleich per AutomationNext zu den News übergeblendet wird.

Nur, wie bewerkstelligst du, dass die News nur zu bestimmten Zeiten vorhanden sind? So wie ich dich verstehe wird ja die Datei jede Stunde aktualisiert. Dann musst du dort was “basteln”.

-s-

Nee, die Datei wird nur 3mal am Tag aktualisiert (leider im Moment), könnte auch ein Stream werden oder was auch immer.
Also die Datei wird immer vorgehalten und immer über das gleiche Element in der DB in die Playliste eingeplant.

Ich wildere gerade in einem von Cad’s scripten aus dem IVP.
Sieht noch schlimm aus, ich weiß.
Damit müsste ich ja das passende Element finden. Anstatt SetEndType müsste ich ja dann “nur” FixZeit setzen, die ich natürlich vorher noch berechnen muss.
Syntax ist warscheinlich auch noch Kraut und Rüben. Hab das nur mal auf die Schnelle zusammen copy & paste.

[code]
// Some parts taken from Cad’s IVP-5.2-MarkEndingsByType script

// Change the appropriate CONSTs below if you wish to change how this script works.
// It’s a good idea to add comments here if you do this.
// NOTE: DO NOT remove ANY of the CONSTs! The script will stop working if you do.
const
// Name of script, used as a prefix to all SystemLog messages
// (default: 'SetNewsFixTime-1.0: ')
// If you change this, keep a colon and space as the last two characters.
SCRIPTNAME = 'SetNewsFixTime-1.0: ';

var
i, iItemCount, iMax: integer;
sPlaylist: string;
plCurrent: IPlaylist;
currentItem: IPlaylistItem;
piType: TPlaylistItemType;

procedure ProcessCurrentPlaylist;
begin

SystemLog(SCRIPTNAME
+ ‘Processing Playlist ’
+ sPlaylist
+ ’ (’
+ IntToStr(iItemCount)
+ ’ items), please wait …’);

iMax := iItemCount - 2;

plCurrent := Factory.CreatePlaylist;
plCurrent.Assign(CurrentPlaylist);

for i := 0 to iMax do
begin

currentItem := plCurrent.GetItem(i);
piType := currentItem.GetItemType();

// Comment out any Types below which you DEFINITELY never use
case piType of
// pitUnknown: currentItem.SetEndType(UNKNOWN_ENDING);
// pitMusic: currentItem.SetEndType(MUSIC_ENDING);
// The if statement prevents this code being added to the FINAL Playlist item
// pitVoice: currentItem.SetEndType(VOICE_ENDING);
pitNews: currentItem.SetEndType(NEWS_ENDING);
// pitAdvertising: currentItem.SetEndType(ADVERTISING_ENDING);
// pitPackage: currentItem.SetEndType(PACKAGE_ENDING);
// pitJingle: currentItem.SetEndType(JINGLE_ENDING);
// pitSound: currentItem.SetEndType(SOUND_ENDING);
// pitEffect: currentItem.SetEndType(EFFECT_ENDING);
// pitTrailer: currentItem.SetEndType(TRAILER_ENDING);
// pitPromo: currentItem.SetEndType(PROMO_ENDING);
// pitSponsorship: currentItem.SetEndType(SPONSORSHIP_ENDING);
// The if statement prevents this code being added to the FINAL Playlist item
// pitSweeper: currentItem.SetEndType(SWEEPER_ENDING);
// pitDrop: currentItem.SetEndType(DROP_ENDING);
// pitStationID: currentItem.SetEndType(STATIONID_ENDING);
// pitBed: currentItem.SetEndType(BED_ENDING);
// pitInstrumental: currentItem.SetEndType(INSTRUMENTAL_ENDING);
// pitShow: currentItem.SetEndType(SHOW_ENDING);
// pitOther: currentItem.SetEndType(OTHER_ENDING);
// pitCustom1: currentItem.SetEndType(CUSTOM1_ENDING);
// pitCustom2: currentItem.SetEndType(CUSTOM2_ENDING);
// pitCustom3: currentItem.SetEndType(CUSTOM3_ENDING);
// pitCustom4: currentItem.SetEndType(CUSTOM4_ENDING);
end;
end;

begin
sPlaylist := IntToStr(CurrentPlaybackControl.GetIndex + 1);
iItemCount := CurrentPlaylist.GetCount;
if iItemCount < 1 then
SystemLog(SCRIPTNAME + 'Please put one or more items in Playlist ’ + sPlaylist + ‘, then try again.’)
else
begin
ProcessCurrentPlaylist;
SystemLog(SCRIPTNAME
+ ‘Processing complete.’);
end;
end. [/code]

Wenn die Datei immer vorhanden ist, wie weisst du denn wann sie ausgespielt werden soll?
Dann ist das doch der gleiche Aufwand wie wenn du entsprechend viele Events für die Ausspielzeit aufsetzt.
Falls die Datei nicht vorhanden sein soll zu bestimmten Zeiten, dann kannst du das Script einfach mit einem
“if not FileExists(file)” entsprechend ausführen oder beenden.

Ein Element in die Playliste enzufügen und eine Fixtime zu verpassen ist an sich kein Problem. Denke mal ein entsprechendes Script hier im Forum gesehen zu haben.

-s-

Die Zurodnung passiert über verschiedene Stundenvorlagen. Mal mit mal ohne News.
Einige Stunden werden dann noch manuell nachbearbeitet.
Das ist der Grund warum ich das alles in der Datenbank haben möchte. Das kann ich den Redakteuren wesentlich einfacher vedeutlichen. Bearbeiten der Playliste ist nichts neues.

Ach, verstehe jetzt. ::slight_smile:
Du brauchst ein Script welches nachdem die neue Playliste geladen wurde, “nachschaut” ob sich ein News-Element in der Playliste befindet und diesem dann eine Fixzeit verpasst.

-s-

Ja, ganz genau.
Aus dem Mark Ending Script hab ich schon
pitNews: currentItem.SetEndType(NEWS_ENDING);
in
pitNews: currentItem.TStartTimeType = ( sttFixed );
geändert.

Oder muß ich das oben erst als Variable definieren? Ich hab das gefühl, dass ich TStartTimeType so nicht verwenden kann. (wie gesagt, ich kann nicht wirklich programmieren)

So sollte das Element auf FixZeit gesetzt werden, bzw. eigentlich könnte ich das ja auch in der DB eintragen und einfach immer nur die Jeweilge Stunde berechnen und setzen.

Wie herum auch immer, Theoretisch muss ich jetzt “nur noch” die Uhrzeit berechnen und setzen.

Und genau da hakt es gerade. Ich vermute das geht mit:
TTimeValue = int64 ;

Nur wie…?

OK, ich will mal etwas weiter basteln.
Wie berechne ich den Wert der nächsten Stunde?
Wir haben 11:50 und das Script läuft, nächste Stunde währe 12:00 Uhr, was ich dann als Fix-Zeit brauche.

Kann mir da jemand helfen?

Bitte schön:

var

  actualtime, targetfixtime : TDateTime;
  Std, Min, Sec, Msec : word;
  timestring : string;

begin

//geht nicht
//actualtime := now + (1/24);

  actualtime := now + 0.04166;

  DecodeTime(actualtime, Std, Min, Sec, Msec);
  targetfixtime := EncodeTime(Std, 0, 0, 0);

//Kontrolle
  timestring := FormatDateTime('hh:nn:ss', targetfixtime);
  SystemLog(timestring);

end.

wieso allerdings die Geschichte mit “…now + (1/24)” nicht funzt weiss ich nicht…
Geht wahrscheinlich auch bestimmt einfacher, nur ich bin auch kein Delphi-progger.

Welches Element in der Playliste muss dann auf diese Fixzeit gesetzt werden? Das nächste in der Liste?

Gruss:
-Serge-

Hier dann das Script welches die nächste TOH erstellt, die Playliste nach einem “News” Item parsed und diesem dann die Fixtime verpasst.
Du musst halt nur dafür sorgen dass die Newsdatei entsprechend getagged ist. Den Dateinamen abfragen geht anscheinend nicht. Habe auf jedenfall nix passendes in der Helpdatei gefunden. Aber vielleicht kann Torben das bestätigen.

[code]var

actualtime, targetfixtime : TDateTime;
Std, Min, Sec, Msec : word;
iItemCount : integer;
iItemName : string;

begin

//get current time + 1 hour
actualtime := now + 0.04166;

//assemble target fixtime for next top of the hour
DecodeTime(actualtime, Std, Min, Sec, Msec);
targetfixtime := EncodeTime(Std, 0, 0, 0);

//parse playlist for news item
for iItemCount := 0 to CurrentPlaylist.GetCount- 1 do begin
iItemName := CurrentPlaylist.GetItem(iItemCount).GetTitle;
If iItemname = ‘News’ then begin
break;
end;
end;

//assign fixtime to news playlistitem
CurrentPlaylist.BeginUpdate;
try
CurrentPlaylist.GetItem(iItemCount).SetStartTime(sttfixed, targetfixtime);
finally
CurrentPlaylist.EndUpdate;
end;

end.[/code]

Gruss:
-Serge-

Serge, VIELEN DANK!
Ich werd es direkt mal einbauen.

Hi Serge,
funktioniert fast gut. Ich hab nur aus News, Nachrichten gemacht.

Allerdings bekomme ich einen Fehler, wenn kein Element gefunden wird, auf welches das Kritrium zutrifft.

Laufzeitfehler 28, irendwas.

mach ich was falsch?

Greetz
Malte

Ja stimmt, das mit dem “nichtvorhandensein” fängt das Script nicht ab.
Musst bei dem ‘break’ entweder einen zusátzlichen flag setzen oder iItemName nochmal abfragen und dann drunter mit einer ‘if then’ den abfragen.
Playlistupdate darf natürlich nur gemacht werden wenn auch ein News-Element gefunden wurde.

Ändere ich heute abend oder morgen für dich um.

Gruss:
-Serge-

Hier das überarbeitete Script. Kannst du so 1:1 übernehmen

[code]var

actualtime, targetfixtime : TDateTime;
Std, Min, Sec, Msec : word;
iItemCount : integer;
sItemName : string;
bItemFound : boolean;

begin

//get current time + 1 hour
actualtime := now + 0.04166;

//assemble target fixtime for next top of the hour
DecodeTime(actualtime, Std, Min, Sec, Msec);
targetfixtime := EncodeTime(Std, 0, 0, 0);

//parse playlist for news item
for iItemCount := 0 to CurrentPlaylist.GetCount- 1 do begin
sItemName := CurrentPlaylist.GetItem(iItemCount).GetTitle;
If sItemname = ‘Nachrichten’ then begin
bItemFound := true;
break;
end;
end;

//assign fixtime to news playlistitem
if bItemFound = true then begin
CurrentPlaylist.BeginUpdate;
try
CurrentPlaylist.GetItem(iItemCount).SetStartTime(sttfixed, targetfixtime);
finally
CurrentPlaylist.EndUpdate;
end;
end;

end.[/code]

Gruss:
-Serge-