while Schleife im script (Abfrage pilight-receive auf bestimmten Wert)

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • while Schleife im script (Abfrage pilight-receive auf bestimmten Wert)

      Hallo zusammen,,

      versuche gerade meinen Türkontakt auszuwerten. Dieser sendet auf 433 ein Signal wenn die Tür geöffnet wird.
      Habe mir folgende Script gebastelt:


      Shell-Script

      1. #!/bin/bash
      2. while [ -f /home/pi/alarmon.txt ]
      3. do
      4. timeout 60s sudo /usr/local/bin/pilight-receive >> /home/pi/pilight.txt
      5. if grep XXXXXX /home/pi/pilight.txt; then
      6. /usr/bin/pushbullet.sh "Tuer offen"
      7. sudo rm /home/pi/pilight.txt
      8. else
      9. sudo rm /home/pi/pilight.txt
      10. fi
      11. done
      Alles anzeigen
      Ohne die While-Funktion läuft es (halt nur 30 Sekunden), ich möchte aber dass es solange läuft wie die Datei alarmon.txt existiert.

      - wenn ich es starte und die Datei alarmon.txt ist nicht da beendet das Script sofort = OK
      - wenn ich es starte und die Datei alarmon.txt ist vorhanden, läuft das Script, aber wenn ich die Datei lösche wird es nicht beendet.

      Wo liegt der Fehler?

      LG Galaxia

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von galaxia99 ()

    • Versuch's doch mal so

      Quellcode

      1. 1.#!/bin/bash
      2. 2.
      3. 3.while true
      4. 4. do
      5. [ ! -f /home/pi/alarmon.txt ] && break
      6. 5. timeout 60s sudo /usr/local/bin/pilight-receive >> /home/pi/pilight.txt
      7. 6. if grep XXXXXX /home/pi/pilight.txt; then
      8. 7. /usr/bin/pushbullet.sh "Tuer offen"
      9. 8. sudo rm /home/pi/pilight.txt
      10. 9. else
      11. 10. sudo rm /home/pi/pilight.txt
      12. 11. fi
      13. 12.done
      Alles anzeigen
      Gruß Dieter
      --------------
      Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
    • Das könntest du leicht rausbekommen, in dem du das script zu Testzwecken leicht veränderst und es dann laufen läßt.

      Quellcode

      1. #!bin/bash
      2. while true
      3. do
      4. [ ! -f /home/pi/alarmon.txt ] && break
      5. timeout 60s sudo ls /
      6. if grep XXXXXX /home/pi/pilight.txt; then
      7. /usr/bin/pushbullet.sh "Tuer offen"
      8. sudo rm /home/pi/pilight.txt
      9. else
      10. sudo rm /home/pi/pilight.txt
      11. fi
      12. done
      Alles anzeigen
      Jetzt ruft dein Script nur noch ls auf. Wenn jetzt der Sheduler stabil läuft, lag's wohl daran.
      Gruß Dieter
      --------------
      Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
    • So, ich musste mir erst mal Pilight installieren. Das läuft bei mir nur auf den Slaves, dort läuft aber logischerweise kein Sheduler.

      Wie lange dauert es denn, bis bei dir der Sheduler in die Wiese geht? Und vor allem, wann tut er das? (evtl. mal mit htop beobachten)

      Also bei mir läuft das Script ohne Beeinflussung vom Sheduler. Allerdings habe ich a) keinen 433MHz-Empfänger angeschlossen, empfange somit nicht per pilight-receive und zum anderen kann ich das script ja einfach nur laufen lassen, und durch löschen der alarmon.txt einen Schaltvorgang simulieren. Also eingeschrängt.

      Du könntest mal mit htop mal die Auslastung durch das Script und vom sheduler ansehen, und generell die Auslastung des Raspi's beobachten. Vor allem, wie hast du den sheduler eingestellt?
      Evtl. führt ja ein zu hohe Gesamtauslastung zu einen Absturz des Shedulers, wenn er dann seinen Interfall startet.
      Gruß Dieter
      --------------
      Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von DieterWo ()

    • Hm...wie erkennst du ob der Sheduler aussteigt? Ist der Prozess nicht mehr vorhanden bzw. beendet? Wenn er beendet ist, würde er ja nicht von selbst wieder starten.

      Mit sheduler-einstellungen meine ich folgendes:

      Brainfuck-Quellcode

      1. pi@Buero-SHC-Server:/var/www/shc$ php index.php app=shc -sh -c
      2. Sheduler Dienst aktiviert (ja):
      3. Status LED Pin [-1 wenn deaktiviert] (-1):
      4. folgende Performance Profile stehen zur verfügung
      5. +- ID -+- Profil -+ Beschreibung -+------------------------------------------------------------------------------------------------------------------------------------------+
      6. | 1 | fast | Reaktionszeiten von 1 - 3 Sekunden (dafür höhere System- und Netzwerkauslasutung) |
      7. | 2 | default | Reaktionszeiten von 1 - 10 Sekunden (empfohlen) |
      8. | 3 | slow | Reaktionszeiten von 1 - 30 Sekunden |
      9. +------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
      10. wähle das Profil welches verwendet werden soll (1):
      das Performance-Profile
      Gruß Dieter
      --------------
      Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
    • dies zeigt mit der Benutzerbereich auf der Homepage mit:

      folgende Fehler sind aufgetreten:
      • Der Sheduler läuft nicht


      Den Sheduler habe ich auf 2 eingestellt.

      habe die tuer.sh mal über Terminal gestartet, auch dann verabschiedet sich der Sheduler nach ca. 3-4 Minuten.

      Komisch.....

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von galaxia99 ()

    • Wie startest du denn die tuer.sh aus dem SHC?

      Vielleicht habe ich deinen Ablauf auch noch nicht ganz verinnerlicht. Ich bin davon ausgegangen, dass die tuer.sh eigentlich immer im Hintergrund laufen soll, um eben die Ereignisse deine 433 MHz-Türkontakts zu empfangen, und du löst dann die pushbullet. sh mit dem Parameter "Tuer offen" aus.
      Was steht denn in der pushbullet? Mir fehlt hier der Zusammenhang mit dem SHC.

      In welchen Zeitabständen erhältst du denn von dem Türkontakt über pilight-receive die Information? Ist dieser Takt vielleicht zu hoch, und die pushbullet.sh wird im millisekundentakt aufgerufen?
      Gruß Dieter
      --------------
      Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
    • die tuer.sh wird als Ereignis gestartet, wenn alarmon.txt vorhanden ist.
      Also überwacht ein Ereignis "Datei vorhanden".
      Und alarmon.txt erstelle ich über eine Schaltfunktion.

      Pushbullet wird nur ausgeführt wenn der Inhalt mir grep übereinstimmt (siehe script).
      D. h. wenn die Tür geöffnet wird empfängt pilight einen Code, welcher mit grep dann übereinstimmen muss (im Script als XXXXXX dargestellt).

      Wenn ich die Alarmanlage-Schaltfunktion auf aus schalte wird ja die alarmon.txt gelöscht und das script tuer.sh läuft nur noch die restlichen Sekunden, danach nicht mehr.

      Schaltfunktion script an = touch alarmon.txt
      Schaltfunktion script aus = rm alarnon.txt
      Bedingung alarmon.txt vorhanden?
      Ereignis wenn alarmon.txt vorhanden dann starte script tuer.sh
    • Nein, ich meinte jetzt nicht, dass du pilight-receive in der Konsole staten sollst, sondern einfach mal alles, was das SHC dan automatisch machen soll per Hand nachstellen.

      Also alarmon.txt per Hand erstellen und dann tuer.sh von Hand starten. Von pilight hatte ich grad nichts geschrieben.

      ich würde sagen der Sheduler macht alles, was in irgendeiner Form zeitgesteuert abläuft. Also auslesen der Eingänge, der DS18x20, usw.

      Wenn du aber deine Alarmanlage scharf schaltet, stösst du ja die Vorgänge an (also nicht zeitgesteuert) und läßt dann die alarmon.txt erstellen und die tuer.sh starten. Und macht meines Wissens nach der Schaltserver (-ss). Das kannst du auch leicht nachprüfen, in dem du mal den Sheduler beendest, und dann deine Anlage scharf schaltest. Wenn die alarmon.txt trotzdem erstellt und tuer.sh trotzdem gestartet wird, hat der sheduler damit selbst nichts zu tun.
      Gruß Dieter
      --------------
      Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
    • DieterWo schrieb:

      Nein, ich meinte jetzt nicht, dass du pilight-receive in der Konsole staten sollst, sondern einfach mal alles, was das SHC dan automatisch machen soll per Hand nachstellen.

      Also alarmon.txt per Hand erstellen und dann tuer.sh von Hand starten. Von pilight hatte ich grad nichts geschrieben.

      ich würde sagen der Sheduler macht alles, was in irgendeiner Form zeitgesteuert abläuft. Also auslesen der Eingänge, der DS18x20, usw.

      Wenn du aber deine Alarmanlage scharf schaltet, stösst du ja die Vorgänge an (also nicht zeitgesteuert) und läßt dann die alarmon.txt erstellen und die tuer.sh starten. Und macht meines Wissens nach der Schaltserver (-ss). Das kannst du auch leicht nachprüfen, in dem du mal den Sheduler beendest, und dann deine Anlage scharf schaltest. Wenn die alarmon.txt trotzdem erstellt und tuer.sh trotzdem gestartet wird, hat der sheduler damit selbst nichts zu tun.
      habe meinen Beitrag oben angepasst, während du geschrieben hast, sorry.

      aber die Überwachung ob alarmon.tyt da ist läuft doch über den Sheduler, oder?
      tuer.sh wird ja dann vom Sheduler gestartet wenn alarmon.txt da ist, oder hab ich gerade ein Brett vorm kopf?

      du meinst also in der Schaltfunktion gleichzeitig die tuer.sh schalten?

      also Kommande an:
      sudo touch /home/pi/alarmon.txt
      /usr/bin/tuer.sh
    • galaxia99 schrieb:

      die tuer.sh wird als Ereignis gestartet, wenn alarmon.txt vorhanden ist.
      Also überwacht ein Ereignis "Datei vorhanden".
      Und alarmon.txt erstelle ich über eine Schaltfunktion.
      Weil das steht "Und alarmon.txt erstelle ich über eine Schaltfunktion." war ich davon ausgegangen.

      Also ich würde das ja so machen, dass ich beim Scharfschalten über SHC nur das Script tuer.sh starten würde.
      In dem Script würd ich ganz zu Anfang die alarmon.txt erstellen lassen (warum das vom SHC machen lassen, wenn es doch sowieso zeitgleich passieren muss)
      Beim Ausschalten würde ich dann auch per SHC die alarmon.txt löschen lasen.
      Gruß Dieter
      --------------
      Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.