Jump to content

ProcessTasksEX


nuts

Recommended Posts

Hallo,



anbei ein Autoit-Skript (inkl. Source), das zahlreiche Funktionen mitbringt, die man als Prozesstask vom Recordingservice aus brauchen könnte.

Hilft z.B. bei der hier geschilderten Problematik indem man als Aufgabe nach einer Aufnahme einfach dieses Skript hinterlegt und sich den Ablauf selbst zusammenstellt:

http://www.DVBViewer.tv/forum/topic/51907-per-aufgabe-eine-nachricht-ein-event-an-eventghost-schicken/
/>


Die Befehlsabfolgen werden genauso wie beim sendcommand_v2 Skript angelegt:
http://www.DVBViewer.tv/forum/topic/50485-sendcommand-v2/
/>
Eine genauere Beschreibung gibt es hier:
http://www.DVBViewer.tv/forum/topic/48512-erweitertes-beenden-v2-extended-exit-v2/
/>
Der Aufbau ist immer gleich. In den INI's werden die gewünschten Sektionen angelegt und in die Sektionen trägt man dann Key/Value Paare ein um Funktionen auszuführen.



Diese Funktionen sind möglich:

    ; checkrecording (1= check  current recordings/timeshift | 0= do not check current recordings/timeshift)


    ; checktimeshift (1= check  current recordings | 0= do not check current timeshift)


    ; checkrecordingRS (1= check  current recordings Recordingservice | 0= do not check current recordings Recordingservice) => default = 0


    ; checkprocesslist (1= check processlist and cancel section if an activ process is found| 0= disbale)


    ; checkwindowlist (1= check windowlist and cancel section if a window is found| 0= disbale)


    ; sleep  (in seconds)


    ; run (runs an external program)


    ; runwait (runs an external program and wait until its finished)


    ; shellexecute


    ; shellexecutewait


    ; runbybatch (creates a batchfile that runs an external program and delets the batchfile afterwards)


    ; sendcommand (DVBViewer Action-ID)


    ; processtask (run process task on Recordingservice)


    ; shader (activate Pixelshader / none => deactivate sahders)


    ; audio (switch to Audio A/B )


    ; video (switch to Video A/B )


    ; showwindow (WindowID)


    ; shutdown (0 = Logoff | 1 = Shutdown | 2 = Reboot | 4 = Force | 8 = Power down | 16= Force if hung | 32= Standby | 64= Hibernate)


    ; devcon (hardware ID to restart by devcon => disable + enable)


    ; cec (Stdin data to write in cec-client.exe)


    ; denon (denon telnet control)


    ; egtcpsend= (send TCP Data to Eventghost)


    ; processclose (process name to close)


    ; processcloseloop (process name to close => close process until it doesnt exist)


    ; winclose ( window title to close )


    ; execute (autoit function)


    ; setdisplay (refresh rate i.e. 24,50 or 60)


    ; refreshhdmi (refresh hdmi connection -> paramater = timeout in seconds betwenn monitor on/off)


    ; devcon2 (hardware ID to restart by devcon => restart)



Im Verzeichnis %AppDataCommonDir\my_scripts\ findet ihr, nachdem das Skript einmal ausgeführt, wurde 2 INI Dateien.



1. ProcessTasksEX_config.ini

[settings]


Header=ProcessTasksEX => nur Info


Devcon= => Pfad zur devcon.exe wenn ihr den Befehl "devcon" oder "devcon2" verwenden wollt


cec-client= => Pfad zur cec-client.exe wenn ihr den Befehl "cec" verwenden wollt


ExtendedLog=0 => wenn man diesen Eintrag auf 1 setzt wird umfangreich mitgeloggt was das Skript so tut. Hilfreich bei der Einrichtung.




[info] => wird automatisch mit EG Pfad, DVBV Pfad und dem Skriptpfad befüllt - nur Info ohne Bedeutung




[RecordingService] => Daten zum Recordingservice, dürfte selbsterklärend sein


IP=127.0.0.1


Port=80


User=Admin


Password=




[Denon] => IP und Port für Denon/Marantz Telnetsteuerung


IP=192.168.1.115


Port=23




[EventghostTCP] => IP, Port und Passwort um Events übers es Eventghost Netzwerkempfängerplugin zu schicken


IP=127.0.0.1


Port=1024


Password=""




[ProcessList] => hier können Prozessnamen eingetragen werden um die Abarbeitung der Befehle über die Funktion "checkprocesslist" abzubrechen


DVBViewer=DVBViewer.exe


Firefox=firefox.exe


XBMC=xbmc.exe




[WindowList] => hier können Fensternamen eingetragen werden um die Abarbeitung der Befehle über die Funktion "checkwindowlist" abzubrechen



2. ProcessTasksEX_actions.ini

Hier werden die Sektions definiert. Aufgerufen wird eine Sektion über den ersten Kommandoparamter.

