Jump to content

Steuerung einer LED über COM für Recording Status


gromit

Recommended Posts

Hallo zusammen, ich würde gerne wie unter Windows 7 im Mediacenter eine LED, die über den COM Port angeschlossen ist steuern, sodass diese rot blinkt immer wenn eine Aufnahme gemacht wird. Bisher habe ich dazu das Tool LEDSdriver genutzt, das direkt auf den MCE status zugegriffen hat und sehr zuverlässig war. Es kann auch über eine Commandline getriggert werden.

https://hveijk.home.xs4all.nl/slicksolutions/ledsdriver.shtml

 

Nun könnte ich zwar über die recording Einstellungen des DVBViewer nach der Aufnahme die LED per Commandline wieder ausschalten, aber ich habe leider keine Option gefunden die beim Start einer Aufnahme ausgelöst werden könnte. Ist wahrscheinlich auch eher ungewöhnlich.

 

Alternativ könnte ich wohl die recording API nutzen, das wäre aber aufwändiger und ich müsste ständig auf den Server pollen um eine Statusänderung mitzubekommen. Das würde ich gerne vermeiden.

 

Vielleicht hat noch jemand eine bessere Idee?

 

Danke für die ansonsten wirklich umfangreichen Einstellmöglichkeiten und die hohe Stabilität von DVBViewer. Nach dem Umstieg von Windows 7 auf Windows 10 und dem Verlust von Microsoft Media Center hatte ich zunächst mediaportal2 ausprobiert, aber der Serverdienst scheint von der Stabilität nicht mit DVBViewer mithalten zu können. Mit etwas Geduld kommt man mit DVBViewer, einem guten OSD skin und der angelernten MCE Fernbedienung schon recht weit. nicht ganz so hübsch wie früher aber doch auch recht stabil.

Link to comment

Ich schätze mal das Tray Programm vom Mediaserver macht auch nichts anderes als zu pollen - denn es wechselt ja das Icon.

Also müsstest Du nur bitten dieses Programm Opensource zu machen.

Link to comment
4 hours ago, gromit said:

Mit "Tray Programm vom Mediaserver " meinst du das vom DVBViewer?! Ich kann ja mal nachfragen.

  Reveal hidden contents

 

 

Das Ding hat den Namen  "DVBViewer Mediaserver Tray Applikation" und sitzt halt im Tray von Windows 10.

Link to comment
On 1/22/2020 at 10:53 AM, DetlefM said:

Ich schätze mal das Tray Programm vom Mediaserver macht auch nichts anderes als zu pollen - denn es wechselt ja das Icon.

 

Richtig, aber das Tray Tool verwendet nicht das Media Server API, sondern prozessübergreifend einen gemeinsamen Speicherbereich (genauer gesagt ein "memory mapped file") für die Kommunikation sowie ein Synchronisationsobjekt namens Mutex für die Koordination der Zugriffe. Das beinhaltet eine ziemlich spezielle Nutzung des Windows API und ist eigentlich nicht für die Öffentlichkeit bestimmt.

 

Link to comment
1 hour ago, Griga said:

 

Richtig, aber das Tray Tool verwendet nicht das Media Server API, sondern prozessübergreifend einen gemeinsamen Speicherbereich (genauer gesagt ein "memory mapped file") für die Kommunikation sowie ein Synchronisationsobjekt namens Mutex für die Koordination der Zugriffe. Das beinhaltet eine ziemlich spezielle Nutzung des Windows API und ist eigentlich nicht für die Öffentlichkeit bestimmt.

 

Dann stellt sich die Frage wo denn ein Web API Client die Information herbekommen sollte. Status2 gibt zwar mit nextrecording einen Timer bis zum nächsten Recording. Aber nach dem Start kann man nicht mehr unterscheiden ob ein Recording läuft weil einfach nur die Zeit bis zu nächsten Aufnahme zurück gegeben wird.

Link to comment

timercount = number of active timers (all kinds)

reccount = number of ongoing recordings

 

Damit zum Beispiel?  Siehe dazu: http://en.dvbviewer.tv/wiki/Recording_Service_web_API

Link to comment

Eine andere Möglichkeit:

 

