Jump to content

Herunterfahren nach Aufnahme / bei Idle


dvbv

Recommended Posts

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

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