Jump to content

Per Aufgabe eine Nachricht / ein Event an EventGhost schicken


ZappoB

Recommended Posts

Wie in diesem Thread schon ausgeführt, möchte ich EventGhost gerne von einem geplanten Standby nach einer Aufnahme unterrichten; wie es scheint, geht dies nicht -wie von mir geplant- mit dem Aufruf von EG mit dem Parameter -e, da diese Information nicht aus dem Systemkonto heraus kommt.

 

Jetzt stellt sich die Frage, wie bekomme ich eine Nachricht aus dem Systemkonto an EventGhost übermittelt? Nuts regte in dem o. g. Thread bereits an, mit TCP-Nachrichten zu arbeiten, dazu bräuchte ich aber dann noch weitere Unterstützung, weil mir das notwendige "Skript" fehlt.

 

Alternative Möglichkeiten, EventGhost vom geplanten Standby zu unterrichten, werden natürlich gerne ebenfalls entgegen genommen.

 

Weitere Info:

 

Bisher habe ich ohne RS gearbeitet, EventGhost bekam dann ein DVBViewer Event gesendet, wenn das OSD-Fenster für den geplanten Standby nach einer Aufnahme geöffnet wurde. Dieses wurde einfach mit einem OSD-OK beantwortet und der Standby wurde abgebrochen, wenn ein anderes Programm (wie das XBMC) im Vordergrund war.

 

Diese Funktion möchte ich jetzt im RS nachstellen, ich bekomme aber ums verrecken keine Information vom RecordingService in den EventGhost.

Edited by ZappoB
Link to comment

Mhm im EG TCP-Empfänger Plugin ist das etwas ungeschickt (imho hab wenig Ahnung von dem TCP Kram) gelöst.

Mit Passwort Abfrage und weiterer Server-Client Kommunikation bevor überhaupt ein Event abgesetzt werden kann.

Verspüre jetzt wenig Lust das nachzubauen.

 

Ich denk mal drüber nach.

Link to comment

Es sollte doch außer TCP noch eine andere Form der Kommunikation des Systemkontos geben...

 

Was kann man denn innerhalb des Systemkontos machen, was auch außerhalb sichtbar ist?

Edited by ZappoB
Link to comment

Es gibt auch andere Möglichkeiten, aber EG muss mit den vorhandenen Mitteln auch etwas davon mitbekommen.

Sendmessage würde vielleicht auch gehen. Dafür gibt es ein Plugin in EG, aber das wäre dann auf den lokalen PC beschränkt und dann kommt der nächste und möchte ein EG-Event am Client-PC nach einer Aufnahme.

Gegen die Kommunikation übers Netzwerk spricht nichts. Ist wahrscheinlich doch am einfachsten ein Skript zu basteln, das eine TCP Nachricht ans Empfänger-Plugin sendet.

 

Was ist besser?

Die benötigten Paramter per cmdline (send_tcp_event.exe -event %ip %port) zu übertragen oder die Paramter in eine extra INI auszulagern?

Für jedes Miniskript eine eigene Konfig-Datei ist irgendwie auch blöd oder?

Edited by nuts
Link to comment

Solange sich die Parameter im überschaubaren Bereich halten, ziehe ich diese Möglichkeit einer INI-Datei vor!

 

Könntest du das mit Sendmessage kurz umreißen? Wenn es dafür ein fertiges Plugin gibt, würde mir das aktuell genügen...

Link to comment

Kann man über Aufgaben eine neue Datei erstellen? EG bietet eine Orderüberwachung an und könnte auf das Anlegen einer Datei reagieren - das wäre eine sehr primitive, aber auch einfache Lösung...

Link to comment

Das ist keine saubere Lösung, aber würde auch gehen. Du kannst als Aufgabe eine batch hinterlegen, die eine Datei erstellt. Wie die batch aussehen muss läßt's sich sicher leicht ergoogeln. Oder du wartest etwas auf mein TCP Skript.

Edited by nuts
Link to comment

Also ich nehme aktuell die QAD Lösung, sie klappt recht gut: ich lasse einfach per "echo > datei" die Datei anlegen, bzw. aktualisieren, dass reicht auch. EG erkennt die angelegte/aktualisierte Datei sofort und löst ein Event aus, wie gewünscht.

 

Wenn du aber noch mit einem TCP-Skript kommst, wird dieses gerne genommen, um auch andere Events an EG zu senden, das wäre mit der Dateimethode doch etwas umständlich.

 

Jetzt habe ich aber noch ein Problem übersehen: wie stoppe ich den getimerten Standby des RS? Wie geschrieben, beim DVBViewer reichte es, ein OSD-OK in das Fenster zu senden, aber wie halte ich den RecordingService auf? *weia* wird wieder mal deutlich komplizierter, als gedacht.

 