http://www.dvbviewer.com/griga/changelog_dms_api.html#__RefHeading__60954_150729339

 

Quote

Added: API: /api/timerlist.html supports new filter parameters that allow to list recording timers selectively. Here is a complete list of all parameters:

(...)

  • reconly=1 limits the output to timers that are currently associated with ongoing recordings.

 

...und dann schaut man halt, ob die ausgelieferte XML Einträge hat.

 

Link to comment

Sehr cool vielen Dank. Das ist ja super nett. Ich werde es gleich mal ausprobieren. Wenn ich das richtig verstehe, würde ich das VBScript einfach in mein Windows Autostart einbinden. Und dann die commands für mein LED driver anpassen.

Link to comment

Das VB Script ist nur ein Beispiel für den Aufruf eines "fensterlosen", verborgenen Console Programmes.

Die Nutzung ist wie folgt:

Du musst das Programm mit Visual Studio 2019 kompilieren (ich könnte zwar ein Executable bereitstellen aber der Aufwand das zu signieren wäre zu groß für ein paar Benutzer,)-

Falls Du damit Probleme hast dann muss ich es kompilieren und Dir irgendwie als Link zur Verfügung stellen - also in diesem Falle antworte auf diesen Beitrag.

Jedenfalls hast Du nach dem Kompilieren einen Ordner in dem verschiedene Dateien enthalten sind. wie z.B. MediaServerTray.exe, MediaServerTray.exe.config, MedisServerTray.exe.Manifest.

Du würdest das Programm MediaServerTray.exe als Startup auf Deinem PC einbinden und einmalig auf die dann in Deinem Tray befindliche Applikation zugreifen und sie konfigurieren.

Oder halt per Notepad die Datei MediaServerTray.exe.config. 

Jedenfalls musst Du dann evtl. den Server auf dem der Mediaserver läuft ändern (vor eingestellt ist localhost also der Rechner auf dem auch das Tray Programm läuft) und falls bei Dir im Mediaserver festgelegt halt das Zugangspasswort (default ist leer).

Dann kannst Du ein vbs Script oder cmd Dateien angeben die ausgeführt werden wenn

a) eine Aufnahme begonnen wir,

b) eine Aufnahme endet (und keine andere gerade läuft) und

c) wenn ein Fehler aufgetreten ist weil z.B. der Zielcomputer mit dem Mediaserver warum auch immer nicht erreichbar ist (meist wäre das dann falsches Passwort oder falscher Rechnername)-

Wenn man eine cmd Datei angibt dann poppt ein Fenster hoch, die Batchdatei wird ausgeführt und dann schließt sich das Fenster. Wenn man das nicht möchte dann ist als Muster die VBScript Datei da um zu zeigen wie man das umgeht.

In deinem Fall würde Du innerhalb der cmd Datei die Befehle für das einschalten und ausschalten der LEDs eintragen - aber natürlich kann man da auch noch mehr machen wie z.B. eine Email generieren oder was auch immer.

Zur Fehlersuche und natürlich auch zum Nachvollziehen der Ereignisse kann man in den Optionen auch eine Logdatei angeben. Dort wird dann durch das Trayprogramm die Ereignisse wie Start, Stop, Fehler mit Uhrzeit hinterlegt. So könnte man. wenn man möchte, dieses Programm auch auf einem anderen Rechner nutzen und so später nachvollziehen wann der Mediaserver Aufnahmen gestartet oder gestoppt hat. Das macht der Mediaserver auch selber aber wenn z.B. der Strom des PCs auf dem der Mediaservers ausfällt dann kann der auch keine Logdatei schreiben aber auf einem anderen Gerät lässt sich der Verlust der Verbindung nachvollziehen.

Ok - das war jetzt schnell geschrieben und ich hoffe es kommt verständlich rüber.

Link to comment

Ja vielen Dank. beim zweiten Durchsehen der MediaServerTray.sln ist mir dann auch aufgefallen, dass es wohl source code für Visual Studio ist wo dann ein EXE rausfliegt.  die Logik ansonsten ist eigentlich selbsterklärend. Ich werde mir mal Visual Studio Code runterladen und ein compile damit versuchen. Melde mich dann wieder wenn es läuft. Vielen Dank noch mal.

Link to comment

