Crontab funktioniert nicht

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
narpfel
User
Beiträge: 213
Registriert: Freitag 20. Oktober 2017, 16:10

Donnerstag 11. Januar 2018, 17:28

Du hast `marrow` nur für deinen Benutzer installiert und nicht global.

Wenn du `sys.path` verwendest, muss `sys` natürlich auch importiert werden. Das hab ich nicht extra dazu geschrieben, ein bisschen selbst mitdenken ist schließlich immer hilfreich.

Wenn du, wie __deets__ vorschlägt, marrow nochmal als root installierst, hast du am Ende zwei parallele Installationen. Ich würde also zuerst die benutzerspezifische Installation deinstallieren (`python -m pip uninstall marrow.mailer`) und marrow dann als root wieder installieren: `sudo python -m pip install marrow.mailer`.
Moon
User
Beiträge: 37
Registriert: Mittwoch 20. Dezember 2017, 15:21

Donnerstag 11. Januar 2018, 18:22

Hey,

aso ok. Ich dachte, dass man mit python global es installiert. Habe ich mich wohl geirrt.

@narpfel:
Ich kenne mich mit Python kaum aus. Brauche dies momentan nur für einen kleinen Zweck und wusste nicht, dass man dies importieren muss.
Das importieren verschiedener Module finde ich nicht so toll. Da sucht man z.b. ein Modul für was und findet es nicht. Bzw. ist Anfänger/Einsteiger und kapiert dabei nix. Das war ganz am Anfang für mich ein sehr großes Problem.

Nun läuft es so wie erhofft. Musste nurnoch eine while-schleife hinzufügen welche während es true ist überprüft ob beim Channel eine steigende Flanke ansteht und dann den Mailversand auslöst.

Mal ne generelle Frage zu wait_for_edge():

Wie funktioniert diese Funktion eigentlich?
Meine Sicht: Die Funktion erwartet je nach mitgegebenem Parameter eine fallende oder/und steigende Flanke. Und wenn diese nicht zutreffen wird None zurückgegeben. Und dann bei der Abfrage überprüfen wir ob die Funktion None zurückgibt, wenn ja liegt keines der Fälle vor wenn ja springt es in den else-block und führt die Aktion aus.

Ist dies so richtig?

Eine weitere Frage:
Wenn ich im ersten if statement nichts ausführen möchte kann ich ja auch break reinschreiben gel?

Mein Script:

Code: Alles auswählen

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

import RPi.GPIO as GPIO
import time
import logging
from marrow.mailer import Message, Mailer
logging.basicConfig(level=logging.INFO)

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

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

# input setzen auf Pin-Nummer: 7 = GPIO 4
GPIO.setup(7, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)

channel = 7
	
while True:

	channel = GPIO.wait_for_edge(channel, GPIO.RISING)

	if channel is None :
		print "Alles gut"
	else:
			# Mailversand
		mail = Mailer({
			'manager.use': 'futures',
			'transport.use': 'smtp',
			'transport.host': 'smtp.gmail.com', # smtp server deines emailanbieters
			'transport.tls': 'ssl', # protokoll
			'transport.username': '', # deine email adresse
			'transport.password': '', # dein password
			'transport.max_messages_per_connection': 5
		})

		mail.start()

		#message = Message([('test', '')], [('Ich', '')], "Warnung!", plain="test")
		message = Message([('Heizungsfehlerinformation ( = Titel der E-Mail)', '')], [('Ich', '')], "Warnung! (= Betreff der E-Mail)", plain="Die Heizung im EG gibt ein Highsignal zurück. Das heißt irgendwas stimmt nicht! ( = E-Mail Text)")

		mail.send(message)
		mail.stop()

		print "Fertig"
		time.sleep(1)
Zuletzt geändert von Moon am Donnerstag 11. Januar 2018, 18:28, insgesamt 1-mal geändert.
__deets__
User
Beiträge: 3087
Registriert: Mittwoch 14. Oktober 2015, 14:29

Donnerstag 11. Januar 2018, 18:27

Moon hat geschrieben: @narpfel:
Ich kenne mich mit Python kaum aus. Brauche dies momentan nur für einen kleinen Zweck und wusste nicht, dass man dies importieren muss.
Das importieren verschiedener Module finde ich nicht so toll. Da sucht man z.b. ein Modul für was und findet es nicht. Bzw. ist Anfänger/Einsteiger und kapiert dabei nix. Das war ganz am Anfang für mich ein sehr großes Problem.
Nennt sich "programmieren". Wenn man nicht in einem sehr speziellen Kontext (zB PHP fuer Web, das ist aber auch das einzige, was man damit machen kann, oder VBA in Excel oder so) arbeitet, braucht man ueblicherweise Bibliotheken, und die muss man installieren und benutzen. So isses halt.
Moon hat geschrieben: Mal ne generelle Frage zu wait_for_edge():

Wie funktioniert diese Funktion eigentlich?
Meine Sicht: Die Funktion erwartet je nach mitgegebenem Parameter eine fallende oder/und steigende Flanke. Und wenn diese nicht zutreffen wird None zurückgegeben. Und dann bei der Abfrage überprüfen wir um die Funktion None ist, wenn ja liegt keines der Fälle vor wenn ja springt es in den else-block und führt die Aktion aus.

Ist dies so richtig?
Nein. wait_for_edge *WARTET*, wie der Name schon sagt, darauf, das eine Flanke auftritt. Der Rueckgabewert ist wieder der Kanal auf den gewartet wurde, wozu genau das gut ist erschliesst sich mir nicht. Das *None* auftritt hat dann aber wiederum damit zu tun, dass du mal mit timeouts rumgespielt hast. Und irgendwie muss du ja unterscheiden koennen, ob du tatsaechlich eine Flanke bekommen hast, oder einen Timeout. None kommt beim Timeout. Steht - trommelwirbel - auch in der Anleitung: https://sourceforge.net/p/raspberry-gpi ... ki/Inputs/
Moon
User
Beiträge: 37
Registriert: Mittwoch 20. Dezember 2017, 15:21

Donnerstag 11. Januar 2018, 18:38

Ok. Ja dann muss ich dies berücksichtigen.Ich habe bisher nur mit PHP und Javascript programmiert. Hauptsächlich fürs Web. Aber ich möchte auch andere Programmiersprachen noch erlernen. Z.b. was mir sehr viel Spaß macht sind Spiele zu programmieren. Aber dazu braucht man schon ein gewisses Know-How in der Programmiersprache welche man verwendet. Das man mit Python auch Webseiten erstellen kann wusste ich garnicht. Ist auf alle Fälle auch intressant.

Aso ok. Alles klar.

Nochmals vielen vielen Dank für die sehr gute Hilfestellungen an alle Hilfeleistenden.
Antworten