Jump to content

SuspendGhost: Steuerung von Standby / Ruhezustand mit EventGhost


mrphlox

Recommended Posts

Hab das damals irgendwie überlesen resp. nicht ganz verstanden, was du meinst. Hat sich das bereits erledigt, oder was möchtest du erreichen? Btw, *manueller* Suspend wird nie von einem EPG-Update aufgehalten, nur der automatische Suspend. Das einzige, was manuellen Suspend (= Power Button auf der FB) aufhält, sind laufende / bevorstehende Timeraufnahmen.

hmm ich könnte schwören, daß ich das im Log gesehen habe, daß er gewartet hat, bis EPG Update fertig war, kann es aber mit der beta1 nicht reproduzieren. Jetzt mal die aktuelle Beta testen, Frau hab' ich zum Bügeln geschickt ;-))
Link to comment

beta3: Impr: "SofaSleepingTimer" (Totmannpedal) implementiert. Nach 3 Std Inaktivität wird automatischer Suspend ausgelöst. Nur den TV muss man immer noch von Hand ausschalten ;)

Der TV hat bei mir auch einen 2h Timer :)

 

Sehe ich es richtig, daß der SofaTimer in der beta3 2h ist und nicht wie oben beschrieben 3h?

 

Sehe ich es ebenso richtig, daß wenn man den Sofatimer ändern will, das an 3 Stellen in der Config ändern muß?

 

Kannst Du etwas implementieren, was man mit eventghost.exe -e $eventName abfeuern kann, was einem ein abbrechbares OSD mit 30 Sekunden gibt? Quasi das nachahmen, was der RecordingService als Möglichkeit bei "Nach Aufnahme: Standby" anbietet, nur eben nicht alles abwürgt ;)

Edited by test
Link to comment

hmm ich könnte schwören, daß ich das im Log gesehen habe, daß er gewartet hat, bis EPG Update fertig war, kann es aber mit der beta1 nicht reproduzieren. Jetzt mal die aktuelle Beta testen, Frau hab' ich zum Bügeln geschickt ;-))

Vorsicht! Ich gehe mit dir eine Millionenwette ein, dass das schon seit 1.0.0 so ist :D

 

Sehe ich es richtig, daß der SofaTimer in der beta3 2h ist und nicht wie oben beschrieben 3h?

Siehe 6 Posts weiter vorne... 2+1=3

 

Sehe ich es ebenso richtig, daß wenn man den Sofatimer ändern will, das an 3 Stellen in der Config ändern muß?

Das habe ich bereits geändert, zukünftig kann man es zentral an einer Stelle einstellen.

 

Kannst Du etwas implementieren, was man mit eventghost.exe -e $eventName abfeuern kann, was einem ein abbrechbares OSD mit 30 Sekunden gibt? Quasi das nachahmen, was der RecordingService als Möglichkeit bei "Nach Aufnahme: Standby" anbietet, nur eben nicht alles abwürgt ;)

Was ist die Idee dahinter?

 

Und sonst? Läuft's?

Link to comment

Vorsicht! Ich gehe mit dir eine Millionenwette ein, dass das schon seit 1.0.0 so ist :D

die gehe ich aber nicht ein ;-)

 

Siehe 6 Posts weiter vorne... 2+1=3

ok, aber wieso 2+1?

 

Das habe ich bereits geändert, zukünftig kann man es zentral an einer Stelle einstellen.

sehr gut!

 

Was ist die Idee dahinter?

Ich möchte nach einer Aufnahme, daß was Du nicht möchtest, eine Aufgabe haben, die Standby ausführt, aber eben halt nicht wie der RecordingService das macht, der würgt die Maschine ja direkt ab, sondern per EG, aber mit einem längeren Countdown als 5 Sekunden bei SuspendRequest. Klar, ich könnte den auch auf 30 Sekunden hochschrauben, nur dann kommt bei Fernbedienung Standby auch der 30 Sekunden Countdown, der wäre da wieder zuviel. Im RecordingService habe ich eine Aufgabe:

 

C:\Program Files\curl\curl.exe --silent http://127.0.0.1:81/?Main.SuspendRequest

direkt per --event geht ja nicht, wiel der RecordingService als SYSTEM User läuft.

 

Und sonst? Läuft's?

jo bis jetzt schon, konnte noch keine Fehler feststellen, habe aber auch noch nicht viel testen können.
Link to comment

naja, doch nicht wirklich. Grade meine Nichte zu Besuch, wollte KiKa schauen, Freundin macht TV an, DVBViewer startet, beendet sich, startet sich wieder, dann willste grade umschalten, kommt ein Windows Fenster hoch mit "Eventghost.exe hat Probleme und wurde beendet" ... naja, später mal im Log schauen ...

Link to comment

die gehe ich aber nicht ein ;-)

Schade... wollt' ich doch in Frührente gehen :rolleyes:

ok, aber wieso 2+1?

Sofatimer=2h + NonInteractiveModeTimer=1h

Wenn der SofaTimer nach 2h abläuft, fällt das System zuerst einmal in den Nicht-interaktiven Modus zurück. In diesem Modus hält ein laufender DVBViewer den Standby nochmals für eine Stunde auf.

Ich möchte nach einer Aufnahme, daß was Du nicht möchtest, eine Aufgabe haben, die Standby ausführt, [...]

Das verstehe ich jetzt echt nicht... was gewinnst du dabei, was ist die Motivation dafür? Ist doch alles schon da? Timer fertig und nach 5 Minuten geht die Kiste in den Suspend - was willst du mehr?

naja, doch nicht wirklich. Grade meine Nichte zu Besuch, wollte KiKa schauen, Freundin macht TV an, DVBViewer startet, beendet sich, startet sich wieder, dann willste grade umschalten, kommt ein Windows Fenster hoch mit "Eventghost.exe hat Probleme und wurde beendet" ... naja, später mal im Log schauen ...

