Receiver, Funksteckdosen, Automatisches Skript

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

    ich hab mir auch ein kleines Projekt überlegt, allerdings weiß ich noch nicht ob sich das alles so lösen lässt.
    Ich würde gerne über meinen RasPi meine Funksteckdosen steuern. Die Steckdosen sind allerdings 434 MHz. Also müsste ich die Fernbedinung öffnen, verdrahten und Schalten. Hier bin ich aber guter Hoffnungen. Wie das mit den Widerständen und Schaltung aussieht, dazu frage ich später.
    Da ich einen extra Audio Verstärker an dem Receiver hängen habe, den ich über eine Funksteckdose ein und ausschalte und an einer anderen Funksteckdose hängt einen Bildschirm.

    Jetzt stelle ich mir das so vor, dass der Receiver, wenn er ein- bzw. ausgeschaltet wird, einen Befehl an den RasPi gibt und dieser je nach dem ob ein oder ausgeschaltet wird, auch die Funksteckdosen schaltet.

    Überlegt hab ich mir das mit einer Datei. Es gibt Ein- Ausschaltskripte (init.d, rcX.d) dazusagen muss ich, dass der Receiver auch Linux ist, evtl. kann man hier eine Zeile hinzufügen die eine Datei erstellt. z.B. beim einschalten an.txt beim ausschalten aus.txt.
    Das ganze sollte dann aber auf den Raspberry geschrieben werden.
    Hier ist schon die erste frage. Kann ich von dem Receiver aus auf einen Passwortgeschützten Raspi eine Datei schreiben?

    Außerdem weiß ich nicht genau, welche Datei für ein- bzw. ausschalten zuständig ist.
    Ich hab das hier gelesen aber werde nicht schlau draus:

    Start-/Stop-Skript und Runlevel
    Jeder Dienst besitzt ein Start-/Stop-Skript im Verzeichnis /etc/init.d/. Die Skripte enthalten Befehle, um einen Dienst zu starten bzw. zu beenden. Sie können von Hand oder automatisch beim Booten oder Herunterfahren des Systems aufgerufen werden. Dazu kann das Start-/Stop-Skript inklusive einer Option ausgeführt werden. Beispiel:
    sudo /etc/init.d/DIENSTNAME [start|stop|restart|...]
    Alternativ kann auch folgende Syntax verwendet werden:
    sudo service DIENSTNAME [start|stop|restart|...]
    Als konkretes Beispiel hier der Befehl, um den Webserver Apache2 zu starten:
    sudo /etc/init.d/apache2 start

    Wenn jetzt ein Start-/Stop-Skript automatisch beim Booten ausgeführt werden soll, so wird es einfach nur in den entsprechenden Runleveln verlinkt. Jedem dieser Runlevel ist ein Verzeichnis unterhalb von /etc/ zugeordnet. Dies sind:

    /etc/rc0.d - Während das System herunterfährt
    /etc/rcS.d - Während des Bootens ausführen
    /etc/rc1.d - Arbeiten als einzelner Benutzer
    /etc/rc2.d - Mehrbenutzerbetrieb inkl. Netzwerk
    /etc/rc3.d bis /etc/rc5.d - bei Ubuntu nicht genutzt
    /etc/rc6.d - Während das System neu startet


    Dann sollte ein Cronjob die Datei abfragen. Vielleicht alle 2 min.
    Ist die Datei an.txt vorhanden, dann beide Funksteckdosen einschalten.
    Ist die Datei aus.txt vorhanden dann ausschalten.

    Nach getaner arbeit vom RasPi sollte die Datei gelöscht werden, damit die Funksteckdose nicht immer geschaltet wird.

    Vielleicht denkt jemand ganzs anders, oder kann mir "unter die Arme" greifen ;)

  • Mit den Init-Scripts bist Du auf dem Holzweg, das hat nichts mit Ein- und Auschalten zu tun sondern mit den Programmen die beim Starten des Pi ausgeführt werden.

    Du mußt eine Verbindung zwischen Pi und Receiver schaffen, da kommt es darauf an, was der Receiver kann.
    Wenn Du eine Netzwerkverbindung hinbekommst über die Du Dateien anlegen kannst ist das ein möglicher Weg, aber eine Abfrage alle 2 Minuten ist etwas lang.

  • Also es ist ein vollwertiger Linux Receiver. Netzwerkschnittstelle ist vorhanden.

    Aber kann ich zum Beispiel hier "[font="Tahoma, Verdana, Arial, sans-serif"]/etc/rc0.d - Während das System herunterfährt" nicht etwas eintragen, das wie ein Programm ausgeführt wird? Evlt. ein Bash Skript das nur die Datei schreibt?[/font]

    [font="Tahoma, Verdana, Arial, sans-serif"]Ich hätte auch überlegt ob ich mit dem RasPi nicht einen Ping auf die Box mache und schaue, ob diese noch an ist.[/font]
    [font="Tahoma, Verdana, Arial, sans-serif"]Aber dann habe ich as Problem, dass die Datei immer geschrieben wird.[/font]
    [font="Tahoma, Verdana, Arial, sans-serif"]Ping -> Ping ok -> Datei mit an.txt wird erstellt.[/font]
    [font="Tahoma, Verdana, Arial, sans-serif"]Dann Cronjob mit der Abfrage ob eine Datei da ist. Dann sollte der Cronjob die Datei löschen, dass nicht immer geschalten wird. Allerdings kommt dann wieder der Ping und erstellt die Datei wieder.[/font]
    [font="Tahoma, Verdana, Arial, sans-serif"]So glaube ich komme ich auch nicht weiter.[/font]


  • ja logik ist was feines... wie orb schon geschrieben hat .. ping den Receiver an

    mit python leicht zu realisieren..

    Aber dann hab ich ja das folgende Problem.
    Ping ok -> Funk Schalten.
    Ping ok -> Funk Schalten.

    Und so läuft es ja dahin. Das will ich umgehen, dass wenn bereits an ist, das nicht nochmal geschalten wird.

    • Offizieller Beitrag

    also sowas?


    ist jetzt ungetestet, sollte aber gehen

  • Hallo und erstmal danke für das Skript... und sorry das ich mich lange nicht gemeldet habe.

    Hab das ganze mal getestet ohne das ein und Auschaltskript, aber sollte ja trotzdem funktionieren.

    Als Fehler bekomme ich das:
    File "receiver.py", line 16
    While True:
    ^
    SyntaxError: invalid syntax

    Dieser Haken "^" ist nicht im Skript vorhanden und ich selber kann leider "noch" keine Python.
    Vielleicht kann mir jemand kurz helfen.

    Zum testen wollte ich das ganze in eine Datei umleiten mit >>

  • So ich poste jetzt mal die 2 Ausgaben wenn der Receiver aus ist und wenn er an ist.

    Receiver aus:

    Receiver an:

    Gibt es eine Möglichkeit die Datei zu testen, ohne irgendwas zu schalten, damit ich nur sehe ob es geht.
    Wollte das ganze mal in eine Datei umleiten, das geht aber nicht.
    Vielleicht kann man das irgendwie anders rausfinden.

Jetzt mitmachen!

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