DHT22-Messwerte in fhem auslesen

Begonnen von zYloriC, 16 Juli 2014, 16:22:01

Vorheriges Thema - Nächstes Thema

newby

Hi,

habe mal etwas recherchiert, es wird oft darüber geschrieben das Python ein Timingproblem bei den DHT's hat.
Kann man eine Art sleep.time in dem Script einbauen, um die Abfrage zwischen den beiden Sensoren zu verzögern?

Gruß
Sven

indianguru8654

Zitat von: Michl1003! am 01 November 2014, 10:34:29
Hi nochmal...
ok ich habs verstanden das mit den Codes, also ist meine vorhergehende Frage hinfällig, aber da ich nun einen Schritt weiter bin und vollkommen größenwahnsinnig  ;D möchte ich natürlich jetzt mehrere um nicht zu sagen VIELE DHT11 verwenden, ich habe mich schlau gemacht und herausgefunden, da ja jeder DHT11 einen eingenen GPIO-Pin braucht, nur begrenzt viele gäbe, aber - weiter informiert - mit einem MCP23017 i2c - Expander kann ich mir zusätzlich neue Pins generieren.....
jetzt nur die frage, wie kann ich dieses Script, welches übrigens vorzüglich funktioniert, MEIN LOB!!!!
ummodeln, dass ich den MCP230017 einbinde und die mehreren DHT11er auslesen kann????
bin leider programmiertechnisch und der gleichen ein totaler anfänger und hantel mich so durch die foren, deshalb bitte ich um eure unterstützung!

danke vielmals...

Kannst du mal genau kurz schreiben, wie du die dht's in fhem eingebunden hast. Habs versucht, bin aber gescheitert. Vorallen am cronjob. Wie sage ich fhem, das es auf dem raspi sudo./rpi_dht ausführen soll und wo schreibt er die Daten dann in das dummy Devise? Und das alle 1 min?
Danke schonmal für die Hilfe!!
Mit freundlichen Grüßen
Thilo

indianguru8654

Zu dem Thema: wie lange darf die Leitung zum DHT sein: habe gestern alles fertig gelötet ( kleine Platine,DHT drauf, 4,7kOhm Widerstand zwischen 3,3V und VDD und schraubklemmen) habe als Zuleitung ein 2x2x0,8 Kabel. Schrumpfschlauch drüber und fertig. Nach dem löten alle drei nochmal getestet, da einige geschrieben haben, dass der DHT beim löten durch zu viel Temp kaputt gehen kann. Resultat: auf dem Kabelbund waren noch Ca 25m drauf und alle Werte waren genauso wie auf dem breadboard.
Viel Erfolg.


Ger-Gilias

Hallo,

ich habe da ein Problem beim Installation Skript und zwar wenn ich das Skript ausführe (über cd /usr/local/sbin und dann ./fhem-dht) kommt folgende Fehlermeldung:


./fhem-dht: Zeile 81: Warnung: here-document at line 1 delimited by end-of-file (wanted `EOF')

Was mache ich da falsch habe das Skript wie folgt editiert


sensors = [
    {
        'name': 'Formica_fusca',
        'type': Adafruit_DHT.DHT11,
        'pin':  4
    },

]


mehr habe ich nicht geändert...
Raspberry Pi mit Wheezy, 2x CUL 868MHz (MAX / Intertechno), MAX Heizkörperthermostat, MAX Fensterkontakt, Intertechno Funksteckdosen, Müll-, Termin-Kalender, Umweltanzeige (Wetter, Pollenflug & Unwetterwarnung), Spritmonitor

tester1

Zuallererst oute ich mich hier als absoluten Laien, der nichtsdestotrotz seine Ideen trotzdem , wenn auch mit VIEL "try and error" umsetzen möchte. Idee ist ..eine Kellerregelung mit elektrischen
Fensteröffner (schaltbar m. Funksteckdose) und falls eine Lüftung nicht mehr möglich ist, einen Luftentfeuchter dazu zuschalten.
Habe nach moemoe 's  Anleitung 2
DHT22's  eingebunden. Bei define vom file_log gabs Probleme und beim cronjob mit root auch.
So habe ich es eingetragen und funktioniert bei mir:

define Dach.DHT22 dummy
attr Dach.DHT22 stateFormat T: Temperature H: Humidity
define FileLog_Dach.DHT22 FileLog ./log/Dach.DHT22-%Y.log Dach.DHT22
attr FileLog_Dach.DHT22 group DHT
attr FileLog_Dach.DHT22 logtype text
attr FileLog_Dach.DHT22 room Logs

Es gab den Vorschlag ,
anstatt  */5 *   * * *   root    /usr/local/sbin/fhem-dht 
               */5 *   * * *    sudo   /usr/local/sbin/fhem-dht 
in der crontab zu benutzen.

Habe ich aber nicht probiert. Cronjob habe ich über fhem mittels at realisiert. Hat den Vorteil, das ich komfortable die Auslesezeit kurzfristig ändern kann.
Nun zu meinem Problem . Ich will eine dewpoint Berechnung realisieren , die dann entsprechend schaltet. Leider bekomme ich den dewpoint nicht in den filelog oder sonstwo angezeigt. Das habe ich versucht.......

define dew_state dewpoint dewpoint .* T H D
define dew_all dewpoint dewpoint .* temperature humidity dewpoint

Ich befürchte, das ich noch einiges dazu zu lernen habe und hoffe trotzdem auf Hilfe. Wie genau muss ich was definieren, um den Taupunkt (dewpoint ) mit den anderen Werten verarbeiten zu können ? Oder den Taupunkt visualisieren zu können ?

Danke an all , die sich das schon mal durchgelesen haben.
Mfg Tester1

LuckyDay

mal so als Tipp
suchen tust du nach diesen readings
Zitattemperature humidity
im dewpoint modul

nach deinem attr stateformat

Zitatattr Dach.DHT22 stateFormat T: Temperature H: Humidity

sind die groß geschrieben , das wird dann nie funktionieren

kasslerks

Hallo

Ich wollte heute mal die Sache mit dem Installations Skrip von hier versuchen http://forum.fhem.de/index.php/topic,25413.msg201619.html#msg201619
allerdings bekomme ich folgende Fehlermeldung

-bash: /usr/local/sbin/fhem-dht: Permission denied

auch wenn ich das ganze mit sudo mache bekomme ich die Fehlermeldung nicht weg.

auch beim dem cronjob klappt es leider nicht.

-bash: /etc/cron.d/fhem-dht: Permission denied

was kann ich denn da machen? stehe total auf dem schlauch.

viel dank schon mal

kasslerks

Das Skrip konnte ich mit sudo su installieren.

jetzt hab ich aber noch immer ein Fehler wenn ich die Datei öffne

root@raspberrypi:/usr/local/sbin#  /usr/local/sbin/fhem-dht
  File "/usr/local/sbin/fhem-dht", line 22
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    ^
IndentationError: expected an indented block
root@raspberrypi:/usr/local/sbin#


hier noch das Skrip

#!/usr/bin/python
import Adafruit_DHT
import socket
### CONFIG ###
# fhem's telnet port
host = 'localhost'
port = 7072
sensors = [
{
'name': 'Wohnzimmer.DHT22',
'type': Adafruit_DHT.DHT22,
'pin': 7
},

]
# retry in case of error
retries = 15
delay = 2
### 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)


wäre schön wenn mir da einer helfen könnte

bull1t

Hallo,
ich bin neu hier und beschäftige mich erst seit wenigen Wochen mit dem RPi / Fhem usw.
1wire Sensoren konnte ich recht einfach einbinden in FHEM.
Aber an moemoe´s Anleitung bzw. dem DHT22 in FHEM verzweifel ich (wohl hauptsächlich an fehlenden Kenntnissen).Habe einen DHT22 am Pi (GPIO 17) dran. Der Sensor ist okay (via loldht auslesbar im Terminal).
In FHEM bekomme ich jedoch nur Fragezeichen angezeigt.
Habe die python lib gemäß Anleitung installiert (kein Problem).
Per sudo nano /usr/local/sbin/fhem-dht/fhemdht22.py entsprechende Datei erstellt.
Script reinkopiert und Sensor-Pin angepasst (schlimm wenn zwei eingetragen sind nur einer angeschlossen?)
Frage dazu:muss noch etwas angepasst werden im script?
Dann Definitionen 1zu1 in FHEM.cfg kopiert.
Cronjob via crontab -e erstellt und Code reinkopiert-hier gabs ne Fehlermeldung beim Speichern
die sich nur beheben ließ indem ich eine Raute vor EOF gesetzt habe.
Es passiert aber nicht und immer wenn ich denke ich hab irgendwas übersehen, wieder nicht.
Bitte um Schützenhilfe da ich echt nicht mehr weiss woran es hängt.

Gruß bull1t

 

a_quadrat

Hallo,

das Problem mit dem cronjob hatte ich auch. Führe das Scrip mit einem at aus fhem aus.

+*00:06:00 {

system('sudo /usr/local/sbin/fhem-dht&');;
}


Gruß Andreas

a_quadrat

Hier noch mal der Inhalt meiner fhem-dht:

#!/usr/bin/python

import Adafruit_DHT
import socket

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

sensors = [
    {
        'name': 'Dachboden_DHT22',
        'type': Adafruit_DHT.DHT22,
        'pin':  26
    },

]

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


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

### 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)


Ich habe die adafruit lib nach folgender Anleitung installiert https://learn.adafruit.com/dht-humidity-sensing-on-raspberry-pi-with-gdocs-logging/software-install-updated.

Vielleicht hilft dir das ja weiter.

Gruss Andreas

klausmrkor

Hallo, ich bin schon am verzweifeln.
Ich bekomme es einfach nicht hin.
Welche Pin muss ich bei Gpio18 eingeben?

Danke Klaus

a_quadrat

Hallo,

hast du die Libary von Adafruit? Da müsste GPIO und Pin gleich sein.

mfg Andreas

bull1t

Danke für die Hilfestellung...werde es mal so probieren und Rückmeldung geben!
Gruss bull1t

klausmrkor

#44
 Danke für die schnelle Antwort.

Dann mache ich etwas anderes falsch.

Also;
sensors = [
    {
        'name': 'Aussen_DHT22',
        'type': Adafruit_DHT.DHT22,
        'pin': 18
    },

]

at a1+*00:05:00 {system('sudo /usr/local/sbin/fhem-dht&');;}

FileLog_Aussen_DHT22

NAME      Aussen_DHT22
NR           302
STATE    T: temperature H: humidity
TYPE       dummy

Gruß
Klaus

Nachtrag:

cd lol_dht22
sudo ./loldht 1

Humidity = 48.40 % Temperature = 17.70 *C

Später

cd /home/pi/Adafruit_Python_DHT/examples
sudo ./AdafruitDHT.py 22 18
Temp=3.5*  Humidity=75.3%


Da kann ich die Daten auslesen.