Hallo, nun ein kleiner Zwischenbericht. Mit der Community Edition von Visual Studio konnte ich ein lauffähiges EXE aus dem GitHub source code kompilieren. Man musste dazu noch einen Schreibschutz aufheben, der auf Grund des Downloads aus einer Internetquelle auf den Ressource-Dateien lag.

Ich habe die command Dateien entsprechend für meine LED Anwendung angepasst und die EXE auf dem Server in den Autostart gelegt. Nach Anpassung der Nutzerrechte funktioniert das jetzt auch nach einem Reboot. Ich hatte auch versucht die Anwendung mit dem SC Befehl als Windows Dienst anzulegen. Das Erstellen des Dienstes hat zwar geklappt, er ließ sich aber dann nicht starten.

 

Daher bleibe ich nun beim Autostart mit einer minimierten Verknüpfung.  Ich kann nun aus den Optionen deiner Mediaservertray- Anwendung auch testweise die LEDs manuell an und ausschalten bzw. in den blink-Zustand bringen. In den Optionen habe ich Localhost oder die IP Adresse samt Passwort und Port zur Serveranwendung welche auf demselben Rechner läuft ausprobiert. Ich habe auch extra noch manuell eine Firewall Regel in Windows 10 für die Mediaservertray-Applikation angelegt.

 

Soweit alles wunderbar, nur das Problem:

Die Trayanwendung bekommt leider nichts davon mit, wenn ich im DVBViewer GUI eine neue Aufzeichnung starte. Im Log sehe ich keinerlei Aktivität. Er scheint also die Änderung des recording Zustands nicht mitzubekommen.

Kann es sein, dass das noch irgendwas mit dem Benutzerkontext zu tun hat, in dem der Server und die Tray-Applikation läuft?  Für Tipps bin ich dankbar. Geht ja schon fast alles. Ist sicher nur eine Kleinigkeit. Danke!

Link to comment

Ich konnte nur die API des Mediaservers nutzen. Was der DVBViewer alles tut entzieht sich der Kenntnis der Außenwelt.

Ich habe im Hinterkopf, dass es eine Plugin Architektur für den Viewer gibt - allerdings kenne ich die API nicht. Bzw. habe sie auf die Schnelle nicht gefunden.

Sofern die PlugIn API das hergeben würde könnte man das sicherlich, aber ich denke mit höherem Aufwand. irgendwie als weiteren Service nutzen um

Informationen über den Status des Viewers anzuzeigen.

Wenn. wie Yard2 geschrieben hat, der Viewer daran gehindert wird alleine die Aufnahmefunktion zu machen sondern diese  Aufgabe dem Mediaserver überlässt würde beim nächsten pollen die Tray Applikation das mit bekommen (hoffe ich, nicht ausprobiert).

Link to comment
5 hours ago, DetlefM said:

Was der DVBViewer alles tut entzieht sich der Kenntnis der Außenwelt.

 

Der DVBViewer hat ein umfangreiches COM Interface. Darüber lässt sich der Aufnahmestatus vermutlich ermitteln, aber dabei müsste jemand helfen, der sich mit der Materie besser auskennt als ich. Es gibt im Forum auch einiges dazu zu lesen.

 

Auch ein Blick in die startrec.vbs und stoprec.vbs in C:\Program Files (x86)\DVBViewer\Scripts könnte weiterhelfen, oder eine Forumsuche nach den Dateinamen. Die Scripte ruft der DVBViewer bei jedem Aufnahmestart und -stopp auf. Dazu Optionen -> Skripte beachten.

 

Link to comment

Den Status von Mediaserver abzufragen passt für mich, da ich sowieso die DVBViewer Client Applikation normalerweise nicht gestartet habe. Ich starte den DVBViewer mit der grünen Mediacentertaste nur wenn wirklich jemand TV schauen will. Ansonsten läuft der PC als Fileserver und soll im Hintergrund seine TV-Aufzeichnungen machen. Das klappt auch alles wunderbar einschließlich Schlafzustand und automatischem aufwecken nach EPG.

 

