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

    • DieterWo schrieb:

      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.
      also so?

      Schaltfunktion Alarmanlage an:

      Kommando an:
      sudo touch /home/pi/alarmon.txt
      sleep 10
      /usr/bin/tuer.sh

      Kommando aus:
      rm /home/pi/alarmon.txt
    • oder einfach:

      Quellcode

      1. #!bin/bash
      2. echo "blablabla" > /home/pi/alarmon.txt
      3. # oder touch /home/pi/alarmon.txt
      4. while true
      5. do
      6. [ ! -f /home/pi/alarmon.txt ] && break
      7. timeout 60s sudo ls /
      8. if grep XXXXXX /home/pi/pilight.txt; then
      9. /usr/bin/pushbullet.sh "Tuer offen"
      10. sudo rm /home/pi/pilight.txt
      11. else
      12. sudo rm /home/pi/pilight.txt
      13. fi
      14. done
      Alles anzeigen
      und dann einfach nur das script tuer.sh starten
      Gruß Dieter
      --------------
      Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
    • Etwas ähnliches mache ich auch, mit nur wenigen Unterschiede. Bei mir wird durch Geofancy ein .txt File erstellt wenn ich zuhause ankomme. Dieses ist solange vorhanden, bis ich das Haus verlasse. Mit einem Ereignis (SHC) wird geprüft, ob die Datei vorhanden ist. Bzw. mit einem anderen Ereignis ob sie nicht vorhanden ist.

      Ereignis: Datei nicht vorhanden > Relais GPIO XX an = Alarm scharf
      Ereignis: Datei vorhanden > Relais GPIO XX aus = Alarm unscharf

      Das ganze läuft absolut zuverlässig.

      Die Unterschiede zu Deinem Ablauf ist das erzeugen des .txt Files und die pushbullet Erzeugung. Pushbullet nutze ich auch, da gibt es auch keine Probleme. Also bleibt noch die Erzeugung des .txt Files und pilight.

      Da würde ich mal schauen, ob Dein Script durch die Abfrage von pilight das ganze System nicht überlastet.

      Ich vermute mal, Du fragst pilight ständig ab, ob der Code von Deinem Sender ankommt. Wie ist dieses Intervall und wie oft kommt der Code?

      Ich habe übrigens auch schon mal darüber nachgedacht, solch einen Türkontakt mit Sender zu bestellen. Bin deswegen sehr daran interessiert, ob sich das verwirklichen lässt, vor allem, wenn man rund 10 davon betreiben will.
      SHC Master B2+ WLAN sowie 1 Slave B2+, 2 Slave B+ und 2 Slave Raspi B. 5x Pi Cam; Imac mit OSX El Capitan; Iphone 6 plus; Ipad mini; Lenovo Android Tablet.
    • Pilight selbst benutze ich nicht. Im deutschen Raspberry Forum gibt es x Beiträge zu Pilight, auch zum Empfang. Da würde ich mal schauen wie das da gemacht wird. Vielleicht gibt es in Pilight bereits eine Funktion, welche den Code vergleicht und beim richtigen eine art Interrupt auslöst. Mit diesem diese sich dann die .txt Datei erstellen.
      So das keine weitere Belastung durch Polling entstehet.
      SHC Master B2+ WLAN sowie 1 Slave B2+, 2 Slave B+ und 2 Slave Raspi B. 5x Pi Cam; Imac mit OSX El Capitan; Iphone 6 plus; Ipad mini; Lenovo Android Tablet.

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

    • rmjspa schrieb:

      Etwas ähnliches mache ich auch, mit nur wenigen Unterschiede. Bei mir wird durch Geofancy ein .txt File erstellt wenn ich zuhause ankomme. Dieses ist solange vorhanden, bis ich das Haus verlasse. Mit einem Ereignis (SHC) wird geprüft, ob die Datei vorhanden ist. Bzw. mit einem anderen Ereignis ob sie nicht vorhanden ist.

      Ereignis: Datei nicht vorhanden > Relais GPIO XX an = Alarm scharf
      Ereignis: Datei vorhanden > Relais GPIO XX aus = Alarm unscharf

      Das ganze läuft absolut zuverlässig.

      Die Unterschiede zu Deinem Ablauf ist das erzeugen des .txt Files und die pushbullet Erzeugung. Pushbullet nutze ich auch, da gibt es auch keine Probleme. Also bleibt noch die Erzeugung des .txt Files und pilight.

      Da würde ich mal schauen, ob Dein Script durch die Abfrage von pilight das ganze System nicht überlastet.

      Ich vermute mal, Du fragst pilight ständig ab, ob der Code von Deinem Sender ankommt. Wie ist dieses Intervall und wie oft kommt der Code?

      Ich habe übrigens auch schon mal darüber nachgedacht, solch einen Türkontakt mit Sender zu bestellen. Bin deswegen sehr daran interessiert, ob sich das verwirklichen lässt, vor allem, wenn man rund 10 davon betreiben will.
      Geofancy habe ich auch schon mal dran gedacht, heißt ja bei Iphone locative, bekomme ich aber nicht richtig ans laufen.
      ich schalte ja statt einen GPIO die Datei.

      Wie bekommst du dann eine Nachricht oder schaltest du eine Sirene?

      das Script belastet das System ca. zu 25% (top IDLE ohne script 97%, mit script 72%)

      Wenn ich es über Terminal starte hat SHC ja kein Problem damit, so weit bin ich ja schon mal.

      Richtig, pilight überwacht meinen 433-Empfänger, ob der Code XXXXXX ankommt.
      Und der kommt nur wenn die Tür geöffnet wird.

      Nur dann wird lt. script pushbullet gestartet.

      DieterWo schrieb:

      rmjspa schrieb:

      Wie ist dieses Intervall und wie oft kommt der Code?
      Die Frage hatte ich auch schon gestellt.Deswegen wollte ich ja, dass er mal das ganze von Hand auslöst.
      s. o. Code kommt nur wenn die Tür geöffnet wird.

      rmjspa schrieb:

      Pilight selbst benutze ich nicht. Im deutschen Raspberry Forum gibt es x Beiträge zu Pilight, auch zum Empfang. Da würde ich mal schauen wie das da gemacht wird. Vielleicht gibt es in Pilight bereits eine Funktion, welche den Code vergleicht und beim richtigen eine art Interrupt auslöst. Mit diesem diese sich dann die .txt Datei erstellen.
      So das keine weitere Belastung durch Polling entstehet.
      hab schon mehrfach gegoogelt, aber dazu nicht gefunden.
      Der pilight-daemon reagiert ja nicht ohne pilight-receive, oder?

      RCSwitch kann wohl direkt bei einem Code reagieren, aber wie sage ich SHC ich will nicht mehr über pilight schalten sondern über RCSwitch?
    • Ja, Geofancy heißt jetzt locative, ist aber das gleiche.

      Ich bin nach dieser Anleitung vorgegangen. Alarmanlage mit raspberry pi und geofancy automatisch schalten : onkeloki

      Da kann man direkt eine GPIO schalten oder man benutzt den SHC um abzufragen, ob im Ordner Status die xxx.txt vorhanden ist.

      Ich habe reedkontakte und PIR's direkt an den GPIO's hängen. Also ohne Funk. Diese sind auf mehrere Slave's verteilt. Diese lösen Ereignisse aus. Mit den Ereignissen werden dann unterschiedliche Funktionen getriggert. Z.B. Nachrichten und / oder Bilder per Pushbullet verschickt oder eben eine Sirene geschaltet. Bei Abwesenheit fehlt die xxx.txt Datei im Ordner Status und somit ist über eine GPIO > Relais die Stromversorgung zur Sirene unterbrochen.
      Mir ist aber immer noch nicht klar, was der reedkontakt Sender genau macht und wo und wie der code verglichen wird.
      Ist es so, dass wenn der reedkontakt geöffnet wird, dass einmalig der Code gesendet wird, oder zum Beispiel alle zehntel Sekunde bis er wieder geschlossen ist?
      Code lesen ist nicht meine Stärke. Wenn ich Deinen Code aber richtig interpretiere wird das empfangene von pilight in eine .txt geschrieben. Dann vergleichst Du ob in der Datei die Ziffernfolge xxxx vorkommt. Wenn ja, geht es weiter.....

      Wie oft fragst Du den empfangenen Code ab und vergleichst? Was bewirkt der timeout 60s?

      Übrigens: Ich habe den Sheduler auf fast stehen und habe den Sheduler nochmals selbst modifiziert. Damit werden Ereignisse von etwa 1,5 bis 2 Sekunden erkannt. D.h. es muss eine Änderung an der GPIO von mindestens dieser Zeit anliegen. Zuvor war die Response Zeit zu lange und man konnte schnell die Tür öffnen und durchgehen, ohne das dies erkannt wurde. Noch nebenbei, der Sheduler wird nicht für die Temperatursensoren benötigt. Der Sheduler wird zum Abfragen der GPIO's als Eingänge benötigt, sowie zu allen Zeitgesteuerten automatischen Schaltvorgängen incl. Sunrise und Sunset. Das nur nebenbei.

      Auch nochmal zur Info: Der Sheduler ist insgesamt etwas heikel. Auf der anderen Seite habe ich einen Raspi2B als reinen SHC Master am laufen mit der Geofancy Geschichte und einer Picam, welche mir einen Videostream liefert. Der SHC Master arbeitet dann mit 5 dezentralen SHC Slave's zusammen. Als Betriebssystem nutze ich Jessie light auf dem Master und auch auf den meisten Slave's.

      Nachtrag: Meines Wissens kann rcswitch nur senden, aber nicht einen code empfangen.
      Zum Senden kannst Du unter Schaltelemente rcswitch mit dem für dich entsprechenden code auswählen. Ich habe nur Elro Funksteckdosen, und die schalten absolut zuverlässig mit rcswitch. Mit pilight gibt es da wohl öfters Probleme, was ich hier so lese.
      SHC Master B2+ WLAN sowie 1 Slave B2+, 2 Slave B+ und 2 Slave Raspi B. 5x Pi Cam; Imac mit OSX El Capitan; Iphone 6 plus; Ipad mini; Lenovo Android Tablet.
    • habe es jetzt mal versucht.
      In der Schaltfunktion als Kommando an:

      sudo touch /home/pi/alarmon.txt
      sleep 2
      sudo /usr/bin/tuer.sh

      dann wir aber die alarmon.txt als alarmon.txt? angelegt, also erkennt tuer.sh die Datei nicht
      Wenn ich das eingebe:

      sudo touch /home/pi/alarmon.txt & sleep 2 & /usr/bin/tuer.sh

      wird die Datei korrekt angelegt, tuer.sh startet aber nicht..

      ???
    • DieterWo schrieb:

      oder einfach:

      Quellcode

      1. #!bin/bash
      2. echo "blablabla" > /home/pi/alarmon.txt
      3. # oder touch /home/pi/alarmon.txt
      4. while true
      5. do
      6. [ ! -f /home/pi/alarmon.txt ] && break
      7. timeout 60s sudo ls /
      8. if grep XXXXXX /home/pi/pilight.txt; then
      9. /usr/bin/pushbullet.sh "Tuer offen"
      10. sudo rm /home/pi/pilight.txt
      11. else
      12. sudo rm /home/pi/pilight.txt
      13. fi
      14. done
      Alles anzeigen
      und dann einfach nur das script tuer.sh starten
      Gruß Dieter
      --------------
      Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
    • habe versucht dein Script dort einzutagen, aber wie soll ich tuer.sh dann automatisch starten?
      Du hast dort noch den ls-Befehl drin, ist das korrekt?

      ich schnalle es nicht, steht auf dem Schlauch... ??????

      wenn ich dein script in eine sh packe und starte wird es nicht beendet wenn ich die alarmon.txt lösche.
      Muss dann die pilight-receive mit killall beenden.


      noch mal kurz zum Hintergrund was ich vorhabe:

      durch eine Schaltfunktion möchte ich die Überwachung meines 433-Empfängers einschalten (pilight-Receive)
      Wenn dann der Code meiner Türöffnung auftaucht in der pilight.txt soll pushbullet ausgeführt werden.

      Da ich ja nicht direkt auf den Code bei Eingang reagieren kann (ist ja kein GPIO der geschaltet wird) wollte ich das auslesen 15s laufen lassen,
      dann mit grep die pilight.txt auslesen und wenn nötig (Code vorhanden in der Datei) reagieren.
      Danach soll pilight.txt gelöscht und pilight-receive wieder aktiviert werden, weitere 15s, solange soll dies durchlaufen werden bis ich die alarmon.txt durch eine Schaltfunktion wieder lösche.
    • Wieso sollte das Script nicht mehr beendet werden?
      die alarmon.txt wird doch außerhalb der while-schleife erzeugt, und die While-Schleife wird verlassen, wenn die alarmon.txt nicht mehr existiert.

      ich hab das grad mal ausprobiert.
      statt
      "timeout 60s sudo ..."
      müsstest du mal
      "sudo timeout 60s ..."
      schreiben.

      mach dem erstellen der alarmon.txt habe ich noch eine pause von 2 sek eingebaut, damit die Datei auch sicher existiert.

      Hier mal die Datei:

      Shell-Script

      1. echo "blablabla" > /home/pi/alarmon.txt
      2. sleep 2
      3. while true
      4. do
      5. [ ! -f /home/pi/alarmon.txt ] && break
      6. sudo timeout 10s /usr/local/bin/pilight-receive >> /home/pi/pilight.txt
      7. if grep XXXXXX /home/pi/pilight.txt; then
      8. /usr/bin/pushbullet.sh "Tuer offen"
      9. sudo rm /home/pi/pilight.txt
      10. else
      11. sudo rm /home/pi/pilight.txt
      12. fi
      13. done
      Alles anzeigen
      Also bei mir funktioniert das so (natürlich bekomme ich von pilight nichts zurück, weil ich ja keinen Sender habe)
      Gruß Dieter
      --------------
      Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
    • Okay, das liegt daran, dass dein Script und auch die verwendeten Pfade auf /home/pi zugreifen wollen. Ein Verzeichnis, worauf der user www-data keinen Zugriff hat. SHC startet die script unter dem Benutzer www-data.

      Wenn du z.B. das script nach /var/www/shc kopierst, und deine Pfade innerhalb des scripts entsprechen anpasst, läuft das auch und kann auch über das SHC gestartet werden.
      Gruß Dieter
      --------------
      Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
    • wenn ich so eintrage macht SHC mir wieder ein Fragezeichen beim Dateinamen:
      alarmon.txt?

      als Pfad zu /var/www/shc/tuer.sh scheint es zu funktionieren.

      Aber der Button "an" schaltet nicht um,erst wenn ich die tuer.sh kille.

      Ohne killen kann ich das script nicht beenden. hab auch schon ein "&" dahinter gesetzt im SHC Kommando,
      bringt auch nichts.

      pushbullet wird leider auch nicht ausgeführt, habe das script dafür auch nach /var/www/shc gepackt

      habe es jetzt so angepasst:

      Shell-Script

      1. echo "blablabla" > /var/www/shc/alarmon.txt
      2. sleep 2
      3. while true
      4. do
      5. [ ! -f /var/www/shc/alarmon.txt ] && break
      6. sudo timeout 60s /usr/local/bin/pilight-receive >> /var/www/shc/pilight.$
      7. if grep xxxxxx /var/www/shc/pilight.txt; then
      8. /var/www/shc/pushbullet.sh "Tuer offen"
      9. sudo rm /var/www/shc/pilight.txt
      10. else
      11. sudo rm /var/www/shc/pilight.txt
      12. fi
      13. done
      Alles anzeigen

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

    • @galaxia99


      galaxia99 schrieb:

      pushbullet wird leider auch nicht ausgeführt, habe das script dafür auch nach /var/www/shc gepackt
      pushbullet funktioniert schon. Du musst das Script in /usr/bin packen.

      Beispiel Script: alarmgartenhaus.sh

      #!/bin/bash

      API="xxxxxyyyxyxyxyxyxyxyxy"

      curl -u $API: api.pushbullet.com/v2/pushes -d type=note -d title="Alarm Gartenhaus" -d body="$(date +%d-%b-%H_%M)"


      Um ein Bild zu pushen, nehme ich pushingbox. Da ist die API einfacher gestaltet als bei pushbullet und von dort bekommst Du das Bild auch nach pushbullet geschickt.
      SHC Master B2+ WLAN sowie 1 Slave B2+, 2 Slave B+ und 2 Slave Raspi B. 5x Pi Cam; Imac mit OSX El Capitan; Iphone 6 plus; Ipad mini; Lenovo Android Tablet.