OpenELEC 5 und Bash-Skripte... tvheadend... Standby

D3LU

Komplett-PC-Aufrüster(in)
Hi,

beim stöbern hier im Forum habe ich gesehen, dass es hier auch Leute gibt die mit Kodi u.ä. "rumspielen".
Wenn jetzt noch einer sich mit BASH-Skripten auskennt wäre das ein Traum^^

Ich möchte eventuell auch eine Mediabox mit OpenELEC oder wenn es nicht anders geht mit Kodibuntu.
Eines der wichtigsten Features für mich wäre dass diese Maschine in der Lage ist "sich selbst" zu starten wenn eine programmierte Aufnahme ansteht und danach sich wieder ausschaltet. Das ganze ohne User-Interaktion abgesehen halt von dem Einprogrammieren der gewünschten Aufnahme (im EPG so wie zum Beispiel bei Samsung Smart-TVs die eine externe Festplatte haben).

Ich habe schon einiges dazu gelesen aber kam noch nicht dazu es umzusetzen. (Also das ganze Projekt)

Nach meinem einlesen und meinen Linuxkenntnissen sollte das was ich will einfach umsetzbar sein.
Mit einem Skript als "hook an suspend" das anhand der tvheadend logs erkennt wann eine Aufnahme ansteht und dafür den ACPI-Alarm konfiguriert.
Ich habe auch gesehen dass man bei tvheadend ein Skript angeben kann welches nach einer Aufnahme ausgeführt werden soll.

Also bräuchte man keine idle Timer oder sonstigen Crap. Wenn man als Anwender an dem Mediagerät ist kann man es normal nutzen und danach in Standby versetzen. (Es sollte dann ja "während" des Standbyvorgangs Skript 1 laufen und alles ist gut.)
Zu einer Aufnahme sollt es starten und danach sollte dann Skript2 da sein durchlaufen und am Ende aller Aufnahmen sollte dann der PC im Standby sein bis eben durch Benutzer oder wieder ACPI gestartet...

Skript zu Punkt 1 habe ich aus dem WIKI zu tvheadend. Da waren auch rudimentäre Hinweise auf das was Punkt 2 ist, aber kein Skript, also habe ich da selbst was überlegt... unter zur Hilfenahme des "Log lesens" aus Skript 1.

Skript1
#!/bin/bash
#
# set ACPI Wakeup alarm
# safe_margin - minutes to start up system before the earliest timer
# script does not check if recording is in progress
#
# dieses Skript gehört als "hook an suspend" /etc/pm/sleep.d/XXX.sh (aufpassen wann ausgeführt wird!)

echo 1 > /timer

# bootup system 120 sec. before timer
safe_margin=120

# modyfy if different location for tvheadend dvr/log path
cd ~hts/.hts/tvheadend/dvr/log

######################

start_date=0
stop_date=0

current_date=`date +%s`

for i in $( ls ); do
tmp_start=`cat $i | grep '"start":' | cut -f 2 -d " " | cut -f 1 -d ","`
tmp_stop=`cat $i | grep '"stop":' | cut -f 2 -d " " | cut -f 1 -d ","`

# check for outdated timer
if [ $((tmp_stop)) -gt $((current_date)) -a $((tmp_start)) -gt $((current_date)) ]; then

# take lower value (tmp_start or start_date)
if [ $((start_date)) -eq 0 -o $((tmp_start)) -lt $((start_date)) ]; then
start_date=$tmp_start
stop_date=$tmp_stop
fi
fi
done

wake_date=$((start_date-safe_margin))

echo $start_date >> /timer
echo $wake_date >> /timer

# set up wakeup alarm
if [ $((start_date)) -ne 0 ]; then
echo 2 >> /timer
echo 0 > /sys/class/rtc/rtc0/wakealarm
echo $wake_date > /sys/class/rtc/rtc0/wakealarm
fi
Skript2
#!/bin/sh

# dieses Skript gehört in den Ordner ~hts/.hts/tvheadend/dvr/log oder der dem entsprechenden...
# dieses Skript ist dazu gedacht in Tvheadend als "Aktion nach einer Aufnahme" ausgeführt zu werden

start_date=0
stop_date=0
current_date=`date +%s`

doit=1 # führt wenn der Wert auf 1 bleibt die Abschaltung durch!

for i in $( ls ); do
tmp_start=`cat $i | grep '"start":' | cut -f 2 -d " " | cut -f 1 -d ","`
tmp_stop=`cat $i | grep '"stop":' | cut -f 2 -d " " | cut -f 1 -d ","`

# prüfen ob jetzt gerade schon eine mögliche nächste Aufnahme läuft... wenn ja keine Abschaltung
if [ $((tmp_stop)) -gt $((current_date)) -a $((tmp_start)) -lt $((current_date)) ];
then
doit=0
fi

# check for outdated timer
if [ $((tmp_stop)) -gt $((current_date)) -a $((tmp_start)) -gt $((current_date)) ]; then

# take lower value (tmp_start or start_date)
if [ $((start_date)) -eq 0 -o $((tmp_start)) -lt $((start_date)) ]; then
start_date=$tmp_start
stop_date=$tmp_stop
fi
fi
done

if [ $((start_date)) -ne 0 ]; #gibt es noch eine Aufnahme
then #ja -> wann?

zeit_bis_aufnahme=$((start_date-current_date))

if [ $((zeit_bis_aufnahme)) -gt 3600 ] #innerhalb einer Stunde
then #nein -> "shutdown"
if [ $((doit)) -eq 1 ]; # 1 bedeutet es läuft gerade keine programmierte Aufnahme
then
sudo /usr/sbin/pm-hibernate # dazu muss der tvheadenduser ohne pw in der sudoersdatei sein
fi
else #ja -> nichts tun
#
fi

else #nein -> "shutdown"
if [ $((doit)) -eq 1 ];
then
sudo /usr/sbin/pm-hibernate
fi
fi
Nun ist halt die Frage enthält OpenELEC die pm-utils und "den Rest" den meine Skripte benötigen?
Oder muss ich auf ein komplettes Linux mit Kodi setzen also Kodibuntu oder reicht auch das nicht und ich muss mit Debian, Desktops, in dem Fall wegen "exotischer" Hardware dann neuen Kernel, Codecs, usw etwas von Grund auf an meine Bedürfnisse angepasstes aufsetzen? Meiner Recherche nach gäbe es zumindest tvheadend für Live-TV (DVB-C) und die ganzen Addons für XBMC (Emulatoren, Onlineradio, usw.) in allen Fällen...

Gibt es eine noch einfachere ggf sicherere Art das gewünschte zu erreichen?
Habe ich in den Skripten einen Denkfehler, Logikfehler oder was anderes verhauen?
Müsste ich noch etwas bedenken?

Danke schonmal.
Grüße
D3LU
 
Zuletzt bearbeitet:
Zurück