Python vor dem Ausschalten von XBMC ausführen!

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
    • Offizieller Beitrag

    Hei Leute,

    bei mir auf dem Raspberry läuft XBMC. Nicht RaspBMC, aber könnte ich notfalls auch installieren, wenn es anders nicht geht.

    Ich habe zwei PIs, der eine steuert Funksteckdosen, auf dem anderen läuft XBMC.

    XBMC-Pi ist ebenfalls an einer Funksteckdose, welche der andere PI schalten angeschlossen, so kann ich via iPhone meinem XBMC-Pi Strom geben, sodass dieser startet. Mein Fernseher startet automatisch, sobald er Strom bekommt.
    Wenn ich den TV ausschalte, sendet er dem PI via Anynet+ das Signal des Ausschaltens. Da der Pi dann aber noch Strom verbraucht und auch noch leuchtet, möchte ich, das er dann dem anderen PI sendet, dass er die Steckdose des eigenen PIs aus machen soll. z.B. in einer Minute.
    Das Pythonskript, welches dienen Befehl sendet, habe ich bereits und liegt unter "[font="Courier New"]/root/ausschalten.py[/font]".

    Wie kann ich XBMC sagen, dass er, wenn er das Signal zum Ausschalten von TV bekommt noch davor eben dieses Skript ausführt??

    LG, ich hoffe ich habe nicht total drum herum geredet und ihr versteht was ich meine :P und auch das es möglich ist ;)

    Danke schon mal ;)

    <woltlab-metacode data-name="align" data-attributes="WyJjZW50ZXIiXQ=="><p><span style="font-size: 10pt">Ein "Gefällt mir" oder die Bewertung im Profil ist eine nette Geste für die Hilfe die wir hoffentlich waren oder sind.</span></p></woltlab-metacode>

    • Offizieller Beitrag

    So jetzt wird ein wenig kompliziert.

    Das einfachste wäre beim Runterfahren einfach dein Script auszuführen, um dies zu tun machst du folgendes:
    kopiere dein Script nach /etc.init.d und mach es aussführbar

    Code
    cp /root/ausschalten.py /etc/init.d/


    chmod a+x /etc/init.d/ausschalten.py[/code]

    jetzt sagst du dem system das, wenn es den Runlevel 0 betritt (runterfahren) dein Script ausführen sollst.

    Code
    update-rc.d ausschalten.py start 20 0 .


    Dabei ist 20 die Rangfolge (1 wird zuerst, 99 zuletzt ausgeführt);0 den runLevel den es betrifft und der . das "Endezeichen". Schau dir einfach mal /etc/rc0.d an, dort siehst du welche Script ausgeführt werden und welche Hierarchie sie haben.

    Das führt uns aber zu einem Problem, wann ist der richtige Punkt um die Steckdose zu schalten? Logischerweise muss das Script ausgeführt werden bevor das Dateisystem ausgehangen wird (sonst findet er die Datei ja nicht mehr). Allerdings wird mit dann die Dose geschaltet und das Dateisystem unausgehangen "abgeschossen" - auf Dauer unschön ;). Da du dein Script nicht angehangen hast schreibe ich einfach mal wie ich es machen würde:

    Du lässt auf deinem Strom-Pi einen kleinen python-socketserver laufen, der nur darauf wartet vom XBMC-Pi den "Strom aus" Befehl zu kriegen. Sobald er diesen gekriegt hat wartet er 1-2min und schaltet dann die Dose.
    Dein XBMC-Pi muss dann dementsprechend im runterfahrScript nur noch das "Strom-Aus" Kommando (Socket-Client) an den Strom-Pi senden. So umgehst du den Dateisystemproblem und musst lediglich darauf achten das das Script ausgeführt wird bevor die Netzwerkinterfaces runtergefahren werden ;)

    • Offizieller Beitrag

    Danke danke!
    Da werde ich gleich mal ausprobieren.

    Mein Stromskript kann das bereits ;)

    Ich kann sagen Steckdose jetzt an, oder jetzt aus, aber auch so was wie aus in 10 Minuten, an in 10 Minuten, usw.
    Also kein Problem... einfach 2 Minuten später und gut ist :P

    Danke noch mal ;)

    <woltlab-metacode data-name="align" data-attributes="WyJjZW50ZXIiXQ=="><p><span style="font-size: 10pt">Ein "Gefällt mir" oder die Bewertung im Profil ist eine nette Geste für die Hilfe die wir hoffentlich waren oder sind.</span></p></woltlab-metacode>

    • Offizieller Beitrag

    Sehr gut!! Es klappt, allerdings immer nur ein mal :D

    Also wenn ich den Pi dann wieder anschalte, und erneut aus, dann sendet er dieses Signal nicht mehr...
    Die Python Datei ist dann auch nicht mehr in der init.d enthalten... :/

    Und der Hammer ist, dass alle Änderungen am Pi weg sind, sprich das Skript ausschalten.py ist auch weg in /root/... selbst der SSH Verlauf, also die letzten ausgeführten Zeilen sind auch nicht die, die ich eingegeben habe :O

    Als wenn da eine Recovery Funktion ist. Ka. Gibts das?

    <woltlab-metacode data-name="align" data-attributes="WyJjZW50ZXIiXQ=="><p><span style="font-size: 10pt">Ein "Gefällt mir" oder die Bewertung im Profil ist eine nette Geste für die Hilfe die wir hoffentlich waren oder sind.</span></p></woltlab-metacode>

    Einmal editiert, zuletzt von mario (27. Juni 2013 um 19:51)

    • Offizieller Beitrag

    Ne, der hat so was alles nicht :D
    Also, als ich das update gemacht habe, wurde auf irgendwas gemeckert, das es kein Exil gibt und so weiter, habe es aber einfach ausprobiert :P

    Verstehe ich das richtig, das er nacheinander von 0 bis 99 alle Level ausführt. Meins habe ich auf 20 gesetzt. Wenn meiner jetzt kein Exil hat, ist das richtig, dass dann nichts nach meinem Level ausgeführt wird? Oder wie muss ich das verstehen??

    Mein Skript:

    Wenn ich es so ausführe, klappt alles problemlos ;)

    <woltlab-metacode data-name="align" data-attributes="WyJjZW50ZXIiXQ=="><p><span style="font-size: 10pt">Ein "Gefällt mir" oder die Bewertung im Profil ist eine nette Geste für die Hilfe die wir hoffentlich waren oder sind.</span></p></woltlab-metacode>

    Einmal editiert, zuletzt von mario (28. Juni 2013 um 16:30)

    • Offizieller Beitrag

    imho sind die init scripte sehr zickig, grade exit codes usw. werden erwartet. ich returne immer 0 bei erfolg und -1 bei Fehlern. Belies duch mal zum Thema init scripte unter Debian, bin grade unterwegs sonst würde ich dir was direkt verlinken ;)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!