GPIO HIGH Level erkennen und entsprechende Maßnahmen einleiten

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Moon
User
Beiträge: 37
Registriert: Mittwoch 20. Dezember 2017, 15:21

Hey,

ich möchte, wenn ein Signal von außerhalb kommt, dass dieses Signal überprüft wird ob es LOW oder HIGH ist und wenn es HIGH ist sollen weitere Maßnahmen ergriffen werden, wie z.b. ein Mailversand.

Nun habe ich folgendes Script (signal simmuliert in diesem fall das GPIO.HIGH):

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf8 -*-

import RPi.GPIO as GPIO;
from marrow.mailer import Mailer, Message;


# Benötigte Werte:
# GPIO.LOW (alles ok)
# GPIO.HIGH (fehler)

#GPIO.setmode(GPIO.BOARD); # Pin-Nummern aus dem Layout benutzen (siehe gpio.jpg)

# input setzen auf Pin-Nummer: 18 = GPIO 24
#GPIO.setup(18, GPIO.IN);
signal = high;
#Überprüfung ob input einen low oder high status hat
#GPIO.input(18) == GPIO.HIGH
if(signal == high): 
		# Mailversand
mailer = Mailer(dict(
       transport = dict(
       use = 'smtp',
       host = 'localhost')
       )
	);
			
mailer.start();

message = Message(author="rasperypi@fehler.de", to="test@gmx.de");
message.subject = "Fehler";
message.plain = "Fehlermeldung!";
mailer.send(message);

mailer.stop();
Nun wenn ich dies aufrufe erhalte ich immer folgenden Fehler:
File "programme/ofen.py", line 16
signal = TRUE;
^
IndentationError: unexpected indent


Habe schon gegoogelt. Hatte vorher Einrückungen drin. Die Habe ich jetzt entfernt. Aber immernoch wird er Error angezeigt.
Ich weiß nicht warum.

Hoffe ihr könnt mir helfen.

Grüße,
Moon
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Moon: in Python sind Einrückungen ein wichtiges syntaktisches Element. Zusammengehörige Blöcke (if, for, Funktionen, etc) müssen immer einheitlich eingerückt sein. Konvention ist, immer 4 Leerzeichen pro Ebene zu verwenden; bei Dir z.b. Zeile 21ff falsch eingerückt.
Generell benutzt man in Python Strichpunkte um mehrere Befehle in einer Zeile zu trennen (was man aber nie macht), nicht zum Abschließen eines Befehls. Entferne also alle Strichpunkte. if ist keine Funktion, braucht also keine Klammern.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Deine Fehlermeldung passt nicht zum Code.

Und Indentations sind nicht einfach etwas, das man in Python entfernen kann. Genausowenig wie du einfach Klammern in einem mathematischen Ausdruck nach belieben verteilen kannst (oder entfernen). Sie dienen dem gleichen Zweck: der gruppierung von zusammengehoerigen Code-Teilen.

Um dich damit auseinander zu setzen empfiehlt sich das durcharbeiten eines Tutorials, zB des offiziellen auf python.org.
Moon
User
Beiträge: 37
Registriert: Mittwoch 20. Dezember 2017, 15:21

Hey,

danke für die schnellen Antworten.

@Sirius3 : Danke. Genau das war das Problem welches den Error ausgelöst hat. Nun funktioniert es.

@__deets__ : Doch. Dieser Fehler kam beim Ausführen der Datei in der Kommandozeile. Woher will ich denn sonst wissen wie der fehler heißt. Programmiere eigentlich in ne ganz anderen Programmiersprache. Daher die Angewohnheiten bei if-abfrage oder auch den Semikolons.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Moon hat geschrieben: @__deets__ : Doch. Dieser Fehler kam beim Ausführen der Datei in der Kommandozeile. Woher will ich denn sonst wissen wie der fehler heißt.
Der gesamte gezeigte Quelltext enthaelt genau 0 mal die Zeile 'signal = TRUE;' Erst recht nicht in Zeile 6. Also passt deine Fehlermeldung NICHT zu dem gezeigte Quelltext :K

Du hast 'signal = high' irgendwo stehen. Den Namen 'high' sehe ich auch nirgendwo definiert, eingebaut in Python ist er auch nicht, und der Fehler der dann kaeme ist ein NameError.

Insofern zeigst du irgendwas, und machst irgendwas anderes.
Moon
User
Beiträge: 37
Registriert: Mittwoch 20. Dezember 2017, 15:21

Ja habe vergessen das aktuelle Script aufm PC auf den Raspery Pi hochzuladen. Darum diese Unstimmigkeiten. Sorry.

Aber es funktioniert jetzt durch einfügen der Einrückungen.
harryberlin
User
Beiträge: 227
Registriert: Donnerstag 17. Dezember 2015, 12:17

