Autor Thema: DHT22-Messwerte in fhem auslesen  (Gelesen 82579 mal)

Offline mumpitzstuff

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1653
Antw:DHT22-Messwerte in fhem auslesen
« Antwort #165 am: 08 November 2018, 00:13:09 »
Ist dir zufällig bekannt wie ich 2 Sensoren über dtoverlay einbinden kann? Das folgende zeigt mir nur 1 Sensor an:

dtoverlay=dht11,gpiopin=4
dtoverlay=dht11,gpiopin=17

Und manchmal habe ich verschiedene Fehler, wahrscheinlich wenn der neue Wert grad geschrieben wird. Kann man das irgendwie verhindern?

pi@raspberrypi /sys/bus/iio/devices/iio:device0 $ cat /sys/devices/platform/dht11@0/iio:device0/in_temp_input
22200
pi@raspberrypi /sys/bus/iio/devices/iio:device0 $ cat /sys/devices/platform/dht11@0/iio:device0/in_temp_input
cat: '/sys/devices/platform/dht11@0/iio:device0/in_temp_input': Die Wartezeit für die Verbindung ist abgelaufen
pi@raspberrypi /sys/bus/iio/devices/iio:device0 $ cat /sys/devices/platform/dht11@0/iio:device0/in_temp_input
22300
pi@raspberrypi /sys/bus/iio/devices/iio:device0 $ cat /sys/devices/platform/dht11@0/iio:device0/in_temp_input
cat: '/sys/devices/platform/dht11@0/iio:device0/in_temp_input': Eingabe-/Ausgabefehler


Offline skycrack

  • Jr. Member
  • **
  • Beiträge: 54
Antw:DHT22-Messwerte in fhem auslesen
« Antwort #166 am: 15 März 2019, 19:08:13 »
Und manchmal habe ich verschiedene Fehler, wahrscheinlich wenn der neue Wert grad geschrieben wird. Kann man das irgendwie verhindern?

/sys/devices/platform/dht11@0/iio:device0/in_temp_input: Eingabe-/AusgabefehlerGeht mir ebenso, wäre auch an einer Lösung interessiert.

Offline mumpitzstuff

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1653
Antw:DHT22-Messwerte in fhem auslesen
« Antwort #167 am: 15 März 2019, 22:26:13 »
#!/usr/bin/python

import Adafruit_DHT
import socket
import time

### CONFIG ###
# fhem's telnet port
host = 'localhost'
port = 7072

sensors = [
    {
        'name': 'DHT22A',
        'type': Adafruit_DHT.DHT22,
        'pin':  4
    },
    {
        'name': 'DHT22B',
        'type': Adafruit_DHT.DHT22,
        'pin':  17
    },
]

# retry in case of error
retries = 15
delay = 3


## config reference:
# sensors = [
#     {
#         'name': 'DHT22',
#         'type': Adafruit_DHT.DHT22,
#         'pin':  4
#     },
#     {
#         'name': 'DHT11',
#         'type': Adafruit_DHT.DHT11,
#         'pin':  4
#     },
#     {
#         'name': 'AM2302',
#         'type': Adafruit_DHT.AM2302,
#         'pin':  4
#     },
# ]

### END CONFIG ###

