Moin,
Ich habe folgendes Problem , ich habe ein Bewegungsmelder Skript und will es mit einem Sms Gateway verbinden . Aber finde einfach nicht den passenden befehl gefunden um die beiden Skripte zu verbinden. Hab es mit subprocess.call versucht aber bekomme immer wieder Fehlermeldungen...
MFG
Einbinden von Skripte
-
python_rawe
- User
- Beiträge: 5
- Registriert: Mittwoch 3. Dezember 2014, 08:22
Zuletzt geändert von python_rawe am Mittwoch 3. Dezember 2014, 10:25, insgesamt 1-mal geändert.
Definiere "verbinden" und liefere etwas mehr Hintergrund.
Handelt es sich bei beiden Programmen um Python-Skripte?
Könnte man die Skripte vielleicht auch als Module verwenden?
Welche Parameter erwarten die Skripte?
Wie sieht dein Codeversuch mit subprocess.call aus, der nicht funktioniert hat?
Handelt es sich bei beiden Programmen um Python-Skripte?
Könnte man die Skripte vielleicht auch als Module verwenden?
Welche Parameter erwarten die Skripte?
Wie sieht dein Codeversuch mit subprocess.call aus, der nicht funktioniert hat?
-
python_rawe
- User
- Beiträge: 5
- Registriert: Mittwoch 3. Dezember 2014, 08:22
Es sind beides Python Skripte, es soll so laufen, wenn ich das Bewegungsmelder Skript starte, und dort dann der Bewegungsmelder eine Bewegung erkennt, das dann eine SMS verschickt wird, also muss ich das SMS Script ja in das Bewegungsmelder Skript einbinden, aber genau da fehlt mir das wissen.
Hab es mal so versucht :
subprocess.call(['/pi/sms'])
und oben halt dann import subprocess
Hab es mal so versucht :
subprocess.call(['/pi/sms'])
und oben halt dann import subprocess
-
python_rawe
- User
- Beiträge: 5
- Registriert: Mittwoch 3. Dezember 2014, 08:22
-
BlackJack
@python_rawe: Dann ist in dem Skript irgenwo davor syntaktisch etwas falsch was dem Compiler dann an der Stelle auffällt. Beseitige den Syntaxfehler, und versuch's noch mal. 
Text aus einem Terminal kann man übrigens als Text kopieren und hier als Text (in Code-Tags) einfügen. Das ist deutlich einfacher als ein Bild zu erstellen und das hier einzubinden. Und zukunftssicherer auch, das bleibt dann nämlich so lange im Forum wie das Forum selber existiert, und verschwindet nicht wenn das extern gehostete Bild eventuell nicht mehr existiert.
Text aus einem Terminal kann man übrigens als Text kopieren und hier als Text (in Code-Tags) einfügen. Das ist deutlich einfacher als ein Bild zu erstellen und das hier einzubinden. Und zukunftssicherer auch, das bleibt dann nämlich so lange im Forum wie das Forum selber existiert, und verschwindet nicht wenn das extern gehostete Bild eventuell nicht mehr existiert.
-
python_rawe
- User
- Beiträge: 5
- Registriert: Mittwoch 3. Dezember 2014, 08:22
Code: Alles auswählen
# Quelle : http://www.raspberrypi-spy.co.uk/
# Erforderliche Python Bibliotheken und Module werden eingelesen
import RPi.GPIO as GPIO
import time
import subprocess
import urllib
import urllib2
# Da wir nur einen Pin zur Datenverarbeitung nutzen, ist die Funktion (GPIO.BMC) nuetzlicher als (GPIO.BOARD).
GPIO.setmode(GPIO.BCM)
# Hier wird der Output GPIO-Pin festgelegt fuer den Bewegungsmelder
GPIO_PIR = 7
print "Bewegungsmelder ist an! (STEUERUNG & C zum beenden)"
# Pin als Input gleich gesetzt
GPIO.setup(GPIO_PIR,GPIO.IN)
# Variablen zum abfragen des Bewegungsmelder Status
Current_State = 0
Previous_State = 0
# Start des Programms(Try-Schleife)
try:
# Textausgabe
print "Warte bis der Bewegungsmelder bereit ist!"
# Loop bis der Output null ist -> anschalten/ausschalten input=1
while GPIO.input(GPIO_PIR)==1:
Current_State = 0
# Textausgabe
print "Bereit!"
# While Schleife Abfrage, fals True = Ausfuehren
while True :
# Bewegungsmelder Pin auslesen
Current_State = GPIO.input(GPIO_PIR)
# Abfrage des Bewegungsmelder Status , fals Current State = 1 -> Bewegung erkannt
if Current_State==1 and Previous_State==0:
# Textausgabe : Fals Bewegung erkannt wurde
print "Bewegung erkannt, der Alarm wird ausgeloest !"
subprocess.call(['/pi/sms'])
# der jetzige Status wird wieder auf 0 gesetzt
Previous_State=1
# Neue Bedingung fals Previous_State = 1 ist
elif Current_State==0 and Previous_State==1:
# Textausgabe
print "Der Bewegungsmelder ist wieder bereit!"
# der bewegungsmelder wird wieder auf 0 gesetzt
Previous_State=0
# Einstelllung des Zeitraffers des bewegungsmelders
time.sleep(0.20)
# Fals STEUERUNG & C gedrueckt wurde , wird die Textausgabe ausgegeben
except KeyboardInterrupt:
print " Das Programm wurde beendet !"
# GPIO Pins werden auf Standart zurueckgestellt
GPIO.cleanup()
-
BlackJack
@python_rawe: Bei dem Quelltext kommt der Syntayfehler an einer anderen Stelle, nämlich bei der ``while``-Schleife in Zeile 42:
Das selbe Problem hätte auch Dein `subprocess`-Aufruf. Die Einrückung ist ein wichtiger Bestandteil von Python's Syntax. Daran erkennt der Compiler die Code-Struktur.
Es macht ein wenig den Eindruck Du versuchst da zwei Skripte die nicht von Dir sind zu verbinden, ohne selber die Grundlagen von Python zu kennen. Dann bleibt ja nur raten und probieren, das führt aber bei komplexeren Sachen wie Programmieren selten zum gewünschten Ergebnis und noch seltener zu einer guten Lösung, selbst wenn es ”funktioniert”.
Code: Alles auswählen
File "/home/bj/forum.py", line 42
while True :
^
IndentationError: unindent does not match any outer indentation levelEs macht ein wenig den Eindruck Du versuchst da zwei Skripte die nicht von Dir sind zu verbinden, ohne selber die Grundlagen von Python zu kennen. Dann bleibt ja nur raten und probieren, das führt aber bei komplexeren Sachen wie Programmieren selten zum gewünschten Ergebnis und noch seltener zu einer guten Lösung, selbst wenn es ”funktioniert”.
Und anstelle von flags à la 'Current_State' und Co. könntest du die 'event_detected()' Funktion nutzen.
-
python_rawe
- User
- Beiträge: 5
- Registriert: Mittwoch 3. Dezember 2014, 08:22
Ja , bin ziemlicher neuling in Python dies ist für ein Projekt , wisst ihr nun wie ich die beiden Skripte verbinden kann ?
Und wie meinst du das mit 'event_detected()?
Und wie meinst du das mit 'event_detected()?
@python_rawe
Im Prinzip so wie es in der Doku steht
Im Prinzip so wie es in der Doku steht
Code: Alles auswählen
def motion_detected(channel):
print('Motion detected on channel %s' % channel)
subprocess.call(['/pi/sms'])
GPIO.add_event_detect(PIR_PIN, GPIO.RISING, callback=motion_detected)

