DreamCiplus automatisiert neustarten

    • In Anlehnung an Mausis Code habe ich meinen etwas angepasst. Mir ist (beim schnellen drüberschauen) aufgefallen, dass alle relevanten Sky-Sender folgendes Servicereferenz-Muster haben: 1:0:19:*:*:85:C00000:0:0:0:
      Davon weichen nur wenige Kinder- und Sport-Sender ab.

      Beim Search-Pattern bin ich mir hinsichtlich der richtigen Anwendung der Wilcards nicht ganz sicher.

      Shell-Script

      1. #!/bin/bash
      2. # trigger restart yes/no
      3. RESTART=false
      4. # create more vars
      5. CURRENTTIME=
      6. STOPTIME=
      7. # current date plus 24h
      8. STOPTIME=$(( $(date +%s) + 86400 ))
      9. # do not interfere with starting recordings at the beginning of a minute
      10. # give it a 30 sec pause
      11. # sleep 30
      12. while true
      13. do
      14. # prevent infinite loop, so check if script has been running for 24h, then stop
      15. CURRENTTIME=$(date +%s)
      16. if (( $CURRENTTIME >= $STOPTIME ))
      17. then
      18. echo "Stopping script after 24h"
      19. break
      20. fi
      21. # check for current recordings
      22. if [ -e /tmp/record.1:0:19:*:*:85:C00000:0:0:0: ] ; then
      23. #if [ -e /tmp/record.* ] ; then
      24. echo "current recording, pause 10 min"
      25. sleep 600
      26. else
      27. RESTART=true
      28. echo "no recordings detected"
      29. break
      30. fi
      31. done
      32. if [ $RESTART ]
      33. then
      34. echo "restart dreamciplus"
      35. # choose your slot and uncomment it
      36. # Slot 0
      37. # dreamciplus stop 0
      38. # dreamciplus start 0
      39. # Slot 1
      40. # dreamciplus stop 1
      41. # dreamciplus start 1
      42. fi
      Alles anzeigen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Boothby ()

    • Ich habe unter der Woche Job bedingt leider wenig Zeit (und Abends dann auch wenig Muse), deshalb ging hier nicht viel weiter

      Ich weiß jetzt zwar nicht, wie die /tmp/record.servicereference erstellt wird, aber dann müsste das reichen:

      Wenn ls eine Datei mit dem Suchmuster findet (Rückgabewert = true), dann recording = true

      Quellcode

      1. if ls /tmp/record.1:0:19:*:*:85:C00000:0:0:0: &>/dev/null; then
      2. echo "current recording, pause 10 min"
      3. sleep 600
      4. else
      5. .
      6. .

      Man kann das auch über Variablen (in einer Prüfschleife) lösen, ohne temporäre Dateien zu erstellen. Wenn ich bei meiner naming convention bleibe:

      CURRENT_RECORDINGS_TYPE_RECORD_SR = Servicereferenz oder Liste der Servicereferencen auf die gerade eine Aufnahme läuft

      Quellcode

      1. if grep "1:0:19:\|*:\|*:85:C00000:0:0:0:" <<< "$CURRENT_RECORDINGS_TYPE_RECORD_SR" &>/dev/null; then
      2. echo "current recording, pause 10 min"
      3. sleep 600
      4. else
      5. .
      6. .


      Ganz untätig war ich aber auch nicht. Man könnte über die lamedb herausfinden, welcher caid der Servicereference die gerade aufgenommen wird zugeordnet ist. Dann könnte man über die caid(s) filtern und könnte sich das mit dem CI+ Bouquet sparen.

      Allerdings ist das (noch) etwas holprig, weil die Servicereference in der lamedb dezimal bzw. nach einem anderen Muster gespeichert ist, während der Serviereference string in engima2 eine Mischung aus Hex und Dezimal zahlen in anderer Anordnung ist . Das sind dann wieder ein paar Code Zeilen mehr weil man die Servicereference erst "umrechnen muss", um mit dem Ergebnis in der lamedb zu suchen ...
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

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

    • Ja, die lamedb kenn ich. Die hatte ich mal genutzt um aus der Playlist von TV Headend ein Bouquet zu zaubern. Ich hatte das Script aber in PHP geschrieben, da das auf CLI immer noch meine bevorzugte Scriptsprache ist. Man nimmt halt, was man gewöhnt ist.
    • Ich hab noch eine Logging Funktion ergänzt. Schön wäre, wenn die Service-Referenz der laufenden Aufname noch mit geloggt werden könnte.

      Shell-Script

      1. #!/bin/bash
      2. # trigger restart yes/no
      3. RESTART=false
      4. # create more vars
      5. CURRENTTIME=
      6. STOPTIME=
      7. # day of the week
      8. DOW=$(date +%u)
      9. # Log file name
      10. LOG_FILE="/var/log/dreamciplus/$DOW.log"
      11. log () {
      12. LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
      13. if [[ "$1" == "start" ]] ; then
      14. PARENTDIR=$(dirname "$LOG_FILE")
      15. mkdir -p $PARENTDIR
      16. echo "[$LOGTIME] Starting script"
      17. echo "[$LOGTIME] Starting script" >$LOG_FILE 2>&1
      18. else
      19. echo "[$LOGTIME] $1"
      20. echo "[$LOGTIME] $1" >>$LOG_FILE 2>&1
      21. fi
      22. }
      23. log "start"
      24. # current date plus 24h
      25. STOPTIME=$(( $(date +%s) + 86400 ))
      26. while true
      27. do
      28. # prevent infinite loop, so check if script has been running for 24h, then stop
      29. CURRENTTIME=$(date +%s)
      30. if (( $CURRENTTIME >= $STOPTIME ))
      31. then
      32. log "Stopping script after 24h"
      33. break
      34. fi
      35. # check for current recordings
      36. if ls /tmp/record.1:0:19:*:*:85:C00000:0:0:0: &>/dev/null; then
      37. #if [ -e /tmp/record.1:0:19:*:*:85:C00000:0:0:0: ] ; then
      38. #if [ -e /tmp/record.* ] ; then
      39. log "current recording, pause 10 min"
      40. sleep 600
      41. else
      42. RESTART=true
      43. log "no recordings detected"
      44. break
      45. fi
      46. done
      47. if [ $RESTART ]
      48. then
      49. log "restart dreamciplus"
      50. # choose your slot and uncomment it
      51. # Slot 0
      52. # dreamciplus stop 0
      53. # sleep 5
      54. # dreamciplus start 0
      55. # Slot 1
      56. # dreamciplus stop 1
      57. # sleep 5
      58. # dreamciplus start 1
      59. fi
      60. log "end script"
      61. exit 0
      Alles anzeigen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Boothby ()

    • ja, das ist der spannende Teil

      das könnte man mit einem Webinterface command lösen, man holt sich zuerst die Session ID und dann die enigma2 timerlist und schreibt diese in eine Variable - dann muss man sie nur einmal herunterladen und kann mit der Variable arbeiten und alle benötigten Informationen auslesen:

      - laufende Aufnahme(n) ja/nein
      - Umschalt Timer ja/nein
      - Aufnahme Timer ja/nein
      - wenn aufgenommen wird, die Servicerereference/n) der laufenden Aufnahme(n) (es könnten auch mehrere sein) auslesen und mit einer Liste der CI+ Servicereferencen vergleichen (manuell erstellte Liste, CI+ Bouquet, caid liste aus lamedb gefiltert usw.)

      All diese Informationen kann man aus der Webinterface Timerliste herausfiltern und im Prüflauf verwenden

      Meine Frage:
      Willst du einen fertigen Code oder Tipps wie man an diese Informationen kommt bzw. kommen kann?
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

    • Ich dachte mehr an diesen Codeschnipsel

      Quellcode

      1. if ls /tmp/record.1:0:19:*:*:85:C00000:0:0:0: &>/dev/null; then
      Kriegt man das Ergebnis der Suche nicht in eine Variable gespeichert und alles ab dem Punkt extrahiert?
    • Wie / woher bekommst du die Datei /tmp/record.1:0:19:*:*:85:C00000:0:0:0: ?

      Ich hatte vorhin einen Tipp bekommen, das pineas sehr "gesprächig" sein soll und einiges nach /tmp loggt und das Rad nicht neu erfunden werden müsste.

      Vielleicht kannst du ja ein paar Beispiel logfiles hochladen

      Wenn pineas die files record.<serivicereference> nach /tmp beim Start einer Aufnahme erstellt und beim Beenden der Aufnahme wieder löscht sollte dein code eigentlich schon funktionieren.

      Da ich pineas nicht nutze bzw. kein CI+ Modul zur Verfügung habe um das vor Ort zu testen, kann ich nur mit dem arbeiten was mir zur Verfügung steht. Aber ich kann gerne bei der Umsetzung mithelfen - aber dazu benötige ich eben auch die Informationen. Vielleicht ist das alles "einfacher" als von mir angenommen ....
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

    • pineas sagt mir gar nichts, mußte ich erstmal googeln. Ich habe immer noch das Plugin von gutemine.

      Ist die Datei /tmp/record.* nicht Stock-Firmware? Zumindest tauchen da auch Aufnahmen von Nicht-Sky-Sendern auf.


      In der /tmp/record.* steht die Service-Referenz.
      Dateien
    • wird die Datei automatisch gelöscht, wenn die Aufnahme beendet wird?

      kannst ja einfach testen, Aufname ci+ sender starten, in /tmp nachsehen, aufnahme stoppen und nachsehen ob in /tmp die .txt auch entfert wird

      sonst sieh mal so nach

      ls -al /tmp

      das zeigt dann auch die hidden files an, also mit einen "." vor dem Dateinamen
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

    • Boothby schrieb:

      Ist die Datei /tmp/record.* nicht Stock-Firmware? Zumindest tauchen da auch Aufnahmen von Nicht-Sky-Sendern auf.
      Erst jetzt gesehen. Nein, das ist nicht "Stock-Firmware". Mir wäre das noch nie aufgefallen und ich hatte jetzt mal ohne dreamciplus/pineas/autopin eine Timer Aufnahme gestartet. Es wird dabei kein /tmp/record* file erstellt.

      Sieht aus, als ob das von dreamciplus/pineas/autopin erzeugt wird. Somit müsste das script bereits funktionieren.

      Solange in /tmp ein file gefunden wird, das mit "record.1:0:19:" beginnt und mit ":85:C00000:0:0:0" endet wird der dreamciplus Neustart verschoben und falls nicht neu gestartet.
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

    • So der Plan. Und wie komme ich jetzt an die Service-Referenz aus dem Dateinamen? Für dich sicherlich ein One-Liner, den du bei 40° Fieber locker aus dem Ärmel schüttelst, für mich 2h Recherche und Rumprobieren.
    • jetzt stehe ich am Schlauch ...

      der Dateiname beinhaltet doch bereits die Servicereference und in der .txt steht sie auch noch einmal - zumindest lt. deinem Beinspiel.

      D.h. wenn du eine Sky Aufnahme startest, die über CI+ entschlüsselt wird, müsste die entsprechende Servicereference Datei in /tmp auftauchen

      d.h wenn

      if ls /tmp/record.1:0:19:*:*:85:C00000:0:0:0: &>/dev/null; then

      true ergibt, ist RESTART=false

      wenn false (also es wurde keine entsprechende Datei erstellt)

      RESTART=true
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

    • ach so, dann habe ich das wirklich missverstanden bzw. stand am Schlauch ...

      das kannst du in etwa so lösen

      Quellcode

      1. if ls /tmp/record.1:0:19:*:*:85:C00000:0:0:0: &>/dev/null; then
      2. for TMP_FILE in $(ls /tmp/record.1:0:19:*:*:85:C00000:0:0:0:)
      3. do
      4. log "found recording on servicereference: $(cat $TMP_FILE)"
      5. done
      6. log "current recording, pause 10 min"
      7. sleep 600
      8. else
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox