Jump to content

Webrequest vor geplanter Aufnahme ausführen


SuperFury

Recommended Posts

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

Link to comment

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.

  • Like 1
Link to comment

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 !

Link to comment
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"

    }
}

 

Link to comment

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 ;)

 

 

Link to comment

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 :(

Link to comment

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.

Link to comment

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 :(

Link to comment

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 :(

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...