Raspbmc Pi booten wenn Handy im Wlan

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,

    ich will versuchen da ich noch nichts gefunden habe, mit meinem Raspberry Pi Server meinen Raspbmc Pi zu starten wenn mein Handy ins Wlan kommt und herunterfahren wenn ich gehe.

    Da mein xmbc pi incl Shairport/Airplay ja nicht laufen muss wenn ich daheim bin will ich ihn starten lassen wenn mein handy ins wlan kommt und ausschalten wenn ich gehe.

    Hat schon jemand was getestet oder Ideen??

    Ich hab ein Paar Ideen und Fragen:

    1.) Wenn ich den Pi heruntergefahren habe, kann ich ihn per wake on lan dann wieder starten oder ist er dann in einem "toten" Status ?
    -> Lösung evtl. Funktsteckdose und steuern über 433 mhz modul

    2.) Ich hab mir überlegt über nmap ip oder einfach die ip zu pingen und zu schauen ob es antwortet
    wenn es antwortet Raspbmc starten und alle 10 minuten prüfen obs noch da ist, ansonsten runterfahren


    Soweit der Plan ;)

  • Nein das wird nicht helfen, da der Pi kein "Powermanagement" hat. Er kennt nur den Status 1 und 0, kein Suspend etc.
    In dem von Dir verlinkten Artikel, ist die Rede von etherwake, damit der PI die Rechner im Netz "wecken" kann.

    @Steakschen: Wenn Deine beiden PI's neben einander sind, oder per GPIO-Kabel zu verbinden sind, kommt mir nur die Idee, das Du den P6 nachrüstest, und den vom Raspberry Server aus "switchen" könntest. Sonst wäre auch die Lösung mit der 433MHz Steckdose eine Lösung, dabei wäre der raspbmc PI stromlos. Eine kombination mit dieser Software und dieser Modifikation würde sich sicher gut machen. Die Taster ersetzt Du dann mit einer Schaltung vom anderen PI.

    --
    lg Peter
    Schon gefunden? Ich helfe gerne :danke_ATDE:

    Einmal editiert, zuletzt von inspector (6. September 2013 um 23:46)

    • Offizieller Beitrag

    Ich würde auch den Weg über die Funksteckdose nehmen. Du musst dann abfragen ob dein Handy schon/noch im WLAN ist, mittels fester dynamischer IP (schreckliches Konstrukt ;) ) sollte der Ping das einfachste mittel sein.

    Wenn er nicht mehr erreichbar erreichbar ist, lässt du das script per ssh ein remote-shutdown ausführen und schaltest dann die Steckdose ab.

  • Jap, so wirds auch glaub ich laufen.

    Shutdown per Befehl und nach 1 Minute die Steckdose aus, und beim "ins wlan kommen" die Steckdose an. :)

    Jetzt nur noch überlegen wie ich das mit dem "im Wlan sein" am besten abfrage.

    Mal schauen ob Ping irgendeine Miss-, Erfolgsrückmeldung gibt wie z.b. das ssh Protokoll

  • Mit Ping kannst du das so regeln:

    Code
    ping -q -W5 -c1 8.8.8.8 | grep '1 received'

    -q legt "quiet output" fest, also keine Ausgabe bisauf das Ergebnis.
    -W5 legt einen Timeout von 5 Sekunden fest.
    -c1 legt den Count fest, also nur 1 Ping der durchgeführt wird.

    Anstelle von 8.8.8.8 setzt du eben deine IP ein und kannst prüfen ob die Rückgabe leer ist dann wäre der Client nicht erreichbar, also zum Beispiel so:

    Code
    [ "$(ping -q -W5 -c1 8.8.8.8 | grep '1 received')" != "" ] && echo online || echo offline

    Die Ausgabe sähe dann so aus:

    Code
    root@raspberrypi:~# [ "$(ping -q -W5 -c1 8.8.8.8 | grep '1 received')" != "" ] && echo online || echo offline 
    online
    root@raspberrypi:~# [ "$(ping -q -W5 -c1 8.8.8.6 | grep '1 received')" != "" ] && echo online || echo offline
    offline
    root@raspberrypi:~#

    Ich würd da vllt eine Schleife basteln die zB alle 5 Sekunden den Ping prüft - Das Handy im WLAN eine feste IP zuweisen (über dn Router), der RPI prüft alle 5 Sekunden ob die IP anpingbar ist und wenn ja wird wird die Steckdose des AirPlay's eingeschaltet sowie eine temporäre Datei erzeugt damit die Steckdose nicht erneut eingeschaltet wird... Wenn dann das Handy nicht mehr anpingbar ist wird die Steckdose wieder ausgeschaltet und die temporäre Datei gelöscht...

    Also grob ungefähr so:

    Da fehlt dann eigentlich nur noch der Code um die Steckdosenleiste zu schalten ;)
    Script einmal starten, dann dreht es sich selbstständig im Kreis - alternativ könnte man das aber auch über crontab jede Minute ausführen lassen, dann muss man eben die while Schleife raus nehmen..

  • Das Script ist super.
    Vielen Dank dafür.
    Habs soweit schon implementiert bei mir, ich muss nur noch programmieren, dass er die NAS nicht anschaltet, wenn sie eigentlich aus bleiben soll und wir daheim sind. Also quasi nachts.
    Aber das mit dem Uhrzeitabgleich in Shellscripten ist ja nicht grade schön gelöst.

  • Guten Abend,

    die Idee von euch gefällt mir sehr gut, nur ich habe das Skript so kopiert und die IP Adresse eingegeben,
    nur der Test sagt mir :

    ./wlan.sh: line 17: syntax error near unexpected token `}'
    ./wlan.sh: line 17: `}'

    Kann mir vielleicht jemand einen Tip geben...

    Danke.

    Mit freundlichen Gruss...

  • Hallo,

    ich bin am verzweifeln, kann mir vielleicht jemand einen Tip geben:


    #!/bin/bash

    HandyIP="192.168.1.100"
    EVERY=5
    SocketONfile="/tmp/.socket_on"

    pingHandy() {
    if [ "$(ping -q -W5 -c1 192.168.1.100 | grep '1 received')" != "" ]; then
    echo "ONLINE"
    else
    echo "OFFLINE"
    fi
    }

    startSocket() { hier der Code rein um die Steckdosenleiste einzuschalten }

    stopSocket() { hier der Code rein um die Steckdosenleiste auszuschalten }


    while :; do
    PingCheck=$(pingHandy)
    if [ "$PingCheck" = "ONLINE" ]; then
    if [ ! -f "$SocketONfile" ]; then
    echo "[$(date +"%d.%m.%Y %H:%M:%S")] Steckdosenleiste wird eingeschaltet!"
    startSocket
    echo 1 > $SocketONfile
    fi
    elif [ "$PingCheck" = "OFFLINE" ]; then
    if [ -f "$SocketONfile" ]; then
    rm -f $SocketONfile
    fi
    echo "[$(date +"%d.%m.%Y %H:%M:%S")] Steckdosenleiste wird ausgeschaltet!"
    stopSocket
    fi
    sleep $EVERY
    done

    exit 0


    endet mit der Fehlermeldung:

    ./wl.sh: line 39: syntax error: unexpected end of file.

    Habe es mit nano angelegt, ausführbar gemacht, mit Notepad++ als Unix script gespeichet und mit winscp kopiert.
    Nix klappt.

    Mit freundlichen Gruss.

  • Hallo zusammen,

    die Idee und das Skript find ich super. Ich habe nur noch ein Problem:

    Mein Smartphone ist ein iPhone und das geht nach einer gewissen zeit wenn der Monitor aus ist in so eine art StandBy von dem es die Ping anfrage nicht beantwortet also als "offline" gilt.

    Hat jemand eine Idee wie man das Problem lösen könnte?

    [Edit:]
    Das Problem wurde hier schon mal angesprochen. Sry. War mein Fehler:
    Prüfen ob "Zuhause über Ping Iphone"

    Einmal editiert, zuletzt von nedo (5. Januar 2014 um 22:31)

  • leider bekomme ich immer die Meldung : Syntaxfehler in Zeile 8 bei then
    Hat da jemand einen Tip? Wäre echt toll wenn das klappen würde


  • Ist ja logisch. Mit ./ sucht er den send Befehl in dem Ordner wo dein script ausgeführt wird. Fu musst da den vollen Pfad angeben, wo du send hin installiert hast.

    Ich habe das Script bei mir eingebaut, und bekommen auch folgende Meldung:
    ./ping: line 15: syntax error near unexpected token `/home/pi/raspberry-remote'
    ./ping: line 15: `startSocket(/home/pi/raspberry-remote sudo./send 00111 2 0]'
    pi@pi:~ $


    Mir fällt der Fehler einfach nicht auf, evt. kann mir ja noch jemand weiter helfen

    Gruß Oskar05

    _____________________________________________________________
    #!/bin/bash

    HandyIP="192.168.0.67"
    EVERY=5
    SocketONfile="/tmp/.socket_on"

    pingHandy() {
    if [ "$(ping -q -W5 -c1 192.168.0.67 | grep '1 received')" != "" ]; then
    echo "ONLINE"
    else
    echo "OFFLINE"
    fi
    }

    startSocket() {/home/pi/raspberry-remote ./send 00111 2 0}

    stopSocket() {/home/pi/raspberry-remote ./send 00111 2 1 }

    while :; do
    PingCheck=$(pingHandy)
    if [ "$PingCheck" = "ONLINE" ]; then
    if [ ! -f "$SocketONfile" ]; then
    echo "[$(date +"%d.%m.%Y %H:%M:%S")] Steckdosenleiste wird eingeschaltet!"
    startSocket
    echo 1 > $SocketONfile
    fi
    elif [ "$PingCheck" = "OFFLINE" ]; then
    if [ -f "$SocketONfile" ]; then
    rm -f $SocketONfile
    fi
    echo "[$(date +"%d.%m.%Y %H:%M:%S")] Steckdosenleiste wird ausgeschaltet!"
    stopSocket
    fi
    sleep $EVERY
    done

    exit 0

    • Offizieller Beitrag

    Bitte Benutze Code tags. Sonst schaut sich das keiner weiter an.

    Code
    /home/pi/raspberry-remote ./send 00111 2 0


    Was soll das auch für ne Schreibweise sein? absolute und relative Pfade gemischt in einem String, soll man das dann absolativ oder relolut nennen?

    Code
    [code]/home/pi/raspberry-remote/send 00111 2 0

    wäre der absolute Pfad


  • Bitte Benutze Code tags. Sonst schaut sich das keiner weiter an.

    Code
    /home/pi/raspberry-remote ./send 00111 2 0


    Was soll das auch für ne Schreibweise sein? absolute und relative Pfade gemischt in einem String, soll man das dann absolativ oder relolut nennen?

    Code
    [code]/home/pi/raspberry-remote/send 00111 2 0

    wäre der absolute Pfad


    OK, Danke für Deine Unterstützung, nur hat das für mich auch noch nicht den gewünschten Erfolg gebracht,
    es erscheint weiterhin folgende Meldung, wenn ich die Datei in der Konsole starte:
    pi@pi:~ $ ./ping
    /bin/bash: warning: setlocale: LC_ALL: cannot change locale (de_DE)
    ./ping: line 15: syntax error near unexpected token `{/home/pi/raspberry-remote/send'
    ./ping: line 15: `startSocket() {/home/pi/raspberry-remote/send 00111 2 0}'


Jetzt mitmachen!

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