Die Stabilität lässt auch bei mir zu wünschen übrig :( Bei mir crasht EG auch immer wieder mal. Diese unregelmässigen und nicht reproduzierbaren Abstürze (es sind ja nicht einfach Python Exceptions mit schönem Stacktraces, sondern der Python Interpreter selbst stürzt ab) geben Grund zur Annahme, dass mit dem Multithreading noch mehr im Argen liegt. Solche Fehler zu finden gehört mit zum schwierigsten, was es in der SW-Entwicklung gibt, erst recht in fremdem Code...

 

Ich mach folgendes: Ich werd nochmals eine Portion Zeit aufwenden und das Thread-Handling in einem der Plugins auseinander nehmen. Vielleicht finde ich noch mehr von der Art, was mir gestern begegnete. Falls nicht oder falls es zu einer uferlosen Übung ausartet, muss ich mir echt überlegen, einen Strich unter das Projekt zu machen. Ein breites Interesse scheint ohnehin nicht da zu sein.

Link to comment

folgendes passiert bei einem Resume:

 

2012-01-30 14:53:56  EVENT: Main.System.Resume
2012-01-30 14:53:56     MACRO: OnSystemResume: Re-Initialize
2012-01-30 14:53:56        ACTION: PrintDatetime
2012-01-30 14:53:56           2012-01-30 14:53:56.993000 System.Resume
2012-01-30 14:53:56        ACTION: Springe zu "Initialize" und kehre zurück
2012-01-30 14:53:56           MACRO: Initialize
2012-01-30 14:53:56              ACTION: Init variables
2012-01-30 14:53:56                 2012-01-30 14:53:56.994000 Initialize
2012-01-30 14:53:56              ACTION: Springe zu "EnableOnPowerButton" und kehre zurück
2012-01-30 14:53:56                 MACRO: EnableOnPowerButton
2012-01-30 14:53:56                    ACTION: eg.globals.keepDisabled
2012-01-30 14:53:56                    ACTION: Wenn erfolgreich springe zu "EndOfTheStory"
2012-01-30 14:53:56                    ACTION: Aktiviere: OnPowerButton: Start Manual Suspend
2012-01-30 14:53:56                    ACTION: Aktiviere: OnForceSuspend: Start Forced Suspend
2012-01-30 14:53:56                    ACTION: Aktiviere: OnGracefulReboot: Start Graceful Reboot
2012-01-30 14:53:56              ACTION: Springe zu "DisableOnAnyKey" und kehre zurück
2012-01-30 14:53:56                 MACRO: DisableOnAnyKey
2012-01-30 14:53:56                    ACTION: Deaktiviere: Plugin: Tastatur
2012-01-30 14:53:56                    ACTION: Deaktiviere: OnAnyKey
2012-01-30 14:53:56                    ACTION: Aktiviere: OnRemote: Restart Suspend Timer
2012-01-30 14:54:12        ACTION: Springe zu "EnterNonInteractiveMode" und kehre zurück
2012-01-30 14:54:12           MACRO: EnterNonInteractiveMode
2012-01-30 14:54:12              ACTION: eg.globals.interactiveMode = False
2012-01-30 14:54:12              ACTION: Springe zu "EnableOnAnyKey" und kehre zurück
2012-01-30 14:54:12                 MACRO: EnableOnAnyKey
2012-01-30 14:54:12                    ACTION: Aktiviere: Plugin: Tastatur
2012-01-30 14:54:12                    ACTION: Aktiviere: OnAnyKey
2012-01-30 14:54:12                    ACTION: Deaktiviere: OnRemote: Restart Suspend Timer
2012-01-30 14:54:12              ACTION: Timer: Start NonInteractiveModeTimer
2012-01-30 14:54:12              ACTION: eg.globals.restartDVBViewer
2012-01-30 14:54:12              ACTION: Wenn erfolgreich springe zu "DVBViewer: Restart" und kehre zurück
2012-01-30 14:54:12                 MACRO: DVBViewer: Restart
2012-01-30 14:54:12                    ACTION: Finde Fenster: DVBViewer.exe
2012-01-30 14:54:12                    ACTION: len(eg.result) > 0
2012-01-30 14:54:12                    ACTION: Wenn erfolgreich springe zu "DVBViewer: Close DVBViewer" und kehre zurück
2012-01-30 14:54:12                    ACTION: Springe zu "DVBViewer: Start DVBViewer" und kehre zurück
2012-01-30 14:54:12                       MACRO: DVBViewer: Start DVBViewer
2012-01-30 14:54:12                          ACTION: DVBViewer: Start DVBViewer
2012-01-30 14:54:20              ACTION: eg.globals.restartDVBViewer = False
2012-01-30 14:54:20  EVENT: DVBViewerService.AddRecord 0
2012-01-30 14:54:20  EVENT: DVBViewerService.AddRecord 1
2012-01-30 14:54:20  EVENT: DVBViewerService.AddRecord 2
2012-01-30 14:54:20  EVENT: DVBViewerService.AddRecord 3
2012-01-30 14:54:20  EVENT: DVBViewerService.TimerListUpdated
2012-01-30 14:54:20  EVENT: Main.OnInit
2012-01-30 14:54:20     MACRO: OnSystemInit
2012-01-30 14:54:20        ACTION: Springe zu "Initialize" und kehre zurück
2012-01-30 14:54:20           MACRO: Initialize
2012-01-30 14:54:20              ACTION: Init variables
2012-01-30 14:54:20                 2012-01-30 14:54:20.415000 Initialize
2012-01-30 14:54:20              ACTION: Springe zu "EnableOnPowerButton" und kehre zurück
2012-01-30 14:54:20                 MACRO: EnableOnPowerButton
2012-01-30 14:54:20                    ACTION: eg.globals.keepDisabled
2012-01-30 14:54:20                    ACTION: Wenn erfolgreich springe zu "EndOfTheStory"
2012-01-30 14:54:20                    ACTION: Aktiviere: OnPowerButton: Start Manual Suspend
2012-01-30 14:54:20                    ACTION: Aktiviere: OnForceSuspend: Start Forced Suspend
2012-01-30 14:54:20                    ACTION: Aktiviere: OnGracefulReboot: Start Graceful Reboot
2012-01-30 14:54:20              ACTION: Springe zu "DisableOnAnyKey" und kehre zurück
2012-01-30 14:54:20                 MACRO: DisableOnAnyKey
2012-01-30 14:54:20                    ACTION: Deaktiviere: Plugin: Tastatur
2012-01-30 14:54:20                    ACTION: Deaktiviere: OnAnyKey
2012-01-30 14:54:20                    ACTION: Aktiviere: OnRemote: Restart Suspend Timer
2012-01-30 14:54:20        ACTION: Springe zu "EnterNonInteractiveMode" und kehre zurück
2012-01-30 14:54:20           MACRO: EnterNonInteractiveMode
2012-01-30 14:54:20              ACTION: eg.globals.interactiveMode = False
2012-01-30 14:54:20              ACTION: Springe zu "EnableOnAnyKey" und kehre zurück
2012-01-30 14:54:20                 MACRO: EnableOnAnyKey
2012-01-30 14:54:20                    ACTION: Aktiviere: Plugin: Tastatur
2012-01-30 14:54:20                    ACTION: Aktiviere: OnAnyKey
2012-01-30 14:54:20                    ACTION: Deaktiviere: OnRemote: Restart Suspend Timer
2012-01-30 14:54:20              ACTION: Timer: Start NonInteractiveModeTimer
2012-01-30 14:54:20              ACTION: eg.globals.restartDVBViewer
2012-01-30 14:54:20              ACTION: Wenn erfolgreich springe zu "DVBViewer: Restart" und kehre zurück
2012-01-30 14:54:20                 MACRO: DVBViewer: Restart
2012-01-30 14:54:20                    ACTION: Finde Fenster: DVBViewer.exe
2012-01-30 14:54:20                    ACTION: len(eg.result) > 0
2012-01-30 14:54:20                    ACTION: Wenn erfolgreich springe zu "DVBViewer: Close DVBViewer" und kehre zurück
2012-01-30 14:54:20                       MACRO: DVBViewer: Close DVBViewer
2012-01-30 14:54:20                          ACTION: DVBViewer: IsConnected
2012-01-30 14:54:20                          ACTION: DVBViewer: Close DVBViewer: True
2012-01-30 14:54:22                    ACTION: Springe zu "DVBViewer: Start DVBViewer" und kehre zurück
2012-01-30 14:54:22                       MACRO: DVBViewer: Start DVBViewer
2012-01-30 14:54:22                          ACTION: DVBViewer: Start DVBViewer
2012-01-30 14:54:30              ACTION: eg.globals.restartDVBViewer = False

 

sprich: DVBViewer wird gestartet, weil er nicht läuft. Dann läuft er und kurze Zeit später wird er wieder beendet und startet nochmal.

 

?!

Link to comment

bitte bitte das Projekt nicht einstellen! :-D

keine Bange, wenn's nicht sein muss, geb ich nicht auf :rolleyes:

vom Konzept und der Funktionalität von SuspendGhost bin ich nach wie vor 100% überzeugt, wenn es jetzt noch stabil wird, wage ich zu behaupten, geht's in Richtung "perfekt" :)

 

und ich glaube, ich habe auch nochmals zwei/drei Details im Plugin gefunden, die die Stabilität beeinflussen, das bin ich jetzt grad am umbauen. Danach Testen und wenn alles gut läuft, lade ich morgen eine neue Version hoch.

 

folgendes passiert bei einem Resume:

 

2012-01-30 14:53:56  EVENT: Main.System.Resume
2012-01-30 14:53:56        ACTION: Springe zu "Initialize" und kehre zurück
...
2012-01-30 14:54:20  EVENT: Main.OnInit
2012-01-30 14:54:20        ACTION: Springe zu "Initialize" und kehre zurück
...

das ist allerdings überraschend. Die ganze Initialisierungs-Sequenz wird bei dir nacheinander zweimal durchlaufen! Auf meinem System kommt entweder der Event 'System.Resume' (nach Resume) ODER 'Main.OnInit' (nach Reboot oder beim Neu-Start von EG). Auffällig ist auch der Event 'Main.System.Resume', der heisst bei mir schlicht 'System.Resume' (ohne 'Main.').

 

Wie startest du Eventghost? Gibst du beim Starten noch einen Event mit, z.B.

eventghost.exe -e 'System.Resume'

Irgend sowas muss es sein.

Link to comment

noch ein Bug ;)

 

wenn man auf der FB Power drückt und den Countdown _NICHT_ abbricht, dann kommt der Suspend quasi fast sofort. Bricht man den Countdown ab und überlegt sich später dann nochmal die Powertaste auf der FB zu drücken, dann passiert ca. 1 Minute nichts nachdem der DVBViewer geschlossen wurde, erst dann folgt der Standby, und zwar hier:

 

2012-01-30 17:44:12              ACTION: DVBViewer: Close DVBViewer: True
2012-01-30 17:45:13        ACTION: Springe zu "PerformSuspend"

 

komplett:

 

2012-01-30 17:44:05  EVENT: iMON.Power
2012-01-30 17:44:05     MACRO: OnPowerButton: Start Manual Suspend
2012-01-30 17:44:05        ACTION: !! OSD: Augenblick ...
2012-01-30 17:44:05        ACTION: Event 'Main.SuspendRequest' is fired by: 'eventghost.exe -e SuspendRequest'
2012-01-30 17:44:05        ACTION: Wenn Tastendruck länger als 2.0 s, gehe zu: OnGracefulReboot: Start Graceful Reboot
2012-01-30 17:44:05        ACTION: eg.globals.gracefulReboot = False
2012-01-30 17:44:05        ACTION: Springe zu "DisableOnPowerButton" und kehre zurück
2012-01-30 17:44:05           MACRO: DisableOnPowerButton
2012-01-30 17:44:05              ACTION: Deaktiviere: OnPowerButton: Start Manual Suspend
2012-01-30 17:44:05              ACTION: Deaktiviere: OnGracefulReboot: Start Graceful Reboot
2012-01-30 17:44:05              ACTION: Deaktiviere: OnForceSuspend: Start Forced Suspend
2012-01-30 17:44:05        ACTION: eg.globals.keepDisabled = True
2012-01-30 17:44:05        ACTION: Springe zu "OnAnyKey" und kehre zurück
2012-01-30 17:44:05     ACTION: eg.globals.keepDisabled = False
2012-01-30 17:44:05     ACTION: Springe zu "CheckManualSuspendConditions" und kehre zurück
2012-01-30 17:44:05        MACRO: CheckManualSuspendConditions
2012-01-30 17:44:05           ACTION: Springe zu "IsDvbvNotRecording" und kehre zurück
2012-01-30 17:44:05              MACRO: IsDvbvNotRecording
2012-01-30 17:44:05                 ACTION: DVBViewer: Is Recording
2012-01-30 17:44:06                 ACTION: IsRecording
2012-01-30 17:44:06                    2012-01-30 17:44:06.390000 IsRecording= False
2012-01-30 17:44:06                 ACTION: not eg.result
2012-01-30 17:44:06           ACTION: Wenn erfolgreich springe zu "IsDvbvNotRecordingSoon" und kehre zurück
2012-01-30 17:44:06              MACRO: IsDvbvNotRecordingSoon
2012-01-30 17:44:06                 ACTION: Returns True if there's no recording starting within next XX minutes. Time to be configured in 'Initialize' macro!
2012-01-30 17:44:06                 ACTION: DVBViewer: Get date of next recording
2012-01-30 17:44:07                 ACTION: IsNotRecordingSoon
2012-01-30 17:44:07                    Time till next recording in minutes:  45.8766666651
2012-01-30 17:44:07                    2012-01-30 17:44:07.400000 IsRecordingOrRecordingSoon= False
2012-01-30 17:44:07           ACTION: Wenn erfolgreich springe zu "True" und kehre zurück
2012-01-30 17:44:07              MACRO: True
2012-01-30 17:44:07                 ACTION: True
2012-01-30 17:44:07     ACTION: Wenn erfolgreich springe zu "ShowOsdByeByeCountdown"
2012-01-30 17:44:07        MACRO: ShowOsdByeByeCountdown
2012-01-30 17:44:07           ACTION: Standby Control: CancelOSDCountDown
2012-01-30 17:44:07           ACTION: Springe zu "EnableOnAnyKey" und kehre zurück
2012-01-30 17:44:07              MACRO: EnableOnAnyKey
2012-01-30 17:44:07                 ACTION: Aktiviere: Plugin: Tastatur
2012-01-30 17:44:07                 ACTION: Aktiviere: OnAnyKey
2012-01-30 17:44:07                 ACTION: Deaktiviere: OnRemote: Restart Suspend Timer
2012-01-30 17:44:07           ACTION: Standby Control: CountDownOSD: ...und tschüss in %c% !
2012-01-30 17:44:07           ACTION: Verwerfe alle ausstehenden Ereignisse
2012-01-30 17:44:07           ACTION: Beende Bearbeitung dieses Ereignisses
2012-01-30 17:44:12  EVENT: StandbyControl.ByeByeOsdCountdownFinished
2012-01-30 17:44:12     MACRO: OnForcedOsdCountdownFinished: Perform Suspend
2012-01-30 17:44:12        ACTION: Springe zu "DVBViewer: Close DVBViewer" und kehre zurück
2012-01-30 17:44:12           MACRO: DVBViewer: Close DVBViewer
2012-01-30 17:44:12              ACTION: DVBViewer: IsConnected
2012-01-30 17:44:12              ACTION: DVBViewer: Close DVBViewer: True
2012-01-30 17:45:13        ACTION: Springe zu "PerformSuspend"

