Script aus einer Schleife starten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
schneiderre
User
Beiträge: 11
Registriert: Montag 1. Mai 2017, 20:40

Hallo Leute,
ich bin langsam am Verzweifeln und hoffe auf eure Unterstützung. Ich habe nach über einem Tag suchen und probieren immer noch keine Lösung gefunden.
Ich bastele gerade an einer automatisierten Licht-/ Temperatursteuerung für meine Terrarien. Damit bin auch soweit fertig. Jetzt möchte ich den Gehäuselüfter des Pi bei einer bestimmten CPU-Temperatur einschalten lassen und mir eine Mail senden lassen. Das schalten des Lüfters klappt ohne Probleme, jetzt möchte ich aus dem Python-Script welches die Temperatur der CPU ausliest und bei Erreichen eines Schwellwertes den Lüfter über GPIO einschaltet ein anderes Script starten welchen eine Mail versendet.
Versucht habe ich das Ganze mit „subprocess.Popen("/Pfad/Script")“, „./Script“, „sudo python /Pfad/Script„ …
Ich bekomme immer folgende Fehlermeldung:
File "0_Gehaeuseluefter.py", line 23
subprocess.Popen("./CPU_Mail.py")
^
IndentationError: unexpected indent

Mein Lüfterscript sieht wie folgt aus:

Code: Alles auswählen

#!/usr/bin/python
# -*- encoding: utf-8 -*-

import os 
import time 
import RPi.GPIO as GPIO 
import subprocess
import sys
GPIO.setwarnings(False) 
GPIO.setmode(GPIO.BOARD)
GPIO.setup(8, GPIO.OUT) 
def getCPUtemperature():
    res = os.popen('vcgencmd measure_temp').readline()
    return(res.replace("temp=","").replace("'C\n","")) 
temp_float = float(getCPUtemperature()) 
path = "/media/HDD/Scripts"

try:
    if (temp_float > 50):
        print temp_float
        print "power on fan..."
		subprocess.Popen("path/CPU_Mail.py")
        # ein
        GPIO.output(8, True)
        time.sleep(180)
        print "power off fan..."
        # aus
        GPIO.output(8, False)
        print float(getCPUtemperature())
    else:
        print temp_float
        print "temp too low" 
except KeyboardInterrupt:
    print float(getCPUtemperature())
    print "power off fan..."
    GPIO.output(8, False)
    print "cancelling..."
Habt ihr eventuell einen Tipp wie ich aus der Schleife ein anderes Script starten kann???
Vielen Dank für eure Unterstützung
Zuletzt geändert von Anonymous am Montag 1. Mai 2017, 21:21, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@schneiderre: Die Zeile ist falsch eingerückt. Du siehst das vielleicht nicht weil Du Tabs benutzt hast. Genau deswegen sollte man Tabs und Leerzeichen nicht mischen. Die Konvention sind vier Leerzeichen pro Ebene.
schneiderre
User
Beiträge: 11
Registriert: Montag 1. Mai 2017, 20:40

Hallo BlackJack,
vielen Dank für deine schnelle Antwort. Genau das war der Fehler. Sowas passiert wenn man seit Wochen jeden Tag bis spät in die Nacht programmiert. Die Fehlermeldung ist jetzt weg, allerdings wird das andere Script nicht ausgeführt. Wenn ich das Mail-Script von Hand starte funktioniert dieses nur aus dem anderen Script heraus nicht. Hast du noch einen Tipp für mich??? Ist das mit „subprocess.Popen“ so richtig???
schneiderre
User
Beiträge: 11
Registriert: Montag 1. Mai 2017, 20:40

Sorry, mein Fehler, es klappt, man sollte auch den Temperaturschwellwert so einstellen das der Lüfter startet. Herzlichen Dank für deine Hilfe und sorry für meine Blindheit. Du bist mein Held des Tages :-)
Antworten