dvbv Posted December 12, 2009 Share Posted December 12, 2009 Hallo, in einem anderen Thread wurde ich gefragt, ob ich mein Script, was den Rechner mithilfe des Recordingservice herunterfährt, mal hochladen kann; hier ist wohl der geeignete Platz dafür. Die wenigsten werden das direkt einsetzen können, aber vieleicht kann es dem einen oder anderen als Anregung dienen; ich hab es jedenfalls kommentiert und vereinfacht bzw. verallgemeinert und meinen spezifischen Kram rausgeworfen. Voraussetzungen für das Script "as is": - DVBViewer und Recording Service laufen auf dem selben Rechner - DVBViewer ist ständig aktiv, die Option "Nach Start letzten Kanal einstellen" ist deaktiviert. - MSXML muss installiert sein; ist wohl bei neueren Windows-Versionen standardmäßig der Fall. Im Script ist beschrieben, wie man es mit den Aufnahme-Aufgaben im Service verknüpfen kann. Es ist parametrisierbar, damit man es auch auf die Shutdown-Taste der Fernbedienung legen kann oder für einen "Idle"-Event (da braucht man dann aber ein Programm, was den Idle-Zustand erkennt und nach 90min Untätigkeit oder so das Script aufruft) Schöne Grüße Günther P.S.. Wollte es ursprünglich als Attachment anfügen, aber das ist bei vbs-Dateien wohl aus Sicherheitsgründen nicht erlaubt. ' Script IdleShutdown.vbs ' ToDo: Port (hier 8080) an den tatsächlich verwendeten anpassen const SERVICEURL = "http://localhost:8080" ' Script kann mit bis zu zwei Bool-Argumenten aufgerufen werde: IdleShutdown.vbs true true ' Ohne Argumente wird der Rechner nur heruntergefahren, wenn TV nicht aktiv ist; ' bei meiner Konfiguration wird beim Wakeup der DVBViewer gestartet, aber nicht automatisch der letzte Sender ' eingestellt. Wacht er also nur zu einer Aufnahme auf, ist TV nicht aktiv. Wird er gestertet, um TV zu ' sehen, wählt der Benutzer explizit einen Kanal oder startet eine Aufnahme, was das Script erkennen kann. ' IgnoreTV: Ist das erste Argument vorhanden und true, wird der Rechner auch bei aktivem TV heruntergefahren, ' aber nicht bei Dateiwiedergabe ' IgnorePlay: Ist das zweite Argument vorhanden und true, wird der Rechner immer heruntergefahren, ' außer wenn eine Aufnahme läuft ' Wird bei mir wie folgt verwendet ' IdleShutdown.vbs - ohne Argumente wird nach einer Aufnahme ausgeführt ' IdleShutdown.vbs true - mit IgnoreTV wird ausgeführt, wenn der Rechner seit 90min idle ist ' IdleShutdown.vbs true true - mit IgnoreTV und IgnorePlay liegt auf der Ausschalttaste der Fernbedienung ' ' Wichtig: das Script geht der Einfachheit halber davon aus, der der DVBViewer permament läuft ' Wenn das nicht der Fall ist, müssen die Aufrufe: set DVBViewer = GetObject(,"DVBViewerServer.DVBViewer") ' mit Errorhandling (on error resume next ... if err then...) umgeben werden und man muss entscheiden, ' wie das Verhalten denn sein soll, wenn der DVBViewer NICHT läuft - also Shutdown oder eben nicht. ' Außerdem darf wie erwähnt der DVBViewer nach dem Start nicht automatisch den letzten Kanal einstellen, ' da sonst der Test auf "aktives TV" fälschlicherweise immer zutrifft. ' ' Wenn das Script als Aufgabe nach Aufnahme vom Recording Service ausgeführt wird, muss man beachten, dass ' der Recording Service normalerweise nicht unter dem selben User Account wie der DVBViewer läuft; ' das Script könnte deshalb nicht auf den DVBViewer zugreifen, um den TV Status zu prüfen. ' Meine Lösung sieht so aus, dass ich dieses Script als Aufgabe im Windows Aufgabenplaner definiert habe, ' und dabei als User Account den Account angegeben habe, unter dem der DVBViewer läuft. ' Die Aufgabe wiederum wird vom Recording Service nach einer Aufnahme mit "schtasks /Run /I /TN MeineAufgabe" ' gestartet und kann dann auf den DVBViewer zugreifen. dim IgnoreTV, IgnorePlay dim DVBViewer dim HttpReq, XmlDom if wscript.arguments.count > 0 then IgnoreTV = cbool(wscript.arguments.item(0)) else IgnoreTV = false end if if wscript.arguments.count > 1 then IgnorePlay = cbool(wscript.arguments.item(1)) else IgnorePlay = false end if set HttpReq = CreateObject("msxml2.xmlhttp.3.0") on error resume next HttpReq.open "GET", SERVICEURL + "/API/timerlist.html", False HttpReq.send if Err then on error goto 0 ' Recording Service reagiert nicht ' Rechner neu starten, aber nur wenn das Ausschalten explizit angefordert wurde ' If löschen, um Rechner immer neu zu starten, wenn der RecService nicht reagiert. if IgnorePlay then ReStart end if WScript.Quit end if on error goto 0 ' Erstbesten Timer suchen, der gerade aufnimmt ' Ist nicht wirklich notwendig, da die verwendete Shutdown-Methode bei einer Aufnahme eh nicht herunterfährt set XmlDom = HttpReq.responseXML set node = XmlDom.selectSingleNode("//Timer[Recording = -1]/Descr") if not node is nothing then ' Es gibt einen aktiven Timer, nicht herunterfahren if IgnorePlay then 'Die Ausschalttaste wurde gedrückt, daher beim DVBViewer TV deaktivieren, damit er nach der Aufnahme 'herunterfährt, wenn IdleShutdown.vbs ohne Argumente aufgerufen wird set DVBViewer = GetObject(,"DVBViewerServer.DVBViewer") DVBViewer.SendCommand(16383) 'StopGraph end if WScript.Quit end if if not IgnorePlay then 'Shutdown bei TV, aber nicht bei Play set DVBViewer = GetObject(,"DVBViewerServer.DVBViewer") select case DVBViewer.datamanager.parse("#currentplaystate") case "pause" 'Pause-Taste gedrückt WScript.Quit case "play" 'TV- oder Medienwiedergabe if not IgnoreTV then WScript.Quit end if if DVBViewer.isDVD or DVBViewer.isMediaplayback then 'Medienwiedergabe WScript.Quit end if end select end if Shutdown WScript.Quit Sub Shutdown() 'Fordert beim Recordingservice den Ruhezustand an 'Statt Hibernate ist auch StandBy möglich Dim HttpReq set HttpReq = CreateObject("msxml2.xmlhttp.3.0") HttpReq.open "GET", SERVICEURL & "/tasks.html?task=Hibernate&aktion=tasks", False HttpReq.send end sub Sub Restart() ' Rechner neu starten dim wshell set wshell = CreateObject("WScript.Shell") wshell.run "shutdown.exe /r" end sub Quote Link to comment
nuts Posted December 13, 2009 Share Posted December 13, 2009 Du kannst die Datei auch einfach als .zip oder ähnliches anhängen Quote Link to comment
dvbv Posted December 14, 2009 Author Share Posted December 14, 2009 Stimmt. IdleShutdown.txt 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.