Hallo Leute,
habe mir einen Raspi 3B+ zugelegt. Unter anderem, um für den heißen Sommer meine Lüfter im Zimmer mit Hilfe eines Temperatursensors zu schalten.
Das Ganze soll wie folgt funktionieren:
Wenn die Temperatur über 25°C steigt, soll der Raspi den GPIO 17 durchschalten (3,3V) => Relais kriegt Signal schaltet durch Lüfter gehen an
Wenn die Temperatur unter 25°C sinkt, soll der Raspi den GPIO 17 spannungsfrei machen => Lüfter gehen aus
Das Programm soll im Prinzip 24/7 laufen
Ich kriege ständig einen Syntax Fehler. Ab #Temperatur auslesen bis #Temperaturgrenze festlegen stammt der Code aus einem Tutorial und der funktioniert auch, aber wenn ich den in meinen Code "implementiere", dann kommt folgender Fehler:
Python 3.5.3 (/usr/bin/python3)
>>> %Run Temperatur.py
File "/home/pi/Temperatur.py", line 16
echo "Die gemessene Temperatur beträgt" $temp "°C"
^
SyntaxError: invalid syntax
Der Code:
#Lüftersteuerung
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
GPIO.output(17, GPIO.LOW)
while 1:
# Temperatur auslesen
tempread='cat /sys/bus/w1/devices/10-000802b4ba0e/w1_slave'
#Formatieren
temp='echo "scale=2; "\'echo ${tempread##*=}\'" / 1000" | bc'
#Ausgabe
echo "Die gemessene Temperatur beträgt" $temp "°C"
#Temperaturgrenze festlegen
temperatur=25
temperatur=int(temperatur)
if temperatur >= warm
print ("Lüfter an")
GPIO.output(17, GPIO.HIGH)
if temperatur < warm
print ("Lüfter aus")
GPIO.output(17, GPIO.LOW)
time.sleep(120)
GPIO.cleanup()
Ich bin Anfänger und hab kaum Erfahrung, hat wer ne Lösung oder auch n Tipp?
Grüße,
Tamer
Lüftersteuerung
Das ist kein Python. Sondern ein Mischmasch aus Python und Shell-Skripten. Das geht so nicht, du kannst nicht einfach zwei verschiedene Programmiersprachen in eine Datei schreiben & hoffen, dass das funktioniert.
Statt dem cat und rum-ge-echo benutz einfach gleich Python und oeffne die Datei fuer den Sensor mit Python. Les ihren Inhalt, konvertier ihn in ein float, und dividiere durch 1000. Dann hast du deine Temperatur.
Last but not least: fuer Code bitte die Python-code-tags benutzen, die findest du im Editor hier oben in der Toolbar wenn du einen Beitrag bearbeitest (Vollstaendiger Editor). Code markieren, Button druecken, und in der Vorschau ansehen ob das Ergebnis stimmt. Nur dann kann man deinen Code verstehen, denn bei Python sind die Einrueckungen wichtig.
Statt dem cat und rum-ge-echo benutz einfach gleich Python und oeffne die Datei fuer den Sensor mit Python. Les ihren Inhalt, konvertier ihn in ein float, und dividiere durch 1000. Dann hast du deine Temperatur.
Last but not least: fuer Code bitte die Python-code-tags benutzen, die findest du im Editor hier oben in der Toolbar wenn du einen Beitrag bearbeitest (Vollstaendiger Editor). Code markieren, Button druecken, und in der Vorschau ansehen ob das Ergebnis stimmt. Nur dann kann man deinen Code verstehen, denn bei Python sind die Einrueckungen wichtig.
Generell solltest Du immer einen Überlapp-Bereich haben, sonst geht Dir der Lüfter ständig an und aus. Also >25°C an und <24°C aus.
`echo` ist auch kein Python-Statement, daher der Syntaxfehler. Das kommt aus einem Shell-Skript; genauso tempread und temp. Du mußt Dich entscheiden, ob Du nun Python programmieren willst, oder Shell.
`echo` ist auch kein Python-Statement, daher der Syntaxfehler. Das kommt aus einem Shell-Skript; genauso tempread und temp. Du mußt Dich entscheiden, ob Du nun Python programmieren willst, oder Shell.
- __blackjack__
- User
- Beiträge: 13936
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Ein Tipp wäre dann noch das Python-Tutorial in der Python-Dokumentation durcharbeiten.
Das ``echo`` kein Python ist, hättest Du auch über die Python-Dokumentation heraus finden können. Wenn Du dort in den Index schaust (Link zum Index ist auf fast jeder Seite oben rechts), wirst Du nämlich feststellen, das es kein ``echo``-Schlüsselwort gibt. Nur eine Funktion im `curses`-Modul, die aber laut Beschreibung nichts ausgibt und auch kein Argument erwartet. Aber selbst dann wäre es ein Syntaxfehler, weil die Klammern für den Aufruf fehlen würden.
Für Wahrheitswerte sollte man keine literalen Zahlen verwenden. Python hat einen Datentyp für Wahrheitswerte (`bool`) und auch literale Werte davon: `True` und `False`.
Der `GPIO.cleanup()`-Aufruf sollte in einem `finally:`-Block stehen, damit der auch tatsächlich jemals ausgeführt werden kann. Aus der Endlosschleife kommt man da ja nur durch einen Laufzeitfehler oder durch abbrechen durch Strg+C heraus und in beiden Fällen würde das so wie es jetzt da steht, nicht ausgeführt.
Das ``echo`` kein Python ist, hättest Du auch über die Python-Dokumentation heraus finden können. Wenn Du dort in den Index schaust (Link zum Index ist auf fast jeder Seite oben rechts), wirst Du nämlich feststellen, das es kein ``echo``-Schlüsselwort gibt. Nur eine Funktion im `curses`-Modul, die aber laut Beschreibung nichts ausgibt und auch kein Argument erwartet. Aber selbst dann wäre es ein Syntaxfehler, weil die Klammern für den Aufruf fehlen würden.
Für Wahrheitswerte sollte man keine literalen Zahlen verwenden. Python hat einen Datentyp für Wahrheitswerte (`bool`) und auch literale Werte davon: `True` und `False`.
Der `GPIO.cleanup()`-Aufruf sollte in einem `finally:`-Block stehen, damit der auch tatsächlich jemals ausgeführt werden kann. Aus der Endlosschleife kommt man da ja nur durch einen Laufzeitfehler oder durch abbrechen durch Strg+C heraus und in beiden Fällen würde das so wie es jetzt da steht, nicht ausgeführt.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Danke Leute war mir meines Fehlers nicht bewusst! Eine rein grundsätzliche Frage, ich öffne Python 3 IDLE, File, Open Module, schreibe das Programm in dem Modul, speichere es. Wie kann ich dafür sorgen, dass dieses Programm sobald der Raspi bootet abgespielt wird?
- __blackjack__
- User
- Beiträge: 13936
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@srtamer: Wie genau soll denn da die Antwort sein? Willst Du das selbst programmieren, dann ist die Antwort lerne halt allgemein Python programmieren und setze dich mit Linux soweit auseinander, das Du den Zusammenhang zwischen der Hardware (Sensor) und den speziellen Dateien unter `/sys/…` verstehst. Das ist a) ein bisschen zu umfangreich um es in einem Beitrag zu schreiben und b) steht das ja schon in Tutorials und Büchern. Für Python würde ich wie gesagt das Tutorial in der Python-Dokumentation empfehlen.
Wenn Du den Effekt von einem Shell-Skript nachprogrammieren möchtest, hilft es das Shell-Skript zu verstehen. Da gibt's auch Tonnen an Material im Netz.
Etwas beim Hochfahren eines Linux zu starten ist auch eine Standardaufgabe. Da würde ich mich mit SystemD auseinander setzen und eine Unit schreiben, die Dein Programm startet. Ist auch ein umfangreicheres Thema für sich.
Wenn Du den Effekt von einem Shell-Skript nachprogrammieren möchtest, hilft es das Shell-Skript zu verstehen. Da gibt's auch Tonnen an Material im Netz.
Etwas beim Hochfahren eines Linux zu starten ist auch eine Standardaufgabe. Da würde ich mich mit SystemD auseinander setzen und eine Unit schreiben, die Dein Programm startet. Ist auch ein umfangreicheres Thema für sich.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Kannst du mir gute Tutorials empfehlen? Gibt es die Python Dokumentation auf deutsch? Hab sie nur auf englisch gefunden...__blackjack__ hat geschrieben: ↑Mittwoch 20. Juni 2018, 18:36 @srtamer: Wie genau soll denn da die Antwort sein? Willst Du das selbst programmieren, dann ist die Antwort lerne halt allgemein Python programmieren und setze dich mit Linux soweit auseinander, das Du den Zusammenhang zwischen der Hardware (Sensor) und den speziellen Dateien unter `/sys/…` verstehst. Das ist a) ein bisschen zu umfangreich um es in einem Beitrag zu schreiben und b) steht das ja schon in Tutorials und Büchern. Für Python würde ich wie gesagt das Tutorial in der Python-Dokumentation empfehlen.
Wenn Du den Effekt von einem Shell-Skript nachprogrammieren möchtest, hilft es das Shell-Skript zu verstehen. Da gibt's auch Tonnen an Material im Netz.
Etwas beim Hochfahren eines Linux zu starten ist auch eine Standardaufgabe. Da würde ich mich mit SystemD auseinander setzen und eine Unit schreiben, die Dein Programm startet. Ist auch ein umfangreicheres Thema für sich.
- __blackjack__
- User
- Beiträge: 13936
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Zu SystemD fand ich die Tutorials bei Digital Ocean brauchbar und auf Deutsch gibt's Informationen im Ubuntuusers-Wiki. Allerdings muss man Englisch können oder lernen wenn man programmieren will. So ziemlich jegliche Referenzdokumentation ist in Englisch und viele Tutorials und Fragen/Antworten im Netz ebenfalls.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
- DeaD_EyE
- User
- Beiträge: 1206
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Für die Hysterese: viewtopic.php?f=1&t=40945&p=312539&hili ... se#p312539
Was eine Hysterese ist: https://de.wikipedia.org/wiki/Hysterese#Zweipunktregler
Was eine Hysterese ist: https://de.wikipedia.org/wiki/Hysterese#Zweipunktregler
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server