Link to comment

Wie startest du Eventghost? Gibst du beim Starten noch einen Event mit, z.B.

eventghost.exe -e 'System.Resume'

Irgend sowas muss es sein.

ich starte EventGhost bei einem Resume via Windows selbst, mit -e System.Resume, ja, damit EG nach einem Resume (weil ich es nach einem Resume neu starte) die Aufgaben ausführt die für's Resume zu erledigen sind. Und während ich das so schreibe sehe ich den Fehler selbst. EG wird beim Resume ja neu gestartet und macht ein Init. -e System.Resume springt u.a. nach Init.
Link to comment

noch ein Bug ;)

 

2012-01-30 17:44:12              ACTION: DVBViewer: Close DVBViewer: True
2012-01-30 17:45:13        ACTION: Springe zu "PerformSuspend"

Nope, I can't see a bug again ;)

'Close DVBViewer' brauchte eine Minute (frag mich nicht, warum), und solange stoppte die Macro-Ausführung. Hat nichts zu tun damit, dass vorher mal ein Countdown abgebrochen wurde, jedenfalls habe ich diesen Fall bei mir schon x-mal durchgespielt und keine Probleme damit gehabt. Ist das bei dir reproduzierbar?

Link to comment

Nope, I can't see a bug again ;)

'Close DVBViewer' brauchte eine Minute (frag mich nicht, warum), und solange stoppte die Macro-Ausführung. Hat nichts zu tun damit, dass vorher mal ein Countdown abgebrochen wurde, jedenfalls habe ich diesen Fall bei mir schon x-mal durchgespielt und keine Probleme damit gehabt. Ist das bei dir reproduzierbar?

Jep, reproduzierbar. Solange ich den OSD Countdown nicht abbreche geht Standby sofort. Sobald ich aber den OSD Countdown abbreche und dann erneut in den Standby will, dauert's 1 Minute von Close DVBViewer bis zum Standby. Das "lustige" ist, der DVBViewer ist schon lange zu, der wird direkt nach Ende des OSD Countdowns beendet.
Link to comment

hm, komisch... ich hab's jetzt grad auf einem zweiten PC installiert und getestet - funktioniert auch dort wie am Schnürchen. Aber wenn du sagst, bei dir sei's reproduzierbar, dann ist da schon was nicht OK. Kannst du mir mal dein SuspendGhost.xml und Log.txt von EventGhost schicken?

Link to comment

die Log.txt bekomme ich wie? -debug?

 

Interessant. Mit Debug nicht reproduzierbar, ohne reproduzierbar.

 

?!?!? Technik die begeistert ;->

Edited by test
Link to comment

warum auch immer, ich versuche jetzt seit paar Tagen das zu reproduzieren, nicht möglich. Evtl. 1x -debug und irgendwas hat sich "geheilt", keine Ahnung. Dann vergiß den "Bug" erstmal. Bin schon gespannt auf eine neue Version :)

