Vorhandensein eines Ordners oder Datei auswerten

  • Hallo,
    ich bitte um eure Hilfe, da ich mit meinen Programmierkünsten nicht weiter komme.

    Ich möchte kabelgebunden meine Rollläden zeitgebunden steuern. Dazu habe ich mir ein Bashskript entwickelt. Auf dem "Labortisch" klappt das schon wunderbar.
    Nun möchte ich natürlich noch kontrollieren, ob die Rollos auch tatsächlich die Stellung eingenommen haben, sie sie am Ende haben sollen.

    Dazu habe ich mir folgende Konfiguration gedacht: Pro Rollo sollen 2 Reedkontakte in den Rollladenkasten untergebracht werden. Die entsprechenden Magnete werden oben und unten in den Rollladenpanzer eingegossen. An jeden Reedkontakt kommt ein Adressgeber, der bei geschlossenem Kontakt einen Ordner in Form:

    Code
    /sys/bus/w1/devices/01-000012345


    erzeugt. Nun möchte ich das Vorhandensein dieses Ordners, bzw. das Vorhandensein einer Datei

    Code
    /sys/bus/w1/devices/01-000012345/name


    oder deren Inhalt auswerten.
    Also die einfachste der 3 Möglichkeiten reicht ;)

    Wenn der Ordner oder die Datei vorhanden ist, soll nichts passieren und dann soll das nächste Rollo überprüft werden. Ist der Ordner/Datei nicht vorhanden, soll für 60s ein bestimmter GPIO ein Relais auslösen, das eine Sirene ansteuert und danach ans Programmende springen.

    Ich stehe vor 2 Problemen:
    - einmal das Prüfen, ob der Ordner/Datei vorhanden ist, und
    - das Auswerten, also IF THEN ELSE

    Ist beides mit Bash realisierbar und wenn ja, wie?

    Ich würde gern Bash nehmen, weil ich das dann gleich an mein vorhandenes Steuerskript anhängen könnte.

    Viele Grüße
    DocAdams

    1x RaspberryPi 2, 1x RaspberryPi 3, 1x OpenELEC, 1x RaspberryPi 4 mit ioBroker ,

    Einmal editiert, zuletzt von docadams (14. Mai 2014 um 10:57)

    • Offizieller Beitrag
    Code
    if [ ! -d "$DIRECTORY" ]; then
      # Control will enter here if $DIRECTORY doesn't exist.
    fi

    Hab ich ganz allein gegoogled :)

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • http://www.chemie.fu-berlin.de/chemnet/genera…ipts_sh.html#if

    Code
    if [ -f /sys/bus/w1/devices/01-000012345/name ];then;
      # Datei ist vorhanden
    else
      # Datei ist nicht vorhanden
    fi



    da war dbv schneller ;)

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

    Einmal editiert, zuletzt von Der_Imperator (14. Mai 2014 um 11:17)

  • Vielen Dank für den Tipp und auch für den Link, bei der FU-Berlin war ich noch nicht gelandet.
    Ich weiß, Google ist fast allwissend, aber auch verwirrend ;-/
    Mein Code-Schnipsel sieht nun so aus. Mal sehen, ob es sich bewährt:


    Also nochmals vielen Dank.

    Viele Grüße
    DocAdams

    1x RaspberryPi 2, 1x RaspberryPi 3, 1x OpenELEC, 1x RaspberryPi 4 mit ioBroker ,


  • Hast du auch gegoogled? ;)

    Nee, ich hab den Link in den Bookmarks.
    Es sind immer wieder die gleichen Kleinigkeiten die man nachschlagen muß. :D

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.


  • Ist das Verzeichnis immer das selbe?

    Woher kriegt er $rel8 ? und wieso setzt du das auf 1 und 5min später wieder auf 0? du hast doch reedkontake um die abzuschalten :huh:

    optimiert:

    Allerdings! kann ich das nicht wirklich perfekt optimieren da ich den Rest nicht kenne usw. ggf muss die -f prüfung in kombination mit -d und ggf ein sleep von zb 1sek ans ende der while...


    ps: tastatur kaputt - ftw bildschirmtastatur

  • Hallo,

    Die Reedkontakte im Rollladenkasten können ja nur anzeigen, ob das Rollo unten ist oder nicht. Und wenn nicht, soll über das Relais 8 eine bereits vorhandene und für andere Dinge vorgesehene Sirene anschalten. Nach 5 Minuten sollte ich das mitbekommen haben, deshalb soll sie dann wieder ausgeschaltet werden.
    Die 6 Reedkontakte (3 oben, 3 unten) haben jeder eine eindeutige Adresse, es sind also 6 solche Ordner möglich. Natürlich nur 3 gleichzeitig.

    Ich poste mal das ganze Programm, um die Zusammenhänge zu zeigen, denn eigentlich sprengt es dieses Thema.
    Die vielen Kommentare brauche ich deshalb, weil ich bei meinem Projekt viele lange Pausen machen muss. Und die vielen Zeitausgaben brauche ich, um die Programmierung "dem wahren Leben" anzupassen. Das kommt dann später weg. Noch hängen an den Relais keine Rollläden usw. dran.

    Die Grundidee meines Programms ist so.
    Fester Programmstart, z.B. 15.45 Uhr
    Warten entsprechend Sonnenuntergang plus ein paar Minuten variabel
    Fensterlicht an
    45 Minuten warten plus ein paar Minuten variabel
    Rollo 1 runter
    10 Sekunden warten plus ein paar Sekunden variabel
    Rollo 2 runter
    10 Sekunden warten plus ein paar Sekunden variabel
    Rollo 3 runter
    5 Sekunden warten
    prüfen, ob Fenster 1 unten ist (bestimmter Ordner muss vorhanden sein)
    prüfen, ob Fenster 2 unten ist (bestimmter Ordner muss vorhanden sein)
    prüfen, ob Fenster 3 unten ist (bestimmter Ordner muss vorhanden sein)
    wenn nicht, soll Relais 8 5 Minuten geschlossen sein.



    Ich muss jetzt sicher nicht betonen, dass ich kein Programmierer bin, sondern mir nur alles "zusammen kopiere" ;)

    EDIT:
    für mein Verständnis, was ist der Vorteil, die Abfrage in eine while-do-Schleife einzubetten?

    Viele Grüße
    DocAdams

    1x RaspberryPi 2, 1x RaspberryPi 3, 1x OpenELEC, 1x RaspberryPi 4 mit ioBroker ,

    Einmal editiert, zuletzt von docadams (14. Mai 2014 um 23:50)

  • Da meine Tastatur kaputt ist kann ich nicht viel schreiben da mühsam...

    ich nahm an das $rel8 zum schalten der Rollos sei und deshalb die while Schleife, die dreht sich permanent im Kreis und prüft dann halt erneut den Status...


    Bei deinem Script sehe ich aber auch noch mehr Opimierungsbedarf, wie zb das wiederholen des gleichen codes oder das schalten der lampen zB:
    echo Rollo 1 fährt runter
    echo "1" > /sys/class/gpio/$rel1/value
    aber $rel1 ist weiter oben so beschrieben:
    rel1=gpio17 # R1 braun 1 hoch
    auch fehlt das freischalten der gpio's..
    $RANDOM wird auch nirgends festgelegt.. kA wofür das is :huh:

    nur mal ein kleines beispiel:

    Spoiler anzeigen

Jetzt mitmachen!

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