Im vordefinierten Beispiel: %\ProcessTasksEX.exe -standby oder %\ProcessTasksEX.exe -hibernate

[standby]


egtcpsend=Recordingservice


checkprocesslist=1


checkwindowlist=0


checkrecording=1


checkrecordingRS=1


shutdown=32




[hibernate]


egtcpsend=Recordingservice


checkprocesslist=1


checkwindowlist=0


checkrecording=1


checkrecordingRS=1


processtask=Hibernate

Am Beispiel Sektion "standby" mal durchgegangen was dort passiert:



egtcpsend=Recordingservice => sendet eine TCP Nachricht ans Eventghost Netzwerkempänger Skript

checkprocesslist=1 => überprüft alle Prozesse in der List (s. ProcessTasksEX_config.ini) und bricht die Sektion ab sobald ein Prozess gefunden wird

checkwindowlist=0 => =0 bedeutet, dass diese Überprüfung übersprungen wird

checkrecording=1 => überprüft ob der DVBViewer gerade Aufnahmen (oder Timeshift) macht und bricht die Sektion bei laufenden Aufnahmen (oder Timeshift) ab

checkrecordingRS=1 => überprüft ob der RS gerade Aufnahmen macht und bricht die Sektion bei laufenden Aufnahmen ab

shutdown=32 => hat keine der Überprüfungen eine Abbruch zur Folge wird zum Schluss der Standby Befehl ausgeführt. Für Mehrbenutzersysteme würde ich empfehlen hier die Aufgaben vom RS selbst zu nehmen (s. Sektion hibernate) damit dessen schon eingebaute Standby/Hibernate Logik greift.



So ich hoffe es ist halbwegs verständlich und für den ein oder anderen hilfreich.



Gruß nuts



P.S. Konnte nur kurz testen und aus Zeitgründen auch nicht im Systemkonto. Sollte etwas nicht funktionieren bitte melden.

Edited by Tjod
Link to comment
  • 1 month later...