Weißt du hier einen Rat, nuts? Oder soll ich ein neues Thema erstellen?

Link to comment

Mir ist der Ablauf nicht ganz klar. :wacko:

 

Aufnahme => Aufgabe & Standby Aktion vom RS ausgelöst => Event in EG => EG Makro

Und an welcher Stelle und in welchen Fällen soll der Standby aufgehalten werden?

Link to comment

Zum Ablauf: RS wird über das TV-Info-Plugin automatisiert mit Timern versorgt, die als Aktion "Standby" nach der Aufnahme enthalten, damit der HTPC nicht 24h laufen muss. Wenn ich nicht am HTPC bin, ist das in Ordnung, sehe ich über den DVBViewer fern, bekomme ich den OSD-Dialog, dass der RS in den Standby gehen möchte, man kann das ja dann mit dem OK-Button verhindern.

 

Problematisch wird es, wenn nicht der DVBViewer, sondern z. B. das XBMC oder der Firefox im Vordergrund laufen, weil der RS dann mitten in einem laufenden Film in den Standby wechseln würde, ohne einen Dialog, den ich mit der Fernbedienung beantworten könnte.

 

Genau dieses Szenario möchte ich über EventGhost abfangen, entweder automatisiert, oder mit einem eigenen OSD-Dialog, der sich problemlos fernbedienen lässt.

 

Wie geschrieben, bleibt die Frage: wie kann ich den Standby-Timer (aktuell 300 Sekunden) unterbrechen?

 

Zum Skript: vielen Dank schon mal, ich werde das heute Abend noch testen...

Link to comment

Hm der RS berücksichtigt nur einen ggf. laufenden DVBViewer.

Andere Anwendungen werden nicht berücksichtigt. Ich sehe ein das man das brauchen könnte.

Ich habe noch ein Skript, das ca. die Funktionalität dieses Skriptes auch als Aufgabe im RS bietet:

http://www.DVBViewer.tv/forum/topic/50485-sendcommand-v2/

Dort könnte man leicht eine Blackliste für Programme einfügen um die Befehlskette (z.B. Event an EG senden + Standby + wasauchimmer) abzubrechen sobald eines der Programme gefunden wird.

Kann ich bei Interesse mal raussuchen.

 

Es gibt hier ein Projekt: http://www.DVBViewer.tv/forum/topic/44025-suspendghost-steuerung-von-standby-ruhezustand-mit-eventghost/

Das sollte deine Wünsche auch erfüllen können. Bei der Einrichtung kann ich da aber nicht helfen.

Edited by nuts
Link to comment

Vielen Dank nuts, dein Skript arbeitet einwandfrei und wird schon eingesetzt, jetzt bleibt nur noch die letzte Frage, nach dem Leben, dem Universum und einfach Allem...

 

Ich habe noch ein Skript, das ca. die Funktionalität dieses Skriptes auch als Aufgabe im RS bietet:

http://www.DVBViewer...sendcommand-v2/

Dieses Skript verstehe ich nicht ganz? Kann das zum unterbrechen des Standbys verwendet werden?

Link to comment

Ich wüste nicht wie du das Standby auslösen verhindern kannst.

 

Sag dem RS doch das er nichts machen soll und kümmern dich in dem Script den du nach jeder Aufnahme ausführst selber um den Wechsel in den Standby. Oder nutze SuspendGhost, da ist das ganze schon integriert.

Link to comment

Wie von Tjod beschrieben war mein Vorschlag auch gemeint.

Also ein Skript als Aufgabe die ganze Arbeit nach der Aufnahme machen lassen (z.B. Überprüfen ob Programm aktiv sind + EG Event auslösen + Standby auslösen), wobei die Überprüfung der aktiven Programm bei meinem Skript noch hinzugefügt werden muss.

Edited by nuts
Link to comment

Ok, das hatte ich soweit schon verstanden, ich will mich ehrlich gesagt aber nicht manuell um die Standby-Logik kümmern, sondern nur in dem Fall, das der DVBViewer nicht läuft, verhindern. SuspendGhost mag das können, ist aber derart umfangreich und nach Augenschein aufwändig zu installieren, dass ich mich da nicht ran wage.

 

Ich habe es wieder hölzern gelöst: ich lasse das Fenster zur Warnung vor dem Suspend vom RecordingService anzeigen und fange dies dann mit dem TCP-Event ab; läuft ein Programm, bei dem ich den Standyby verhindern möchte, lasse ich das Fenster dann automatisiert schließen, es blitzt dann halt für einen Sekundenbruchteil auf, aber damit kann ich leben.

 

Nochmals vielen Dank an nuts, denn ohne sein TCP-Sender-Skript ginge das nicht, weil das Standby-Fenster selbst kein Event auslöst. Das coole ist, dass ich damit über das WebGUI weitere Aktionen über EG starten kann, dazu habe ich schon einige Ideen...

 