du setzt signal high und fragst im nächsten schritt ob signal high ist.
irgendwie sinnfrei.
empty Sig
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

harryberlin hat geschrieben:du setzt signal high und fragst im nächsten schritt ob signal high ist.
irgendwie sinnfrei.
Wie der TE schrub:

"""
(signal simmuliert in diesem fall das GPIO.HIGH)
"""

Debugging verschiedener Programmteile unabhaengig voneinander ist durchaus sinnvoll....
harryberlin
User
Beiträge: 227
Registriert: Donnerstag 17. Dezember 2015, 12:17

ok, hast recht, er schrieb es tatsächlich.
dann nehm ich's zurück.
empty Sig
Moon
User
Beiträge: 37
Registriert: Mittwoch 20. Dezember 2017, 15:21

Hey,

ich möchte das wenn das Signal High ist eine E-Mail senden. Nun habe ich nach pythonMailer geschaut und bin auf python-simplemail (https://github.com/gerold-penz/python-simplemail/) gestoßen. Nun wenn ich versuche, mit dem Code der bei der Installation steht (pip install python-simplemail), simplemail auf dem Pi zu installieren erhalte ich diesen Fehler:

------------------------------------------------------------
/usr/bin/pip run on Thu Dec 21 16:41:42 2017
Downloading/unpacking python-simplemail
Getting page https://pypi.python.org/simple/python-simplemail/
URLs to search for versions for python-simplemail:
* https://pypi.python.org/simple/python-simplemail/
Analyzing links from page https://pypi.python.org/simple/python-simplemail/
Found link https://pypi.python.org/packages/21/d8/ ... fa0a4e73cf (from https://pypi.python.org/simple/python-simplemail/), version: 2.0.4
Found link https://pypi.python.org/packages/38/28/ ... 263100e759 (from https://pypi.python.org/simple/python-simplemail/), version: 2.0.2
Found link https://pypi.python.org/packages/8d/db/ ... 6bfa58f420 (from https://pypi.python.org/simple/python-simplemail/), version: 2.1.0
Found link https://pypi.python.org/packages/e7/66/ ... 6af10a70b0 (from https://pypi.python.org/simple/python-simplemail/), version: 2.0.3
Using version 2.1.0 (newest of versions: 2.1.0, 2.0.4, 2.0.3, 2.0.2)
Downloading python-simplemail-2.1.0.tar.gz
Downloading from URL https://pypi.python.org/packages/8d/db/ ... 6bfa58f420 (from https://pypi.python.org/simple/python-simplemail/)
Running setup.py (path:/tmp/pip-build-jWJlNo/python-simplemail/setup.py) egg_info for package python-simplemail
running egg_info
creating pip-egg-info/python_simplemail.egg-info
writing pip-egg-info/python_simplemail.egg-info/PKG-INFO
writing top-level names to pip-egg-info/python_simplemail.egg-info/top_level.txt
writing dependency_links to pip-egg-info/python_simplemail.egg-info/dependency_links.txt
writing manifest file 'pip-egg-info/python_simplemail.egg-info/SOURCES.txt'
warning: manifest_maker: standard file '-c' not found

reading manifest file 'pip-egg-info/python_simplemail.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching 'lgpl-3.0.txt'
warning: no files found matching 'mit-license.txt'
warning: no files found matching 'mit-lizenz-deutsch.txt'
warning: no files found matching '*' under directory 'examples'
writing manifest file 'pip-egg-info/python_simplemail.egg-info/SOURCES.txt'
Source in /tmp/pip-build-jWJlNo/python-simplemail has version 2.1.0, which satisfies requirement python-simplemail
Installing collected packages: python-simplemail
Running setup.py install for python-simplemail
Running command /usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip-build-jWJlNo/python-simplemail/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-wTx3NP-record/install-record.txt --single-version-externally-managed --compile
running install
running build
running build_py
creating build
creating build/lib.linux-armv7l-2.7
creating build/lib.linux-armv7l-2.7/simplemail
copying simplemail/__init__.py -> build/lib.linux-armv7l-2.7/simplemail
running install_lib
creating /usr/local/lib/python2.7/dist-packages/simplemail
error: could not create '/usr/local/lib/python2.7/dist-packages/simplemail': Permission denied
Complete output from command /usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip-build-jWJlNo/python-simplemail/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-wTx3NP-record/install-record.txt --single-version-externally-managed --compile:
running install

running build

running build_py

creating build

creating build/lib.linux-armv7l-2.7

creating build/lib.linux-armv7l-2.7/simplemail

copying simplemail/__init__.py -> build/lib.linux-armv7l-2.7/simplemail

running install_lib

creating /usr/local/lib/python2.7/dist-packages/simplemail

error: could not create '/usr/local/lib/python2.7/dist-packages/simplemail': Permission denied

----------------------------------------
Cleaning up...
Command /usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip-build-jWJlNo/python-simplemail/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-wTx3NP-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /tmp/pip-build-jWJlNo/python-simplemail
Exception information:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main
status = self.run(options, args)
File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 295, in run
requirement_set.install(install_options, global_options, root=options.root_path)
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1436, in install
requirement.install(install_options, global_options, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 707, in install
cwd=self.source_dir, filter_stdout=self._filter_install, show_stdout=False)
File "/usr/lib/python2.7/dist-packages/pip/util.py", line 716, in call_subprocess
% (command_desc, proc.returncode, cwd))
InstallationError: Command /usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip-build-jWJlNo/python-simplemail/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-wTx3NP-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /tmp/pip-build-jWJlNo/python-simplemail


