nuts Posted February 27, 2013 Share Posted February 27, 2013 (edited) 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.iniHier 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 Skriptcheckprocesslist=1 => überprüft alle Prozesse in der List (s. ProcessTasksEX_config.ini) und bricht die Sektion ab sobald ein Prozess gefunden wirdcheckwindowlist=0 => =0 bedeutet, dass diese Überprüfung übersprungen wirdcheckrecording=1 => überprüft ob der DVBViewer gerade Aufnahmen (oder Timeshift) macht und bricht die Sektion bei laufenden Aufnahmen (oder Timeshift) abcheckrecordingRS=1 => überprüft ob der RS gerade Aufnahmen macht und bricht die Sektion bei laufenden Aufnahmen abshutdown=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ß nutsP.S. Konnte nur kurz testen und aus Zeitgründen auch nicht im Systemkonto. Sollte etwas nicht funktionieren bitte melden. Edited July 5, 2013 by Tjod Quote Link to comment
nuts Posted April 4, 2013 Author Share Posted April 4, 2013 (edited) 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 September 11, 2013 by nuts Quote Link to comment
Tüftler Posted April 4, 2013 Share Posted April 4, 2013 Test mit neuer Version, Log: 2013-04-04 23:27:31 : Func _run_section: sleep=302013-04-04 23:27:01 : Func _run_section: s_inisection = standby2013-04-04 23:27:01 : Error: _DVBV-Connect2013-04-04 23:27:01 : We intercepted a COM Error !Number is: 800401E3Windescription is: Vorgang nicht verfügbar. 2013-04-04 23:27:01 : Startup Version: 0.3 ProcessTasksEX_actions.ini:[standby]sleep=30shellexecutewait=C:\Program Files (x86)\DVBViewer\Scripts\instantrecord.vbscheckprocesslist=0checkwindowlist=0checkrecordingRS=1processtask=Standby Quote Link to comment
nuts Posted April 4, 2013 Author Share Posted April 4, 2013 Sieht doch gut aus oder? Das Skript wartet jetzt bis dein Skript beendet ist. Quote Link to comment
nuts Posted April 7, 2013 Author Share Posted April 7, 2013 (edited) Anbei eine neue Testversion: Edited September 11, 2013 by nuts Quote Link to comment
Tüftler Posted April 10, 2013 Share Posted April 10, 2013 (edited) 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=12013-04-10 21:31:47 : Func _run_section - invalid keyword: resume Edited April 10, 2013 by Tüftler Quote Link to comment
nuts Posted April 10, 2013 Author Share Posted April 10, 2013 "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? Quote Link to comment
Tüftler Posted April 10, 2013 Share Posted April 10, 2013 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. Quote Link to comment
nuts Posted April 10, 2013 Author Share Posted April 10, 2013 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. Quote Link to comment
Tüftler Posted April 11, 2013 Share Posted April 11, 2013 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. Quote Link to comment
nuts Posted April 11, 2013 Author Share Posted April 11, 2013 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). Quote Link to comment
nuts Posted April 11, 2013 Author Share Posted April 11, 2013 Hab den Fehler bei "sendcommand" gefunden und behoben. Neue verbesserte Version hab ich in Post 5 neu hochgeladen. Quote Link to comment
Tüftler Posted April 12, 2013 Share Posted April 12, 2013 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. 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. Ich werde mal probieren müssen ob ich ohne das PWR-Kabel (Platine nur über die USB Stromversorgung) die Fernbedienung betreiben kann. Quote Link to comment
nuts Posted April 12, 2013 Author Share Posted April 12, 2013 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)? Quote Link to comment
Tüftler Posted April 12, 2013 Share Posted April 12, 2013 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. Quote Link to comment
nuts Posted April 12, 2013 Author Share Posted April 12, 2013 (edited) 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 April 12, 2013 by nuts Quote Link to comment
Tüftler Posted April 12, 2013 Share Posted April 12, 2013 es geht im anderen Script-Thread weiter Quote Link to comment
Tüftler Posted April 15, 2013 Share Posted April 15, 2013 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 Quote Link to comment
nuts Posted April 15, 2013 Author Share Posted April 15, 2013 In dem Fall wr jetzt aber einfach der DVBViewer nicht aktiv oder? Zumindest deutet das Log darauf hin. Quote Link to comment
Tüftler Posted April 15, 2013 Share Posted April 15, 2013 nö, der ist an. Lediglich der Graph war geschlossen Quote Link to comment
nuts Posted April 15, 2013 Author Share Posted April 15, 2013 Hm laut Log ist DVBV-Connect fehlgeschlagen. Dann geht auch kein sendcommand. Ich Schau nochmal ... Quote Link to comment
Tüftler Posted April 15, 2013 Share Posted April 15, 2013 Ok Kommando zurück, geht doch. Wie auch im Log zusehen war noch eine Aufnahme im RS aktiv, daher kam der Abbruch vor dem Schließen-Befehl. Quote Link to comment
Tüftler Posted April 17, 2013 Share Posted April 17, 2013 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? Quote Link to comment
nuts Posted April 18, 2013 Author Share Posted April 18, 2013 (edited) Hm bei mir geht das: 2013-04-18 13:40:50 : cmdline[1] = -standby2013-04-18 13:40:50 : Func _run_section: checkrecordingRS=isrecordingRS2013-04-18 13:40:50 : Func _run_section: sleep=12013-04-18 13:40:49 : Func _run_section: s_inisection = standby2013-04-18 13:40:49 : Error: _DVBV-Connect2013-04-18 13:40:49 : We intercepted a COM Error !Number is: 800401E3Windescription is: Vorgang nicht verfügbar.2013-04-18 13:40:49 : Startup Version: 0.32013-04-18 12:39:10 : cmdline[1] = -standby2013-04-18 12:39:10 : Func _run_section: run=C:\Program Files\DVBViewer\DVBViewer.exe2013-04-18 12:39:10 : Func _run_section: s_inisection = isrecordingRS2013-04-18 12:39:10 : checkrecordingRS => _run_section canceled => sparam=isrecordingRS2013-04-18 12:39:10 : Func _run_section: sleep=12013-04-18 12:39:09 : Func _run_section: s_inisection = standby2013-04-18 12:39:09 : Error: _DVBV-Connect2013-04-18 12:39:09 : We intercepted a COM Error !Number is: 800401E3Windescription 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 April 18, 2013 by nuts Quote Link to comment
Tüftler Posted April 18, 2013 Share Posted April 18, 2013 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. Quote Link to comment
nuts Posted April 18, 2013 Author Share Posted April 18, 2013 (edited) 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 April 18, 2013 by nuts Quote Link to comment
nuts Posted April 18, 2013 Author Share Posted April 18, 2013 (edited) 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 September 11, 2013 by nuts Quote Link to comment
Tüftler Posted April 18, 2013 Share Posted April 18, 2013 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. Quote Link to comment
nuts Posted April 18, 2013 Author Share Posted April 18, 2013 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 ... Quote Link to comment
Tüftler Posted April 18, 2013 Share Posted April 18, 2013 (edited) 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 April 18, 2013 by Tüftler Quote Link to comment
nuts Posted April 18, 2013 Author Share Posted April 18, 2013 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? Quote Link to comment
nuts Posted April 18, 2013 Author Share Posted April 18, 2013 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? Quote Link to comment
nuts Posted April 18, 2013 Author Share Posted April 18, 2013 Workaround für das Problem mit dem recordcount: [defaultaufgabe]run=%\ProcessTasksEX.exe -standby[standby]sleep=1sendcommand=35checkrecording=1checkrecordingRS=isrecordingRS Und dann als Prozesstaks %\ProcessTasksEX.exe -defaultaufgabe anlegen und als Defaultaufgabe nach jeder Aufnahme einstellen. Quote Link to comment
Tüftler Posted April 19, 2013 Share Posted April 19, 2013 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. Quote Link to comment
nuts Posted April 19, 2013 Author Share Posted April 19, 2013 (edited) 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 April 19, 2013 by nuts Quote Link to comment
Tüftler Posted April 19, 2013 Share Posted April 19, 2013 (edited) 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 April 19, 2013 by Tüftler Quote Link to comment
nuts Posted April 19, 2013 Author Share Posted April 19, 2013 (edited) 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 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 April 19, 2013 by nuts Quote Link to comment
Tüftler Posted April 19, 2013 Share Posted April 19, 2013 wie sieht es denn mit einer runas Funktion aus? Quote Link to comment
nuts Posted April 19, 2013 Author Share Posted April 19, 2013 Das geht aus dem Systemkonto ab WinXP SP2 auch nicht mehr. oder hast du da andere Infos? Quote Link to comment
Tüftler Posted April 19, 2013 Share Posted April 19, 2013 Nö, zumindest nicht ohne extra prog wie's ausschaut 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.