SuperFury Posted May 12, 2021 Share Posted May 12, 2021 Guten Morgen zusammen, ich habe gestern Abend noch grübelnd im Bett gelegen, weil ich nicht weiß, wie ich mit der folgenden Herausforderung umgehen soll: Ich würde gerne einen simplen curl oder äquivalenten webrequest (gerne auch ein batch oder ein Powershell-Skript) beim Aufnahmestart oder besser kurz davor durchführen. Dies soll z.B. dafür dienen, einen Marker im Grafana oder aber um externe Cardserver-Connections zu resetten - leider habe ich bisher keine Möglichkeit gefunden, mich da irgendwo heranzuhängen. gibt es da Best Practices ? Es wäre sicherlich über Verzeichnisüberwachung oder Log-Überwachung gehen, aber das ist mir zuviel Arbeit für den Server, wenn er die ganze Zeit "scannen" muss - hat jemand einen hilfreichen Tipp für mich ? Viele Grüße, Dennis Quote Link to comment
DetlefM Posted May 12, 2021 Share Posted May 12, 2021 Für ein verwandtes Thema habe ich ein kleines Programm geschrieben: Hier der Link zu dem ursprünglichem Beitrag und der Link zu Github. https://www.DVBViewer.tv/forum/topic/63456-steuerung-einer-led-über-com-für-recording-status detlefm/MediaServerTray: Small application to monitor the recording status of the media server (github.com) Im Kern ging es bei der ursprünglichen Aufgabe um die Anzeige eines Icons im Windows Tray je nachdem ob gerade eine Aufnahme läuft oder halt nicht. Bei Dir wäre es halt umgekehrt. Du holst Dir per Webrequest regelmäßig (vielleicht alle 10 Minuten) den Zeitpunkt der nächsten Aufnahme und sendest dann zu gegebener Zeit per curl / powershell den entsprechenden Resetbefehl an wen auch immer. 1 Quote Link to comment
SuperFury Posted May 12, 2021 Author Share Posted May 12, 2021 Hey DetlefM, vielen Dank, das ist genau das, was ich brauche - jetzt muss ich mir nur die exe kompilieren, hoffe, das bekomme ich hin Ich probiere es mal aus ! Quote Link to comment
DetlefM Posted May 12, 2021 Share Posted May 12, 2021 36 minutes ago, SuperFury said: Hey DetlefM, vielen Dank, das ist genau das, was ich brauche - jetzt muss ich mir nur die exe kompilieren, hoffe, das bekomme ich hin Ich probiere es mal aus ! In Powershell sieht das etwa so aus: param ($Uri="http://localhost:8089/api/status2.html") # Documentation of DVBViewer Api https://en.DVBViewer.tv/wiki/Recording_Service_web_API try { $result = Invoke-Webrequest -Uri $Uri if ($result.StatusCode -eq 200){ [xml]$ovf =$result.Content $nextTimer = $ovf.Status.Nextrec } else { $nextTimer = -2 } } catch { $nextTimer = -3 $Weberror = $_ } switch ($nextTimer) { -2 { "Wrong status code $($result.StatusCode)" break } -3 { "Exception $Weberror" } Default { "$nextTimer Seconds to next timer" } } Quote Link to comment
SuperFury Posted May 12, 2021 Author Share Posted May 12, 2021 Jop, das Powershell liefert mir die Sekunden bis zur nächsten Aufnahme - ich habe Dein Programm kompiliert, konfiguriert und nen Testtimer auf 13:25 gestellt - mal sehen ob der Fisch anbeißt Quote Link to comment
SuperFury Posted May 12, 2021 Author Share Posted May 12, 2021 Leider führt das Programm nichts aus - auch das TrayIcon verändert bei Aufnahmestart (oder in der Pollingtime zwischen 13:23 und 13:27) nicht die Farbe - irgendetwas bekommt der da leider nicht mit - im Log schreibt er allerdings nur eine einzige Zeile - Waiting for localhost in etwa - ich kann leider nicht ableiteen, ob das alle 2 Minuten geschrieben werden müsste, oder woran es liegt, dass der Status sich nicht verändert Quote Link to comment
DetlefM Posted May 12, 2021 Share Posted May 12, 2021 Das Program schaut alle 1 bis 2 Minuten nach dem Status siehe: public int NextPollOnError { get; set; } = 120; public int NextPollOnRecording { get; set; } = 60; public int NextPollOnWaiting { get; set; } = 60; Je nachdem was der letzte Status war. Bei Aufnahme und Warten alle 60 Sekunden und wenn ein Fehler aufgetreten ist alle 120 Sekunden. Aber egal. Für Deine Zwecke dürfte das Powershell script vollkommen ausreichen. Wenn Du das in einer Schleife laufen lässt kannst Du Dir auch die anderen Werte (siehe Api) auslesen und dann entscheiden was passieren soll. Ist kein Timer Aktiv und der nächste ist mehr als 15 Minuten in der Zukunft dann nichts tun und in 5 Minuten wieder schauen. Wenn kein Timer Aktiv und der nächste Timer weniger als 15 Minuten in der Zukunft dann machst Du was Du tun willst - also reset oder was auch immer. Und wenn ein Timer Aktiv ist dann natürlich nichts machen sondern vielleicht wieder in 20 Minuten wieder mal einen Status holen. Quote Link to comment
SuperFury Posted May 12, 2021 Author Share Posted May 12, 2021 Danke für den Hinweis mit dem Powershell - eventuell würde das reichen, ich finde Deinen Ansatz aber deutlich charmanter und auch komfortabler - leider reichen meine C#-Kenntnisse nicht aus, um da irgendwie mehr Futter in das Logfile zu pumpen, was mir genauer sagt, - warum das Tool die Statusänderung nicht mitbekommt - was an meiner Konfiguration nicht stimmt - ob sonst ein Problem da ist Habe den Quelltext zwar durchgearbeitet, rudimentär verstanden, was da so passiert, kann auch nicht erkennen, dass da irgendetwas drinne ist, was das blockieren könnte... Schade Quote Link to comment
SuperFury Posted May 12, 2021 Author Share Posted May 12, 2021 Okay, habe einfach mal ein wenig getestet - das Tool fragt den ersten Status bei Applikationsstart korrekt ab - zumindest die beiden Status "Waiting" und "Recording" konnte ich nachstellen - allerdings bewirkt eine Statusänderung bisher nichts - wenn die Aufnahme abgeschlossen ist, dann wechselt der Applikationsstatus nicht in den Modus "Waiting" - auch das Icon aktualisiert sich nicht - da stehe ich irgendwie auf dem Schlauch Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.