Link to comment

warum auch immer, ich versuche jetzt seit paar Tagen das zu reproduzieren, nicht möglich. Evtl. 1x -debug und irgendwas hat sich "geheilt", keine Ahnung. Dann vergiß den "Bug" erstmal. Bin schon gespannt auf eine neue Version :)

Gut, dass es du selbst sagst, sonst hätt ich's dir gesagt: das war kein Bug von der reproduzierbaren Sorte, auch wenn's zu Beginn bei dir so aussah. Das war einer von der Sorte, die mich auch ab und zu beschäftigt: so jedes 10. oder 20. Mal hängt bei mir DVBViewer beim Starten in 'Loading Service EPG' etwa eine Minute lang, bis er sich dann entschliesst, doch noch fertig zu starten. Any ideas??

 

Die neue Version ist im Anrollen, und halt dich fest, die fegt punkto Stabilität die bisherigen vom Tisch (endlich!). Ich hatte zweimal das grosse AHA-Erlebnis und konnte zwei Ursachen für die beobachteten Instabilitäten dingfest machen. Nun bin ich guten Mutes, dass die Umgebung wieder stabil und zuverlässig funktioniert. Einerseits gab es wie vermutet noch weitere Probleme mit der Thread-Safety in einem der verwendeten Plugins, das hat mich letztlich dazu bewogen, die EG Action CountDownOsd partiell neu zu implementieren. Andererseits bin ich auf einen Bug im Keyboard Plugin von EventGhost gestossen, wiederholtes Aktivieren und Deaktiveren des Plugins führt zu sporadischen Abstürzen von EG.

 

Jetzt noch ein bisschen Code aufräumen, testen und dann lade ich's hoch.

Link to comment

Hier nun die neue Version.

 

Changes

  • Fix für sporadische Hänger bei CountDownOSD (Thread safety)
  • Fix: Keyboard Plugin darf nicht ein-/ausgeschaltet werden, da EG sonst nach einer Weile crashed
  • Interne Verbesserungen und Refactorings

 

Hinweise:

- Auch StandbyControl Plugin mit installieren

- Vorsicht beim Zusammenführen (Mergen) der Configs: Das Keyboard Plugin darf NICHT DEaktiviert sein (sonst löst EG Referenzen falsch auf), d.h. das Plugin vor dem Mergen ggf. aktivieren.

 

(edit: Attachment entfernt, da obsolet)

Edited by mrphlox
Link to comment

sind das die beiden Stellen für die Timer?

 

OperatingModes -> Timer: Start NonInteractiveModeTimer 1 Stunde

 

RestartSofaTimer -> Timer: Start SofaSleepingTimer 1 Stunde

 

mehr finde ich irgendwie nicht, und mir fehlt der "AHA" Effekt wieso Du 2+1 schreibst (3 Stunden)

 

Hintergrund der Frage: ich wollte das mal jeweils auf 1 Minute setzen und schauen was beim SofaTimer passiert ...

Edited by test
Link to comment

yep, das sind die zwei Stellen, wobei der Sofatimer original auf 2 Std eingestellt ist, daher 2 + 1 Std.

 

kannst das gerne mal testen, habe ich vorhin auch gemacht, aber 1 Minute kommt nicht gut!! Mindestens 5 Minuten für beide Timer müssen es schon sein, sonst überholen sie andere Timer.

Link to comment

OK, sieht gut aus soweit :)

 

wenn der SofaTimer zuschlägt und den DVBViewer beendet dauerts allerdings nochmal weitere 5 Minuten bis der Standby dann ausgelöst wird. Gewollt?

Link to comment

ja, das ist gewollt. Das ganze Programm ist eine Zustandsmaschine. Beim Starten wechselt der Zustand von Suspended => Nicht-Interaktiv => Interaktiv, beim Einschlafen von Interaktiv => Nicht-Interaktiv => Idle => Suspended. Die letzten 5 Minuten wartet er im Idle-Modus, bis er in den Suspend geht. Das sind übrigens die 300 Sekunden, die im StandbyControl Plugin konfiguriert werden können.

 

Hast du jetzt das 2+1 AHA Erlebnis gehabt? :>

Edited by mrphlox
Link to comment

Don't worry... man muss das Konzept der verschiedenen Zustände und deren Übergänge verstanden haben, um die Timer dazu verstehen zu können - aber dieses Verständis ist für die Verwendung von SuspendGhost nicht Voraussetzung... man darf schliesslich auch Autofahren, ohne alle technischen Details eines Autos zu kennen und zu wissen.

 

Habe grad vorhin zufällig gelesen, dass es MS Windows vom Prinzip her praktisch gleich macht, insbesondere die Unterscheidung und Erkennung von interaktivem und nicht-interaktivem (unbeaufsichtigtem) Modus und die Reaktion darauf - völlig falsch liege ich mit meinem Ansatz nicht :)

http://msdn.microsoft.com/en-us/library/windows/desktop/aa373235%28v=vs.85%29.aspx

 

Und sonst, läuft's? Bei mir seit Tagen ohne Absturz, yupee! B) (ich mache keinen Restart mehr von EG nach Resume)

Link to comment

Ja muß man nicht, aber ich möchte trotzdem Sachen verstehen die ich benutze :)

 

So, please verbose it ;)

 

Die neue Version läuft bis jetzt einwandfrei :)

Edited by test
Link to comment

ich probier's auch gerade mal wieder ohne EG zu beenden/neu zu starten, mal schauen wie das läuft. Falls das ohne Probleme läuft versuche ich auch mal nur wieder Stop Graph beim Suspend, also DVBViewer laufen zu lassen. Ich werde berichten :)

Link to comment

Ja muß man nicht, aber ich möchte trotzdem Sachen verstehen die ich benutze :)

 

So, please verbose it ;)

Aber sicher :)

 

SuspendGhost unterscheidet intern zwei Betriebs-Modi: der Interaktive Modus IM und der Nicht-Interaktive Modus NIM.

