Lüftersteuerung

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
srtamer
User
Beiträge: 4
Registriert: Mittwoch 20. Juni 2018, 14:28

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
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
srtamer
User
Beiträge: 4
Registriert: Mittwoch 20. Juni 2018, 14:28

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?
srtamer
User
Beiträge: 4
Registriert: Mittwoch 20. Juni 2018, 14:28

__deets__ hat geschrieben: Mittwoch 20. Juni 2018, 14:50 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.
wie genau geht das :?:
Benutzeravatar
__blackjack__
User
Beiträge: 13003
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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
srtamer
User
Beiträge: 4
Registriert: Mittwoch 20. Juni 2018, 14:28

__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.
Kannst du mir gute Tutorials empfehlen? Gibt es die Python Dokumentation auf deutsch? Hab sie nur auf englisch gefunden...
Benutzeravatar
__blackjack__
User
Beiträge: 13003
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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
DeaD_EyE
User
Beiträge: 1012
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten