DHT22 Werte werden nicht in FHEM angezeigt

Begonnen von hardtacker, 19 Dezember 2016, 22:29:38

Vorheriges Thema - Nächstes Thema

hardtacker

Hallo,

ich habe mich nach dem folgenden Forum durchgearbeitet und bekomme auf dem Pi wenn ich folgenden Befehl eintrage auch die Werte angezeigt

https://forum.fhem.de/index.php/topic,25413.msg184030.html#msg184030


pi@raspberrypi:~/lol_dht22 $ sudo ./loldht 7

Raspberry Pi wiringPi DHT22 reader
www.lolware.net
Humidity = 75.00 % Temperature = 21.20 *C

Zudem habe ich ein Script erstellt, welches mir die Werte auslesen soll. Dies will ich dann regelmäßig aufrufen:

#!/bin/bash
cd /home/pi/lol_dht22
WERTE=$(sudo ./loldht 7 | grep "Humidity")
Hum=$(echo $WERTE|cut -d " " -f3)
Temp=$(echo $WERTE|cut -d " " -f7)
echo $WERTE
echo $Hum
echo $Temp
sudo /opt/fhem/fhem.pl 7072 "setreading DHTInnen temperature $Temp"
sudo /opt/fhem/fhem.pl 7072 "setreading DHTInnen humidity $Hum"


Dies liegt im Ordner lol_dht22 mit dem Namen Temp_Wohnzimmer.sh


Des Weitern habe ich unter

/usr/local/sbin eine Datei fhem-dht angelegt mit folgenden Inhalt:

cat << 'EOF' > /usr/local/sbin/fhem-dht
#!/usr/bin/python

import Adafruit_DHT
import socket

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

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

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


## 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 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 = Adafruit_DHT.read_retry(sensor['type'], sensor['pin'], retries, delay)

    if humidity is not None and temperature is not None:
            s += 'setreading {0} Temperature {1:0.1f}\n'.format(sensor['name'], temperature)
            s += 'setreading {0} Humidity {1:0.1f}\n'.format(sensor['name'], humidity)
            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)
EOF
chmod +x /usr/local/sbin/fhem-dht



Anschließend habe ich noch foldendes Script angelegt

cat <<'EOF' >> /etc/cron.d/fhem-dht
# read dht22 values every 5mins and feed into fhem

SHELL=/bin/sh

# m h dom mon dow user command
*/5 * * * * root    /usr/local/sbin/fhem-dht
EOF



Nun stellt sich mir die Frage welches Script ruft welches Script auf, da ja kein Script auf Temp_Wohnzimmer.sh verweist.


  • /etc/cron.d/fhem-dht
  • /usr/local/sbin/fhem-dht
  • /lol_dht22/Temp_Wohnzimmer.sh


Könnt ihr mir helfen, welche Reihenfolge ich einhalten muss und wie ich die Werte in FHEM angezeigt bekomme?

Kann ich die Scripte irgendwie mit Putty einzeln Testen, um zu schauen was funktioniert und was nicht?

In FHEM habe ich den Sensor so angemeldet

define DHTInnen dummy
attr DHTInnen room GPIO4
define FileLog_DHTInnen  FileLog ./log/DHTInnen-%Y-%m.log DHTInnen
attr DHTInnen stateFormat T: temperature H: humidity
attr FileLog_DHTInnen  logtype logtype temp4:Tempt,text
attr FileLog_DHTInnen  room Logfiles
define SVG_DHTInnen  SVG FileLog_DHTInnen:SVG_DHTInnen:CURRENT
attr SVG_DHTInnen room Plots


Gruß hardtacker


Fliesenmax

Hi Hardtacker,
hast Du ne Lösung? Kannst Du die Werte nun in FHEM auslesen?

skyifx

#2
Hi Leute

Ich würde mich hier mal total verspätet einklinken. ;)

Mit dem loldht hatte ich Anfangs mächtig Probleme, wobei es das Einzige war, was bei mir wenigstens funktionierte (im Vergleich zur Adafruit Lösung). Daher habe ich es (fast) komplett umgearbeitet und auch die Timings optimiert. Daraus resultierend habe ich jetzt mal 2 Programme erstellt (dht22_fhem u. dht22_json), die eine unterschiedliche Ausgabe haben.

Beschreibung und Download unter: http://help.skyifx.de/dht22.php