Wenn SG startet, befindet er sich erst einmal im NIM. In diesem Modus nimmt SG an, dass das System unbeaufsichtigt ist, im engl. daher auch 'unattended mode' genannt. Beispiel: Das System startet, weil eine programmierte Aufnahme aufgezeichnet werden soll. Dass das System im NIM ist, ist eine Annahme, die gültig bleibt, bis das Gegenteil bewiesen ist. SG wartet von nun an nämlich darauf, dass eine Taste auf der FB gedrückt wird oder dass die Maus bewegt wird oder dass ein Tastatur-Input kommt (das passiert im 'OnAnyKey1' Macro). Sobald dies geschieht, wechselt SG in den Interaktiven Modus IM. Soweit mal zu den zwei wichtigsten Zuständen, daneben gibt es noch drei andere, vorübergehende Zustände, die wir jetzt mal weglassen.

 

Warum ist die Unterscheidung IM - NIM wichtig? Der zentrale Unterschied: Im NIM kann und soll das System nach einer Timer-Aufnahme sofort wieder heruntergefahren werden - im IM dagegen nicht! Im IM, d.h. wenn ich selbst vor der Kiste sitze und einen Film schaue, will ich natürlich keine Unterbrechung. Dieser Trick löst eine zentrale, aber widersprüchliche Anforderung: Nach unbewachten Timer-Aufnahmen soll das System automatisch und rasch wieder in den Suspend, wenn hingegen ein Lebewesen (meistens: Menschen, bei uns manchmal auch Katzen :)) TV schauen, soll der automatische Suspend verhindert werden.

 

Welche Timer gibt es und wozu?

1. NonInteractiveModeTimer: Dieser Timer ist auf 5 min voreingestellt und beginnt im NIM zu laufen, d.h. also unmittelbar nach Resume oder wenn EG startet. Wenn er abläuft und wenn alle Auto-Suspend-Bedingungen erfüllt sind, wird (nach einem OSD Countdown, zur Sicherheit) der Graph des DVBViewers geschlossen. Im NIM wird auch am Ende einer Timer-Aufnahme der Graph des DVBViewers geschlossen. Ein laufender DVBViewer mit offenem Graphen ist auch im NIM ein hartes Kriterium, welches den automatischen Suspend verhindert, d.h. ein automatischer Suspend erfolgt nur, wenn DVBViewer (oder zumindest dessen Graph) geschlossen wurde.

 

2. IMSleepTimer: Dieser Timer ist auf 2h voreingestellt und beginnt im IM zu laufen. Bei jedem Tastendruck auf der FB startet der Timer neu, also eine Art Totmannpedal. Wenn er abläuft, d.h. wenn es 2h lang keine Benutzeraktivität gab, merkt der Anwender vordergründig nichts davon. Intern wechselt SG jedoch nun in den NIM, d.h. nun beginnt der NonInteractiveModeTimer zu laufen. Ein Tastendruck auf der FB wechselt sofort wieder in den IM und das Spiel beginnt von vorne.

 

3. StandbyControl Timer: Im StandbyControl Plugin gibt es mehrere Timer:

3a. Im IM wird mit jeder Benutzer-Interaktion der Standby-Timer mit 10 Min Laufzeit gestartet ('Restart IM Suspend Timer), d.h. es dauert (bei geschlossenem DVBViewer) 10 Min, bis Auto-Suspend ausgelöst wird.

3b. Daneben ist die "Standby Default Time" in der Plugin-Konfiguration wichtig, sie ist auf 60 sec voreingestellt. Dieser Timer beginnt nur im NIM zu laufen, wenn die Auto-Suspend-Bedingungen erfüllt sind: Es läuft keine Aufnahme, DVBViewer läuft nicht, das System ist "Idle", der RS hat keine (Streaming-)Clients und der Netzwerk-Verkehr ist unter der definierten Schwelle. Wenn dieser Timer abläuft, feuert das Plugin einen Event "StandbyControl.Trigger", welcher den automatischen Suspend auslöst.

 

Mit diesem Kontext wird wahrscheinlich auch klar, warum es (voreingestellt) 2 Std + ca. 8 Minuten dauert, bis ein "vergessener" HTPC herunterfährt: Ab dem letzten Input mit der FB dauert es 2h, bis SG vom IM in den NIM wechselt; im NIM nochmals 5 Min, bis der Graph des DVBViewer geschlossen wird und dann noch 1 Minute, bis der StandbyControl.Trigger zum Auto-Suspend kommt. Ein paar zusätzliche Minuten werden für verschiedene OSD Countdowns benötigt.

 

tutto chiaro?

 

(bearbeitet und ergänzt am 21.3.12: Timer-Werte für neue SG-Version 1.1.0 aktualisiert)

Edited by mrphlox
Link to comment

Hier kommt die "offizielle" Version SuspendGhost 1.0.4 :)

Download im ersten Post.

 

Die wichtigsten Änderungen gegenüber 1.0.3:

  • Autostart DVBViewer: Nach dem Starten oder Aufwachen des Mediacenters startet DVBViewer automatisch mit.
  • Verbesserungen in der Benutzerführung, z.B. kurzer Countdown vor dem Herunterfahren, "Abbruch mit beliebiger Taste" verbessert etc.
  • Sleeptimer: Nach 3 Std Inaktivität wird automatischer Suspend ausgelöst.
  • Intern: Unterscheidung von zwei Betriebsmodi, Interaktiv und Nicht-Interaktiv, wobei sich das Standby-Verhalten je nach Betriebsmodus grundsätzlich unterscheidet.
  • Verbesserungen, Bug Fixes und Refactorings im StandbyControl Plugin 1.07b

 

Danke @test für die Mithilfe beim Testen!

 

Wer bereits eine frühere Version von SuspendGhost einsetzt und die eigenen Plugin-Einstellungen nicht verlieren möchte, findet -> hier eine Anleitung <- zum Zusammenführen der Konfigurationen.

Link to comment

gerne.

 

Vielen Dank für Deine tolle Arbeit!

 

Jetzt kann mein HTPC auch endlich mal sinnvoll Standby/Resume etc. ohne viel herumgefrickel und Workaroundsgebastel :-)

Link to comment

ein kleines Problemchen ;)

 

Szenario:

 