def median(lst):
    n = len(lst)
    if n < 1:
        return None
    if n % 2 == 1:
        return sorted(lst)[n//2]
    else:
        return sum(sorted(lst)[n//2-1:n//2+1])/2.0

def netcat(hostname, port, content):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((hostname, port))
    s.sendall(content)
    s.shutdown(socket.SHUT_WR)
    while 1:
        data = s.recv(1024)
        if data == "":
            break
    if data:
        print "Received:", repr(data)
    s.close()

# empty netcat string
s = "";

for sensor in sensors:
    humidity = []
    temperature = []
   
    for i in range(5):
        h, t = Adafruit_DHT.read_retry(sensor['type'], sensor['pin'], retries, delay)
        humidity.append(h)
        temperature.append(t)
        time.sleep(3)

    h = median(humidity)
    t = median(temperature)
    #print "humidity: " + str(h)
    #print "temperature: " + str(t)

    if h is not None and t is not None:
            if t > 1 and t < 40:
                    s += 'setreading {0} Temperature {1:0.1f}\n'.format(sensor['name'], t)
            if h > 10 and h < 90:
                    s += 'setreading {0} Humidity {1:0.1f}\n'.format(sensor['name'], h)
            s += 'setreading {0} Error 0\n'.format(sensor['name'])
    else:
            s += 'setreading {0} Error 1\n'.format(sensor['name'])

s += "quit"

netcat(host, port, s)

Ich benutze jetzt seit Monaten dieses Script, das mit der Adafruit Library funktioniert. Zusätzlich habe ich mir einen Median über 5 Werte gebastelt, da ich immer wieder Probleme mit Ausreißern hatte. Aufgerufen wird das dann so:

defmod DHT22_AT at +*00:02:00 "sudo /usr/local/sbin/fhem-dht"
Sudo war an der Stelle leider irgendwie notwendig...

Offline skycrack

  • Jr. Member
  • **
  • Beiträge: 54
Antw:DHT22-Messwerte in fhem auslesen
« Antwort #168 am: 26 März 2019, 07:36:23 »

Ich benutze jetzt seit Monaten dieses Script, das mit der Adafruit Library funktioniert. Zusätzlich habe ich mir einen Median über 5 Werte gebastelt, da ich immer wieder Probleme mit Ausreißern hatte.

Vielen Dank, so funktioniert es jetzt.
Gruß
Rene

Offline Camix

  • New Member
  • *
  • Beiträge: 3
Antw:DHT22-Messwerte in fhem auslesen
« Antwort #169 am: 10 Juni 2019, 17:33:03 »
Hallo zusammen

Habe nun mein FHEM Server auf einem Raps 3 neu aufgesetzt. Der DHT22 bringt mir aber keine Werte in FHEM. Im Log steht folgendes:DHT22_AT: Unknown command "sudo, try help. Ich nehme an, dass dies an den Rechten liegt?

Kann mir da jemand auf die Sprünge helfen?

Grüsse und Danke Camix
Raspberry Pi 3, Stapelbarer CCU Busware (HM+MAX),
MAX: Wandthermostate, Steckdosenaktoren, ECO Taster für Heizung.
HM:Displayschalter Aussen- und Innentemperatursensor, 4 Kanal Aktor Hutschiene, 1+2 Kanal Aktoren (UP)
Philips HUE, Dreambox DM 800, BMP180, AM2302, Fritzbox

Offline mumpitzstuff

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1653
Antw:DHT22-Messwerte in fhem auslesen
« Antwort #170 am: 11 Juni 2019, 01:09:20 »
sudo visudo
Und dort diese Zeile einfügen:

fhem ALL=(ALL) NOPASSWD: /path/to/script/fhem-dht

Offline Forstling

  • New Member
  • *
  • Beiträge: 32
Antw:DHT22-Messwerte in fhem auslesen
« Antwort #171 am: 24 Januar 2020, 17:18:25 »
Hallo

Bin ziemlich neu hier ich wollte auch mal einen Kommentar hierzu abgeben.

Ich habe 2 Tage und einige Versuche gebraucht um das zum Laufen zu bringen. Hier die Dinge über die ich gestolpert bin mit den entsprechenden Hinweisen.

Ich nutze das Python-Script und rufe es ohne Cronjob aus FHEM heraus auf.

- Das Script ist für Python 2 geschrieben wenn man es mit Python 3 testen will sind ein paar Änderungen nötig
    - Eine 3 hinter Python schreiben bei der Installation der Bibliothek
    - ein paar Klammern bei den print befehlen

- Das Script muss in einem Ordner liegen wo FHEM zugriff hat
    - ich nutze /opt/fhem/FHEM/Phyton

- Das Script muss ausführbar sein
    - Ich habe das über rechst-klick und Dateieigenschaften gemacht

- das Script mit sudo aufrufen ging bei mir nicht hier der Fehler
sudo: Kein TTY vorhanden und kein »askpass«-Programm angegeben

Wir gehen davon aus, dass der lokale Systemadministrator Ihnen die
Regeln erklärt hat.  Normalerweise läuft es auf drei Regeln hinaus:

    #1) Respektieren Sie die Privatsphäre anderer.
    #2) Denken Sie nach, bevor Sie tippen.
    #3) Mit großer Macht kommt große Verantwortung.

Hoffe meine Ausführungen helfen anderen Neulingen