DreamCiplus automatisiert neustarten

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • das sleep 30 ist dann eigentlich auch nicht nötig

      es ist egal ob du 30 Sekunden wartest oder gleich HASRECORDING=$(dreamboxctl recordings) ausführst

      es kann immer passieren, dass eine Sekunde nach der erfolgreichen Abfrage HASRECORDING=$(dreamboxctl recordings) eine Aufnahme startet


      man kann mit curl -s -X POST "http://localhost/web/timerlist?&sessionid=$SESSIONID"|grep -c "e2state>1<" prüfen ob eine Aufnahme in der Wartepostion ist oder nicht

      der Rückgabewert ist 0, 1, 2 usw.

      Nur wenn der Rückgabewert 0 ist, kann man sicher sein, dass keine Aufnahme in den nächsten 20 Sekunden startet

      Wenn der Rückgabewert größer als 0 ist kann die nächste Aufnahme in einer oder in 20 Sekunden starten.
      Ca. 20 Sekunden vor dem Aufnahmestart wechselt der e2state des Timereintrages den Wert von 0 ("Aufnahme in der Zukunft") auf 1 ("innerhalb der nächsten 20 Sekunden startende Aufnahme")
      Erst wenn die Aufnahme läuft, wechselt der e2state den Wert von 1 auf 2 ("laufende Aufnahme").

      Dann wäre noch interessant, ob der Pending Timer ein Umschalt oder Aufnahme Timer ist, bei einem Umschalt Timer könnte man getrost dreamciplus neu starten

      Ich merke gerade das wird sehr komplex wenn man alles berücksichtigen will. Aber schaffbar wäre es. Aus dem Grund sollte man es aber von Anfang an schlank und strukturiert halten. Sonst kann man ganz schnell den Überblick verlieren ..

      Aber eins nach dem anderen
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Fred Bogus Trumper ()

    • Nachdem das ganze um einiges komplexer ist, habe ich mir ein Test Script gebastelt, mit dem ich alle erforderlichen Werte aus der timerlist auslese um rechnen und vergleichen zu können.
      Dabei lese ich die webinterface timerlist einmal aus und speichere die liste in einer Varable, wodurch das ganze um ein vielfaches schneller wird.

      Dann kann man einen genauen Prüflauf definieren, etwa so:

      es läuft keine Aufnahme UND in den nächsten 20 Sekunden startet kein Aufnahme Timer -> dreamciplus restart
      es läuft ein Umschalt Timer UND in den nächsten 20 Sekunden startet kein Aufnahme Timer -> dreamciplus restart ??

      ein Umschalt Timer startet innerhalb der nächsten 20 Sekunden -> dreamciplus restart ??
      ein Aufnahme Timer startet innerhalb der nächsten 20 Sekunden -> dreamciplus restart auf die Endzeit des demnächst startenden Timers verschieben

      es läuft ein Aufname Timer -> dreamciplus restart auf die Timer Endzeit verschieben

      es läuft ein Aufname Timer UND vor der Endzeit der laufenden Aufnahme startet ein neuer Aufnahme Timer -> dreamciplus restart auf die Timer Endzeit des nächsten Timers verschieben


      usw.


      jetzt wäre es gut zu Wissen ob nach einem Umschalt Timer vor der Endzeit dreamciplus gestartet werden soll. Das könnte man aber mit dem Powerstate der Box verknüpfen:
      laufender Umschalt Timer + Box=idle -> dreamciplus restart

      laufender Umschalt Timer + Box=active -> dreamciplus restart erstmal auf die Endzeit des Umschalttimers verschieben


      sollen auch laufende Webinterface streams berücksichtigt werden? das könnte man eventuell mit einem Schalter beim Srptaufruf abfangen (yes/no)



      das wird vermutlich noch ein wenig dauern, bis das so läuft wie ich mir das vorstelle
      aber vielleicht hast du / habt ihr noch andere Ideen und Vorstellungen



      bisher habe ich nur die Variablen und Funktionen soweit erfasst ...



      Quellcode

      1. root@dm820:~# /usr/local/bin/dreamciplus_test.sh list-variables
      2. RESTART
      3. STOPTIME
      4. CURRENTTIME
      5. SESSIONID
      6. TIMERLIST
      7. RECORDINGS
      8. CURRENT_RECORDINGS_TYPE_RECORD
      9. CURRENT_RECORDINGS_TYPE_ZAP
      10. CURRENT_RECORD_TIMERS_END
      11. PENDING_TIMERS
      12. PENDING_TIMERS_BEGIN
      13. PENDING_TIMERS_RECORD_END
      14. PENDING_TIMERS_TYPE_RECORD
      15. PENDING_TIMERS_TYPE_ZAP
      16. NEXT_TIMERS
      17. NEXT_TIMERS_TYPE_RECORD
      18. NEXT_TIMERS_TYPE_ZAP
      19. NEXT_TIMER_RECORD_BEGIN -
      20. NEXT_TIMER_RECORD_END
      21. STREAMS
      22. root@dm820:~# /usr/local/bin/dreamciplus_test.sh list-functions
      23. ListFunctions
      24. ListVariables
      25. GetTimeHumanReadable
      26. GetSessionID
      27. GetTimerList
      28. CountRecordings
      29. GetCurrentRecordingsTypes
      30. GetCurrentRecordingsRecordEnd
      31. GetPendingTimers
      32. GetPendingTimersRecordType
      33. GetPendingTimersRecordBegin
      34. GetNextTimers
      35. GetNextTimerRecordType
      36. GetNextTimerRecordBegin
      37. GetNextRecordTimerEnd
      38. CountWebinterfaceStreams
      39. TestBasicFunctions
      40. MainScript
      41. root@dm820:~#
      Alles anzeigen

      ein Testlauf der mir die Inhalte der Variablen anzeigt sieht dann so aus


      Brainfuck-Quellcode

      1. root@dm820:~# /usr/local/bin/dreamciplus_test.sh test
      2. VARIABLE TYPE VALUE human readable
      3. -----------------------------------------------------------------------------------
      4. RESTSTART bolean false
      5. CURRENTTIME integer 1730622040 2024.11.03 09:20:40
      6. STOPTIME integer 1730708440 2024.11.04 09:20:40
      7. RECORDINGS integer 0
      8. CURRENT_RECORDINGS_TYPE_RECORD integer 0
      9. CURRENT_RECORDINGS_TYPE_ZAP integer 0
      10. CURRENT_RECORDINGS_RECORD_END integer -
      11. PENDING_TIMERS integer 0
      12. PENDING_TIMERS_TYPE_RECORD integer 0
      13. PENDING_TIMERS_TYPE_ZAP integer 0
      14. PENDING_TIMERS_RECORD_BEGIN integer -
      15. PENDING_TIMERS_RECORD_END integer -
      16. NEXT_TIMERS integer 0
      17. NEXT_TIMERS_TYPE_RECORD integer 0
      18. NEXT_TIMERS_TYPE_ZAP integer 0
      19. NEXT_TIMER_RECORD_BEGIN integer -
      20. NEXT_TIMER_RECORD_END integer -
      21. STREAMS integer 0
      22. root@dm820:~#
      Alles anzeigen
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Fred Bogus Trumper ()

    • Hehe, du gehst aber in die Vollen.

      Wichtig wäre meines Erachtens, die wichtigen Aufnahmen/Timern von den unwichtigen zu unterscheiden. Wichtig sind Aufnahmen/Timer von den Sendern, die durch das CI-Modul entschlüsselt werden (in meinem Fall alle Sky-Sender). Die unwichtigen wären die ÖR und die HD+ (da durch Oscam entschlüsselt). Kriegt man das ermittelt?
    • entweder über den Service Namen oder die Service Referenz - über die Caid bin ich mir jetzt nicht sicher ob das über die Timerlist gut funktioniert.

      die Liste der Service Namen, Service Referenzen müsste man (in einer Datei) selbst pflegen - da kann ja für jeden anders sein manche entschlüsseln auch ORF mit einem Modul

      d.h. in etwa schematisch

      Wenn ServiceName oder ServiceReferenz in Liste, dann verschiebe dreamciplus restart, sonst dreamciplus restart

      gibt es nicht für ciplus ein config file, in dem die zu entschlüsselnden Sender, Caids etc. eingetragen sind? Vielleicht kann man die Datei auslesen

      Ich würde dann aber ein Beispiel benötigen, ich verwende kein CI+
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

    • Die Servicereferenz und den Servicenamen einer Aufnahme kann man aus der Timerlist auslesen

      Der Servicename erscheint mir für ein Filtern nicht geeignet, weil er keine Leezeichen enthält, also z.B. "arteHD" anstatt "arte HD"
      Aber über die Sericereference könnte man gut filtern. Wenn man ein Bouquet erstellt in das man alle Sender einfügt, die über CI+ entschlüsselt werden kann man über die Bouquetliste filtern ob die Servicereference einer Aufnahme auf der "Black List" steht

      Ich habe mir mal alle Servicereferencen aller laufenden Aufnahmen ausgeben lassen, in dem Fall
      1:0:19:283E:3FB:1:C00000:0:0:0: 1:0:19:132F:3EF:1:C00000:0:0:0:

      Dann kann man über das Script prüfen ob die Servicereference(n) in der Bouquetliste "Ci+" enthalten sind
      falls nein -> dreamciplus restart
      falls mindestens eine geblacklistete Servicereference gefunden wird -> dreamciplus restart verschieben




      Brainfuck-Quellcode

      1. root@dm900:~# dreamciplus_test.sh test
      2. VARIABLE TYPE VALUE human readable
      3. -------------------------------------------------------------------------------------------
      4. RESTSTART bolean false
      5. CURRENTTIME integer 1730646085 2024.11.03 16:01:25
      6. STOPTIME integer 1730732475 2024.11.04 16:01:15
      7. CURRENT_RECORDINGS integer 3
      8. CURRENT_RECORDINGS_TYPE_RECORD integer 2
      9. CURRENT_RECORDINGS_TYPE_ZAP integer 1
      10. CURRENT_RECORDINGS_TYPE_RECORD_SN string arteHD ORF1HD
      11. CURRENT_RECORDINGS_TYPE_RECORD_SR string 1:0:19:283E:3FB:1:C00000:0:0:0: 1:0:19:132F:3EF:1:C00000:0:0:0:
      12. CURRENT_RECORDINGS_TYPE_ZAP_SN string ZDFinfoHD
      13. CURRENT_RECORDINGS_TYPE_ZAP_SR string 1:0:19:2BA2:3F2:1:C00000:0:0:0:
      14. CURRENT_RECORDINGS_RECORD_END integer 1730649540 2024.11.03 16:59:00
      15. PENDING_TIMER integer 0
      16. PENDING_TIMER_TYPE_RECORD tinteger 0
      17. PENDING_TIMER_TYPE_ZAP integer 0
      18. PENDING_TIMER_RECORD_BEGIN integer -
      19. PENDING_TIMER_RECORD_END integer -
      20. NEXT_TIMER integer 0
      21. NEXT_TIMER_TYPE_RECORD integer 0
      22. NEXT_TIMER_TYPE_ZAP integer 0
      23. NEXT_TIMER_RECORD_BEGIN integer -
      24. NEXT_TIMER_RECORD_END integer -
      25. STREAMS integer 0
      26. root@dm900:~#
      Alles anzeigen

      Vielleicht hat jemand eine andere Idee
      schön langsam wird das ein Monsterprojekt ...
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

    • ja, der Servicename ist schon ausgeschieden
      über die Servicereference lässt sich das machen

      angenommen die beiden ServiceReferenzen der Aufnahmen aus dem letzten Post wären CIplus Sender und das Bouquet "Favoriten HD" wäre das "Blacklist Bouquet"

      Quellcode

      1. root@dm900:~# BOUQUET="Favoriten HD"
      2. root@dm900:~# USERBOUQUET=$(grep "$BOUQUET" /etc/enigma2/userbouquet*.* | awk -F \: '{print $1}')
      3. root@dm900:~# echo "'"$BOUQUET"'" found in $USERBOUQUET
      4. 'Favoriten HD' found in /etc/enigma2/userbouquet.dbe09.tv
      5. root@dm900:~# CURRENT_RECORDINGS_TYPE_RECORD_SR="1:0:19:283E:3FB:1:C00000:0:0:0: 1:0:19:132F:3EF:1:C00000:0:0:0:"
      6. root@dm900:~# RESTART=true
      7. root@dm900:~# for SR in $CURRENT_RECORDINGS_TYPE_RECORD_SR;do if grep -w $SR $USERBOUQUET &>/dev/null;then RESTART=false;fi;done
      8. root@dm900:~# echo RESTART=$RESTART
      9. RESTART=false
      10. root@dm900:~#

      der restart würde verschoben werden weil mindestens eine ServiceReference gefunden wurde und dadurch RESTART auf false gesetzt wurde

      so könnte man auch 2 Bouquets erstellen um zwischen ciplus0 und ciplus1 zu unterscheiden falls das erforderlich ist
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Fred Bogus Trumper ()

    • Ich hatte damals auch ein Script zusammengestellt, wo abgefragt wurde, ob eine Aufnahme läuft und dann eben kein dreamciplus restart gemacht wird. Dies hatte auch so funktioniert allerdings hatte ich folgendes Problem :
      Dreamciplus restart wurde durchgeführt aber nach kurzer Zeit blieb es stehen ( Bild dunkel )

      Sobald dreamciplus über ein script gestartet wurde stoppte es nach einiger Zeit wieder.
      Befehl über Konsole direkt oder im cron job geht , im script hat es immer abgebrochen.

      ich bin jetzt kein Script Experte , vielleicht habe ich da nur etwas falsch gemacht.

      Bitte probiert es erstmal dreamciplus über ein script zu starten und checkt ob es aktiv bleibt.
      Nicht das ihr zu viel Zeit in ein tolles script/Projekt steckt und dann scheitert es deswegen.

      Gruß
      Mausi
    • Wie hast du im Script den restart durchgeführt? Vielleicht kannst du das mal posten.

      Wegen der Zeit mach' dir keine Sorgen ;)

      Auch wenn das vielleicht alles nichts bringt, aber ich habe auch schon wieder einiges dazugelernt. Die neuen Code Schnipsel sind auch wieder etwas für meine niemals fertig werdenden DreamOS terminal utils :rolleyes:

      Neben den vereinfachten bash Bedingungen habe ich jetzt auch ENDLICH rausgefunden, wie man die Servicereferencen laufender Webinterface und Partnerbox Streams aus der Box in der shell herauskitzeln kann. Einfach war es nicht, weil ein Partnerbox und ein Webinterface streams des selben Senders eine unterschiedliche Servicerefernce haben können. D.h. man muss den Partnerbox Stream wieder auf die "echte" Servicereference zurückbiegen. Denn wenn ein Client auf einen CI+ Sender über die Partnerbox zugreift sollte das das Script auch vielleicht erkennen können. Den ganzen Abend vers....

      Brainfuck-Quellcode

      1. root@dm900:~# dreamciplus_test.sh test
      2. VARIABLE TYPE VALUE human readable
      3. -------------------------------------------------------------------------------------------
      4. RESTSTART bolean false
      5. CURRENTTIME integer 1730673982 2024.11.03 23:46:22
      6. STOPTIME integer 1730760372 2024.11.04 23:46:12
      7. CURRENT_RECORDINGS integer 1
      8. CURRENT_RECORDINGS_TYPE_RECORD integer 1
      9. CURRENT_RECORDINGS_TYPE_ZAP integer 0
      10. CURRENT_RECORDINGS_TYPE_RECORD_SR string 1:0:19:132F:3EF:1:C00000:0:0:0:
      11. CURRENT_RECORDINGS_TYPE_ZAP_SR string
      12. CURRENT_RECORDINGS_TYPE_RECORD_END integer 1730674680 2024.11.03 23:58:00
      13. CURRENT_RECORDINGS_TYPE_ZAP_END integer
      14. PENDING_TIMER integer 0
      15. PENDING_TIMER_TYPE_RECORD integer 0
      16. PENDING_TIMER_TYPE_ZAP integer 0
      17. PENDING_TIMER_RECORD_BEGIN integer
      18. PENDING_TIMER_RECORD_END integer
      19. NEXT_TIMER integer 0
      20. NEXT_TIMER_TYPE_RECORD integer 0
      21. NEXT_TIMER_TYPE_ZAP integer 0
      22. NEXT_TIMER_RECORD_BEGIN integer
      23. NEXT_TIMER_RECORD_END integer
      24. WEBINTERFACE_STREAMS_SR string 1:0:1:4E27:43A:1:C00000:0:0:0: 1:0:19:132F:3EF:1:C00000:0:0:0:
      25. WEBINTERFACE_STREAMS integer 2
      26. root@dm900:~#
      Alles anzeigen
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Fred Bogus Trumper ()

    • Hi Fred,

      hab es nochmals ausprobiert, dreamciplus läuft ca 2 bis 5 Min. dann bleibt dreamciplus stehen.


      Script

      Shell-Script

      1. #!/bin/bash
      2. #für CI Slot 1
      3. if [ -e /tmp/record.* ] ; then
      4. exit
      5. else
      6. dreamciplus stop 1
      7. sleep 15
      8. dreamciplus start 1
      9. fi
      10. exit
      Alles anzeigen
    • Ich habe dies über den cronjob schon Jahre so in betrieb. Funktioniert ja super ( ich lege keine Aufnahmen auf die Neustartzeit )

      Befehl direkt über Telnet oder so wie im Cronjob funktioniert. Nur über ein script den selben Befehl funktioniert es nicht.

      dreamciplus hat auch eine restart Funktion , ich habe mich aber für die stop / start Funktion entschieden. Funktionierte besser.

      Bei neustart der Dreambox wird dreamciplus sofort mitgestartet. Dafür ist der Eintrag in den Settings :

      config.ci.1.start=true

      Das Hauptproblem ist, das nach ca. 6-7 Tage das Bild schwarz blieb, da half dann nur der Neustart von dreamciplus. Deshalb soll dreamciplus automatisch neu gestartet werden, bevor dies eintrifft.

      Quellcode

      1. Service: dreamciplus <start|stop|restart|status|erase> [slot]
    • aus dem Bauch heraus würde ich das versuchen, mit der mipsel 10.32 getestet

      Shell-Script

      1. #!/bin/bash
      2. #für CI Slot 1
      3. if [ -e /tmp/record.* ] ; then
      4. exit 1
      5. else
      6. /usr/bin/dreamciplus 1 --stop --debug 1 > /tmp/ci1_restart.log
      7. sleep 2
      8. /usr/bin/dreamciplus 1 --start --debug 1 >> /tmp/ci1_restart.log
      9. fi
      10. exit 0
      Alles anzeigen
      in /tmp/ci1_retart.log siehtst du dann schon mal sehen ob der Start erfolgreich war

      das sollte dann wohl besser nicht zu finden sein

      [DCP] FAILED CI1: Device or resource busy

      alternativ müsste das auch funktionieren
      /usr/bin/dreamciplus 1 --restart --debug 1 > /tmp/ci1-restart.log
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

      Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von Fred Bogus Trumper ()

    • Hab mal schnell auf der Konsole direkt eingegeben :
      dreamciplus 1 —restart

      es wurde auch neu gestartet , lief dann ca. 6 min. und stoppte einfach wieder.

      dreamciplus erzeugt selbst immer ein Logfile ( wenn aktiviert ) . Dort sieht man auch, das neu gestartet wurde… nur nicht warum es auf einmal stehen bleibt.
    • am script liegt es imho nicht

      d.h. nach einem reboot läuft es eine Weile und nach einem mauellen neustart oder per script neu gestartet stürzt der daemon nach ein paar Minuten ab - und per cron ausgeführt nicht?

      Das klingt aber unlogisch

      ich hab' mal im pyhton code von pineas nachgesehen
      da wird der restart auch nur mit


      dreamciplus restart X
      oder
      dreamciplus stop X
      dreamciplus start X


      ausgeführt


      Wird der daemon dauerhaft am Leben erhalten wenn enigma2 alle z.B. 1-2 Tage neu gestartet wird?

      Das könnte man auch manuell erledigen: Oder per script, wenn die Box im Idle ist, keine Aufnahme läuft oder in den nächsten sagen wir mal 1-2 Minuten geplant ist und die Box dann nach dem enigma2 Neustart auch gleich wieder in den idle mode versetzt.

      Ob ich mit dem script dreamciplus, enigma2 oder gleich die Box neu starte macht im Grunde nicht mehr viel Unterschied.
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Fred Bogus Trumper ()

    • Ich hatte den Code (dreamciplus stop/start) noch nie am Laufen, gerade wegen der Aufnahmeproblematik. ;) Mein Workaround ist seit Jahren, dass die Box automatisch runterfährt bei Inaktivität. Dadurch ist sie allerdings nicht erreichbar für Streams und das ärgert mich. Falls es interessiert, ich habe eine DM7080.

      Letztens - wohl durch zu schnelles Zappen zwischen den Sky-Sendern - kackte dreamciplus ab und ich habe es durch die Konsole wiederbelebt und es lief danach hervorragend. Ich mußte allerdings ein mal den laufenden Sender wechseln, bis Bild kam.
    • Ja ist schon komisch,
      wie gesagt nach dem Neustart der Box bzw. Start von dreamciplus von Konsole aus oder über pineas läuft es so ca. 6-7 Tage.
      Über ein script gestartet läuft es nur ein paar Minuten.

      Ich hatte früher das Elektro Plugin am laufen, hierüber ließ ich die Box alle 2 bis 3 Tage neu starten ( da wird auch geprüft, ob eine Aufnahme läuft .. )

      Nach austauschen von TV / Soundsystem habe ich Hdmi-cec aktiviert damit ich unter Anderem die Lautstärke mit der Dreambox FB steuern kann.

      Problem war, dass durch den Neustart der Dreambox der TV darauf reagierte und mit startete.
      Deshalb habe ich mir die Lösung über den cronjob eingebaut. Somit läuft jetzt die Box dauerhaft durch ( bis zu einem Stromausfall ) . Und ich hatte keine Probleme dass dreamciplus mal hängen blieb. Das habe ich so schon 1 Jahr am laufen.

      Natürlich muss ich darauf achten, falls ich mal eine Aufnahme ( geht ja nur um die CI+ Sender ) mache , das ich die nicht um 6 Uhr morgens mache wo dreamciplus neu gestartet wird.
    • trotzdem eigenartig
      es sollte keinen Unterschied machen ob der comand aus einem cron Job heraus abgesetzt wird oder aus einem script, das von einem cron job getriggert wird ...

      Die Hilfe und und der debug level vom dreamciplus binary sind da auch nicht wirklich hilfreich, weil imho "schlampig" programmiert.

      So gesehen kann man es nur testen, ob/wie es über ein script über cron getriggert funktioniert, was ich mangels CI+ Modul aber nicht kann
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

    • Mausi schrieb:

      Problem war, dass durch den Neustart der Dreambox der TV darauf reagierte und mit startete.
      Das Problem kenn ich, also vor dem Schlafen gehen immer den Fernseher über den seitlich am Gerät befindlichen Knopf ausschalten :S .