Irgendwie habe ich mir jetzt den Thread zerstört :(

Die Verion im ersten Post habe ich wegen eines bösen Bugs entfernt.
Im Anhang eine neue Version.

Edited by nuts
Link to comment

Test mit neuer Version,

 

Log:

2013-04-04 23:27:31 : Func _run_section: sleep=30
2013-04-04 23:27:01 : Func _run_section: s_inisection = standby
2013-04-04 23:27:01 : Error: _DVBV-Connect
2013-04-04 23:27:01 : We intercepted a COM Error !
Number is: 800401E3
Windescription is: Vorgang nicht verfügbar.

2013-04-04 23:27:01 : Startup Version: 0.3

 

 

ProcessTasksEX_actions.ini:
[standby]
sleep=30
shellexecutewait=C:\Program Files (x86)\DVBViewer\Scripts\instantrecord.vbs
checkprocesslist=0
checkwindowlist=0
checkrecordingRS=1
processtask=Standby

Link to comment

Hallo nuts,

bei mir sendet dein Script keine ActionID zum DVBViewer. Das Log sagt es wurde ausgeführt, wird es aber nicht, sehe ich auch im Spy.

Im Extended_Exit geht es.

 

Außerdem im Log bei setzen von resume=1:

 

2013-04-10 21:31:47 : Func _run_section: resume=1
2013-04-10 21:31:47 : Func _run_section - invalid keyword: resume

Edited by Tüftler
Link to comment

"resume" gibt es für das Skript nicht.

 

"resume" wird durch die Nachricht $PBT_APMRESUMESUSPEND ausgelöst.

Diese Nachricht wird gar nicht abgefeuert wenn der PC automatisch (z.B. für eine Aufnahme durch den RS) aufgeweckt wird.

 

Solange man den PC immer über Extended_Exit schlafen schickt und den PC selbst aufweckt kann man ja immer über dieses Skript reagieren.

Oder was hast du genau vor?

 

Zur ActionID: Wie sieht das log dazu aus?

Funktioniert es nur nicht im Systemkonto oder auch nicht im normalen Benutzerkonto?

Link to comment

Log anbei.

ProcessTasksEX_debug .zip

 

Bei dem Sendcommand Befehl ist es egal ob im Systemkonto oder im Benutzerkonto, beides geht nicht.

Im ExtendedExit geht es dagegen.

 

Ich brauche zwei Standby Routinen, einmal für die hinterlegte Standardaktion nach Aufnahme und einmal wenn der Standby durch den Nutzer ausgeführt wird.

 

Beides versuche ich jetzt im Extended Exit, hab nur noch keine richtige Idee einer Lösung.

Link to comment

Das mit den zwei Standby-Routinen ist klar. So hatte ich mir das auch gedacht. Aber wozu genau zwei Resume-Routinen?

Man kann schon aufs automatische Aufwachen reagieren, aber eingebaut habe ich das noch nicht, weil das nicht ganz unproblematisch ist.

Link to comment

Naja, wenn der Rechner nur für eine Aufnahme automatisch geweckt wird und ich mitten in der Aufnahme entscheide eine Sendung anzuschauen muss der Viewer gestartet werden.

Diese Prozedur habe ich aber generell noch nicht weiter untersucht.

Link to comment

Das müsste eigentlich funktionieren.

 

Bei jedem Aufwachen kommt die Nachricht "PBT_APMRESUMEAUTOMATIC" an.

Auf diese reagiert mein Extended Exit Skript nicht damit damit es keine Konflikte mit den automatischen Aufnahmen gibt.

 

Auf die erste Benutzereingabe kommt die Nachricht "PBT_APMRESUMESUSPEND" an.

Daraufhin wird die Sektion "Resume" abgearbeitet.

 

Wacht der PC jetzt automatisch durch den RS für eine Aufnahme auf wartet "Extended Exit" immernoch auf die "PBT_APMRESUMESUSPEND" Nachricht.

Bis zur nächsten Benutzereingabe (Tastatur, Maus, Fernbedienung).

Link to comment

Das müsste eigentlich funktionieren.

 

Bei jedem Aufwachen kommt die Nachricht "PBT_APMRESUMEAUTOMATIC" an.

Auf diese reagiert mein Extended Exit Skript nicht damit damit es keine Konflikte mit den automatischen Aufnahmen gibt.

 

Auf die erste Benutzereingabe kommt die Nachricht "PBT_APMRESUMESUSPEND" an.

Daraufhin wird die Sektion "Resume" abgearbeitet.

 

Wacht der PC jetzt automatisch durch den RS für eine Aufnahme auf wartet "Extended Exit" immernoch auf die "PBT_APMRESUMESUSPEND" Nachricht.

Bis zur nächsten Benutzereingabe (Tastatur, Maus, Fernbedienung).

Hm, das ist echt ein Problem bei mir.

Also, du hast völlig recht, es funktioniert wie du beschrieben hast.

Ich habe ja ein iMon Pad als Fernbedienung und das Aufwachen geschieht direkt über das Motherboard-PWR-Kabel.

Ist der PC also bereits im AwayMode und wird der Powerknopf der Fernbedienung gedrückt bekommt das Motherboard das Schaltsignal und Gute Nacht. :mad:

 

Jetzt bringe ich entweder meiner Frau bei nicht da drauf zu drücken wenn der PC bereits läuft sondern auf eine andere der Tasten der Fernbedienung, oder ich finde eine sicherere WAF Lösung. :whistle:

 

Ich werde mal probieren müssen ob ich ohne das PWR-Kabel (Platine nur über die USB Stromversorgung) die Fernbedienung betreiben kann.

Link to comment

Mit AwayMode meinst du jetzt Standby/Ruhezustand?

Und was passiert genau wenn man während des Standbys auf die Powertaste drückt?

Müsste dann der PC nicht normal aufwachen ("PBT_APMRESUMESUSPEND" Nachricht => Resume Sektion)?

Link to comment

nee, ich meine wenn der PC durch eine RecService-Aufnahme in den "halb Aufwachzustand" versetzt wurde und ich den Powerknopf der Fernbedienung drücke geht der Rechner wieder in den Standby. Ich habe aber gerade gesehen das ich die Aktion des Powerknopfs im iMonManger konfigurieren oder gar modifizieren kann. Ich kann also erstmal probieren bevor ich direkt an die Hardware muss. :D

Link to comment

nee, ich meine wenn der PC durch eine RecService-Aufnahme in den "halb Aufwachzustand" versetzt wurde und ich den Powerknopf der Fernbedienung drücke geht der Rechner wieder in den Standby.

Und würgt die Aufnahme ab? Das wäre aber böse ...

Am besten der Powerknopf ruft innerhalb des DVBViewers mein Extended Exit Skript auf und außerhalb ALT+F4.

Falls iMon das so zulässt.

 

P.S. Der RS geht doch nur in den Away-Modus wenn während einer Aufnahme der Standby ausgelöst wurde.

Durch welche Aktion wird das ausgelöst? Durch den Power-knopf?

Edited by nuts
Link to comment

kurzer Test hier, leider gehen die ActionIDs immer noch nicht.

2013-04-15 21:10:10 : cmdline[1] = -standby
2013-04-15 21:10:10 : checkrecordingRS => _run_section canceled => sparam=1
2013-04-15 21:10:10 : Func _run_section: sleep=2
2013-04-15 21:10:08 : Func _run_section: processtask=RefreshDB
2013-04-15 21:10:08 : prozcss task return message: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Aufgaben</title>
<link rel="stylesheet" href="global.css" type="text/css" media="screen">
</head>
<body id="main">
<div class="scrollpanel" style="padding: 5px 5px 5px">
<table width="100%" id="table_a">
<tr>
	<th style="text-align:center">EPG</th>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=EPGStart&aktion=tasks">Starte Suche</a></td>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=EPGStop&aktion=tasks">Beende Suche</a></td>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=AutoTimer&aktion=tasks">Auto Timer</a></td>
</tr>
<tr>
	<th style="text-align:center">Aufnahmen</th>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=RefreshDB&aktion=tasks">Datenbank aktualisieren</a></td>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=CleanupDB&aktion=tasks">Datenbank aufräumen</a></td>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=RebuildRecordedHistory&aktion=tasks">Historie wieder aufbauen</a></td>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=ClearRecordingHistory&aktion=tasks">Historie endgültig löschen</a></td>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=ClearRecordingStats&aktion=tasks">Aufnahmenstatistik löschen</a></td>
</tr>
<tr>
	<th style="text-align:center">Mediadateien</th>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=UpdateVideoDB&aktion=tasks">Alle Datenbanken aktualisieren</a></td>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=CleanUpPhotoDB&aktion=tasks">Bildersammlung aufräumen</a></td>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=CleanUpVideoDB&aktion=tasks">Videosammlung aufräumen</a></td>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=RebuildVideoDB&aktion=tasks">Videosammlung neu aufbauen</a></td>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=RebuildAudioDB&aktion=tasks">Audiosammlung neu aufbauen</a></td>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=RebuildPhotoDB&aktion=tasks">Bildersammlung neu aufbauen</a></td>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=ClearAudioStats&aktion=tasks">Audiosammlung Statistik löschen</a></td>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=ClearVideoStats&aktion=tasks">Videosammlung Statistik löschen</a></td>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=ClearPhotoStats&aktion=tasks">Bildersammlung Statistik löschen</a></td>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=ClearLogosdb&aktion=tasks">Logo- und Vorschaubilder DB leeren</a></td>
</tr>
<tr>
	<th style="text-align:center">System</th>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=Hibernate&aktion=tasks">Ruhezustand</a></td>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=Standby&aktion=tasks">Standby</a></td>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=Shutdown&aktion=tasks">Herunterfahren</a></td>
</tr>
<tr>
	<th style="text-align:center">Process Tasks</th>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=StandbyEX&aktion=tasks">StandbyEX</a></td>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=StandbyRS&aktion=tasks">StandbyRS</a></td>
</tr>
</table>
</div>
</body>
</html>

2013-04-15 21:10:08 : process task=RefreshDB
2013-04-15 21:10:08 : Func _run_section: sleep=2
2013-04-15 21:10:06 : Func _run_section: sendcommand=135
2013-04-15 21:10:06 : Func _run_section: shellexecutewait=C:\Program Files (x86)\DVBViewer\Scripts\instantrecord.vbs
2013-04-15 21:10:05 : Func _run_section: checktimeshift=1
2013-04-15 21:10:05 : Func _run_section: sleep=5
2013-04-15 21:10:00 : Func _run_section: s_inisection  = standby
2013-04-15 21:10:00 : Error:  _DVBV-Connect
2013-04-15 21:10:00 : We intercepted a COM Error !
Number is: 800401E3
Windescription is: Vorgang nicht verfügbar.

2013-04-15 21:10:00 : Startup Version: 0.3
Link to comment

Jetzt habe ich hier mal weiter getestet. Irgendwie scheint das Problem jetzt im Aufruf des Prozesstasks durch den RecService zu liegen.

Im Log sieht man das eine aktive Aufnahme erkannt wurde was dann zum Abbruch führt. Es ist aber keine Aufnahme aktiv sondern der gestartete Processtask selbst.

Erst wenn ProcessTasksEX beendet wird signalisiert der Service "keine Aufnahme". Zum Test hatte ich daher auch mal diese hohe Wartezeit gesetzt.

2013-04-17 20:41:12 : cmdline[1] = -standby
2013-04-17 20:41:12 : checkrecordingRS => _run_section canceled => sparam=1
2013-04-17 20:41:12 : Func _run_section: sleep=55
2013-04-17 20:40:17 : Func _run_section: processtask=RefreshDB
2013-04-17 20:40:17 : prozcss task return message: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Aufgaben</title>
<link rel="stylesheet" href="global.css" type="text/css" media="screen">
</head>
<body id="main">
<div class="scrollpanel" style="padding: 5px 5px 5px">
<table width="100%" id="table_a">
<tr>
	<th style="text-align:center">EPG</th>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=EPGStart&aktion=tasks">Starte Suche</a></td>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=EPGStop&aktion=tasks">Beende Suche</a></td>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=AutoTimer&aktion=tasks">Auto Timer</a></td>
</tr>
<tr>
	<th style="text-align:center">Aufnahmen</th>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=RefreshDB&aktion=tasks">Datenbank aktualisieren</a></td>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=CleanupDB&aktion=tasks">Datenbank aufräumen</a></td>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=RebuildRecordedHistory&aktion=tasks">Historie wieder aufbauen</a></td>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=ClearRecordingHistory&aktion=tasks">Historie endgültig löschen</a></td>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=ClearRecordingStats&aktion=tasks">Aufnahmenstatistik löschen</a></td>
</tr>
<tr>
	<th style="text-align:center">Mediadateien</th>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=UpdateVideoDB&aktion=tasks">Alle Datenbanken aktualisieren</a></td>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=CleanUpPhotoDB&aktion=tasks">Bildersammlung aufräumen</a></td>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=CleanUpVideoDB&aktion=tasks">Videosammlung aufräumen</a></td>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=RebuildVideoDB&aktion=tasks">Videosammlung neu aufbauen</a></td>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=RebuildAudioDB&aktion=tasks">Audiosammlung neu aufbauen</a></td>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=RebuildPhotoDB&aktion=tasks">Bildersammlung neu aufbauen</a></td>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=ClearAudioStats&aktion=tasks">Audiosammlung Statistik löschen</a></td>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=ClearVideoStats&aktion=tasks">Videosammlung Statistik löschen</a></td>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=ClearPhotoStats&aktion=tasks">Bildersammlung Statistik löschen</a></td>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=ClearLogosdb&aktion=tasks">Logo- und Vorschaubilder DB leeren</a></td>
</tr>
<tr>
	<th style="text-align:center">System</th>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=Hibernate&aktion=tasks">Ruhezustand</a></td>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=Standby&aktion=tasks">Standby</a></td>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=Shutdown&aktion=tasks">Herunterfahren</a></td>
</tr>
<tr>
	<th style="text-align:center">Process Tasks</th>
</tr>
<tr class="uneven">
	<td align="center" class="middle"><a href="tasks.html?task=StandbyEX&aktion=tasks">StandbyEX</a></td>
</tr>
<tr class="even">
	<td align="center" class="middle"><a href="tasks.html?task=StandbyRS&aktion=tasks">StandbyRS</a></td>
</tr>
</table>
</div>
</body>
</html>

2013-04-17 20:40:17 : process task=RefreshDB
2013-04-17 20:40:17 : Func _run_section: sleep=2
2013-04-17 20:40:15 : Func _run_section: sendcommand=135
2013-04-17 20:40:15 : Func _run_section: shellexecutewait=C:\Program Files (x86)\DVBViewer\Scripts\instantrecord.vbs
2013-04-17 20:40:15 : Func _run_section: checktimeshift=1
2013-04-17 20:40:15 : Func _run_section: sleep=15
2013-04-17 20:40:00 : Func _run_section: s_inisection  = standby
2013-04-17 20:40:00 : Error:  _DVBV-Connect
2013-04-17 20:40:00 : We intercepted a COM Error !
Number is: 800401E3
Windescription is: Vorgang nicht verfügbar.

2013-04-17 20:40:00 : Startup Version: 0.3

Nun könnte man zwar aus ProcessTasksEX heraus ExtendedExit aufrufen das geht aber schief wenn diese noch läuft weil sie auf ein Resume wartet.

 

Hast du eine Idee was man tun könnte?

Link to comment

Hm bei mir geht das:

 

2013-04-18 13:40:50 : cmdline[1] = -standby
2013-04-18 13:40:50 : Func _run_section: checkrecordingRS=isrecordingRS
2013-04-18 13:40:50 : Func _run_section: sleep=1
2013-04-18 13:40:49 : Func _run_section: s_inisection = standby
2013-04-18 13:40:49 : Error: _DVBV-Connect
2013-04-18 13:40:49 : We intercepted a COM Error !
Number is: 800401E3
Windescription is: Vorgang nicht verfügbar.

2013-04-18 13:40:49 : Startup Version: 0.3
2013-04-18 12:39:10 : cmdline[1] = -standby
2013-04-18 12:39:10 : Func _run_section: run=C:\Program Files\DVBViewer\DVBViewer.exe
2013-04-18 12:39:10 : Func _run_section: s_inisection = isrecordingRS
2013-04-18 12:39:10 : checkrecordingRS => _run_section canceled => sparam=isrecordingRS
2013-04-18 12:39:10 : Func _run_section: sleep=1
2013-04-18 12:39:09 : Func _run_section: s_inisection = standby
2013-04-18 12:39:09 : Error: _DVBV-Connect
2013-04-18 12:39:09 : We intercepted a COM Error !
Number is: 800401E3
Windescription is: Vorgang nicht verfügbar.

2013-04-18 12:39:09 : Startup Version: 0.3

Einmal mit aktiver Aufnahme und einmal ohne.

 

Hast du das ganze mal ohne "process task=RefreshDB" versucht?

edit\ Hm bei mir gehts auch mit einem process task.

Kann es an deinem Skript liegen?

Edited by nuts
Link to comment

Scheinen mehrere Sachen zu sein, das Script jedenfalls nicht.

1. Kommandos kommen nicht im DVBViewer an (weder 135 noch 12326)

2. checkrecording=1 bricht nicht einfach das Script ab, ich dachte das wäre so

3. durch die aktive ProcessTasksEX.exe ist das Aufnahmesymbol in der Taskleiste immernoch Rot bis die exe beendet wurde

Ich kann durch den Eintrag checkrecordingRS=isrecordingRS auch gut erkennen das er dein Script als noch aktive Aufnahme erkennt da er da rein springt obwohl keine Aufnahme mehr aktiv ist sondern lediglich der Processtimer.

Link to comment

Seltsam. :(
Wie sehen die Sektionen genau aus?

 

Hm tritt das Problem mit den aktiven Aufnahmen nur auf wenn der Recordingservice das Skript nach einen Aufnahme automatisch aufruft?

Könnte sein das der RS den Status erst nach der Aufgabe auf 0 setzt.

Edited by nuts
Link to comment

Anbei eine neue Testversion.

Bei recordcount <> 0 wird die Rückgabe XML mitgelogt, damit man sieht ob wie vermutet bei einer Aufgabe nach einer Aufnahme die Aufnahme noch mitgezählt wird.

 

Außerdem wird vor jedem Befehl mit DVBViewer Objekt jedes mal erneut versucht sich mit dem DVBV zu verbinden.

Vielleicht löst das das Problem mit Sendcommand.

Edited by nuts
Link to comment

Ok, testlog anbei.

2013-04-18 22:26:37 : cmdline[1] = -standby
2013-04-18 22:26:37 : checkprocesslist => _run_section canceled
2013-04-18 22:26:37 : Function checkprocesslist - process found: DVBViewer.exe
2013-04-18 22:26:37 : Func _run_section: checkprocesslist=1
2013-04-18 22:26:27 : Func _run_section: sleep=10 => warte 1 Sekunde
2013-04-18 22:26:27 : Error:  _DVBV-Connect
2013-04-18 22:26:27 : We intercepted a COM Error !
Number is: 800401E3
Windescription is: Vorgang nicht verfügbar.

2013-04-18 22:26:27 : Func _run_section: sendcommand=12326
2013-04-18 22:26:25 : Func _run_section: sleep=2
2013-04-18 22:26:25 : Func _run_section: checkrecordingRS=isrecordingRS
2013-04-18 22:25:30 : Func _run_section: sleep=55
2013-04-18 22:25:30 : process task=RefreshDB
2013-04-18 22:25:30 : Func _run_section: processtask=RefreshDB
2013-04-18 22:25:28 : Func _run_section: sleep=2
2013-04-18 22:25:28 : Error:  _DVBV-Connect
2013-04-18 22:25:28 : We intercepted a COM Error !
Number is: 800401E3
Windescription is: Vorgang nicht verfügbar.

2013-04-18 22:25:28 : Func _run_section: sendcommand=135
2013-04-18 22:25:27 : Func _run_section: shellexecutewait=C:\Program Files (x86)\DVBViewer\Scripts\instantrecord.vbs
2013-04-18 22:25:27 : Error:  _DVBV-Connect
2013-04-18 22:25:27 : We intercepted a COM Error !
Number is: 800401E3
Windescription is: Vorgang nicht verfügbar.

2013-04-18 22:25:27 : Func _run_section: checktimeshift=1
2013-04-18 22:25:12 : Func _run_section: sleep=15
2013-04-18 22:25:12 : Func _run_section: s_inisection  = standby
2013-04-18 22:25:12 : Error:  _DVBV-Connect
2013-04-18 22:25:12 : We intercepted a COM Error !
Number is: 800401E3
Windescription is: Vorgang nicht verfügbar.

2013-04-18 22:25:12 : Startup Version: 0.3
2013-04-18 22:25:12 : cmdline[1] = -standby
2013-04-18 22:25:12 : Func _run_section: run=C:\ProcessTasksEX\ProcessTasksEX.exe -standby
2013-04-18 22:25:12 : Func _run_section: s_inisection  = isrecordingRS
2013-04-18 22:25:12 : checkrecordingRS => _run_section canceled => sparam=isrecordingRS
2013-04-18 22:25:12 : recordcount <> 0: <?xml version="1.0" encoding="utf-8" ?><status><recordcount>1</recordcount><clientcount>2</clientcount><epgudate>0</epgudate><epgbefore>3</epgbefore><epgafter>1</epgafter><recfiles>5</recfiles><timezone>60</timezone><defafterrecord>0</defafterrecord><epglang>deu</epglang><recfolders><folder size="866059808768" free="582500818944">A:\Aufnahmen</folder><folder size="134036320256" free="105030852608">C:\Ausweich_Aufnahmen</folder><folder size="134036320256" free="105030852608">C:\Users\Public\Videos</folder></recfolders></status>
2013-04-18 22:25:12 : Func _run_section: checkrecordingRS=isrecordingRS
2013-04-18 22:24:17 : Func _run_section: sleep=55
2013-04-18 22:24:17 : process task=RefreshDB
2013-04-18 22:24:17 : Func _run_section: processtask=RefreshDB
2013-04-18 22:24:15 : Func _run_section: sleep=2
2013-04-18 22:24:15 : Error:  _DVBV-Connect
2013-04-18 22:24:15 : We intercepted a COM Error !
Number is: 800401E3
Windescription is: Vorgang nicht verfügbar.

2013-04-18 22:24:15 : Func _run_section: sendcommand=135
2013-04-18 22:24:15 : Func _run_section: shellexecutewait=C:\Program Files (x86)\DVBViewer\Scripts\instantrecord.vbs
2013-04-18 22:24:15 : Error:  _DVBV-Connect
2013-04-18 22:24:15 : We intercepted a COM Error !
Number is: 800401E3
Windescription is: Vorgang nicht verfügbar.

2013-04-18 22:24:15 : Func _run_section: checktimeshift=1
2013-04-18 22:24:00 : Func _run_section: sleep=15
2013-04-18 22:24:00 : Func _run_section: s_inisection  = standby
2013-04-18 22:24:00 : Error:  _DVBV-Connect
2013-04-18 22:24:00 : We intercepted a COM Error !
Number is: 800401E3
Windescription is: Vorgang nicht verfügbar.

2013-04-18 22:24:00 : Startup Version: 0.3

Dabei lief der Viewer, ein Aufnahmetimer wurde erstellt der dann den Processtask aufruft.

 

Wie man sieht landet er nach 70 Sekunden trotzdem in der Sektion isrecordingRS in der dann wieder ProcessTasksEX aufgerufen wird um dem Problem der Aufnahmeerkennung Herr zu werden. Das klappt damit da inzwischen durch das erstmalige Beenden deines Script das Recordingsymbol nicht mehr Rot ist. Nur die Processlistabfrage ist dann der Stolperstein.

Link to comment

Hm ok also wie vermutet.

Muss ich Lars mal befragen ob das so beabsichtigt ist und dann schauen was da zu machen ist.

Der Trick mit dem sich selbst aufrufenden Skript ist zwar gut, aber keine saubere Lösung.

Das Umleiten in eine andere Sektion soll ja für alternative Befehlsabfolgen sein und nicht um den Aufnahmestatus auszutricksen.

 

Einfach stur den recordcount um 1 zu vermindern ist auch gefährlich, da man das Skript z.B. auch vom webinterface aus starten könnte.

 

Wegen der Interaktion mit dem DVBViewer:

Sehr seltsam. Tritt das nur im Systemkonto auf? Oder auch wenn du das Skript im normalen Benutzerkonto ausführst?

Wie man im Log sieht schlägt der Verbindungsversuch immer fehl. Fragt sich nur wieso ...

Link to comment

hier ein log wenn ich das script extern in die Sektion standby starte (nicht als Administrator), dann kommen die ID Signale auch sauber an, als Admin nicht!

2013-04-18 23:02:09 : cmdline[1] = standby
2013-04-18 23:02:09 : process task=Standby
2013-04-18 23:02:09 : Func _run_section: processtask=Standby
2013-04-18 23:02:09 : Func _run_section: checkprocesslist=1
2013-04-18 23:01:59 : Func _run_section: sleep=10 => warte 1 Sekunde
2013-04-18 23:01:59 : Func _run_section: sendcommand=12326
2013-04-18 23:01:57 : Func _run_section: sleep=2
2013-04-18 23:01:57 : Func _run_section: checkrecordingRS=isrecordingRS
2013-04-18 23:01:02 : Func _run_section: sleep=55
2013-04-18 23:01:02 : process task=RefreshDB
2013-04-18 23:01:02 : Func _run_section: processtask=RefreshDB
2013-04-18 23:01:00 : Func _run_section: sleep=2
2013-04-18 23:01:00 : Func _run_section: sendcommand=135
2013-04-18 23:01:00 : Func _run_section: shellexecutewait=C:\Program Files (x86)\DVBViewer\Scripts\instantrecord.vbs
2013-04-18 23:01:00 : Func _run_section: checktimeshift=1
2013-04-18 23:00:45 : Func _run_section: sleep=15
2013-04-18 23:00:45 : Func _run_section: s_inisection  = standby
2013-04-18 23:00:45 : Startup Version: 0.3
Edited by Tüftler
Link to comment

Hm ok.

Hab mich mal in den Serverraum gewagt und musste leider feststellen, dass die Verbidnung zum DVBViewer aus dem Systemkonto wirklich fehlschlägt. :(

Funktioniert dein vbs Skript aus dem Systemkonto?

Link to comment

Auch dein vbs Skript funktioniert bei mir nicht aus dem Systemkonto.

Ist das ein Denkfehler? Kann man den DVBViewer nicht aus dem Systemkonto übers COM-Interface ansprechen?

Link to comment

Workaround für das Problem mit dem recordcount:

 

[defaultaufgabe]
run=%\ProcessTasksEX.exe -standby

[standby]
sleep=1
sendcommand=35
checkrecording=1
checkrecordingRS=isrecordingRS

 

Und dann als Prozesstaks %\ProcessTasksEX.exe -defaultaufgabe anlegen und als Defaultaufgabe nach jeder Aufnahme einstellen.

Link to comment

Auch dein vbs Skript funktioniert bei mir nicht aus dem Systemkonto.

Ist das ein Denkfehler? Kann man den DVBViewer nicht aus dem Systemkonto übers COM-Interface ansprechen?

Das habe ich noch nicht weiter untersucht.

Ich hatte mein Script immer im ExtendeExit getestet, dort geht es.

Ich nehme an der Processtimer startet Prozesse immer im Systemkonto und alles daraus erhält dann wohl diese Rechte??

Ich probiere das mit meinem Script evtl. heute noch.

Link to comment

Ja der RS kann nur Prozesse im Systemkonto starten. Das ist von MS so gewollt und nicht zu ändern.

Ich dachte eigentlich COM-Objekte kann man unabhängig vom Benutzerkonto ansprechen. Scheint wohl doch nicht zu gehen?

Da müssten wir mal jemand fragen der sich damit auskennt ...

 

Vom Ablauf her: Wieso muss von ProcessTasksEX.exe direkt mit dem DVBViewer kommuniziert werden?

Was auf jeden Fall machbar wäre das webserver Plugin vom DVBViewer anzusprechen.

Edited by nuts
Link to comment

Jo, bei meinem Script ist es im Systemkonto genauso

 

Vom Ablauf her: Wieso muss von ProcessTasksEX.exe direkt mit dem DVBViewer kommuniziert werden?

Was auf jeden Fall machbar wäre das webserver Plugin vom DVBViewer anzusprechen.

 

Noch mal auf Anfang:

1. nach jeder Aufnahme wird ProcessTasksEX.exe ausgeführt

2. dort soll erkannt werden ob der DVBViewer mit einer Wiedergabe läuft (die Möglichkeit gibt es jetzt leider noch nicht)

wenn ja Script abbrechen, Fall erledigt

 

wenn nein geht es weiter

3. ist eine Aufnahme im laufenden DVBViewer aktiv (dabei kann der Wiedergabegraph ja geschlossen sein) dann mein Script aufrufen und den Timer zum Service übergeben (Kommunikation per COM notwendig)

4. Wiedergabe schließen und Viewer beenden (Kommunikation per COM notwendig)

5. Standby per processtask durch RecService auslösen

 

So, nachdem ich das so niedergeschrieben habe würde ich sagen ab Punkt 3 muss man dann mit run=%\ExtendedExit -standby an ExtendedExit übergeben, weil das ja dann als Prozess nicht mehr laufen sollte (DVBViewer wurde ja zu einer Wiedergabe überredet). Damit entfällt dann auch das Problem der Kommunikation. Außerdem soll ja wieder auf Resume gewartet werden.

Edit: Geht leider doch nicht da immernoch im Systemkonto gestartet wird und die Kommunikation fehlschlägt, misst!

 

Was bleibt wäre Punkt 2, einen Verbundenen Clienten mit Wiedergabe abzufragen, was der Service von sich aus zwar schon tun kann (dann wird ein Standby verhindert) nicht aber per Prozessabfrage, oder??

Edited by Tüftler
Link to comment

Aus dem Systemkonto kommen wir nicht raus.

 

RS => ProzesstaskEX => ExtendedExit => .... => bleibt alles immer im Systemkonto

Und da die Kommunikation über COM nicht funktioniert bleibt noch der Weg übers Netzwerk.

 

Sowas ist für Eventghost schon eingebaut (auch in ProzesstaskEX)

: http://www.DVBViewer.tv/forum/topic/51907-per-aufgabe-eine-nachricht-ein-event-an-eventghost-schicken/

Aber einen Eventghostzwang wollte ich eigentlich vermeiden ...

 

Bleiben 2 Möglichkeiten:

1. Ich bastele eine Art eigenen Webserver, der mit meinem Skripten kommunizieren kann

2. Man verwendet das webserver Plugin von DVBViewer

3. Hier meldet sich ein COM Experte :D

 

Variante 2 würde mir besser gefallen. Ich muss aber mal schaun welche Möglichkeiten es dort gibt.

 

P.S. Die Abfrage nach verbundenen Clients (über webapi des RS) ist etwas haarig. Dort kann ich nicht zwischen Webinterface, DVBViewer, sonstiger Client, Skript usw. unterscheiden.

Edited by nuts
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...