Allerdings Erkennt die Tray Applikation leider dennoch den Zustand des DVBViewer Media Server nicht. Ich habe es mit und ohne Passwort ausprobiert und auch die Firewall ausgeschalten. Ich habe es bis jetzt allerdings nur mit einer manuell gestarteten Aufnahme probiert und nicht abgewartet was bei einer Timer gesteuerten Aufnahme passiert.

 

Die VBS- Dateien im Script Verzeichnis wären vielleicht auch eine Option. Aber wenn ich es richtig verstanden habe, würden die eben dann von der DVBViewer Client Applikation getriggert und nicht von dem DVBViewer Media Server?

Link to comment

@gromit Ich denke wir sollten evtl. Bugreports über das github Portal klären - das hat mit dieser Community hier weniger zu tun. Und wahrscheinlich müssen wir Dinge austauschen.

Also melde Dich bei github an falls nicht geschehen und poste einfach Deine Problem unter Issues. 

Ich hoffe ich bekomme eine Mitteilung von github - weil ich das aber das erste Mal mache sende mir bitte hier eine Antwort dann kann ich prüfen ob ich bei github alles richtig eingestellt habe.

Grundsätzlich sollte die Tray App alle Recordingänderungszustände mitbekommen. Sie pollt alle 2 Minuten den Server und fragt nach dem Status. Und in dem Contextmenür der App kann man auch das Log öffnen. Wenn also ein Problem mit falschem Servernamen, Benutzernamen, Passwort oder ähnliches vorliegen sollte würde dort ein Fehlerevent mit einer Fehlermeldung erscheinen.

Link to comment
vor 10 Stunden schrieb DetlefM:

@gromit Ich denke wir sollten evtl. Bugreports über das github Portal klären - das hat mit dieser Community hier weniger zu tun. Und wahrscheinlich müssen wir Dinge austauschen.

Also melde Dich bei github an falls nicht geschehen und poste einfach Deine Problem unter Issues. 

Ich hoffe ich bekomme eine Mitteilung von github - weil ich das aber das erste Mal mache sende mir bitte hier eine Antwort dann kann ich prüfen ob ich bei github alles richtig eingestellt habe.

Grundsätzlich sollte die Tray App alle Recordingänderungszustände mitbekommen. Sie pollt alle 2 Minuten den Server und fragt nach dem Status. Und in dem Contextmenür der App kann man auch das Log öffnen. Wenn also ein Problem mit falschem Servernamen, Benutzernamen, Passwort oder ähnliches vorliegen sollte würde dort ein Fehlerevent mit einer Fehlermeldung erscheinen.

 Alles klar, vielen Dank. Ist aber wohl gar nicht mehr nötig, weil es jetzt zu funktionieren scheint. Möglicherweise war ich einfach nur zu ungeduldig. Ich habe jetzt gesehen das EPG Aufnahmen zum gewünschten Blinken der LED über deine Applikation führen. Es klappt also doch. dass die manuelle Aufnahme von deiner Applikation nicht bemerkt wurde liegt dann sicherlich an den 2 Minuten , die ich wahrscheinlich nicht gewartet habe. Also, vielen Dank schon mal für eure Mühe. Ich lasse das jetzt erstmal so laufen. Endlich kann ich wieder sehen, ob Aufzeichnungen gemacht werden ohne den Bildschirm anzuschalten. Vielen Dank dafür.

Link to comment

Gut - nur um das klarzustellen (mit der Polling-Time):

Wenn innerhalb der nächsten 2 Minuten kein Timer geplant ist dann fragt sie in 2 Minuten nach.

Ist durch den Mediaserver ein Timer innerhalb der nächsten 2 Minuten geplant dann fragt die App zum Zeitpunkt des Startens des Timers plus ein paar Sekunden nach.

Wenn Du den Button mit dem Aufnahmestart drückst (egal ob nun bei dem Viewer oder dem Mediaserver) dann dauert es halt so 2 Minuten plus Antwortzeit bis der neue Status: "Aufnahme begonnen" bei der App ankommt und die Batchdatei getriggert wird. Gleiches gilt dann auch für den Abbruch der Aufnahme - der kommt dann auch zeitverzögert.

Und ich denke 2 Minuten ist ok - aber jeder kann diese Zeit vor dem Kompilieren anpassen - ich habe sie nicht konfigurierbar gemacht.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...