Mehrere Sensoren abfragen in einer Datei - Pyhton3

Slopestyle-1

Commander
Registriert
Aug. 2008
Beiträge
2.887
Hallo, ich habe an meinen Raspberry zwei DHT11 dran hängen,

wie muss ich das um Programmieren das ich beide Sensoren in "einer" Datei ausgelesen bekomme?
Ich habe einen an Pin 14 und Pin 17 hängen.
Der Quellcode sieht so aus zurzeit.

#!/usr/bin/python
#!/usr/bin/env python
import sys
import Adafruit_DHT
import time
while True:
humidity, temperature = Adafruit_DHT.read_retry(11, 14)
print("Sensor 14")
print("Temp={0:0.1f}C Humidity={1:0.1f}%".format(temperature, humidity))
print(time.strftime("%d.%m.%Y %H:%M:%S"))
time.sleep(10);

Zurzeit habe ich je eine Datei für einen Sensor, die ich mit einer .sh Datei ausführe.
Und ich würde die Werte sehr gerne noch in eine Datei abspeichern wollen, gleichzeitig zum Terminal Ausgabe geht das auch?

Danke
 
Zuletzt bearbeitet:
woran genau scheitert es denn aktuell bei deinem Problem? Also ich verstehe gerade nicht, was spricht dagegen, dass du in deiner Schleife noch den 2. Sensor genauso abfragst und ausgibst? Und wie man in eine Datei schreibt hast du doch bestimmt schon gefunden im Internet? Woran haengst du da jetzt konkret?
 
  • Gefällt mir
Reaktionen: blöderidiot
Ich kenne mich mit Python nicht aus, ich weiß nicht wie man einen zweiten Sensor abfragt.
 
So wie den ersten? Bzw. den Code aus dem zweiten Script einfach in das erste Script rein kopieren und alles überflüssige löschen?
 
Slopestyle-1 schrieb:
Ich habe einen an Pin 14 und Pin 17 hängen.
Wie meinst du, dass du den sensor an pin 17 und 14 hast? Der DHT hat nur einen Pin mit dem er dir die messungen gibt.
wenn der 2. an 17 hängt (raspi gpio pinout habe ich jetzt nicht nochmal nachgeschlagen) dann liest du ihn mit
humidity_s2, temperature_s2 = Adafruit_DHT.read_retry(11, 17) aus.

warum das bash script? lass das doch einfach via cronjob oder systemd unit laufen

sudo nano /etc/systemd/system/sensor-read.service

Code:
[Unit]
Description=My test service
After=multi-user.target

[Service]
Type=simple
Restart=always
ExecStart=/usr/bin/python3 /path/to/python.file/test.py

[Install]
WantedBy=default.target


sudo nano /etc/systemd/system/sensor-read.timer

Code:
[Unit]
Description=Read Sensor every 30s
RefuseManualStart=no
RefuseManualStop=no

[Timer]
OnBootSec=60
OnUnitActiveSec=30
Unit=sensor-read.service

[Install]
WantedBy=timers.target

sudo systemctl daemon-reload sudo systemctl start sensor-read.service sudo systemctl enable sensor-read.service sudo systemctl start sensor-read.timer sudo systemctl enable sensor-read.timer


hier ein tutorial, wie du die daten in eine csv packst: https://www.pythontutorial.net/python-basics/python-write-csv-file/
 
Zuletzt bearbeitet:
Na ein Sensor ist an Pin 17 und der andere Sensor an Pin 14.
 
Code bitte in den geeigneten Code tags posten damit man es auch lesen kann.

Also ich würde das in etwa so schreiben (ungetestet):


Python:
#!/usr/bin/python
#!/usr/bin/env python
import Adafruit_DHT
import time

class Sensor:
    def __init__(self, name: str, pin: int) -> None:
        self.pin = pin,
        self.name = name
        self.humidity = 0
        self.temperature = 0

    def update(self) -> None:
        self.humidity, self.temperature = Adafruit_DHT.read_retry(11, self.pin)

    def __str__(self) -> str:
        return f"{self.name}: temperature={self.temperature:0.1f}°C, humidity={self.humidity:0.1f}%"


def main():
    sensors = [Sensor("innen", 14), Sensor("außen", 17)]
    while True:
        print(time.strftime("%d.%m.%Y %H:%M:%S"))
        for sensor in sensors:
            sensor.update()
            print(sensor)
        time.sleep(10)

if __name__ == "__main__":
    main()
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: madmax2010
Danke für das Programmieren. Da kommt ein Fehler.

Code:
File "/home/pi/dht11/daht11-two.py", line 7
    def __init__(name: str, pin: int) -> None
                                             ^
SyntaxError: invalid syntax
 
fehlt halt ein Doppelpunkt :). So habe es mal kurz getestet ohne Adafruit lib und nochmal bearbeitet. Jetzt sollte es passen
 
Zurück
Oben