Natürlich habe ich wieder eine Frage, die allerdings nur den EG betrifft: kann man eine Tastatureingabe direkt an ein ausgewähltes Fenster schicken? Oder muss das Fenster unbedingt den Fokus haben?

Link to comment

Ich hab mein Skript für Prozesstaks etwas ausgearbeitet und hoffentlich für Benutzer ohne Skriptkenntnisse benutzbar gemacht.

http://www.DVBViewer.tv/forum/topic/51926-processtasksex/

 

Mit dabei ist auch eine Überprüfung ob bestimmte Prozesse oder bestimmte Fenster existieren.

Wenn ich es richtig durchdacht habe dürfte das jede Meldung vom RS loaklen DVBViewer oder XBMC überflüssig machen.

Link to comment

Um im anderen Thread nicht zu stören: ich check dort irgendwie gar nichts :shocked:

 

Wo und wie sollte ProcessTasksEX eingesetzt werden?

Könntest du mal ein konkretes Beispiel machen?

Hilft das bei meinem Standby-Problem?

Warum bohr ich mir kein Loch ins Knie und gieße Milch rein? (kennt das noch jemand?)

Link to comment

Wir können das ruhig im anderen Thread fortsetzen, dann hilft es vielleicht auch anderen etwas.

Kann mir schon denken das diese Art der Skripte etwas kompliziert zu verstehen sind.

 

Was genau ist unklar?

Gedacht ist es so:

1. Du legst einen neuen Prozesstaks an

z.B. %\ProcessTasksEX.exe -standby (Pfad natürlich anpassen)

standby ist der Kommandoparameter um die Sektion [standby] aufzurufen.

 

2. Anstatt direkt den Standby durch den Recordingservice nach einer Aufnahme auszuführen wird als default Aufgabe im RS der neu angelegte Prozesstak hinterlegt.

 

3. Nun wird nach jeder Aufnahme die Sektion "standby" abgearbeitet wie im anderen Thread beschrieben.

Für standby und hibernate sind schon 2 Beispiel Sektionen vorgegeben (in der ProcessTasksEX_actions.ini), die so ca. deinen Anforderungen entsprechen sollten.

Das sieht dann z.B. so aus:

1. Schicke das Event "Recordingservice" an Eventghost

2. Überprüfe ob der DVBViewer eine Aufnahme durchführt => falls ja exit Skript

3. Überprüfe ob der Recordingservice eine Aufnahme durchführt => falls ja exit Skript

4. Überprüfe ob ein Prozess ([ProcessList] in der ProcessTasksEX_config.ini) aktiv ist => falls ja exit Skript

5. Standby Aktion durchführen => dazu kommt es also erst wenn alle Überprüfungen fertig sind

Link to comment

Danke für die Erklärung, wenn ich mit meiner aktuellen Einstellung nicht weiterkomme, werde ich das testen.

 

Was ich aktuell mache, ist so ähnlich, wie du es beschreibst: der Standby wird nun nicht mehr vom RS oder DVBV nach einer Aufnahme ausgeführt, sondern ich lasse nur ein Event an EG schicken - soweit sind wir uns einig, Punkt 1 deiner Liste.

 

Im EG führe ich nun einen RecordingService.Standby aus, dieser ist clever genug, entweder gar nichts zu machen, wenn gerade eine Aufnahme läuft, oder in kürze ansteht, ansonsten kommt die Meldung, dass der RS gerne in den Standby wechseln möchte, was durch ein Drücken der OK-Taste zu verhindern ist. Soweit alles prima, müsste eigentlich gar nicht weiter perfektioniert werden.

 