Und wenn ich das pythonscript in der Kommandozeile ausführe dann kommt folgender Fehler:

Traceback (most recent call last):
File "programme/ofen.py", line 5, in <module>
from simplemail import Email
ImportError: No module named simplemai

Mein Script:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf8 -*-

import RPi.GPIO as GPIO
from simplemail import Email

# Benötigte Werte:
# GPIO.LOW (alles ok)
# GPIO.HIGH (fehler)

#GPIO.setmode(GPIO.BOARD); # Pin-Nummern aus dem Layout benutzen (siehe gpio.jpg)

	# input setzen auf Pin-Nummer: 18 = GPIO 24
	#GPIO.setup(18, GPIO.IN);
signal = "high"
#Überprüfung ob input einen low oder high status hat
#GPIO.input(18) == GPIO.HIGH
if signal == "high": 
	# Mailversand
	Email(
        from_address = "test@test.de",
        smtp_server = "smtp.gmail.com",
        to_address = "test@test.de",
        subject = "Einfaches Beispiel (öäüß)",
        message = "Das ist der Nachrichtentext mit Umlauten (öäüß)",
    ).send()
	print "Fertig"
	
else:
	print "Signal is not high"
Das heißt die Installation schlug fehl. Aber was kann ich dagegen machen ? Hat jemand schon Erfahrungen damit?
Zuletzt geändert von Moon am Donnerstag 21. Dezember 2017, 17:00, insgesamt 1-mal geändert.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wieso bist du denn von marrowmail weg? Das sollte den Zweck erfüllen und braucht auch eher keinen Compiler. Wie simplemail. Wozu auch immer :K
Moon
User
Beiträge: 37
Registriert: Mittwoch 20. Dezember 2017, 15:21

Ja weil die Installation auch schief lief.

Log-Datei:

------------------------------------------------------------
/usr/bin/pip run on Thu Dec 21 17:02:40 2017
Downloading/unpacking marrow.mailer
Getting page https://pypi.python.org/simple/marrow.mailer/
Cleaning up...
Exception:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main
status = self.run(options, args)
File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 290, in run
requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1178, in prepare_files
url = finder.find_requirement(req_to_install, upgrade=self.upgrade)
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 194, in find_requirement
page = self._get_page(main_index_url, req)
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 568, in _get_page
session=self.session,
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 694, in get_page
req, link, "connection error: %s" % exc, url,
TypeError: __str__ returned non-string (type SysCallError)
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich würde mal das neueste Wheel runterladen, und dann mit “pip install <Pfad-zum-wheel>” probieren.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Du willst das Paket ja auch global installieren und brauchst daher auch erweiterte Rechte.

Nimm doch einfach:
[codebox=bash file=Unbenannt.bsh]pip install --user simplemail[/code]
Moon
User
Beiträge: 37
Registriert: Mittwoch 20. Dezember 2017, 15:21

Hey,

vielen Dank für den Tipp. Mit dem Befehl von Sirius ist die Installation erfolgreich gewesen.

Nun habe ich es geschaft, dass die E-Mail gesendet wird.

Ich habe nur mal ne Frage zu diesem Codeteil hier von einem MarrowMailer Beispiel:

Code: Alles auswählen

message = Message([('Alice Bevan-McGregor', 'alice@gothcandy.com')], [('Alice Two', 'alice.mcgregor@me.com')], "This is a test message.", plain="Testing!")

Ich habe eben es getestet und ich bekomme nur die erste Namensangabe sowie den Betreff der E-Mail und den Text zugesendet. Die 2 te angegebene E-Mail ist die Empfängeradresse.

Da stehen 2 emails und 2 Namen in einem array. Was hat denn die erste Emailangabe ('alice@gothcandy.com') und die 2te Namensangabe ('Alice Two') für einen Sinn?
Antworten