Seite 1 von 1
Einbinden von Skripte
Verfasst: Mittwoch 3. Dezember 2014, 09:23
von python_rawe
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
Re: Verbinden von Skipte
Verfasst: Mittwoch 3. Dezember 2014, 09:27
von /me
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?
Re: Einbinden von Skripte
Verfasst: Mittwoch 3. Dezember 2014, 10:31
von python_rawe
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
Re: Einbinden von Skripte
Verfasst: Mittwoch 3. Dezember 2014, 10:59
von Sirius3
@python_rawe: und das hat zu welchem nicht-gewünschten Ergebnis geführt?
Re: Einbinden von Skripte
Verfasst: Mittwoch 3. Dezember 2014, 11:11
von python_rawe
Diese Fehlermeldung kam dort :

Re: Einbinden von Skripte
Verfasst: Mittwoch 3. Dezember 2014, 11:16
von 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.
Re: Einbinden von Skripte
Verfasst: Mittwoch 3. Dezember 2014, 14:20
von python_rawe
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()
Re: Einbinden von Skripte
Verfasst: Mittwoch 3. Dezember 2014, 14:29
von BlackJack
@python_rawe: Bei dem Quelltext kommt der Syntayfehler an einer anderen Stelle, nämlich bei der ``while``-Schleife in Zeile 42:
Code: Alles auswählen
File "/home/bj/forum.py", line 42
while True :
^
IndentationError: unindent does not match any outer indentation level
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”.
Re: Einbinden von Skripte
Verfasst: Mittwoch 3. Dezember 2014, 14:39
von lackschuh
Und anstelle von flags à la 'Current_State' und Co. könntest du die '
event_detected()' Funktion nutzen.
Re: Einbinden von Skripte
Verfasst: Mittwoch 3. Dezember 2014, 15:01
von python_rawe
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()?
Re: Einbinden von Skripte
Verfasst: Mittwoch 3. Dezember 2014, 15:25
von lackschuh
@python_rawe
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)