DreamCiplus automatisiert neustarten

    • DreamCiplus automatisiert neustarten

      Gibt's die Tools irgendwo zum Download?

      ich suche nach einer Möglichkeit, damit dieser code mir keine Aufnahme zerstört.

      edit by Joey:
      Beitrag+Folgebeiträge ausgeschnitten aus DreamOS terminal utils

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Boothby () aus folgendem Grund: Beiträge in eigenen Thread verschoben

    • nein, dazu ist es nie gekommen. Liegt auch daran, dass DP mit dem python script dreamboxctl vieles davon abdeckt, wenn auch nicht so umfachreich

      Quellcode

      1. root@two:~# dreamboxctl
      2. usage: dreamboxctl [-h]
      3. {screenshot,recordings,currentService,play,pause,resume,stop,duration,position,volume,shutdown,reboot,recovery,restart}
      4. ...
      5. dreamboxctl: error: too few arguments
      6. root@two:~#




      Wenn ich das richtig verstehe, lässt du per cronjob das dreamciplus neu starten, was natürlich keine Rücksicht darauf nimmt ob eine Aufnahme läuft oder nicht

      Im Grunde müsste man das in ein script packen und abfragen ob eine Aufnahme läuft - falls ja den restart verschieben

      Man könnte mit dreamboctl recordings mit "Boardmitteln" in einer Schleife abfragen ob eine Aufnahme/Stream läuft, falls ja den den dreamciplus restart für z.B. für 10 Minuten verschieben und dann erneut versuchen bis der Rückgabewert des commands 0 ist.

      Quellcode

      1. root@two:~# dreamboxctl recordings
      2. 1
      3. root@two:~#

      Der Rückgabewert 0 bedeutet, das weder eine Aufnahme noch ein Stream über das Webinterface läuft - da macht dreamboxctl (leider) keinen Unterschied. D.h. der Rückgabewert 1 bedeutet, dass entweder eine Aufnahme läuft oder ein Webinterface Stream aktiv ist.

      Wenn man nur die laufenden Aufnahmen ohne aktive Streams zählen will, kann man dass über einen Webinterface command im Terminal oder per script abfragen - dafür muss aber das Paket curl installiert sein:

      Quellcode

      1. SESSIONID=$(curl -s -X POST "http://localhost/web/session"|grep e2sessionid|sed 's/e2sessionid\|<\|>\|\///g')
      2. RECORDINGS=$(curl -s -X POST "http://localhost/web/timerlist?&sessionid=$SESSIONID"|grep e2state|grep -c ">2<")


      die aktiven Webinterface Stream Sessions erhählt man, wenn man die streamproxy prozesse zählt

      Quellcode

      1. STREAMS=$(pgrep -c streamproxy)


      Dann einfach script in einer Schleife den Rückgabewert der Variable(n) $RECORDINGS (AND $STREAMS) abfragen und erst dann dreamciplus neu starten, wenn $RECORDINGS (und gegebenenfalls $STREAMS) den Wert 0 hat bzw. haben.
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

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

    • Danke. Hab mal was gebastelt.

      Shell-Script: /usr/local/bin/dreamciplus.sh

      1. #!/bin/bash
      2. # trigger restart yes/no
      3. restart=false
      4. # current date plus 24h
      5. stoptime=$(( $(date +%s) + 86400 ))
      6. # do not interfere with starting recordings at the beginning of a minute
      7. # give it a 30 sec pause
      8. sleep 30
      9. while true
      10. do
      11. # prevent infinite loop, so check if script has been running for 24h, then stop
      12. currentTime=$(date +%s)
      13. if (( currentTime >= stoptime ))
      14. then
      15. echo "Stopping script after 24h"
      16. break
      17. fi
      18. # check for current recordings
      19. hasRecording=$(dreamboxctl recordings)
      20. # no recording, no stream
      21. if (( hasRecording == 0 ))
      22. then
      23. restart=true
      24. echo "no recordings detected"
      25. break
      26. else
      27. SESSIONID=$(curl -s -X POST "http://localhost/web/session"|grep e2sessionid|sed 's/e2sessionid\|<\|>\|\///g')
      28. RECORDINGS=$(curl -s -X POST "http://localhost/web/timerlist?&sessionid=$SESSIONID"|grep e2state|grep -c ">2<")
      29. STREAMS=$(pgrep -c streamproxy)
      30. #echo $STREAMS
      31. #echo $RECORDINGS
      32. #if [ $STREAMS ] && ! [ $RECORDINGS ]
      33. if (( STREAMS > 0 && RECORDINGS == 0))
      34. then
      35. echo "stream detected, but no recording"
      36. restart=true
      37. break
      38. fi
      39. # current recording, pause 10 min
      40. echo "current recording, pause 10 min"
      41. sleep 600
      42. fi
      43. done
      44. if [ $restart ]
      45. then
      46. echo "restart dreamciplus"
      47. # choose your slot and uncomment it
      48. # Slot 0
      49. # dreamciplus stop 0
      50. # dreamciplus start 0
      51. # Slot 1
      52. # dreamciplus stop 1
      53. # dreamciplus start 1
      54. fi
      Alles anzeigen

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

    • Grundsätzlich schon, aber noch nicht im Dauereinsatz. Da wollte ich, dass jemand mit bisschen mehr Ahnung als ich, drüber schaut. Shell-Scripting ist nicht so meins.
    • ah, ok

      auf den ersten Blick sieht es gut aus, ich kann es mir ja mal genauer unter die Lupe nehmen
      Du kannst es ja selbst testen, indem du Aufnahmen, Streams startest und dann das script manuell startest und statt dem restart eine echo ausgibst, das beschreibt was ausgeführt werden würde

      wenn du dann noch das sleep auf z.B. 20 sekunden runterschraubst kannst du laufende Aufnahmen/Streams beenden und testen was dann das script ausspuckt. So mache ich das auch immer.


      Was mir aufgefallen ist:
      das script läuft wegen dem sleep 600 u.U. im stundenlangen Dauerloop wenn eine Aufnahme oder ein Stream läuft

      Vielleicht wäre es besser das script in einem subprozess mit einem vorgestellten sleep 600 erneut zu starten und das laufende script sauber zu beenden

      Aber das ist vermutlich Geschmackssache


      Man könnte das auch noch aufwändiger dafür zielgenauer scripten, indem man die Endzeit der laufenden Aufnahme ausliest und mit der aktuellen Zeit vergleicht. Dann kann man die sleep time errechnen:

      endtime - currenttime = sleep time

      das gilt dann aber nur für Timer bzw. Sofort Aufnahmen aber nicht für Streams, da weiß man ja nicht wie lange die aktiv sind.

      Dann könnte man noch eine Prüfung einbauen, ob eine weitere Aufnahme vor der endtime der laufenden Aufnahme startet ...
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

    • Mit kürzeren sleeps zu testen hatte ich bereits gemacht, auch mal Timer starten, stream starten etc. Das funktioniert. :)

      Deine anderen Vorschläge klingen interessant, übersteigen aber bei weitem meine Möglichkeiten. Ergänzend würde ich noch die Timer abchecken, die das betrifft, also in meinem Fall nur die Sky-Sender.
    • das wird vermutlich nicht funktionieren, da sind einige Fehler eingebaut bzw. wird einiges vermischt

      if (( STREAMS > 0 && RECORDINGS == 0))

      • die Variablen werden nicht korrekt angegeben, müsste $STREAMS und $RECORDINGS heissen
      • if verlangt [ und kein (, das if [ bedingung ] entspricht einem if test bedingung, dann kann man die [] weglassen. Wichtig ist auch immer ein Leerzeichen nach [ und ein Leerzeichen vor dem ], sonst wird ein Fehler ausgespuckt bzw. funktioniert die Bedingungsprüfung nicht
      • ">" bzw. "<" ist kein gültiger Vergleichsoperator für (ba)sh Bedingungen, dafür verwendet man -gt (greater than), -lt (less then), -ge (greater or equal), -le (less or equal) usw.
      • das && passt hier auch nicht rein, das entspricht einem if bedingung = true; then do

        hier wäre -a korrekt, dass entspricht einem AND, also wenn Bedingung A und Bedingung B zutrifft
        -o enspricht einem OR - also wenn entweder Bedingung A oder Bedingung B zutrifft

        siehe z.B. Bedingungsprüfungen


      das müsste also nach deinem Konzept in etwa so mit korrekter Syntax aussehen (ungetestet):

      if [ $STREAMS -gt 0 -a $RECORDINGS = 0 ]; then

      Da ist aber vermutlich ein logischer Fehler enthalten:
      Das bewirkt, dass dreamciplus nur dann neu gestartet wird, wenn keine Aufnahme aber jedoch mindest ein Stream läuft! Wenn aber weder eine Aufnahme noch ein Stream läuft wird dreamciplus NICHT neu gestartet! Das ist vermutlich nicht der Wunsch.

      Wenn dir die laufenden Streams egal sind, lass die Prüfung einfach weg, das macht es übersichtlicher
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

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

    • Ich nehme alles wieder zurück, ich hab grad etwas dazugelernt ;)

      Diese Art der Bedingungsprüfung bzw. Vergleich von Zahlen in einem Shell Script kannte ich noch nicht, aber das funktioniert ja wirklich :D




      Ich hätte da eine Frage zum logischen Aufbau:

      du prüfst mit dreamboxctl recordings ob eine Aufnahme läuft, die Ausgabe ist dann 0, 1, 2 usw.

      Dann kommt die Bedingungsprüfung: Wenn keine Aufnahme läuft dann ist restart true, wenn eine läuft dann prüfst du über meinen Webinterface Command ein 2. Mal ob eine Aufnahme läuft.

      Wozu die zweite Prüfung?
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

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

    • Naja, ich hatte mich hieran orientiert: ;) Ich hatte nun gar keine Ahnung von Shell-Scripten und habe nach den Vergleichsoperatoren für Integer gesucht ;)

      zu deiner Frage:
      Du sagtest, dass dreamboxctl recordings sowohl Streams als auch Aufnahmen zurückgibt, also prüfe ich erstmal ob 0 rauskommt. Ich gehe jetzt mal davon aus, dass dreamboxctl recordings etwas performanter als ein Regex auf ein per curl gezogenes Webinterface ist. Für meinem Use-Case würde ich das Scipt morgens um kurz nach 3:00 Uhr laufen lassen und da laufen weniger Aufnahmen und Streams dürften gar nicht laufen. Also ist das der schnellste Weg, das Script zu beenden.


      Falls kein 0 ausgegeben wird, will ich, dass nur Aufnahmen berücksichtigt werden. Streams sind mir egal, kurzes Flackern im Bild sollte - zumal um nachts um 3:00 Uhr, oder wenn der Restart Code dann irgendwann vormittags läuft - nicht weiter stören. In Aufnahmen möchte ich das natürlich nicht haben. Ist vielleicht etwas doppelgemoppelt und dann könnte ich die erste Abfrage mittels dreamboxctl recordings weg lassen. ;)


      Außerdem hast du mir freundlicherweise so viele Tools an die Hand gegeben, die mußten einfach alle in mein Script. :D
    • ah verstehe :D

      ich habe das mal auf meiner dm820 getestet - werden nur die Vergleichsoperatoren > und < und == aktzeptiert, => und =< spuckt einen Fehler aus, allerdings scheint die Prüfung dennoch zu funktionieren.

      Und weniger ist oft mehr ;)

      Ich suche gerade nach einer "einfachen" Lösung die Endzeit einer laufenden Aufnahme auszulesen, mal sehen
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

    • Was neben deiner vereinfachten Bedingungsprüfung bzw. vergleichen von Zahlen unter anderen Umständen nicht funktionieren wird ist deine Verwendung bzw. Aufruf der Varablen. Beim Aufruf muss man der gesetzten Variable ein "$" vorstellen, sonst sucht die shell nach einem programm oder einer funktion


      also

      Quellcode

      1. a="Hello"
      2. echo "$a"


      und nicht

      Quellcode

      1. a="Hello"
      2. echo "a"



      zweiteres würde nur "a" ausgeben

      also besser statt
      if (( currentTime >= stoptime ))
      muss das heissen
      if (( $currentTime >= $stoptime ))

      statt
      if (( hasRecording == 0 ))
      dann
      if (( $hasRecording == 0 ))

      und statt
      if (( STREAMS > 0 && RECORDINGS == 0))
      dann
      if (( $STREAMS > 0 && $RECORDINGS == 0))



      Was auch immer empfehlenswert ist: veränderbare Variablen am Beginn des Scripts auf 0 oder auf leer zu setzen

      Quellcode

      1. restart=false
      2. currentTime=
      3. hasRecording=
      4. STREAMS=
      5. RECORDINGS=
      Ich verwende für die einfachere Lesbarkeit immer nur Großbuchstaben für VARIABLEN
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

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

    • ich habe mir das mal genauer angesehen

      man kann über die http://localhost/web/timerlist die Endzeit einer bzw der laufenden Aufnahmen auslesen und so aus der spätesten Timer Endzeit - akueller Zeit die sleep Zeit erreichnen

      man kann auch so prüfen ob eine Timer Aufnahme vor der letzten aktellen Aufnahmeendzeit startet und so einfach die Entzeit der nächsten Aufnahme als Berechnungsgrundlage verwendet. Ausser es handelt sich um einen Umschalt Timer - auch das kann man auslesen (<e2justplay>1</e2justplay> = Umschalttimer JA, <e2justplay>0</e2justplay> = Umschalttimer NEIN)


      Aber dann wird das Script ganz schön aufgeblasen und sollte den Code von Anfang an aufgeräumt halten und mit Funktionen arbeiten

      Zum Verständnis:

      mit curl -s -X POST "http://localhost/web/timerlist?&sessionid=$SESSIONID"|grep e2state


      wird der e2state alle Timer Einträge ausgelesen

      Quellcode

      1. root@dm820:~# curl -s -X POST "http://localhost/web/timerlist?&sessionid=$SESSIONID"|grep e2state
      2. <e2state>2</e2state>
      3. <e2state>1</e2state>
      4. <e2state>0</e2state>
      5. <e2state>3</e2state>
      6. <e2state>3</e2state>
      7. root@dm820:~#


      <e2state> kann vier Werte haben


      0 = Aufnahme oder Umschalttimer in der Zukunft
      1 = Aufnahme oder Umschaltimer in Vorbereitung - der Wert wechselt ca. 20 Sekunden vor Timerbeginn den Wert von 0 auf 1
      2 = laufende Aufname
      3 = erledigte Aufnahme oder Umschalttimer


      Wenn man nun nach einem <e2state> Wert filtert UND sich 20 Zeilen vor und 5 Zeilen nach dem <e2state> ausgeben lässt hat man alle Informationen zur diesem bzw. diesen Timer Einträgen und kann Beginn, Endzeit, Service Referenz, Service Name, Umschalttimer ja/nein uvm. auslesen und damit rechnen oder restart auf true oder false setzen

      Falls mehrere Timer ausgegeben werden ist an oberster Stelle immer der nächste Timer

      Quellcode

      1. root@dm820:~# curl -s -X POST "http://localhost/web/timerlist?&sessionid=$SESSIONID"|grep -B 20 -A 5 "e2state>0<"
      2. <e2servicereference>1:0:19:2B66:3F3:1:C00000:0:0:0:</e2servicereference>
      3. <e2servicename>ZDF HD</e2servicename>
      4. <e2eit>14775</e2eit>
      5. <e2name>Der Alte</e2name>
      6. <e2description>Verantwortung</e2description>
      7. <e2descriptionextended>Krimi, Deutschland 2022�Als die Leiche des ehemaligen Bundeswehroffiziers Viktor Dombach gefunden wird, führen die Ermittlungen in einen Freundeskreis, in dem jeder Geheimnisse zu hüten scheint.��Der ehemalige Soldat wurde in seinem Wohnzimmer mit einem Bundeswehrmesser erstochen - deutet das auf einen Mord unter ehemaligen Kameraden hin? Bei einem Einsatz unter Viktors Leitung war vor Jahren dessen Freund und Kamerad Gerhard Jürgens ums Leben gekommen.�Darsteller:�Hauptkommissar Richard Voss - Jan-Gregor Kremp�Annabell Lorenz - Stephanie Stumph�Tom Kupfer - Ludwig Blochberger�Dr. Franziska Sommerfeld - Christina Rainer�Julia Lulu Zhao - Yun Huang�Klara Jürgens - Alma Leiberg�Regie: Michael Kreindl�Buch/Autor: Claus Stirzenbecher�Kamera: Michael Boxrucker�Schnitt: Nina Meister, Nathalie Pürzer�Musik: Robert Schulte-Hemming, Jens Langbein�HD-Produktion</e2descriptionextended>
      8. <e2disabled>0</e2disabled>
      9. <e2timebegin>1730580300</e2timebegin>
      10. <e2timeend>1730583900</e2timeend>
      11. <e2duration>3600</e2duration>
      12. <e2startprepare>1730580280</e2startprepare>
      13. <e2justplay>0</e2justplay>
      14. <e2afterevent>3</e2afterevent>
      15. <e2location>/media/hdd/movie/</e2location>
      16. <e2tags></e2tags>
      17. <e2logentries>[(1730562875, 15, 'record time changed, start prepare is now: Sat Nov 2 21:44:40 2024')]</e2logentries>
      18. <e2filename></e2filename>
      19. <e2backoff>0</e2backoff>
      20. <e2nextactivation></e2nextactivation>
      21. <e2firsttryprepare>True</e2firsttryprepare>
      22. <e2state>0</e2state>
      23. <e2repeated>0</e2repeated>
      24. <e2dontsave>0</e2dontsave>
      25. <e2cancled>False</e2cancled>
      26. <e2toggledisabled>1</e2toggledisabled>
      27. <e2toggledisabledimg>off</e2toggledisabledimg>
      28. root@dm820:~#
      Alles anzeigen
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

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

    • Super, jetzt haben sich unsere Beträge wg. 2 Minunte wieder mal überschnitten ....

      sorry

      in welchem Post (#) ist deine neue Version?


      ich habe meine Version hier wieder rausgenommen

      ah gefunden,

      wg. der Nachvollziehbarkeit das nächste man am Ende anhängen, sonst wird das später für einen der das liest nicht mehr nachvollziebar
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

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

    • ja, das sieht jetzt schon gut aus

      Aber dieser Part stimmt noch immer nicht, da ist noch immer der logische Fehler enthalten

      Quellcode

      1. if (( $STREAMS > 0 && $RECORDINGS == 0))
      2. then
      3. echo "stream detected, but no recording"
      4. RESTART=true
      5. break
      6. fi


      Hier willst du dreamciplus neu starten, weil RECORDINGS den Wert 0 hat

      aber deine If Abfrage restartet dreamciplus nur dann, wenn $STREAM einen Wert größer 0 UND $RECORDINGS genau den Wert 0 hat

      Wenn aber beides den Wert 0 hat - was ja best case ist - wird dreamciplus NICHT neu gestartet

      das lässt sich einfach testen:

      Quellcode

      1. root@dm820:~# STREAMS=0
      2. root@dm820:~# RECORDINGS=0
      3. root@dm820:~# if (( $STREAMS > 0 && $RECORDINGS == 0));then echo force restart;else echo postpone restart;fi
      4. postpone restart
      5. root@dm820:~#

      Die Bedingung müsste also lauten:

      if (( $RECORDINGS == 0 ))
      oder
      if [ $RECORDINGS = 0 ];

      Quellcode

      1. root@dm820:~# if [ $RECORDINGS = 0 ];then echo force restart;else echo postpone restart;fi
      2. force restart
      3. root@dm820:~# if (( $RECORDINGS == 0 ));then echo force restart;else echo postpone restart;fi
      4. force restart
      5. root@dm820:~#



      ob ein stream läuft ist dir ja lt. letzten posts egal
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

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

    • Gut, dann am Ende

      Shell-Script

      1. #!/bin/bash
      2. # trigger restart yes/no
      3. RESTART=false
      4. # create more vars
      5. CURRENTTIME=
      6. STOPTIME=
      7. HASRECORDING=
      8. STREAMS=
      9. RECORDINGS=
      10. # current date plus 24h
      11. STOPTIME=$(( $(date +%s) + 86400 ))
      12. # do not interfere with starting recordings at the beginning of a minute
      13. # give it a 30 sec pause
      14. sleep 30
      15. while true
      16. do
      17. # prevent infinite loop, so check if script has been running for 24h, then stop
      18. CURRENTTIME=$(date +%s)
      19. if (( $CURRENTTIME >= $STOPTIME ))
      20. then
      21. echo "Stopping script after 24h"
      22. break
      23. fi
      24. # check for current recordings
      25. HASRECORDING=$(dreamboxctl recordings)
      26. # no recording, no stream
      27. if (( $HASRECORDING == 0 ))
      28. then
      29. RESTART=true
      30. echo "no recordings detected"
      31. break
      32. else
      33. SESSIONID=$(curl -s -X POST "http://localhost/web/session"|grep e2sessionid|sed 's/e2sessionid\|<\|>\|\///g')
      34. RECORDINGS=$(curl -s -X POST "http://localhost/web/timerlist?&sessionid=$SESSIONID"|grep e2state|grep -c ">2<")
      35. STREAMS=$(pgrep -c streamproxy)
      36. #echo $STREAMS
      37. #echo $RECORDINGS
      38. #if [ $STREAMS ] && ! [ $RECORDINGS ]
      39. if (( $STREAMS > 0 && $RECORDINGS == 0))
      40. then
      41. echo "stream detected, but no recording"
      42. RESTART=true
      43. break
      44. fi
      45. # current recording, pause 10 min
      46. echo "current recording, pause 10 min"
      47. sleep 600
      48. fi
      49. done
      50. if [ $RESTART ]
      51. then
      52. echo "restart dreamciplus"
      53. # choose your slot and uncomment it
      54. # Slot 0
      55. # dreamciplus stop 0
      56. # dreamciplus start 0
      57. # Slot 1
      58. # dreamciplus stop 1
      59. # dreamciplus start 1
      60. fi
      Alles anzeigen


      Das wurde hier bereits abgefackelt

      Shell-Script

      1. HASRECORDING=$(dreamboxctl recordings)
      2. # no recording, no stream
      3. if (( $HASRECORDING == 0 ))
      4. then
      5. RESTART=true
      6. echo "no recordings detected"
      7. break
      8. else

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

    • ja, aber dann ist die zweite Abfrage reduntant bzw. doppelt gemoppelt und führt unter extremst unwahrscheinlichen Umständen sogar zu einem Fehlverhalten:





      Wenn die if Abfrage if (( $HASRECORDING == 0 )) bereits zutrifft - also $RECORDINGS den Wert 0 hat, wird der else part nicht mehr berücksichtigt und das Script geht bei if [ $RESTART ] weiter


      Wenn die if Abfrage if (( $HASRECORDING == 0 )) nicht zutrifft - also $RECORDINGS den Wert ungleich 0 hat, dann kommt der else part zum Tragen.

      Dann fragst du noch einmal mit einem anderen Befehl RECORDINGS ab, obwohl du bereits weisst, dass dieser größer als 0 ist

      Dann prüfst du auch noch die Anzahl der Streams und baust dann eine weitere Bedingung ein.


      Die wird dir aber nur dann den Rückgabewert RESTART=true liefern, wenn der sehr, sehr, sehr unwahrschleinliche = nahezu unmögliche Fall eintritt, dass RECORDINGS im Millisekundenbereich den Wert von >0 auf 0 ändert und ein Stream läuft ( $STREAMS >0 ).

      Und wenn dann aber kein Webinterface stream läuft, wird dreamciplus dennoch NICHT gestartet, obwohl der best case eingetreten ist:

      STREAM=0
      RECORDINGS=0



      imho würde das mit deinen Vorgaben (Webinterface Streams werden nicht berücksichtig) völlig reichen

      Quellcode

      1. if (( $HASRECORDING == 0 ))
      2. then
      3. RESTART=true
      4. echo "no recordings detected"
      5. break
      6. else
      7. RESTART=false
      8. # current recording, pause 10 min
      9. echo "current recording, pause 10 min"
      10. sleep 6
      11. fi
      Alles anzeigen
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

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

    • Du hast recht. Dieser edge-case kann immer auftreten, sogar ohne die Webinterface-Abfrage, die sicher ein paar Millisekunden in Anspruch nimmt. Deswegen baue ich am Anfang vom Script den sleep 30 ein, damit Beginn Timeraufnahme und Script zeitversetzt laufen.