- ich sitze in meinem Büro und hole den HTPC per WoL aus dem Standby

 

- gehe auf die Recording Service Website, suche mir einen Sender aus, meist N24, und starte den Stream

 

- 5 Minuten später geht der HTPC in den Standby, weil EG der Meinung ist, daß das System idle ist (klar, ich gehe ja nun nicht extra ins Wohnzimmer und drücke irgendetwas auf der FB nur damit der interaktive Modus anfängt ;-))

 

man könnte natürlich auch ffmpeg.exe in die Liste mit eintragen, nur falls jemand mal mit einem SmartPhone das Ding benutzt und vergißt "Stoppe StreamServer" zu klicken, dann rennt ffmpeg die ganze Zeit und blockiert somit den Standby.

Edited by test
Link to comment

hmm was mir jetzt schon 3x aufgefallen ist, daß seitdem ich SuspendGhost benutze manchmal Aufnahmen einfach nicht stattfinden wollen, die RecordingService Aufnahmen bleiben 0 Byte und im Log steht Bad CRC und no data within 1 Minute bis zum Ende des Timers. Sind seitdem ich SG nutze schon 3 Aufnahmen gewesen, vorher hatte ich ein einziges mal eine 0 Byte Aufnahme, und da war der Antennenverstärker aus. Ich will das nun nicht wirklich SG zuschreiben, aber irgendwie liegt der Verdacht nahe ;( ... ich versuche das mal zu reproduzieren mit SG/ohne SG.

 

und wieder fängt die Bastelstunde an ;->

Link to comment

Ich konfiguriere gerade meinen htpc und habe ein kleines anfängerproblem:

folgende config:

windows7-32bit sp1

imon pad mit gewählter mce-remote (nach tüftlers anleitung konfiguriert)

dvbv (eingestellt - wie beschrieben - mit normalem beenden ohne bestätigung)

recording-service aktiv (dort alles deaktiviert, was stromsparmodus blockieren könnte...)

suspendghost 1.04 mit imon plugin, eventghost 0.4.1.r1544

 

bei laufendem dvbv beliebige taste der fernbedienung gedrückt -> am bildschirm ist oben rechts kurz eine "I" zu sehen (ich nehme an, dass damit die umschaltung nicht-interaktiver zum interaktiven modus signalisiert wird).

jetzt problem: power-taste auf der fb gedrückt -> dvbv wird beendet, aber pc fährt nicht in den ruhezustand...

 

nach 5 minuten dann meldung "standby" und pc fährt in den ruhezustand.

 

bitte helfen: wie schaffe ich es, dass pc bei gedrückter power-taste in den ruhezustand fährt???

 

danke für eure hilfe!

 

gleicht

Link to comment

bitte helfen: wie schaffe ich es, dass pc bei gedrückter power-taste in den ruhezustand fährt???

hm, ja, müsste er eigentlich schon :)

 

imon pad mit gewählter mce-remote (nach tüftlers anleitung konfiguriert)

vielleicht liegt hier das Problem. Ich verwende meine FB im iMON-Modus. Den MCE-Modus hab ich noch nie ausprobiert. Reine Neugierde, was spricht für den MCE-Modus?

 

Kannst du mal den Log-Output von EG hier posten, mich interessiert zu sehen, ob das iMON Plugin überhaupt Events erzeugt im MCE-Modus.

Link to comment

ein kleines Problemchen ;)

Szenario:

- ich sitze in meinem Büro und hole den HTPC per WoL aus dem Standby

- gehe auf die Recording Service Website, suche mir einen Sender aus, meist N24, und starte den Stream

- 5 Minuten später geht der HTPC in den Standby, weil EG der Meinung ist, daß das System idle ist ...

Kann ich nicht reproduzieren, funktioniert einwandfrei hier. Während des Streams wird NumberOfActiveClients hochgezählt und bleibt dort bis Ende Stream. Während dieser Zeit wird kein Suspend ausgelöst. Ich bräuchte den Log-Output, um mehr sagen zu können.

 

Process name und Process status

- beide sortierbar machen

ist leider zu aufwändig (gemessen am Gewinn)

 

- Default Sortierreihenfolge Case-insensitive

Habe ich umgesetzt.

 

hmm was mir jetzt schon 3x aufgefallen ist, daß seitdem ich SuspendGhost benutze manchmal Aufnahmen einfach nicht stattfinden wollen, die RecordingService Aufnahmen bleiben 0 Byte und im Log steht Bad CRC und no data within 1 Minute bis zum Ende des Timers. Sind seitdem ich SG nutze schon 3 Aufnahmen gewesen, vorher hatte ich ein einziges mal eine 0 Byte Aufnahme, und da war der Antennenverstärker aus. Ich will das nun nicht wirklich SG zuschreiben, aber irgendwie liegt der Verdacht nahe ;( ... ich versuche das mal zu reproduzieren mit SG/ohne SG.

Auch wieder ein Phänomen auf deinem PC, das ich hier nicht kenne. Ausserdem kann ich mir nicht vorstellen, dass das im Zusammenhang mit SG stehen soll, SG nimmt keinen Einfluss auf den RS, ich wüsste nicht wie. Kannst du bitte mehr Facts liefern statt Verdacht streuen :)

Link to comment

hallo und danke für deine schnelle antwort!

 

mce-remote habe ich im imon-manager nur deshalb ausgewählt, weil ich keine imon-fernbedienung hatte, sondern eine von origenae gelabelte (ist eine Phillips?), die dem bild der fb vom tüftler entspricht.

bei der auswahl von ipad hatte ich probleme mit der fernbedienung - hat nicht reagiert im dvbv.

hier mein log aus eg:

 

21:57:53 ---> Willkommen beim EventGhost <---

21:57:54 Autostart

21:57:54 Plugin: SoundGraph iMON HID

21:57:54 Plugin: DVBViewer

21:57:56 Plugin: Standby Control

21:57:56 Plugin: Timer

21:57:56 Plugin: Tastatur

21:57:56 Main.OnInit

21:57:56 OnSystemInit: Initialize

21:57:56 Springe zu "Initialize" und kehre zurück

21:57:56 Initialize

21:57:56 PrintVersion

21:57:56 ---> Welcome to SuspendGhost v1.0.4 <---

21:57:56 Init variables

21:57:56 2012-02-08 21:57:56.393000

21:57:56 Springe zu "EnableOnPowerButton" und kehre zurück

21:57:56 EnableOnPowerButton

21:57:56 eg.globals.keepDisabled

21:57:56 Wenn erfolgreich springe zu "EndOfTheStory"

21:57:56 Aktiviere: OnPowerButton: Start Manual Suspend

21:57:56 Aktiviere: OnForceSuspend: Start Forced Suspend

21:57:56 Aktiviere: OnGracefulReboot: Start Graceful Reboot

21:57:56 Springe zu "EnterNonInteractiveMode" und kehre zurück

21:57:56 EnterNonInteractiveMode

21:57:56 eg.globals.interactiveMode = False

21:57:56 Springe zu "EnableOnAnyKey" und kehre zurück

21:57:56 EnableOnAnyKey

21:57:56 Aktiviere: OnAnyKey: EnterInteractiveMode and CancelOsd

21:57:56 Deaktiviere: OnRemote: Restart Suspend Timer

21:57:56 Timer: Abort SofaSleepingTimer

21:57:56 Timer: Start NonInteractiveModeTimer

21:57:56 eg.globals.restartDVBViewer

21:57:56 Wenn erfolgreich springe zu "DVBViewer: Restart DVBViewer" und kehre zurück

21:57:56 DVBViewer: Restart DVBViewer

21:57:56 Springe zu "DVBViewer: IsRunning" und kehre zurück

21:57:56 DVBViewer: IsRunning

21:57:56 Finde Fenster: DVBViewer.exe

21:57:56 len(eg.result) > 0

21:57:56 Wenn erfolgreich springe zu "DVBViewer: Close DVBViewer" und kehre zurück

21:57:56 Springe zu "DVBViewer: Start DVBViewer" und kehre zurück

21:57:56 DVBViewer: Start DVBViewer

21:57:56 DVBViewer: IsConnected

21:57:58 DVBViewer: Start DVBViewer

21:58:07 eg.globals.restartDVBViewer = False

21:58:07 Main.OnInitAfterBoot

21:58:07 DVBViewerService.NoClientActive

21:58:07 OnDvbvNoClientActive

21:58:07 Enable Suspend: Client finished

21:58:07 eg.globals.dvbvHasActiveClients = False

21:58:07 DVBViewer.DVBViewerIsConnected

21:58:07 DVBViewer.DisplayChange:TV 'TV'

21:58:07 OnDvbvTvMode

21:58:07 Disable Suspend, TV is displaying

21:58:07 eg.globals.dvbvIsPerforming = True

21:58:16 Keyboard.Numpad6

21:58:16 Keyboard.Numpad0

21:59:21 StandbyControl.Trigger

21:59:21 OnStandbyControlTrigger: Start Graceful Suspend

21:59:21 Springe zu "CheckAutoSuspendConditions" und kehre zurück

21:59:21 CheckAutoSuspendConditions

21:59:21 Springe zu "IsSystemIdle" und kehre zurück

21:59:21 IsSystemIdle

21:59:21 SystemIsIdle

21:59:21 2012-02-08 21:59:21.687000 SystemIsIdle= False

21:59:21 eg.globals.systemIsIdle

21:59:21 Wenn erfolgreich springe zu "IsMonitoredProcessNotRunning" und kehre zurück

21:59:21 Wenn erfolgreich springe zu "IsDvbvNotRecording" und kehre zurück

21:59:21 Wenn erfolgreich springe zu "IsDvbvNotRecordingSoon" und kehre zurück

21:59:21 Wenn erfolgreich springe zu "HasDvbvNoActiveClients" und kehre zurück

21:59:21 Wenn erfolgreich springe zu "IsDvbvNotEpgUpdating" und kehre zurück

21:59:21 Wenn erfolgreich springe zu "IsDvbvNotPerforming" und kehre zurück

21:59:21 Wenn erfolgreich springe zu "True" und kehre zurück

21:59:21 Wenn erfolgreich springe zu "ShowOsdRelaxedCountdown"

 

kannst du was rauslesen?

wenn ich powertaste auf der fb drücke, dann schliesst der dvbv und die runde imon-ir-anzeige meldet "dvbv ruhezustand/standby"

 

vielen dank für deine prüfung schon vorab!!

 

gleicht

Link to comment

Kann ich nicht reproduzieren, funktioniert einwandfrei hier. Während des Streams wird NumberOfActiveClients hochgezählt und bleibt dort bis Ende Stream. Während dieser Zeit wird kein Suspend ausgelöst. Ich bräuchte den Log-Output, um mehr sagen zu können.

bekommst Du.

 

ist leider zu aufwändig (gemessen am Gewinn)

ok.

 

Habe ich umgesetzt.

danke!

 

Auch wieder ein Phänomen auf deinem PC, das ich hier nicht kenne. Ausserdem kann ich mir nicht vorstellen, dass das im Zusammenhang mit SG stehen soll, SG nimmt keinen Einfluss auf den RS, ich wüsste nicht wie. Kannst du bitte mehr Facts liefern statt Verdacht streuen :)

Du hast Recht. Entschuldige bitte diese unqualifizierte Aussage von mir. Ich kam vor paar Tagen auf die wahnwitzige Idee, wegen einem anderen Thread hier, mir einen Stammordner Favoriten zu machen und dort alle meine Favoriten reinzupacken, in der Reihenfolge wie ich sie auch in den richtigen Favoriten habe, alles nur weil der RecordingService das nicht kann *)(/"$§$§"$=)(§")($)(/§", und kam dabei auf die wohl vollkommen überschwachsinnigwahnwitzige Idee und habe die AC3 Spur als Hauptspur gelegt (wird ja oft genug empfohlen), sprich den AC3 Eintrag als ersten gelistet, und genau _DAMIT_ hat der RecordingService Probleme, NICHT SG oder EG. Stelle ich AC3 Spur wieder als "Nebenspur" nimmt der RecordingService auch wieder auf. Meine Fresse was ist das alles bloß für ein Abfall ;-/
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...