Script immer ausführen + Start mit IR FB

  • wie oben geschrieben:


    entweder 0 oder 1 je nach Zustand der Steuerung...


    Vice President Logistics and Materials Handling of the first 40" TFT Sammelbestellung and Atmolight I + II + III

  • Hi,
    Dann stimmt meine letzte Vermutung ( im P.S. vorhin )

    Zitat

    P.S. Ich denke hinter dem Zeichen kommt noch irgendwas, dann koennte diese if Abfrage zum Erfolg fuehren:

    Code
    ... 
    if [ "$(echo "getport 1" | nc $IP $PORT 2>&1 | grep "1")" != ""  ]; then 
    ...
  • TATA...


    SO KLAPPT`S


    Code
    VALUE=`echo "getport 1" | nc $IP $PORT`;
       echo $VALUE
       if [ "$(echo "getport 1" | nc $IP $PORT 2>&1 | grep "1")" != ""  ]; then
          svdrpsend.pl MESG "1"
       else
          svdrpsend.pl MESG "0"
       fi



    Zustand der Steuerung = Ausgabe am TV

    Vice President Logistics and Materials Handling of the first 40" TFT Sammelbestellung and Atmolight I + II + III

  • So - da bin ich wieder...


    Ich habe mittlerweile einige Sachen probiert und kann verschiedene mit der Steuerung machen.


    Jetzt brauche ich aber noch etwas, das ich ein beliebiges Script per FB starten kann.


    Es soll nur einmal durchlaufen, nachdem der passende Befehl gesendet worden ist.


    Ich kann das Script bereits über das Menü und Befehle starten, nur möchte ich dies sofort über eine Taste der FB machen.


    Wie kann man das machen?

    Vice President Logistics and Materials Handling of the first 40" TFT Sammelbestellung and Atmolight I + II + III

  • Zitat

    Original von Papsi
    Jetzt brauche ich aber noch etwas, das ich ein beliebiges Script per FB starten kann.


    Schlechter Link, also nochmal:
    irexec


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

    Einmal editiert, zuletzt von gda ()

  • Zitat

    Original von Papsi
    Jetzt brauche ich aber noch etwas, das ich ein beliebiges Script per FB starten kann.


    Mache einen Eintrag in der /etc/vdr/commands


    z.B. so:


    Code
    Mein Script aufrufen      : screen -dm sh -c "sh /foo/test.sh"
  • Das habe ich jetzt auch hinbekommen.
    IREXEC war die Lösung.
    Somit kann ich dann die Ports der Steuerung per FB schalten.



    *traumichgarnichtzufragen* ;)
    Brauche noch ne Lösung:


    Wenn ich die Steuerung per

    Code
    echo "getstatus" | nc $IP $PORT

    abfragen, dann bekomme ich als Rückmeldung:

    Code
    testvdr:~# ./test.sh
    S00000001
    testvdr:~#


    Wie kann ich dann die letzte Stelle abfragen, die wechselt auch zwischen 1 und 0 (je nach Zustand des Port´s)?

    Vice President Logistics and Materials Handling of the first 40" TFT Sammelbestellung and Atmolight I + II + III

    Einmal editiert, zuletzt von Papsi ()

  • nabend


    wenn der string immer gleich lang ist ( in deinem fall 9 zeichen) kanst es so machen:




    Code
    $(echo "getstatus" | nc $IP $PORT | cut -c 9-)


    oder :

    Code
    $(echo "getstatus" | nc $IP $PORT) | cut -c 9-


    oder :

    Code
    $(`echo "getstatus" | nc $IP $PORT` | cut -c 9-)


    ist jetzt so aus dem gedächnis musst mal versuchen welches funktioniert


    sollte keins funktionieren dann musst das n zwei schritten machen:


    VALUE=$(echo "getstatus" | nc $IP $PORT)


    $( echo $VALUE | cut -c 9- )

  • Code
    if echo getstatus | nc $IP $PORT | awk '{ exit gensub("^.*(.)$", "\\1", "g") }'; then
      svdrpsend.pl MESG "0"
    else
      svdrpsend.pl MESG "1"
    fi


    es wird hier nur die letzte Stelle (ganz rechts) vom String auf '0' oder '1' abgeprueft. Egal wie lange der String ist oder welche Zeichen er sonst enthaelt.

  • ach ich seh gerade aus dem Post weiter oben, es werden vom 'getstatus' ja noch Schrottzeichen (oder Whitespaces) an den String angehaengt?!


    hiermit wird diese zusaetzliche Anforderung auch noch erfuellt:

    Code
    if echo getstatus | nc $IP $PORT | awk '{ exit gensub("^.*([0-9])[^0-9]*$", "\\1", "g") }'; then
      svdrpsend.pl MESG "0"
    else
      svdrpsend.pl MESG "1"
    fi
  • Moin, moin


    ich kenn mich mit awk leider ned aus - der Konstrukt funzt bei mir leider ned.
    Nach meinem Verständnis ist ".*" bei regulären Ausdrücken gefräßig, d.h. er findet danach nix mehr (allerdings unterscheiden sich nahezu alle Anwendungen in der Behandlung von Sonderzeichen).
    Das wiederum deckt sich mit meiner Ausgabe - eben nix.


    Unter perl könnte man das gefräßig sein abschalten, indem man ".*?" verwendet - wie das unter awk geht - keine Ahnung.


    Aber ich denke mal, el presidente will beim Status alle 8 Bits abfragen. Deshalb würde ich so eine Variante vorschlagen:

    Code
    VALUE=$(echo "getstatus" | nc $IP $PORT)
    Bit0=`echo $VALUE | cut -c 2`
    Bit1=`echo $VALUE | cut -c 3`
    Bit2=`echo $VALUE | cut -c 4`
    Bit3=`echo $VALUE | cut -c 5`
    Bit4=`echo $VALUE | cut -c 6`
    Bit5=`echo $VALUE | cut -c 7`
    Bit6=`echo $VALUE | cut -c 8`
    Bit7=`echo $VALUE | cut -c 9`

    Nicht unbedingt elegant, aber so kann jedes Bit nach Belieben weiterverarbeitet werden.
    Die Variablen Bit0 bis Bit7 können genauso abgefragt werden, wie VALUE bisher.


    Gruß Geronimo

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • Zitat

    Wenn ich die Steuerung per

    Code
    echo "getstatus" | nc $IP $PORT

    abfragen, dann bekomme ich als Rückmeldung:

    Code
    testvdr:~# ./test.sh
    S00000001
    testvdr:~#


    Wie kann ich dann die letzte Stelle abfragen, die wechselt auch zwischen 1 und 0 (je nach Zustand des Port´s)?


    Falls Du nur wissen willst ob die letzte Stelle ne 1 ist gehts auch so:

    Zitat

    if [ "$(echo "getstatus" | nc $IP $PORT| grep "1$")" != "" ] ; then
    ...

  • Hallo,


    ich habe es jetzt so gemacht:


    Ich sende per FB ein IR Commando und starte über IREXEC das Script, welches den Zustand des Ports abfragt.
    Je nach Zustand wird dann der Port getoggt.
    Die Abfrage hätte ich auch weglassen können, die brauche man bei dem Beispiel mit der Lampe nicht unbedingt.
    Das brauche ich für spätere Sachen, daher habe ich das hier schonmal getestet:


    Somit kann ich verschiedene Verbraucher per FB starten/steuern und muss nicht extra dafür aufstehen.
    Weiterhin gibt mir die Steuerung auch Meldungen am TV aus, wenn verschiedene Sachen erfüllt sind.


    Gruß
    Papsi


    PS
    Über einen Bewegungsmelder überwache ich unsere Auffahrt und Vorgarten. Wenn dort jemand rumschleicht, dann bekomme ich das am TV mitgeteilt(alles schon vorgekommen)
    Oder ich stehe schon hinter der Tür, bevor die kleinen Kinder Klingelstreiche machen wollen. :unsch

    Vice President Logistics and Materials Handling of the first 40" TFT Sammelbestellung and Atmolight I + II + III

  • hy papsi


    das "sleep $WAITTIME"


    brauchst du nicht zweimal,


    setze es einfach unter die if-else-fi krams.


    denn der sleep befehl ist ja in beiden Situationen gleich, somit spart man wieder eine zeile code ;)


    P.S.: Das mit dem $VALUE und Kanal1 könnte man auch direkt in die if abfrage bauen, würde noch 2 zeilen einsparen, aber wenns jetzt so funktioniert lass es ruhig so

    MfG


    bex


    server -> Asus p8h67-i -Intel 2100T - Cine CT v6

    client 1 -> Asus p5n7a-vm -Intel E5200 - Technisat Cablestar HD 2

    client 2+3 -> Raspberry Pi - Openelec

    Einmal editiert, zuletzt von bexbier ()

  • Hallo,


    habe jetzt einiges am laufen...


    Nun möchte ich per echo einige Werte in eine Datei schreiben.
    Das klappt auch schon testweise:
    echo "$Wert" > Datei.txt



    Ich möchte aber ein paar Werte hintereinander nach folgendem Schema einfügen:
    Wert1:Wert2;Wert3
    Wert1:Wert2;Wert3
    Wert1:Wert2;Wert3
    usw...


    Wert1 und Wert2 getrennt durch Doppelpunkt
    und Wert 2 und 3 durch Semikolon


    Wie muss ich das per echo eingeben?

    Vice President Logistics and Materials Handling of the first 40" TFT Sammelbestellung and Atmolight I + II + III

  • So einfach - und ich habe jeden Mist probiert und nichts gefunden...


    Jetzt brauch ich nach Wert3 aber noch ein "Enter" ;)

    Vice President Logistics and Materials Handling of the first 40" TFT Sammelbestellung and Atmolight I + II + III

  • Wenn ich es so mache:
    echo "$WERT1:$WERT2;$WERT3" >> Datei.txt
    Dann wird die Zeile immer überschrieben.
    Ich möchte die Werte ja je Sekunde in die Datei schreiben und die untereinander haben:
    Wert1:Wert2;Wert3
    Wert1:Wert2;Wert3
    Wert1:Wert2;Wert3
    usw...


    Also brauche ich nach dem Wert3 ein "Enter"

    Vice President Logistics and Materials Handling of the first 40" TFT Sammelbestellung and Atmolight I + II + III

  • also das glaub ich nicht,


    wenn du es so machst wie ich geschrieben hab dann sollte immer unten angehängt werden, und auch als neue zeile. hast du auch ">>" anstatt ">" benutzt ?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!