Funksteckdosen starten nimmer per cronjob

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

    Ich steuere zwei Funksteckdosen (Weihnachtsbeleuchtung ;)). Eine ist allerdings noch nicht angeschlossen. Beide sollen zur selben Zeit starten. Das funktioniert eigentlich auch mit systemweiter crontab. Heute hat sich die eine Steckdose allerdings nicht eingeschaltet. Kann es sein, dass der Raspi ab und zu Probleme bekommt, wenn er zeitgleich zwei verschiedene Befehle (Steckdose 1 hat einen anderen Code als Steckdose 2) senden soll? Syslog:

    Code
        Dec 3 16:30:02 PI_Steckdosensteuerung CRON[3276]: (root) CMD (/home/pi/raspberry-remote/./2_an.sh)
        Dec 3 16:30:02 PI_Steckdosensteuerung CRON[3277]: (root) CMD (/home/pi/raspberry-remote/./1_an.sh)
        Dec 3 16:30:02 PI_Steckdosensteuerung CRON[3268]: (CRON) info (No MTA installed, discarding output)
        Dec 3 16:30:02 PI_Steckdosensteuerung CRON[3269]: (CRON) info (No MTA installed, discarding output)
        Dec 3 17:05:18 PI_Steckdosensteuerung systemd[1]: Starting Cleanup of Temporary Directories...
        Dec 3 17:05:18 PI_Steckdosensteuerung systemd[1]: Started Cleanup of Temporary Directories.

    Ich weiß nicht was (no MTA installed, discarding output) bedeuten soll. Hat jemand einen Tipp?

    Danke im vorraus,

    Suwo

  • Die Meldung bedeutet soviel wie: Das Ausführen des Befehls hat eine Ausgabe / Output erzeugt, CRON möchte diese Ausgabe irgendwo hin schicken, da aber kein MTA installiert ist schlug das fehl.

    Eine Ausgabe kann stdout sein, also ein echo, oder eine Fehlermeldung (stderr).

    Allgemein ist dein Eintrag komisch.. Was soll das /./ bewirken?

    Ohne den Inhalt deiner beiden Scripts zu kennen kann man zur möglichen Fehlermeldung nichts sagen - nur soviel: Funktioniert die manuelle Ausführung nicht kann crontab auch nicht zaubern.

    Führ die Scripts mit exakt der selben Weise aus wie du es in Crontab eingetragen hast - also NICHT vorher ins Verzeichnis wechseln und auch NICHTS dafür einfügen. Wenn das geht liegt es ggf an etwas was im Script steht.


    PS: Man muss nicht für jede Kleinigkeit eine extra Scriptdatei erzeugen. Besser wärs man übergibt Parameter.

  • Wenn wirklich zeitgleich gefunkt wird, dann stören sich die Sender gegenseitig. Hat man nur einen Sender überhaupt, dann wird das was aus der Antenne rauskommt nur ein Gemisch mehrerer Protokoll sein. In beiden Fällen wird der Empfänger nicht vernünftig dekodieren können. Probiere mal, die Dosen mit einer Sekunde Abstand zu schalten. Wenn's dann besser wird, dann lag's wohl daran.

  • Hallo zusammen.

    Erstmal danke für die Antworten. Die Scripte funktionieren manuell und per cronjob, allerdings im cronjob nicht immer. Daher scheint die Erklärung von schnasseldag einleuchtend (habe ich auch schon vermutet und heute geändert). Der Eintrag /./ ist der Wechsel in das Verzeichnis der Scripte und der Start des scriptes ./2_an.sh. Daher sieht das so komisch aus. Jetzt funzt es ja. meigrafd: Wie soll das denn mit Parametern funktionieren. Würde mich zu Lernzwecken schon interessieren.

    Hier ein Script welches in ~/raspberry-remote liegt:

    Bash
    #!/bin/bash
    #Steckdose 2 anschalten
    sudo /home/pi/raspberry-remote/./send 10000 2 1
    #

    Davon habe ich für jede Steckdose 2. Einmal an einmal aus. Diese lasse ich dann per cronjob ausführen.

    MfG,

    Suwo

    PS: Eigentlich gelöst, aber warte noch auf Tipps von meigrafd. :)

  • Neben eventuell Problemen mit den Pfaden, wäre es doch sinnvoll, die Steckdosen in einem Script schalten zu lassen.

    Sie werden dann vielleich nicht mehr in der gleichen 'Sekunde' geschaltet, aber man kann dadurch sicherstellen, dass sie sich icht gegenseitig stören.

    Computer ..... grrrrrr

  • Also zunächst ist dieses /./ vermutlich dem Missverständnis geschuldet dass man ./blah.sh ausführt wenn man sich im selben Verzeichnis wie die Datei befindet. Da du aber den absoluten/vollständigen Pfad aufrufst brauchst du das nicht, es reicht in dem Fall /home/pi/raspberry-remote/2_an.sh

    Da du das Script in die Crontab des root Benutzers eingetragen hast kannst du auf zusätzliche Aufrufe von sudo im Script verzichten - mehr als root gibts nicht.

    Dann die Sache mit den Parametern: Ein Parameter wird anhand eines Leerzeichens getrennt.

    Beispiel: ./bla.sh a b c

    a ist das erste übergebene Parameter

    b das zweite

    c das dritte

    Bash erkennt bzw ruft man diese Parameter über $1,$2,$3usw. ab, in dem Beispiel würde$1dannaenthalten,$2würdebenthalten usw..

    Dein Problem lässt sich aber eigentlich ganz einfach lösen - wie Rasp-Berlin schon richtig angedeutet hat:

    Ein Script/Programm wird immer solange blockiert bis ein Befehl abgearbeitet wurde - und der Code wird immer von oben nach unten abgearbeitet.

    Wenn du nun also einfach eine Scriptdatei erstellst in der beide Schaltbefehle für die Funksteckdosen untereinander drin stehen, wird erst die 1.Befehlszeile ausgeführt, gewartet bis dieser beendet wurde und erst danach wird die nachfolgende Befehlszeile ausgeführt - was zur Folge hat das die Funksteckdosen nacheinander angesprochen werden und somit das von schnasseldag beschriebene Problem nicht in Erscheinung treten sollte. Notfalls könnte man auch eine kurze Verzögerung/Blockade einbauen um das zusätzlich zu unterbinden.

    Bash
    #!/bin/bash
    #
    # Steckdose 1 einschalten
    /home/pi/raspberry-remote/send 10000 1 1
    sleep 0.5s
    # Steckdose 2 einschalten
    /home/pi/raspberry-remote/send 10000 2 1

    Fertig.

  • Warum lernst Du die Steckdosen nicht auf die gleiche Fernbedienung und der gleichen Taste an?

    So brauchst Du nur einmal zu schalten. Bei mir läuft das so.

    MfG

    Jürgen

Jetzt mitmachen!

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