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

Offline mumpitzstuff

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1452
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

  • New Member
  • *
  • Beiträge: 44
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: 1452
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

  • New Member
  • *
  • Beiträge: 44
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: 1452
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

 

decade-submarginal