Was ich gerade festgestellt habe: wenn ich wie früher gewohnt (ohne RS) den Standby im DVBViewer aktiviere, wird dieser durchgeführt, ungeachtet der Tatsache, das der RS gerade aufnimmt :( ohne RS kam früher die Warnmeldung, dass noch eine Aufnahme aktiv ist, diese Meldung bleibt nun aus...

 

Weil ich gerade mit EventGhost rumgespielt habe, weiß ich nicht, ob ich das verhalten verursacht habe (und vor allem: wie), oder ob dieses Verhalten normal ist, und man den manuellen Standby entsprechend abwürgen müsste, wenn eine Aufnahme aktiv ist. Dies wäre ja Punkt 2 und 3 deiner Liste, und wieder stellt sich eine neue Frage: wie kann ich diese beiden Punkte abfragen?

Link to comment

Ich vermute mal das ist so gewollt. Mit dem Standbyverhalten kenne ich mich auch nur mäßig aus, da mein Server 24/7 läuft.

Wenn der Standbybefehl trotz aktiver Aufnahme abgeschickt wird bewirkt der RS(ab vista) das der PC in den Away-Modus geht. Aufnahmen laufen ja trotzdem weiter oder?

 

Wie du das in EG abfragen kannst ist weiss ich nicht genau.

Ich verwende in meinen Skripten das das COM-Interface vom DVBViewer und die webapi vom RS um erstmal alles abzufragen.

Muss unbedingt der DVBViewer selbst den Standby auslösen? Kann das nicht EG mit einem von dir gewünschten Ablauf machen?

Die Shutdown Aktionen vom DVBViewer und EG mit Boardmitteln sind mir persönlich viel zu unflexibel.

http://www.DVBViewer.tv/forum/topic/48512-erweitertes-beenden-v2-extended-exit-v2/

 

Allerdings passiert bei mir aber auch etwas mehr vor jedem Standy (Überprüfungen=>DVBViewer close=>Licht an=>TV aus=>AVR aus=>Subwoofer aus=>EG close=>standby)

Edited by nuts
Link to comment

Aufnahmen laufen ja trotzdem weiter oder?

 

Nein, eben leider nicht, die Aufnahme wird unterbrochen, eine zweite Datei wird nach dem Wakeup angelegt und der DVBViewer ist zickig, ich vermute, dass die zweite DVB-S Karte dann ebenfalls verwendet wird.

 

Es gibt in EG eine Statusabfrage, wieviele Aufnahmen gerade laufen, aber ich weiß nicht, wie ich diese Daten in EG auswerten kann, da der einzige If-Befehl in einem Sprung verbaut ist und nur true und false auswerten kann. Ich vermute, hier muss ein Python-Skript geschrieben werden, aber dazu muss ich wohl ins EG-Forum... oder ich probiere doch mal den Mamut von SuspendGhost aus.

 

Muss unbedingt der DVBViewer selbst den Standby auslösen? Kann das nicht EG mit einem von dir gewünschten Ablauf machen?

 

Genau das will ich machen, aber ich habe den Test explizit im DVBV durchgeführt, weil ich wissen wollte, ob hier im Zusammenspiel mit RS nicht der Standby verhindert wird, wenn eine Aufnahme läuft. Ach man, so eine einfache Aufgabe ist doch so kompliziert...

Edited by ZappoB
Link to comment

Ich vermute auch das man für eine EG interne Lösung selbst skripten muss oder SuspendGhost verwende.

Den Ablauf in EG oder in einem meiner Skripte zusammenzustellen ist quasi auch ein bisschen wie skripten, nur braucht man dazu keine Programmierkenntnisse.

Wenn du selbst nicht skripten willst oder kannst solltest du dich mit SuspendGhost oder meiner Lösung vertraut machen. Das dir im EG-Forum jemand ein maßgeschneidertes Python-Skript liefert glaube ich eher weniger.

 

Mal als Tipp: Ich male mir für solche Sachen meist ein Flußdiagramm.

Damit wird leichter klar was in welcher Situation passieren soll.

Anschließend mache ich mir Gedanken wie ich das erreichen kann.

 

P.S. Zum Standby-Verhalten mit lokalem RS und DVBV kann ich leider nichts sagen.

Das Zusammenspiel sollte so eigentlich nicht sein, aber ka ...

Edited by nuts
Link to comment

Ich glaube, ich habe hier wirklich ein Problem mit RS und DVBV, weil ich nun immer wieder mal die Meldung bekomme, dass kein Gerät für den Empfang frei sei, obwohl keine Aufnahmen laufen und das Streaming per RS funktioniert. Wenn ich im DVBV dann den RS-Assistenten durchlaufen lasse funktioniert es wieder - bis zum nächsten Mal.

 

Bewusst reproduzieren kann ich das nun gerade nicht, ich werde mal ein Backup ohne RS wieder einspielen und dann den Service neu installieren, ohne weitere Änderungen. Mal sehen, ob der Standby dann besser gehandhabt wird.

Link to comment

Nach dem Einspielen eines alten Backups (vor der Installation des RS), und einer Neuinstallation von RS klappt es mit dem Standby besser: wenn ich den Standby über den DVBV starte, werden Bild und Ton am HTPC deaktivert, der PC bleibt aber an und der RS nimmt weiterhin auf. Das gefällt mir nun deutlich besser.

 

Nach der Aufnahme sende ich über das TCP-Skript eine Nachricht an EG und lasse den RS-Standby (mit dem OSD-Dialog) ausführen, wenn der DVBViewer läuft, sonst nicht. Das kommt meiner Vorstellung nun sehr entgegen. Ich muss nun noch ein bisschen testen, wie stabil das ganze läuft, aber ich bin vorsichtig zuversichtlich ;)

Link to comment
×
×
  • Create New...