FHEM Forum

Verschiedenes => Bastelecke => Thema gestartet von: zYloriC am 16 Juli 2014, 16:22:01

Titel: DHT22-Messwerte in fhem auslesen
Beitrag von: zYloriC am 16 Juli 2014, 16:22:01
Hallo zusammen,
ich habe einen DHT22 Temp-/Luftfeuchtesensor direkt per GPIO an meinen rPI angeschlossen und entsprechend diesem Tut installiert: http://www.sweetpi.de/blog/436/luftfeuchtigkeit-und-temperatur-mit-dem-raspberry-pi-messen (http://www.sweetpi.de/blog/436/luftfeuchtigkeit-und-temperatur-mit-dem-raspberry-pi-messen)
Nun kann ich mit dem folgenden Befehl die Werte für Temperatur und Luftfeuchte anzeigen lassen:
sudo ./loldht 7

Wie bekomme ich diese Abfrage jetzt in FHEM alle 60Minuten ausgeführt und die Messwerte direkt in eine Log-Datei geschrieben, sodass ich eine Kurve davon zeichnen kann? Die Messergebnisse sehen wie folgt aus und müssten auch noch bereinigt werden:
ZitatRaspberry Pi wiringPi DHT22 reader
www.lolware.net
Data not good, skip
Humidity = 57.60 % Temperature = 20.40 *C

Ich habe schon im Forum und im Web gesucht, bislang aber überwiegend nur Infos zu ethersex remote-Lösungen gefunden.
Kann mir jemand von euch helfen.
Vielen Dank!
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: relox am 18 August 2014, 23:17:05
Hey,

hat es geklappt?

Wenn wie hast du es geschafft? Bin gerade dabei mich mit fhem, rasPi & co vertraut zu machen und freue mich über jede Hilfe.

Besten Dank
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: csi am 14 September 2014, 18:27:15
Hallo zusammen,

ich habe einen DHT22 an GPIO7 und GPIO1.
Ein cronjob ruft ein Skript auf, der die Ausleseroutine Startet.
Temperatur und Humidity werden dann direkt an FHEM gesendet.

/opt/fhem/fhem.pl 7072 "setreading DHTInnen T $Temp"
/opt/fhem/fhem.pl 7072 "setreading DHTInnen H $Hum"

Device DHTInnen angelegt.. und schon ist alles da.
Das selbe mache ich für DHTAussen.

Ich selber hänge gerade bei "dewpoint" der dewpoint wird berechnet.
Allerdings sehe ich kein reading fan. Und kann meinen Lüfter nicht ansteuern.


Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Zitze am 15 September 2014, 15:56:58
Hallo csi,

kannst Du das Script mal reinstellen? Danke.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: csi am 15 September 2014, 20:17:16
Hi,

na klar. Ist bestimmt noch ausbaufähig ;-)

Carsten


#!/bin/bash
cd /home/pi/rpi_dht22
WERTE=$(sudo ./rpi_dht 1 | grep "Pin = 1")
Temp=( $(echo $WERTE | awk '{ print $ 10}'))
Hum=( $(echo $WERTE | awk '{ print $ 6}'))
/opt/fhem/fhem.pl 7072 "setreading DHTInnen temperature $Temp"
/opt/fhem/fhem.pl 7072 "setreading DHTInnen humidity $Hum"
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Zitze am 16 September 2014, 13:13:47
Hallo,

DHTInnen muss dann so

define DHTInnen dummy

angelegt werden?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: zYloriC am 17 September 2014, 09:43:03
Hallo zusammen,

danke csi für den Tipp. Ich habe es nun auch per Cron-Script gelöst. Musste lediglich z.B. das grep auf "Humidity" anpassen. Im fhem habe ich die readings per Dummy-Device nun auch schon.

Wie lasse ich diese Reading nun am elegantesten in einem Plot anzeigen? Das ist mein nächstes Vorhaben.
Habt ihr Tipps? Gruß und noch mal Danke,
zYloriC
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: moemoe am 21 September 2014, 15:10:57
Ich beschreibe hier mal meine komplette Lösung. Ich verwende die python-Library von Adafruit und speise die Ergebnisse per "telnet" ein.

Gegenüber den anderen Lösungen ergeben sich folgende Vorteile:
- Das Auslesen wird im Fehlerfall (eine konfigurierbare Anzahl mal) wiederholt, denn es kann bei entsprechender Auslastung auch mal fehlschlagen (zB wenn gerade Graphen gezeichnet werden) => mehr Sicherheit beim Auslesen
- Es wird überhaupt erstmal ein Fehlerzustand festgestellt, viele Lösungen interpretieren nur gültige Daten.
- Die Werte werden über das Telnet-Interface an fhem weitergegeben, wobei hier Python-interne Funktionen genutzt werden. Damit muss kein zusätzliches externes telnet-Programm oder gar ein kompletter Perl-Interpreter mit fhem neu gestartet werden => resourcensparend.

Installation python-Library:

apt-get update
apt-get install build-essential python-dev git-core
git clone https://github.com/adafruit/Adafruit_Python_DHT
cd Adafruit_Python_DHT
python setup.py install


Installation Skript:

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


Danach muss mit einem Editor der Wahl die Datei noch angepasst werden, und logischerweise die Pins und Namen angepasst werden.

Meine Definition für die Sensoren und ihr Logging sieht folgendermaßen aus:

define Dach.DHT22 dummy
attr Dach.DHT22 stateFormat T: Temperature H: Humidity
define Wohnzimmer.DHT22 dummy
attr Wohnzimmer.DHT22 stateFormat T: Temperature H: Humidity
set FileLog_Dach_Heizung addRegexpPart  Dach\.DHT22 .*
set FileLog_Wohnzimmer_Heizung addRegexpPart  Wohnzimmer\.DHT22 .*


Damit das ganze regelmäßig (in meinem Fall alle 5min) ausgeführt wird, erstellen wir noch einen Cron-Job:

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


Grüße
Moritz
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: MichlB am 29 Oktober 2014, 14:13:58
hallo erstmal...
ich habe da ne frage, ich habe mehrere DHT11 sensoren und die würde ich jetzt gerne in FHEM einbringen (für Raspberry). ich hab auch die Anleitung soweit befolgt (hab auch eine Andere verwendet, somit weiß ich dass ich den senor, der bereits angeschlossen ist, funktioniert), jedoch bekomm ich keine Daten in das FHEM... ich hänge beim Installation script... (muss dazu sagen, ich bin neuling auf dem thema), was mach ich damit??? wie starte ich das?  und wie hole ich mir mehrere DHT11 (unterschiedliche) ins FHEM, mein plan wäre, in jedem Raum einen so einen sensor zu haben....

danke für eure hilfe...
lg
michl
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: MichlB 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...
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: moemoe am 01 November 2014, 11:28:03
Zitat von: Michl1003! am 01 November 2014, 10:34:29
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!

Ähm, das ist eher schwer, da das Auslesen recht zeitkritisch ist, und sich mit dem Polling eines i2c-Expanders eher nicht verträgt.

Ich würde, wenn du wirklich auf eine Kabel-Lösung setzen möchtest, direkt echte i2c-Sensoren nutzen, wie zB http://www.emsystech.de/produkt/sht21-breakout-board/
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: MichlB am 03 November 2014, 09:50:13
hallo
danke für die antwort, aber wie du ja sicherlich weißt sind die GPIOs recht begrenzt... deshalb habe ich versucht eine Expander einzubauen...
das klappt ja auch alles recht gut, nur hab ich keine Ahnung wie ich diese interrupts steuern kann bzw. die dann auslese....
eine idee?
hab auch gelesen dass der MCP23S17 schneller sein soll als der MCP23017 da dieser nicht über I2C sonder SPI angesteuert wird... aber sonst sind die gleich...

http://www.microchip.com/wwwproducts/Devices.aspx?product=MCP23S17
http://www.microchip.com/wwwproducts/Devices.aspx?product=MCP23017
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: moemoe am 03 November 2014, 10:18:56
Zitat von: Michl1003! am 03 November 2014, 09:50:13
danke für die antwort, aber wie du ja sicherlich weißt sind die GPIOs recht begrenzt... deshalb habe ich versucht eine Expander einzubauen...
das klappt ja auch alles recht gut, nur hab ich keine Ahnung wie ich diese interrupts steuern kann bzw. die dann auslese....

Was klappt dann bitte, wenn du keine Ahnung hast wie du den Expander ansprichst?

Und ich bleibe dabei: DHT22 und Port-Expander kombiniert sind eine schlechte Idee.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: MichlB am 03 November 2014, 11:16:05
hallo
was klappt ist, dass ich den expander mit leds verwenden kann... aber ich brauch bei den leds auch keine Pull up/down.... oder interrupts...
was mich interessiert, wie funktioniert das mit den interrupts und wie bekomm ich die daten der interrupts bzw. die durch diese entstehen....

andere frage, wie willst du das mit der kabelgebundenen variante machen, wenn du 10 - 20 sensoren hast, diverse andere kleinteil (zb. Shutdownschalter (3 Pins), Lüfter für PI (3 Pins), div. 1Wire (mind. 2 Pin), div. Relais (mind. 2 Pins)) ????
wo bringst du die unter, der Rpi hat nur 26Pins (ohne Breakout-gschichtln)....

deshalb, weil ich mir so wenig pins wie möglich belegen möchte, hätte ich das gerne über nen expander gemacht.... auch wenns irre klingt...
also, meine beweggründe für das vorhaben sind ja jetzt einigermassen geklärt, ob das mit deinen konform ist, ist mir eigentlich wurst, ich möchte nur eine lösung finden, das so zu verwirklichen wie ich mir das vorstelle.... wenn es aufgrund irgendwelchen wissenschaftlichen Tatsachen nicht funktioniert, dann gibt es sicher eine andere lösung, aber von vornherein zu sagen das geht nicht, weil es mir zu kompliziert ist... tja... was soll man davon halten...


Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: moemoe am 03 November 2014, 11:27:44
Zitat von: Michl1003! am 03 November 2014, 11:16:05
andere frage, wie willst du das mit der kabelgebundenen variante machen, wenn du 10 - 20 sensoren hast, diverse andere kleinteil (zb. Shutdownschalter (3 Pins), Lüfter für PI (3 Pins), div. 1Wire (mind. 2 Pin), div. Relais (mind. 2 Pins)) ????
wo bringst du die unter, der Rpi hat nur 26Pins (ohne Breakout-gschichtln)....

Ich habe nicht gesagt, dass Breakout generell nicht tut – sondern nur mit den DHT22, und zwar aus den genannten Timing-Problemen. Du kannst natürlich, sofern du das technische Wissen dazu hast, problemlos einen eigenen Mikrocontroller dazwischensetzen. Der hat dann auf DHT-Seite keine Probleme mit dem Timing, und spricht für alle gemeinsam in Richtung RasPi wahlweise I2C oder SPI.

Gleichzeitig habe ich dir weiter oben eine Alternative genannt, und zwar Temperatur-/Feuchtesensoren, die direkt i2c sprechen, weshalb die ganzen Probleme dort nicht auftreten. Die kosten zwar ein paar Euro mehr, aber wenn du die gesparte Zeit damit aufrechnest, ist es trotzdem die günstigere Alternative.

Es spricht nichts dagegen, Ausgänge oder "langsame" Eingänge wie einzelne Schalter über Expander zu machen, das habe ich nie bestritten.

Und mal ehrlich, was erwartest du: Du weißt selber nicht, wie und ob es geht, aber willst von anderen auch ein "das geht so nicht sinnvoll" nicht akzeptieren. Du hast mich gleich an der Stelle "dann mach' es doch komplett selber, wenn du dir sicher bist, dass es gehen muss."
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: MichlB am 03 November 2014, 12:11:19
hallo nochmal,
ich wollte sicher nicht irgendjemand kränken oder ähnliches, sollte sich jemand angegriffen fühlen, dann sorry.
also das was ich eigentlich gerne hätte, wäre eine HowTo wie ich beim MCP23017 od. MCP23S17 einen Interrupt auslöse und diese Daten dann auswerte.. bzw. die Daten die daraus entstehen, weiterleite, wie im eingefügte nscript....

kurz: wie löse ich ein Interrupt (so eines wie aus dem script) aus am MCP... und wie bekomm ich die daten aus dem MCP raus...
obs mit dem timing dann klappt oder nicht is jetzt ein anderes thema, denn wenn ich mal weiß wie das funkt, dann kann ich es auch für andere dinge einsetzen... oder? sollte es nicht mit dem DHT11 funktionieren....

deshalb wäre ich dankbar, wenn mir jemand diese funktion verständlich erklären könnte...

vielen Dank
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: MichlB am 22 November 2014, 17:13:37
hallo again...

ich bin mit meinem gebastel einen schritt weiter... aber stecke nun wieder fest... leider  :'(
und zwar habe ich, wie bereits angedroht das ganze szenario vom MCP23017 auf einen MCP23S17 umgebaut, die DHT11-sensoren angeschlossen (derzeit nur 1 wegen testen)...
hab mir mein script entsprechend umgeschrieben, AAAABER, die werte die ich jetzt bekomme... kann ich nicht deuten....

hier mal das script, bitte entschuldigt, wenn dieses noch etwas verwirrt und unübersichtlich und nur wenig strukturiert ist, ich bin erst am anfang mit dem programmieren.....deshalb drückt bitte ein oder 2 augen zu... ;-)

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import smbus
import sys, spidev

#SPI BASESETTINGS
spi = spidev.SpiDev() # create spi object
spi.open(0, 1) # open spi port 0, device (CS) 1
spi.max_speed_hz=(10000000)

#GPIO BASESETTINGS
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

#MCP23S17 Device Adress
DEVICE_ADRESS = 0x40 #Slave-Adress

# - - MCP23S17 registers - - #
IO_DIRECTION_A        = 0x00   # IO direction  (0=output, 1=input (Default))
IO_DIRECTION_B        = 0x01
IO_POLARITY_A        = 0x02   # IO polarity   (0=normal, 1=inverse)
IO_POLARITY_B        = 0x03
GP_INTERRUPT_ENABLE_A   = 0x04   # interrupt on change (0=disable, 1=enable)
GP_INTERRUPT_ENABLE_B   = 0x05
DEF_VALUE_A      = 0x06   # default comparison for interrupt on change
DEF_VALUE_B      = 0x07
INTERRUPT_CONTROL_A     = 0x08   # interrupt control (0=interrupt on change, 1=interrupt on change from DEFVAL)
INTERRUPT_CONTROL_B     = 0x09
IO_CTRL_A = 0x0A # IO Control Adress
IO_CTRL_B = 0x0D
GP_PULLUP_A        = 0x0C   # pull-up resistor (0=disabled, 1=enabled)
GP_PULLUP_B = 0x0D
INFO_INTERRUPT_A = 0x0E   # interrupt flag
INFO_INTERRUPT_B        = 0x0F
INTERRUPT_CAPTURE_A     = 0x10   # interrupt capture
INTERRUPT_CAPTURE_B = 0x11
GPIOA        = 0x12   # port value
GPIOB        = 0x13
OUTPUT_A = 0x14   # output Ports
OUTPUT_B = 0x15

#  - - MCP23017 pins - - #
PIN7 = 0x80
PIN6 = 0x40
PIN5 = 0x20
PIN4 = 0x10
PIN3 = 0x08
PIN2 = 0x04
PIN1 = 0x02
PIN0 = 0x01
APIN = 0xff
PINOFF = 0x00
ENABLE = 0x01
DISABLE = 0x00
OUTPUT = 0x00
INPUT = 0x01

# Compare Values for the Adress Pins Bank A on the MCP23S17
PIN0 = 0x01 # = 00000001 = 1
PIN1 = 0x02 # = 00000010 = 3
PIN2 = 0x04 # = 00000100 = 4
PIN3 = 0x08 # = 00001000 = 8
PIN4 = 0x10 # = 00010000 = 16
PIN5 = 0x20 # = 00100000 = 32
PIN6 = 0x40 # = 01000000 = 64
PIN7 = 0x80 # = 10000000 = 128


# MCP23S17-Pins
SCLK        = 11 # Serial-Clock
MOSI        = 10 # Master-Out-Slave-In
MISO        = 9 # Master-In-Slave-Out
CS          = 18 # Chip-Select

#Setup GPIO Logic for Single Buttons and MCP Interrupt
GPIO.setup(23,GPIO.IN) #define BCM-Pin 23 (WPin4) as input for Interrupt Line from INIA of MCP23017
GPIO.setup(24,GPIO.IN) #define bcm-pin 24 (WPin5) as input for Interrupt Line from INTB of MCP23017

# Setup i2c logic for mcp23017 and its settings
#bus = smbus.SMBus(1) # 1 for Rev 2, and 0 for Rev 1 Raspis
data = [] #define a data array
data1 = [] #define a 2nd data array just for testing
data2 = [] #define a 3rd data array just for testing
data3 =[] #define a 4th data array just for testing
###################################################################
def sendValue(value):
    # Value senden
    for i in range(8):
        if (value & 0x80):
            GPIO.output(MOSI, GPIO.HIGH)
        else:
            GPIO.output(MOSI, GPIO.LOW)
        # Negative Flanke des Clocksignals generieren   
        GPIO.output(SCLK, GPIO.HIGH)
        GPIO.output(SCLK, GPIO.LOW)
        value <<= 1 # Bitfolge eine Position nach links schieben

def sendSPI(opcode, addr, data):
    # CS aktive (LOW-Aktiv)
    GPIO.output(CS, GPIO.LOW)
   
    sendValue(opcode|IO_CTRL_A) # OP-Code senden
    sendValue(addr)                 # Adresse senden
    sendValue(data)                 # Daten senden

    # CS nicht aktiv
    GPIO.output(CS, GPIO.HIGH)

def readSPI(opcode, addr):
# CS aktive (LOW-Aktiv)
GPIO.output(CS, GPIO.LOW)

sendValue(opcode|ENABLE) # OP-Code senden
sendValue(addr)                  # Adresse senden

# Empfangen der Daten   
value = 0
for i in range(8):       
value <<= 1 # 1 Postition nach links schieben
if(GPIO.input(MISO)):
value |= 0x01   
# Abfallende Clock-Flanke generieren   
GPIO.output(SCLK, GPIO.HIGH)
GPIO.output(SCLK, GPIO.LOW)

# CS nicht aktiv
GPIO.output(CS, GPIO.HIGH)
return value



def bin2dec(string_num): #define a function to convert a binary to a decimal number
    return str(int(string_num, 2)) #return the string representing the integer value of the string passed to this function in base 2 (binary)



def main():     
# Pin-Programmierung
GPIO.setup(SCLK, GPIO.OUT)
GPIO.setup(MOSI, GPIO.OUT)
GPIO.setup(MISO, GPIO.IN)
GPIO.setup(CS,   GPIO.OUT)

# Pegel vorbereiten
GPIO.output(CS,   GPIO.HIGH)   
GPIO.output(SCLK, GPIO.LOW)


sendSPI(DEVICE_ADRESS,IO_DIRECTION_A,OUTPUT) #Row A = OUTPUT
sendSPI(DEVICE_ADRESS,OUTPUT_A,PIN7) #Pin A7 = high
time.sleep (0.025)#for 25ms
sendSPI(DEVICE_ADRESS,OUTPUT_A,PINOFF)#Pins = Low
time.sleep(0.02)#for 20ms.
sendSPI(DEVICE_ADRESS,GP_INTERRUPT_ENABLE_A,DISABLE) #Schalte Interrupt auf A7
sendSPI(DEVICE_ADRESS, DEF_VALUE_A,PINOFF) #Vergleichswert = alle aus
sendSPI(DEVICE_ADRESS, INTERRUPT_CONTROL_A, ENABLE) # Aktiviere vergleich
sendSPI(DEVICE_ADRESS,IO_DIRECTION_A, INPUT) #Row A = INPUT
sendSPI(DEVICE_ADRESS,GP_PULLUP_A,ENABLE)#Pullup-resistor on Row B hight
time.sleep(0.125)

for i in range(0,500):
data.append(readSPI(DEVICE_ADRESS,GPIOA))#reads data from GPIA
#data1.append(readSPI(DEVICE_ADRESS,GPIOB))#reads data from GPIB
data2.append(GPIO.input(23)) #reads data from RPi-GPIO 24
#data3.append(GPIO.input(24)) #reads data from RPi-GPIO23
data1.append(readSPI(DEVICE_ADRESS,INTERRUPT_CAPTURE_A))
data3.append(readSPI(DEVICE_ADRESS,INTERRUPT_CAPTURE_B))

#######

bit_count = 0
tmp = 0
count = 0
HumidityBit = ""
TemperatureBit = ""
crc = ""
print "daten vom GPIOA" , data
print "daten von GPIOB" , data1
print "daten von Pin23 (WPin4)" , data2
print "daten von Pin24 (WPin5)" , data3
try: #try until error then goto except
while data[count] == 1: #as long as u read a 1
tmp = 1
count = count + 1 #count how many 1s have been read

for i in range(0, 32): #do this 33 times
bit_count = 0 #reset the bit count each time

while data[count] == 0: #as long as a 0 is read
tmp = 1
count = count + 1 #move on to the next bit

while data[count] == 1:
bit_count = bit_count + 1
count = count + 1

if bit_count > 3: #if there were more then 3x1 bit in a row
if i>=0 and i<8: #if we're in the first byte
HumidityBit = HumidityBit + "1" #append a 1 to the humi-bitstring
if i>=16 and i<24:
TemperatureBit = TemperatureBit + "1"
else:
if i>=0 and i<8:
HumidityBit = HumidityBit + "0"
if i>=16 and i<24:
TemperatureBit = TemperatureBit + "0"

except:
print "ERR_RANGE-1"
exit(0)

try:
for i in range(0, 8):
if bit_count > 3:
crc = crc + "1"
else:
crc = crc + "0"
except:
print "ERR_RANGE-2"
exit(0)

try:
for i in range(0, 8):
bit_count = 0

while data[count] == 0:
tmp = 1
count = count + 1

while data[count] == 1:
bit_count = bit_count + 1
count = count + 1

except:
print "ERR_RANGE-2"
exit(0)


Humidity = bin2dec(HumidityBit)
Temperature = bin2dec(TemperatureBit)

if int(Humidity) + int(Temperature) - int(bin2dec(crc)) == 0:
print "Humidity:"+ Humidity +"%"
print "Temperature:"+ Temperature +"C"
else:
print "ERR_CRC"

if __name__ == '__main__':
    main()



und die ergäbnisse des scripts:
daten vom GPIOA [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]
daten von GPIOB [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
daten von Pin23 (WPin4) [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
daten von Pin24 (WPin5) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Humidity:0%
Temperature:0C



Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: kpwg am 23 November 2014, 17:38:20
Hallo Michl1003!,

ohne Dir jetzt den Mut zu nehmen, kann ich moemoe nur zustimmen! Verschwende keine Zeit an aussichtslosen und vor allem viel zu zeitkritischen Projekten- nimm was Fertiges und mach' es passend. I2C mit Busexpandern sollte schmerzfrei sein.

Ich habe seit geraumer Zeit zahlreiche DHT22 an verschienenen ATmega's laufen. Mittlerweile alles stressfrei und aus jetziger Sicht sehr einfach, preiswert und schnell zusammengestrickt. Einfach einen ATmega nehmen, Ethersex konfigurieren, flashen, fertig. Auf der einen Seite können mehrere DHT22 angesteuert werden, auf der anderen Seite kannst Du die zB seriell per ECMD alle abfragen. Ohne LAN oder TCP reicht sicher ein Mega16.

Viele Grüße, Ricardo

ps: Ich würde aus heutiger Sicht die DHT22 außerhalb normal temperierter Wohnräume nicht wieder verwenden.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: MichlB am 25 November 2014, 14:57:24
hallo Ricardo

danke für die antwort, mut nehmen kannst du nicht ausser mit der aussage es ist aus rein physikalischen und naturgesetzlichen Gründen nicht möglich das DHT11 mit dem MCP23x17 zu betreiben...

wie funktioniert das mit dem ATmega - ding? hättest vll. eine kleine how to tutorial zur hand? ;-)

danke.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: kpwg am 25 November 2014, 17:25:16
Zitat von: Michl1003! am 25 November 2014, 14:57:24
...DHT11 mit dem MCP23x17 zu betreiben...
Warum nicht- oft geht's um den Lerneffekt und man beißt sich an solchen Zielen fest, die für Andere vielleicht nutzlos erscheinen. Mach mal! Und wenn's Fragen gibt, wird dir hier sicher geholfen. DHT11 sind leider nicht so genau, was einen sinnvollen Einsatzzweck doch eingrenzt. Nimm DHT22 oder SHT; die taugen besser.

Zitat von: Michl1003! am 25 November 2014, 14:57:24
wie funktioniert das mit dem ATmega - ding? hättest vll. eine kleine how to tutorial zur hand? ;-)
*Werbetrommelrühr*
Der Einstieg in die Wiki-Baustelle: http://www.ethersex.de/index.php/Ethersex_%28Deutsch%29 (http://www.ethersex.de/index.php/Ethersex_%28Deutsch%29)
Dort und vor allem auch im alten Wiki gibt es jede Menge Beispiele und HowTo's, wie man das an's Laufen bekommt.
Ein paar Kenntnisse von ATMEL Microcontrollern werden vorrausgesetzt. Wenn Du einen Draht zur Elektronik hast, ist das Wichtigste schnell erlernt und es stehen recht zügig Ergebnisse bereit.

Viele Grüße, Ricardo

Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: zYloriC am 01 Dezember 2014, 16:28:25
Bei mir lief das Script zum lokalen DHT22 die letzten Woche super, aber (womöglich seit einem fhem update) bekomme ich keine readings mehr. Dies liegt daran, dass der Telnet-Zugriff auf die fhem.pl einen "permission denied" Fehler ausgibt.
Woran kann das liegen und welche Lösung gibt es. Gruß, zYloriC
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: suppenesser am 01 Dezember 2014, 16:58:29
Darüber bin ich gestern Abend auch gestolpert, rechte dieser Datei anpassen hat geholfen!

Hierüber gibt es einen thread, schreib einfach vor den /opt........ perl davor!

Also

perl /opt/fhem/fhem.pl 7072 "setreading DHTBuro T $Temp"

So klappt es ohne Berechtigungsprobleme!

Siehe http://forum.fhem.de/index.php?topic=28220.0 (http://forum.fhem.de/index.php?topic=28220.0)

Gruß
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Renrudal am 17 Dezember 2014, 12:13:12
Zitat von: Zitze am 16 September 2014, 13:13:47
Hallo,

DHTInnen muss dann so

define DHTInnen dummy

angelegt werden?

Darauf hätte ich auch gerne eine Antwort! Wie wird das ganze nun in FHEM integriert?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: suppenesser am 17 Dezember 2014, 22:49:58
Schau mal im Beitrag 4, hier im thread.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Andy89 am 12 Januar 2015, 22:47:03
Hallo,
ich versuche gerade mein DHT22 einzubinden. Leider scheitere ich schon trotz deiner Anleitung. Ich habe eine Frage zu dem Installationsskript:

Zitat von: moemoe am 21 September 2014, 15:10:57
Installation Skript:

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


Danach muss mit einem Editor der Wahl die Datei noch angepasst werden, und logischerweise die Pins und Namen angepasst werden.

Erst kam folgender Fehler:
ZitatFile "/usr/local/sbin/fhem-dht", line 26
SyntaxError: Non-ASCII character '\xc2' in file /usr/local/sbin/fhem-dht on line 26, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
Diesen konnte ich durch Einfügen in der fhem-dht ganz oben mit folgendem Code beheben:  # -*- coding: utf-8 -*-

Wenn ich das Skript dann starte, erhalte ich am rPi folgenden Fehler:
Zitat/usr/local/sbin/fhem-dht: 4: /usr/local/sbin/fhem-dht: import: not found
/usr/local/sbin/fhem-dht: 5: /usr/local/sbin/fhem-dht: import: not found
;; connection timed out; no servers could be reached
/usr/local/sbin/fhem-dht: 10: /usr/local/sbin/fhem-dht: port: not found
/usr/local/sbin/fhem-dht: 12: /usr/local/sbin/fhem-dht: sensors: not found
/usr/local/sbin/fhem-dht: 46: /usr/local/sbin/fhem-dht: Syntax error: "(" unexpected (expecting "}")

Der erste Fehler, Zeile 4 in der fhem-dht, verweist auf die Adafruit_DHT. AdafruitDHT habe ich nach der Installation nicht verschoben oder verändert. Was mache ich falsch? Ich hoffe ihr könnt mir helfen =)

Beste Grüße
Andy
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: zYloriC am 23 März 2015, 12:58:19
Hallo zusammen,
nachdem DHT22 am raspberry #1 gut funktioniert, will ich ein weiteres Modul an einem entfernten Raspberry (#2) installieren und die Werte abfragen.

Ich könnte auf #2 wie Werte per Cron in eine txt lesen und diese dann etwa mit fhem-modul WS3600 einlesen. Leider habe ich damit nur mittel-gute Erfahrungen gesammelt.

Daher ist meine Frage, ob es einen sicheren Weg gibt, dass ich vom Pi#1 auf das loldht-script oder auf die GPOIs zugreife und ich die Abfrage quasi direkt von Mutter-System #1 aus starte?
Scripts remote auszuführen ist eine heikle Sache, ich weiß... und ich ich bin auch kein Fan von abgelegten Passwörtern per telnet-Befehl.

Habt ihr noch weitere Ideen? Gruß, zYloriC
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: phil1283 am 24 März 2015, 17:25:02
Hallo,

Danke für die Anleitung, das mit dem Auslesen geht prima.

@zYloriC wenn du einen weiteren Raspi mit benutzen willst, kannst du dir ein Skript mit expect schreiben um die Werte vom zweiten Raspi auf den fhem Raspi zu senden. klappt bei mir ganz gut.

Habe aber noch ein Problem mit dem DHT22:
Sobald ich einen Arduino per USB für eine andere Steuerung anschließe kommen bei der DHT-Abfrage nur seltsame werte raus.
Stromversorgung kann ich ausschließen, Netzteil hat 2A und es wird nur ein DHT und der Arduino versorgt.
Kann das an den Timings liegen, weil die pins nur gepollt werden?

Gruß phil
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: zYloriC am 31 März 2015, 10:00:51
Hallo phil,
danke für deine Info. Leider habe ich noch nichts passendes zu "expect" finden können.
Hast du einen Link für mich oder kannst kurz beschreiben, wie du durch fhem triggerst, dass auf dem nicht-fhem der loldht-Befehl ausgeführt wird. Wie muss ich die Rechte setzen, wenn ich in der cfg nicht das Passwort des Users auf dem nicht-Fhem raspberry speichern muss?
Danke für eure Hilfe. zYloriC
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: zYloriC am 09 April 2015, 09:37:40
hallo Forum,
ich habe mein Übertragungsproblem leider noch immer nicht gelöst, bin mittlerweile aber auf das Thema fHem & UDP gestoßen:
http://forum.fhem.de/index.php/topic,23540.msg181223.html#msg181223 (http://forum.fhem.de/index.php/topic,23540.msg181223.html#msg181223)

Was haltet ihr von UDP? Gibt es ein fHem-Module, dass mit mit UDP oder etwas ähnlichem unterstützt? Gibt es Nachteile von UDP?
Eigentlich will ich keine sensitiven Daten übertragen...
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: newby am 11 April 2015, 16:58:51
Hallo Moemoe,

Ich habe Deine Anleitung erfolgreich umgesetz.
Es lief auch super bis ich den 2ten DHT22 angeschlossen habe.
Dieser liert über die Abfrage auf dem rpi einen korrekten Wert, nur im fhem kommen immer die Werte -+ 8.6C und 3306.8% an.
Ich habe bereits die Pins gewechselt und die Sensoren geprüft.
Das Kabel des Sensors ist über 20m lang, die Spannung ist am DHT aber noch 3,3V.

Kann es evtl. Daran liegen das mehrere abgefragt werden?

Gruß
Sven
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: newby am 15 April 2015, 09:49:37
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
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: indianguru8654 am 22 April 2015, 07:55:50
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
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: indianguru8654 am 22 April 2015, 08:05:02
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.

Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Ger-Gilias am 10 Mai 2015, 22:06:08
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...
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: tester1 am 26 Mai 2015, 08:28:12
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
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: LuckyDay am 26 Mai 2015, 17:30:05
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
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: kasslerks am 27 November 2015, 20:00:14
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
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: kasslerks am 28 November 2015, 08:20:19
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
Titel: Frage zu DHT22-Messwerte in fhem auslesen
Beitrag von: bull1t am 07 Dezember 2015, 03:50:30
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

 
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: a_quadrat am 08 Dezember 2015, 19:26:46
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
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: a_quadrat am 08 Dezember 2015, 22:56:17
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 (https://learn.adafruit.com/dht-humidity-sensing-on-raspberry-pi-with-gdocs-logging/software-install-updated).

Vielleicht hilft dir das ja weiter.

Gruss Andreas
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: klausmrkor am 10 Dezember 2015, 22:41:23
Hallo, ich bin schon am verzweifeln.
Ich bekomme es einfach nicht hin.
Welche Pin muss ich bei Gpio18 eingeben?

Danke Klaus
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: a_quadrat am 10 Dezember 2015, 23:16:29
Hallo,

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

mfg Andreas
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: bull1t am 11 Dezember 2015, 02:34:35
Danke für die Hilfestellung...werde es mal so probieren und Rückmeldung geben!
Gruss bull1t
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: klausmrkor am 11 Dezember 2015, 09:01:42
 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.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: a_quadrat am 12 Dezember 2015, 13:12:09
auf dem ersten Blick sieht's ganz gut aus, nur in dem at, was ist die a1? Gib mal in der Eingabezeile von fhem folgendes ein
{system('sudo /usr/local/sbin/fhem-dht&')}
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: klausmrkor am 12 Dezember 2015, 14:08:00
Hallo,
Ich bekomme -1

ich hatte dies gemeint, alle 5 min abrufen.

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

Gruß
Klaus
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: a_quadrat am 12 Dezember 2015, 15:08:07
die Werte wurden nicht eingetragen?
Hast du auch die Rechte für dein script vergeben?
chmod +x /usr/local/sbin/fhem-dht
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: klausmrkor am 12 Dezember 2015, 16:03:01
Hallo,
habe ich auch gemacht, jetzt gerade noch einmal, es kommt immer -1

jedoch nur so    sudo chmod +x /usr/local/sbin/fhem-dht

Gruß
Klaus

Wie kann ich die Rechte noch vergeben?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: a_quadrat am 12 Dezember 2015, 16:52:40
der Rückgabewert -1 ist richtig,  aber es müssten dann die Werte für Temperatur und Humidity als reading in deinem Dummy stehen.

Die Rechtevergabe hat geklappt?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: klausmrkor am 12 Dezember 2015, 17:58:46
Hallo meine at sieht so aus

COMMAND                       {  system('sudo /usr/local/sbin/fhem-dht&')}
DEF                                +*00:05:00 { system('sudo /usr/local/sbin/fhem-dht&')}
NAME                                     a1
NR                                        301
NTM                                     17:26:09
PERIODIC                           yes
RELATIVE                          yes
REP                                     -1
STATE                               Next: 17:26:09
TIMESPEC                          00:05:00
TRIGGERTIME                   1449937569.58011
TRIGGERTIME_FMT       2015-12-12 17:26:09
TYPE                                     at


Ob das mit den Rechten geklappt hat,  Wie kann ich das prüfen?

bei der Fhem-dht steht     Owner:Root       Group: staff          owner; read write        group; Read only     other: Read only

Gruß
Klaus
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: a_quadrat am 12 Dezember 2015, 20:46:43
deine Rechte passen noch nicht.

Es fehlt das Recht, das Script auszuführen. Es sollte so aussehen:

-rwxr-xr-x 1 root staff 1562 Oct 28 23:38 fhem-dht

Wenn die Rechte korrekt vergeben sind, kannst du das Script auch direkt aus der Konsole ausführen mit

sudo /usr/local/sbin/fhem-dht
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: klausmrkor am 12 Dezember 2015, 21:17:56
Ich habe aber auch nichts anderes.

-rwxr-xr-x 1 root staff 1,6K Dec 12 19:04 fhem-dht



Gruß Klaus
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: a_quadrat am 12 Dezember 2015, 21:31:15
hast du oben aber nicht geschrieben. Was passiert, wenn du den Befehl in der Konsole eingibst?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: klausmrkor am 12 Dezember 2015, 21:36:15
Habe das Script auch direkt auf der Konsole ausgeführt : sudo /usr/local/sbin/fhem-dht
Aber es ist nichts herausgekommen. nicht einmal eine Fehlermeldung.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: a_quadrat am 12 Dezember 2015, 21:39:15
das ist gut. Schau mal in deinem Dummy nach, da müssten jetzt die neuen Readings Temperatur und Humidity drin stehen. 
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: klausmrkor am 12 Dezember 2015, 21:58:08
Tut mir leid, aber es kommen immer noch keine Daten.
Ich werde noch einmal alles durchgehen.
Danke für die Mühe.

Gruß
Klaus
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: a_quadrat am 12 Dezember 2015, 22:15:22
gibt es das Reading Error in deinem Dummy?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: klausmrkor am 13 Dezember 2015, 11:49:49
Mehr steht nicht drinn.

NAME     Aussen.DHT22
NR           305
STATE   T: temperature H: humidity
TYPE      dummy

Probably associated with
FileLog_Aussen_DHT22

Gruß
Klaus
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: a_quadrat am 13 Dezember 2015, 11:57:22
Hallo,  hast du dein dummy umbenannt? der Name im Script und Dummy müssen gleich heissen. Temperature und Humidity müssen auch gross geschrieben sein.

Mein letzter Versuch, dann weiss ich auch nicht weiter.

mfg Andreas
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: klausmrkor am 13 Dezember 2015, 12:10:54
Hallo

Namen im Script und Dummy sind gleich

Temperature und Humidity habe ich auch schon groß und klein versucht.

Ich danke Dir für deine Ausdauer.

Gruß
Klaus


Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: bull1t am 16 Dezember 2015, 23:13:40
Rückmeldung von mir:
Bekomme auch jetzt nur 3 Fragezeichen in FHEM angezeigt.
Frustrierend wenn man so fest hängt.

Nachtrag:
Meine 2 DHT's gehen jetzt. Der Fehler war erwartungsgemäß recht simpel wenn man es denn weiß.
FHEM hat schlichtweg die Berechtigung gefehlt das Skript auszuführen.
###in ssh Konsole eingeben zum Öffnen###
visudo
###am Ende der Datei einfügen###
fhem ALL=(ALL) NOPASSWD: ALL
Und speichern....
Die Fragezeichen sind weg & die Werte sind da... Es geht mir runter wie Öl das das endlich klappt.
Danke an alle beteiligten für Anleitungen und Denkanstöße.
Gruss bull1t
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: magentouser am 06 Januar 2016, 01:51:05
Hallo habe grad mal so installiert wie moemoe mit Adafruit_Python_DHT es beschrieben hat, soweit so gut nur sind die werte T: 2662.5 H: 1651.2  irgenwie falsch.. wo kann ich dies ändern  lolware gibt mir Humidity = 54.20 % Temperature = 14.70 *C
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: magentouser am 11 Januar 2016, 13:14:08
so hat sich nun erledigt , hab das per loldht hinbekommen...


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

und im fhem.cfg
define telnetPort telnet 7072 global
define DHTInnen dummy
attr DHTInnen room GPIO4
attr DHTInnen stateFormat T: temperature H: humidity

komplette anleitung in #66
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: simonela80 am 13 Januar 2016, 22:39:51
Hallo magentouser,

stehe gerade voll auf der Leitung, wo hast du das Skript gespeichert?
Unter /home/pi/lol_dht22, dort sind aber noch einige andere Dateien?

Wo muss ich das nun hineinkopieren, bin nun schon einige Zeit dran


vielen Dank mal für die Hilfe
Peter
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: magentouser am 18 Januar 2016, 11:57:22
ja habe das ganze Verzeichniss dort installiert,

die anderen Dateien sind nur für die Installation notwendig..

also
in deinem Home Verzeichniss (möglichst nicht root)

Dann einen clone von wiringPi ziehen und kompilieren:
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build
cd ..

ob wiringPi  funktioniert und Pinbelegung sieht man mit

gpio readall

Als beispiel des ergebnisses
+-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+
| BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
|     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
|   2 |   8 |   SDA.1 |   IN | 1 |  3 || 4  |   |      | 5V      |     |     |
|   3 |   9 |   SCL.1 |   IN | 1 |  5 || 6  |   |      | 0v      |     |     |
|   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 1 | ALT0 | TxD     | 15  | 14  |
|     |     |      0v |      |   |  9 || 10 | 1 | ALT0 | RxD     | 16  | 15  |
|  17 |   0 | GPIO. 0 |   IN | 1 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
|  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
|  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
|     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
|  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |
|   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
|  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   |
|     |     |      0v |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   |
|   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
|   5 |  21 | GPIO.21 |  OUT | 1 | 29 || 30 |   |      | 0v      |     |     |
|   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
|  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
|  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
|  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
|     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
+-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+


dannl lol_dht22, dieses Programm liest den eigentlichen Sensor aus.

git clone https://github.com/technion/lol_dht22
cd lol_dht22
./configure
make


zum testen der sensoren  0 ist der wiringPi port wo die sensoren dranhängen

./loldht 0
kommen nun werte

Raspberry Pi wiringPi DHT22 reader
www.lolware.net
Humidity = 50.80 % Temperature = 16.00 *C

cd ..
nano deinscriptname.sh

den wert DHTInnen könnt ihr benennen wie ihr wolt aber keine lehr oder sonderzeichen und muss auch in der fhem.cfg dann gleich sein
#!/bin/bash
cd /home/pi/lol_dht22
WERTE=$(sudo ./loldht 0 | grep "Humidity")
Hum=$(echo $WERTE|cut -d " " -f3)
Temp=$(echo $WERTE|cut -d " " -f7)
echo $WERTE
echo $Hum
echo $Temp
/opt/fhem/fhem.pl 7072 "setreading DHTInnen temperature $Temp"
/opt/fhem/fhem.pl 7072 "setreading DHTInnen humidity $Hum"


hineinkopieren
und speichern..
chmod +x deinscriptname.sh
chomd 777 deinscriptname.sh

und im fhem.cfg folgendes eintragen
define telnetPort telnet 7072 global
define DHTInnen dummy
attr DHTInnen room GPIO4
attr DHTInnen stateFormat T: temperature H: humidity
define FileLog_DHTInnen  FileLog ./log/DHTInnen -%Y.log DHTInnen
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

und fhem neu starten

zum Testen

./deinscriptname.sh
nun sollte folgendes erscheinen (Werte können abweichen)
Humidity = 50.50 % Temperature = 14.10 *C
14.10
50.50


wenn alles funktioniert
nano deinscriptname.sh
echo $WERTE
echo $Hum
echo $Temp

in
#echo $WERTE
#echo $Hum
#echo $Temp

ändern und speichern

danach per cron z.b. aller 5 minuten aufrufen
*/5  *    * * * root /home/pi/deinscriptname.sh > /dev/null 2>&1 &
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: simonela80 am 18 Januar 2016, 21:40:03
Hallo,

habe nun alles so gemacht wie beschrieben, aber leider funktioniert es immer noch nicht.
Ich bekomme zwar die Werte im raspberry, aber ich bekomme die Werte nicht in fhem.

Im raspberry bekomme ich die Werte wenn ich in den Ordner /home/pi/lol_dht22 gehe und dort den Befehl sudo loldht 0 eingebe.

den cron habe ich in /etc/crontab geschrieben:
1  *    * * *   root    /home/pi/feuchtigkeit.sh >/dev/null 2>&1

in fhem.cfg habe ich dann einen Dummy gemacht, wie beschrieben:
define DHTInnen dummy
attr DHTInnen room Ameisen
attr DHTInnen stateFormat T: temperature H: humidity

aber wie gesagt funktioniert es nicht in fhem, bekomme keine Werte

hoffe mal jemand weiß wo der Fehler liegt und kann mir helfen

Danke
Peter
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: magentouser am 19 Januar 2016, 07:31:08
Ändere mal in deiner /home/pi/feuchtigkeit.sh

#echo $WERTE
#echo $Temp

in

echo $WERTE
echo $Temp

als das # davor weg und führe die datei direkt aus also $ ./feuchtigkeit.sh
nun sollten die gleichen werte wie bei loldht 0 erscheinen und auch im fhem Daten da sein.

ich denke mal das root bei dir keine rechte für die Datei hat.. dann mit chmod 777 feuchtigkeit.sh für jeden setzten.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: simonela80 am 19 Januar 2016, 17:32:27

OK, das funktioniert nun mit $ ./Feuchtigkeit.sh da bekomme ich Werte in meinen pi

aber es kommt auch noch eine Meldung:
Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 434.


und was ist das jetzt?
Wenn ich in die Datei reinschaue hat das mit Client Mode zu tun

hoffe ihr könnt mir noch immer helfen
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: magentouser am 20 Januar 2016, 14:41:50
füge mal in der datei
unter
echo $Temp

echo $Hum
hinzu

dann nochmal per hand ausführen

ergebniss sollte wie folgt aussehen

Humidity = 49.70 % Temperature = 14.00 *C
14.00
49.70

wenn dort etwas anderes steht (werte selbst können abweichen) als 14.00 und 49.70 z.b. Buchstaben dann könnte es zu problemen kommen
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: simonela80 am 20 Januar 2016, 19:12:26
Hallo magentouser

habe es zu der Datei hinzugefügt und es kommt folgendes Ergebnis:
Humidity = 62.80 % Temperature = 23.70 *C
23.70
62.80
Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 434.


aber in fhem bekomme ich nur drei Fragezeichen, die Datei habe ich mit
sudo chmod 777 feuchtigkeit.sh
freigegeben.

wo liegt der Fehler? ich weiß einfach nicht mehr weiter

Gruß
Peter
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Doublefant am 20 Januar 2016, 20:19:37
Nachdem ich mich auch an der einbindung eines DHT22 versucht habe, mehrmals mit den Anleitungen weiter vorne erfolglos war und die Adafruit Library auch nicht laufen wollte, habe ich nun mit WiringPi und der Anleitung von Magentouser das ganze ans laufen gebracht.

@Magentouser Vielen dank für eine ausführliche und vor allem einsteigerfreundliche Anleitung!  ;D
Bis zu deinem Beitrag war ich mir nie sicher wo ich welche Datei installieren, erstellen oder editieren muss. Ich bin allerdings auch noch blutiger Anfänger in dem ganzen Thema. ::)

Bei der beschriebenen Fehlermeldung kann ich leider nicht helfen, die kam bei mir nicht.
Dafür hat das Skript bei mir die Fehlermeldung ausgespuckt, dass es keine Berechtigung hat die Werte in die fhem.pl zu schreiben.
Dann habe ich mit "chmod" die Berechtigung der fhem.pl geändert, dann wurden die werte auch in Fhem in den Dummy eingetragen und die ?? sind verschwunden.

*edit*
Ich habe das Script bei mir manuell ausgeführt und Echo aktiviert. Bei mir steht in der Ausgabe nach der "Huminity" Zeile nur 1 Zahlenwert (23.70) , bei dir steht dort noch 62.80
Kann das das Problem sein? Wie ist es bei dir Magetouser?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: simonela80 am 20 Januar 2016, 20:36:43



bei mir funktionierts nur im pi, im fhem bekomme ich keine Werte
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: magentouser am 21 Januar 2016, 09:39:06
ist in der fhem.cfg
define telnetPort telnet 7072 global
eingetragen?

@Doublefant

WERTE=$(sudo ./loldht 0 | grep "Humidity")
Hum=$(echo $WERTE|cut -d " " -f3)
Temp=$(echo $WERTE|cut -d " " -f7)
echo $WERTE
echo $Temp
echo $Hum

dann sollten
3 Zeilen mit den werten erscheinen

in der 1. fassung vom 11 Januar 2016 & #66  stand echo $Hum noch nicht drin (ist aber auch nicht notwendig sit nur zur kontrolle ob die werte wie gewünscht erscheinen und kann dann wieder mit # davor versehen werden also
#echo $WERTE
#echo $Temp
#echo $Hum


hab mal beitrag #66 geändert
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: simonela80 am 21 Januar 2016, 21:59:02

so nun funktionierts -- fast
bei mir in der fhem cfg war noch
define telnetPort telnet 7072 global
attr telnetPort SSL 1
attr telnetPort password ........


habe das SSL 1 und Password mal gelöscht und schon hatte ich einen Wert.

Nur leider verändert sich der Wert nicht, also muss was am Cronjob nicht stimmen. Habe in der Datei etc/crontab folgendes eingetragen

*/1*    * * *   root    /home/pi/feuchtigkeit.sh >/dev/null 2>&1


habe auch probiert unter crontab -e das selbe eingetragen (worin liegt denn hier der unterschied zwischen den beiden)

aber leider verändert sich der Wert nicht.
Der Wert ändert sich erst dann wenn ich im pi die Datei wieder von Hand ausführe, dann bekomme ich auch aktuelle Werte im fhem

ich denke nach diesem Job brauche ich mal wieder eine Pause, sehe den Wald vor lauter Bäumen nicht mehr

Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: magentouser am 21 Januar 2016, 22:10:43

*/1*    * * *   root    /home/pi/feuchtigkeit.sh >/dev
*/1 * 
> /dev/null 2>&1 &

Da fehlt was bei dir  lehrzeichen und hinter dev..
Hast du den cron auch neu gestartet?
/etc/init.d/cron restart
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: simonela80 am 21 Januar 2016, 22:57:32
habe es so eingegeben aber es funktioniert nicht

*/1*    * * *   root    /home/pi/feuchtigkeit.sh > /dev/null 2>&1 &


und auch den cron neu gestartet



Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: magentouser am 21 Januar 2016, 22:59:24
Das lehrzeichen nach der 1 fehlt      */1             * * * *
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: simonela80 am 21 Januar 2016, 23:07:09
ja ja ja, jetzt geht's ich glaub mir geht einer ab


vielen vielen Dank magentouser
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: -jato- am 12 Mai 2016, 22:39:12
Bei mir hat es ebenfalls erst funktioniert, nachdem ich das globalpassword von telnetPort entfernt hatte. Gibt es da keine Möglichkeit das mit globalpassword zu realisieren?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: fridamme am 10 Juli 2016, 23:24:50
Guten Abend
Ich bin hier neu im Forum und auch neu mit FHEM am werkeln.  ::)
Dank der Anleitung von Moritz habe ich das Auslesen eines DHT11 einigermassen auf die Reihe gekriegt, jedoch trägt es immer mal wieder grob fehlerhafte Werte ein. Ein Bild davon ist im Anhang...  :-\
Ich bin froh um ein Tipp wie ich das beheben kann, mein bisheriger versuch war die Reduktion von zwei auf einen DHT11, dies hat aber keine sichtliche Verbesserung gebracht. Ansonsten sind per 1-Wire zwei Temperatursensoren am Raspberry, diese funktionieren soweit einwandfrei...
Vielen Dank im Voraus für die bisherige Hilfe (sonst wäre ich gar nicht so weit gekommen) und hoffentlich auch für weitere Hilfe  ;)
Liebe Grüsse
Dave
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: paulpanter am 11 Juli 2016, 08:48:10
Hey fridamme,
was spuckt dir denn AdafruitDHT aus? Vielleicht bekommt ja fhem auch schon komplett fehlerhafte Werte.
Starte mal aus deinem Installverzeichnis, sollte vermutlich soetwas wie "~/Adafruit_Python_DHT/examples" sein, "AdafruitDHT.py".
Du kannste es starten wenn du ins Verzeichnis gehst und "sudo ./AdafruitDHT.py 11 [den Pin auf den du den Sensor gelegt hast]" eingibst.
Mach das mal ein paar mal und poste die Ergebnisse.

Gruß,
pp
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Feuerdrache am 11 Juli 2016, 20:08:00
Moin fridamme,
das gleiche Problem mit den falschen Werten hatte ich auch.
Ich habe mein Skripte soweit umgebaut, das es dreimal den DHT22 abfragt und dann den mittleren Wert verwendet. Seit dem ich das so laufen habe, gibt es keine Probleme mehr.

Genauer läuft es so:
Ein Shellscript wird von FHEM aufgerufen und fragt dreimal in folge den DHT22 ab. Das Ergebnis aller drei abfragen wird an ein AWK Skript für Temperatur und eines für Luftfeuchtigkeit übergeben. Das AWK Skript sortiert die Werte nach grösse und liefert den mittleren zurück.

Ich verwende allerdings loldht um den dht abzufragen. (Quelle: https://github.com/technion/lol_dht22).

Anbei die Skripte, falls jemand sie verwenden möchte

Gruß FD

PS: Ich hab das auch mit zwei DHT laufen und es tut was es soll.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: fridamme am 12 Juli 2016, 10:57:35
Hui seid ihr schnell.

Zitat von: paulpanter am 11 Juli 2016, 08:48:10
was spuckt dir denn AdafruitDHT aus? Vielleicht bekommt ja fhem auch schon komplett fehlerhafte Werte.
Die direkte Abfrage (15 mal nacheinander) ergab folgendes:
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./AdafruitDHT.py 11 5
Temp=24.0*  Humidity=46.0%
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./AdafruitDHT.py 11 5
Temp=24.0*  Humidity=46.0%
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./AdafruitDHT.py 11 5
Temp=24.0*  Humidity=46.0%
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./AdafruitDHT.py 11 5
Temp=24.0*  Humidity=46.0%
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./AdafruitDHT.py 11 5
Temp=24.0*  Humidity=46.0%
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./AdafruitDHT.py 11 5
Temp=24.0*  Humidity=46.0%
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./AdafruitDHT.py 11 5
Temp=24.0*  Humidity=46.0%
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./AdafruitDHT.py 11 5
Temp=24.0*  Humidity=46.0%
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./AdafruitDHT.py 11 5
Temp=24.0*  Humidity=46.0%
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./AdafruitDHT.py 11 5
Temp=12.0*  Humidity=150.0%
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./AdafruitDHT.py 11 5
Temp=24.0*  Humidity=46.0%
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./AdafruitDHT.py 11 5
Temp=24.0*  Humidity=46.0%
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./AdafruitDHT.py 11 5
Temp=24.0*  Humidity=46.0%
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./AdafruitDHT.py 11 5
Temp=24.0*  Humidity=46.0%
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./AdafruitDHT.py 11 5
Temp=24.0*  Humidity=46.0%

Also auch da ein fehlerhafter Eintrag...

Der Lösungsvorschlag von Feuerdrache klingt spannend. Ich muss mich mal darum kümmern ihn umzusetzen... Ich weiss bisher zwar noch nicht wie man ein Shellscript von FHEM aufrufen kann und was ein AWK Skribt ist... Mal sehen wie weit ich damit komme =)
Aber danke für den Input und für die bereitstellung der Skripte...

Gruss
Fridamme
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Feuerdrache am 14 Juli 2016, 18:52:41
Huhu,
dann liefere ich gerne noch etwas nach.

Das Skript rufe ich über ein AT alle Minute in FHEM selber auf.
Die Definition des AT sieht bei mir so aus:
define at.read_local_dht22 at +*0:01:00 {system ("/bin/bash /opt/fhem/script/read_dht_22_pi_server.sh &")}

Die Skripte aus dem zip liegen bei mir unter /opt/fhem/script mit den rechten 755.

-rwxr-xr-x 1 fhem dialout    1597 Apr 21 08:37 read_dht_22_pi_server.sh
-rwxr-xr-x 1 fhem dialout  829 Apr 21 17:31 result_humidity.awk
-rwxr-xr-x 1 fhem dialout    1226 Apr 21 17:30 result_temperature.awk



Den DHT liest bei mir das Tool loldht aus. (Wie man das kompiliert etc steht z.B. hier: http://nicht-traeumen-sondern-machen.de/RaspberryPi_Basteleien/Code_TemperaturMessen.php?anker=a3)

loldht liegt bei mir unter /usr/sbin und hat das suid bit gesetzt. Dies ist sicherheitstechnisch zwar nicht so gut, aber notwendig, damit loldht auf die Hardware zugreifen darf
-rwsr-sr-x 1 root root 9261 Apr  1 15:35 /usr/sbin/loldht

Ich hoffe das hilft bei der Implementation weiter.

Gruß FD
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Dangermouse am 22 August 2016, 19:06:32
Zitat von: moemoe am 21 September 2014, 15:10:57
Ich beschreibe hier mal meine komplette Lösung. Ich verwende die python-Library von Adafruit und speise die Ergebnisse per "telnet" ein.
...

Grüße
Moritz

Hallo Moritz (und alle anderen natürlich auch ;) ),

das HowTo ist wirklich genial, herzlichen Dank nochmal dafür.
Ich stehe bei Python leider noch ganz am Anfang, hätte da noch ein kleines Anliegen  ;D
Wäre es möglich in die fhem-dht noch einen BMP180 mit aufzunehmen? Meinen hatte ich bisher über eine seperate FHEM-Instanz als CloneDummy an den Hauptserver angebunden, dies widerspricht allerdings meinem Verständnis von ressourcenschonenden, kleinen Raspis für die Anwesenheits- und Umwelterfassung in den einzelnden Räumen. Hättest Du da einen Tip für mich?

LG Thorsten
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: fridamme am 28 August 2016, 19:36:31
Zitat von: Feuerdrache am 14 Juli 2016, 18:52:41
Huhu,
dann liefere ich gerne noch etwas nach.
Ich hoffe das hilft bei der Implementation weiter.

Gruß FD

Hallo Feuerdrache

Besten Dank für deine Nachlieferung. Nun ist das ganze etwas klarer, leider bin ich nicht fähig dein Skript anzupassen. Bisher habe ich weder herausgefunden wie ich lol_dht22 mit dem DHT11 nutzen kann (es liest zwar Werte aus, diese stimmen jedoch überhaupt nicht), noch bin ich in der Lage dein sh. Skript anzupassen um den Sensor mit der Adafruit Library auszulesen. Bin leider noch blutiger Anfänger...
Naja, da die Dinger nicht so viel kosten habe ich nun DHT22 bestellt und hoffe, das Skript dann zum laufen zu bringen =)
Vielen Dank soweit, mal schauen obs nun klappt...

LG Fridamme
Titel: DHT22-Messwerte in fhem auslesen
Beitrag von: Feuerdrache am 28 August 2016, 21:54:32
Hi Fridamme,
was für Ausgaben bekommst du denn? Idealerweise mit Aufruf und Ausgabe im Vergleich libarv. Evt ist es ja nur eine Kleinigkeit.

Was für einen Pi nutzt du denn?
Gruß FD
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: fridamme am 29 August 2016, 18:41:46
Zitat von: Feuerdrache am 28 August 2016, 21:54:32
was für Ausgaben bekommst du denn? Idealerweise mit Aufruf und Ausgabe im Vergleich libarv. Evt ist es ja nur eine Kleinigkeit.
Ich erhalte folgende Ausgabe:
sudo ./loldht 0
Raspberry Pi wiringPi DHT22 reader
www.lolware.net
Humidity = 1152.00 % Temperature = 588.80 *C

Und ich hoffe doch sehr, dass diese Werte nicht stimmen, sonst wäre das Raumklima im Wohnzimmer eher ungesund...

Zitat von: Feuerdrache am 28 August 2016, 21:54:32
Was für einen Pi nutzt du denn?

Ich nutze den Raspberry Pi 3. Per Adafruit lässt sich der Sensor auslesen:
sudo ./AdafruitDHT.py 11 5   
Temp=24.0*  Humidity=40.0%

Was meinst du mit Aufruf und Ausgabe im Vergleich libarv? Ich fühle mich gerade wie ein riesen Noob ;-) (OK bin ich ja auch... Aber was nicht ist kann ja noch werden...)

Gruss
Fridamme
Titel: DHT22-Messwerte in fhem auslesen
Beitrag von: Feuerdrache am 29 August 2016, 22:32:59
Moin,

Brauchst dich nicht wie ein Boot fühlen, hast genau das geliefert, was ich sehen wollte. :-)

Die awk Skripte lassen sich nicht so leicht an die Adafruit Library anpassen wie ich gehofft hatte. Eventuell lässt sich was per regulären Ausdrücken machen. Ich schaue mir das mal an wenn es passt.

Gruß FD
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: fridamme am 01 September 2016, 18:29:00
Vielen Dank für deinen Effort... Und wirklich nur wenn es dich reizt - wie gesagt, habe bereits zwei DHT22 bestellt ;-)
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Beckmann am 20 September 2016, 11:25:10
Guten Tag,
ich habe soeben mithilfe dieser Ausführlichen Erklärungen und Diskussionen hier meinen DHT22 an meinem Raspberry ans laufen gebracht, Danke dafür!!  In FHEM werden nun auch korrekt im Minuten-Takt Temperatur und Luftfeuchtigkeit angezeigt. Nun zum Problem: ich habe FHEM mittels Homebridge mit dem Homekit system von Apple verknüpft und kann so auf meinem iPhone unteranderem Temperatur ablesen, scheinbar hat es jedoch damit Probleme dass, die Werte des DHT22 mit Nachkommastelle angegeben werden. Denn beim DHT22 steht immer 0°C. Mit den Wetter-Daten welche ich von Yahoo in mein FHEM eingebunden hatte Funktioniert es wunderbar und der einzige Unterschied den ich feststellen konnte ist eben dass diese Ganzzahlige Messwerte sind. Da ich definitiv noch ein Laie in diesem Bereich bin hoffe ich dass mir jemand sagen kann wie ich nun die Werte des DHT22 auf Ganzzahlige Werte runden kann...   Vielen Dank schonmal und ich bin auf sämtliche Antworten/Lösungsansätze gespannt :)
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: juergs am 28 September 2016, 18:18:47
ZitatPin 1 wird an die 3,3V Versorgungsspannung angeschlossen

Hier gibt es eine Abhandlung darüber (Aussetzer vs. Betriebsspannung):
hier (https://forum.fhem.de/index.php/topic,43672.msg478520/topicseen.html#msg478520) und hier (https://forum.fhem.de/index.php/topic,43672.msg477474.html#msg477474)

ZitatDHT22 VCC über VIN speisen (also +5V)
dann den pull-up analog zu dieser Anleitung realisieren:
http://tansi.info/rp/interfacing5v.html (http://tansi.info/rp/interfacing5v.html)
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: juergs am 28 September 2016, 18:40:30
Kleine Frage am Rande:

in der RC-Switch-Library wurde eine Arduino-Lib in eine auf dem Raspi ausführbare Datei gewrapped.
https://github.com/sui77/rc-switch (https://github.com/sui77/rc-switch)
Wäre das mit der DHT22-Lib auch (leicht) möglich?

Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Bracew am 08 Oktober 2016, 15:28:17
Hallo,

ich habe auch einen DHT22 an meinen RasPi angeschlossen. Ich habe im Logfile je Messung nur eine Zeile. Das Logfile "PiSensorKellerBuero-2016.log" sieht also auszugsweise so aus:
Zitat2016-10-08_14:37:03 SensorKellerBuero temperature: 17.0 humidity 64.5
2016-10-08_14:47:04 SensorKellerBuero temperature: 16.9 humidity 64.8
2016-10-08_14:57:04 SensorKellerBuero temperature: 16.9 humidity 65.0
2016-10-08_15:07:04 SensorKellerBuero temperature: 16.9 humidity 64.9

Die Definition in fhem.cfg habe ich wie folgt angelegt:
Zitatdefine SensorKellerBuero dummy
attr   SensorKellerBuero room Kellerbuero
attr   SensorKellerBuero group Temperatur-Feuchtigkeit
attr   SensorKellerBuero stateFormat T:temperature, H:humidity
#
define TempLogfile FileLog ./log/PiSensorKellerBuero-%Y.log SensorKellerBuero
attr   TempLogfile logtype temp4:window,text
attr   TempLogfile room Kellerbuero
attr   TempLogfile group Temperatur-Feuchtigkeit

JEDOCH sieht die Ausgabe in FHEM auf dem Bildschirm so aus:
ZitatSensorKellerBuero  T:16.9 humidity 65.1, H:humidity

und damit komme ich nun zu meiner Frage:
Wie kann ich es ungefähr so angezeigt bekommen ?
ZitatSensorKellerBuero  Temperatur:16.9°C  Feuchtigkeit: 65.1 %

Danke für Hilfe
Gruß Bracew

Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: PeMue am 08 Oktober 2016, 15:33:12
ggf. könnte das Attribut stateFormat helfen?

Gruß PeMue
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Bracew am 08 Oktober 2016, 15:39:02
OK,...(Kratz am Kopf)...aber wie?

ich hatte eher vermutet, dass es ggf. mit "temp4" zusammenhängt (Ich habe keine Ahnung für was temp4 ist).

Wie müsste ich stateFormat ändern?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: LuckyDay am 08 Oktober 2016, 15:43:57
attr   SensorKellerBuero stateFormat T:temperature, H:humidity

das Komma nach temperature ist falsch

zeig mal ein List von deinem Dummy
list SensorKellerBuero
das mann mal sieht welche readings du dort überhaupt hast
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Bracew am 08 Oktober 2016, 15:47:19
Danke für den Hinweis. Komma habe ich rausgenommen, Anzeige ist aber gleich.

list SensorKellerBuero gibt folgende Ausgabe:
ZitatInternals:
   NAME       SensorKellerBuero
   NR         526
   STATE      T:17.1 humidity 64.5, H:humidity
   TYPE       dummy
   Readings:
     2016-10-08 15:41:34   temperature     17.1 humidity 64.5
Attributes:
   group      Temperatur-Feuchtigkeit
   room       Kellerbuero
   stateFormat T:temperature H:humidity
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: PeMue am 08 Oktober 2016, 15:50:54
Zitat von: Bracew am 08 Oktober 2016, 15:39:02
... ich hatte eher vermutet, dass es ggf. mit "temp4" zusammenhängt (Ich habe keine Ahnung für was temp4 ist).
das könnte die gplot Datei sein, die aus dem Log die 4. Spalte zum Plotten nimmt. Wie kommen bei Dir die einzelnen Readings? Wenn diese nicht korrekt vorhanden sind, hast Du mit stateFormat auch schlechte Karten ;)

Gruß PeMue
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: LuckyDay am 08 Oktober 2016, 15:57:03
Zitat2016-10-08 15:41:34   temperature     17.1 humidity 64.5

du hast nur das eine Reading temperature und kein Reading humidity :)
deswegen tut deine Version nicht

wie wird denn bei dir der Dummy gefüllt?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Bracew am 08 Oktober 2016, 16:04:06
Die gplot Datei ist eine von mir abgewandelte "temp4hum4.gplot" mit Namen "WeBeTempHum.gplot". Das Plotten funktioniert auch ganz OK.

Die Definition in fhem.cfg für das Plotten sieht bei mir so aus:
define SVG_SensorKellerBuero SVG TempLogfile:WeBeTempHum:CURRENT
attr   SVG_SensorKellerBuero label " Temperatur (°C)"::"Feuchtigkeit relativ (%)"::"Temperatur (Rot) Max.=$data{max1}°C, Min.=$data{min1}°C, Letzte=$data{currval1}°C"
attr   SVG_SensorKellerBuero room Kellerbuero
attr   SVG_SensorKellerBuero group Temperatur-Feuchtigkeit


Ich habe noch eine bash-Datei, welche alle 10 Minuten von einem Cron-Job aufgerufen wird:
#!/bin/bash
sudo killall -q loldht > /dev/null 2>&1
cd /opt/lol_dht22
WERTE=$(sudo /opt/lol_dht22/loldht 7 | grep "Humidity")
Hum=$(echo $WERTE|cut -d " " -f3)
Temp=$(echo $WERTE|cut -d " " -f7)
echo $WERTE
echo $HUM
echo $Temp
/opt/fhem/fhem.pl 7072 "setreading SensorKellerBuero temperature $Temp humidity $Hum"


Das mit den "Readings" habe ich noch nie verstanden. Entschuldigung.
Deshalb weiß ich auch nicht, wie ich die Frage:
ZitatWie kommen bei Dir die einzelnen Readings?
beantworten soll?

bzw. auf
Zitatdu hast nur das eine Reading temperature und kein Reading humidity
reagieren muss?

Plot sieht übrigens wie angefügte Datei aus.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: LuckyDay am 08 Oktober 2016, 16:11:23
/opt/fhem/fhem.pl 7072 "setreading SensorKellerBuero temperature $Temp humidity $Hum"

hier erzeugst du das eine Reading "temperature"

auf die schnelle geht bestimmt auch

/opt/fhem/fhem.pl 7072 "setreading SensorKellerBuero temperature $Temp"
/opt/fhem/fhem.pl 7072 "setreading SensorKellerBuero humidity $Hum"


dann hättest zwei getrennte Readings, aber deine LOGdatei ändert sich dadurch auch
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Bracew am 08 Oktober 2016, 16:13:02
Danke, aber ich möchte gerne nur eine Zeile pro Log-Datei Eintrag haben.

Liegt es vielleicht am fehlenden Doppelpunkt in der Log Datei nach humidity ?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: PeMue am 08 Oktober 2016, 16:25:03
... ist doch kein Problem. Du machst
- ein reading temperature
- ein reading humidity.
Damit hast Du beide Einzelwerte und kannst damit Dein state sauber definieren.
Dann machst Du noch ein reading:
- T: xx H: yy
auf das Du dann mit Deinem FileLog triggerst.
Sprich es müsste dann so heißen:
/opt/fhem/fhem.pl 7072 "setreading SensorKellerBuero temperature $Temp"
/opt/fhem/fhem.pl 7072 "setreading SensorKellerBuero humidity $Hum"
/opt/fhem/fhem.pl 7072 "setreading SensorKellerBuero T: $Temp H: $Hum"


Oder Du nimmst nur die beiden ersten Readings, definierst Dir ein sauberes state und loggst nur den state. Ginge auch  ;)

Gruß PeMue
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: LuckyDay am 08 Oktober 2016, 16:28:50
ZitatDanke, aber ich möchte gerne nur eine Zeile pro Log-Datei Eintrag haben.

da versperrst die Standard Attribute, wie du siehst auch das dewpoint modul, auch einfaches rechnen mit deiner Variante ist "unlustig"

zumal man mit attr userReadings sich auch diesen Logdatensatz wie du ihn haben willst , neu erzeugen kann
hast doch alle Möglichkeiten offen



Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Bracew am 08 Oktober 2016, 16:54:54
Ok, ausprobiert. Danke für die tolle Hilfe.

Wenn ich das Log-File auf Zweizeilig umstelle bekomme ich nun die Anzeige
ZitatSensorKellerBuero  T:17.0 H:65.0
also prima, alles OK,
aber den Plot musste ich wieder auf temp4hum4.gplot zurückstellen, damit er auch wieder funktioniert.

Ich muss nun erstmal mit meiner Frau einkaufen gehen.

Wäre es zuviel verlangt nachzufragen, wie ich das
a) in "SensorKellerBuero  Temperatur:17.0°C  Feuchtigkeit: 65.0 %" angezeigt bekommen?
b) und wie das mit dem Taupunkt (dewpoint modul) funktioniert?

Vielen Dank von Bracew
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: PeMue am 08 Oktober 2016, 17:12:35
Zitat von: Bracew am 08 Oktober 2016, 16:54:54
Wäre es zuviel verlangt nachzufragen, wie ich das
a) in "SensorKellerBuero  Temperatur:17.0°C  Feuchtigkeit: 65.0 %" angezeigt bekommen?
Nein, keineswegs. Aber mit ein bisschen Nachdenken, kämest Du auf mindestens auf die erste Lösung selbst  ;)
1. /opt/fhem/fhem.pl 7072 "setreading SensorKellerBuero Temperatur: $Temp Feuchtigkeit: $Hum" in Deinem Skript  und entsprechend Dein FileLog anpassen. Ich mag das nicht, da dadurch sinnlos das Log-File vergrößert wird.

2. mit userReadings oder mit stateFormat erzeugen.

Gruß PeMue
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Bracew am 08 Oktober 2016, 17:37:25
Hallo PeMue,

zu 1.)
eben, ich mag das auch nicht, dass das Log-File sinnlos vergrößert wird, deswegen wollte ich ja ursprünglich alle Messwerte eines Zeitpunktes jeweils in eine Zeile packen. Aber Ihr habt mich ja schon auf zweizeilig überredet.

Nun packst Du aber wieder alles in eine Zeile! und im Log steht doch schon "temperature:" bzw. "humidity:" aber angezeigt wird "T:" und "H:"?

Ich dachte halt, man könnte zu den gelesenen Werten für Temperatur und Feuchtigkeit einen "beliebigen" Text hinzufügen ohne dies in die Logdatei zu schreiben. Also gut, dann bleibt es eben bei der Kurzform "SensorKellerBuero  T:17.0 H:65.0". Nicht schön, aber wenigstens korrekt.

zu 2.)
Wie schon mal erwähnt, stehe ich mit den neuen Begriffen auf Kriegsfuß. Ich habe halt damals zu meiner Zeit in Fortran77 noch mit Variablen, Konstanten, etc. mal gelernt und nicht userReadings oder stateFormat.
Ich möchte Deine Zeit nicht überbeanspruchen, aber kannst Du mir etwas mehr "Butter bei die Fische" geben?

Gruß Bracew

P.S. Im Moment, nachdem die Log-Datei neu erstellt wurde (nur wenig Messwerte), sieht die Ausgabe so aus:
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: PeMue am 08 Oktober 2016, 18:46:44
ok, ich probier's mal (aber vermutlich bin ich auch nicht der beste Experte):

Jedes fhem Modul hat standardmäßig einen state bzw. dann beliebige (je nach Notwendigkeit generierte) Readings. Übersetzt heißt das, das jedes Modul eine Variable Status hat (die immer da ist, aber durchaus unterschiedlichen Inhalt haben kann) und beliebige andere Variablen.

Mit dem Attribut stateFormat kann man das Aussehen der Variable state anpassen. D.h. man könnte beispielsweise an eine Temperatur ein ° C anhängen. So weit ich weiß (da fehlt aber mein Expertentum) kann man keine zusätzlichen Readings einfügen.

Aus den anderen Readings kann man sich mit userReadings eigene Readings generieren (so wie z.B. aus der relativen Feuchtigkeit und der Temperatur den Taupunkt errechnen und diesen als neues Reading einfügen).

Bei Dir ist die Sache etwas einfacher: Du hast in fhem einen Dummy, in dem Du im Prinzip machen kannst, was Du willst.
Sprich: Wie die Readings aussehen bzw. wie Dein state aussehen soll, kannst Du über dein Skript entscheiden. Und: auch wenn die Readings vorhanden sind, heißt das noch lange nicht, dass diese in Deinem FileLog gespeichert werden.
Aus diesem Grund war ja mein Vorschlag, folgende Readings zu generieren:
- temperature
- humiditiy und die Kombination für das FileLog
- T: xx H: yy
Dann bist Du völlig frei, wie Du dann state bzw. Dein FileLog generierst.

Und: ggf. in der commandref (http://fhem.de/commandref) nachschauen (es gibt leider keinen Direktlink, aber nach stateFormat bzw. UserReadings suchen).

Ich hoffe, das macht die Sache etwas transparenter.

Gruß PeMue
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Bracew am 08 Oktober 2016, 19:28:41
Ok, Danke.

Mit Hilfe von Google bin ich auf:
   https://forum.fhem.de/index.php/topic,24473.msg175912.html#msg175912
gestoßen.

Aufgrunddessen habe ich das stateFormat umgebaut zu:
attr   SensorKellerBuero stateFormat Temperatur: temperature °C <br> Feuchtigkeit: humidity %
und sogar eine zweizeilige, formatierte Ausgabe hinbekommen, siehe Bild nachfolgend.

Jetzt fehlt mir nur noch der Taupunkt. Nach http://www.fhemwiki.de/wiki/Dewpoint sollte man ja einfach:
define dew_state dewpoint dewpoint .* T H D einfügen. Aber in meinem FHEM tut sich nichts, wenn dies in fhem.cfg steht.

Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: PeMue am 08 Oktober 2016, 19:33:18
Bin etwas überrascht vom Wiki, ich hatte damals ein userReading gefunden und das bei mir eingebaut.
Hier habe ich mal eines meiner userReadings:
attr HM_Bad_WT_Weather userReadings dewpoint { my $dp;; my $temperature = ReadingsVal($name,"temperature",0);; my $humidity = ReadingsVal($name,"humidity",0);; my $A = 17.2694;; my $B = ($temperature > 0) ? 237.3 : 265.5;; my $es = 610.78 * exp( $A * $temperature / ($temperature + $B) );; my $e = $humidity/ 100 * $es;; if ($e == 0) { Log 1, "Error: dewpoint() e==0: temp=$temperature, hum=$humidity";; return 0;; } my $e1 = $e / 610.78;; my $f = log( $e1 ) / $A;; my $f1 = 1 - $f;; if ($f1 == 0) { Log 1, "Error: dewpoint() (1-f)==0: temp=$temperature, hum=$humidity";; return 0;; } $dp = $B * $f / $f1 ;;}
Ggf. musst Du das noch anpassen (temperature bzw. humidity).

Gruß PeMue
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Dangermouse am 08 Oktober 2016, 19:38:32
Hallo zusammen,

Lese hier gerade etwas flüchtig mit, und hoffe ich kann mich etwas einbringen.
Ich habe mein attr stateFormat . mit folgenden Werten gefüllt: Temperatur: temperature °C Luftfeuchte: humidity %, wobei es bei dir meine ich Temperatur: T °C Luftfeuchte: H % sein müsste.
LG Thorsten
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Bracew am 08 Oktober 2016, 19:51:48
Wow, danke PeMue,

etwas umgebaut zu:
define SensorKellerBuero dummy
attr   SensorKellerBuero room Kellerbuero
attr   SensorKellerBuero group Temperatur-Feuchtigkeit
attr   SensorKellerBuero userReadings dewpoint { my $dp;; my $temperature = ReadingsVal($name,"temperature",0);; my $humidity = ReadingsVal($name,"humidity",0);; my $A = 17.2694;; my $B = ($temperature > 0) ? 237.3 : 265.5;; my $es = 610.78 * exp( $A * $temperature / ($temperature + $B) );; my $e = $humidity/ 100 * $es;; if ($e == 0) { Log 1, "Error: dewpoint() e==0: temp=$temperature, hum=$humidity";; return 0;; } my $e1 = $e / 610.78;; my $f = log( $e1 ) / $A;; my $f1 = 1 - $f;; if ($f1 == 0) { Log 1, "Error: dewpoint() (1-f)==0: temp=$temperature, hum=$humidity";; return 0;; } $dp = $B * $f / $f1 ;;}
attr   SensorKellerBuero stateFormat Temperatur: temperature °C <br> Feuchtigkeit: humidity %<br> Taupunkt: dewpoint°C

wird jetzt auch der Taupunkt als 3. Zeile angezeigt, ich habe ihn mal Orange umrandet im nachfolgenden Bild.

Gibt es jetzt noch einen Trick die meisten Nachkommastellen abzuschneiden oder zu runden (eine Nachkommastelle würde mir reichen)?

Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: PeMue am 08 Oktober 2016, 20:06:47
Ja, in Dein stateFormat ein sprintf einbauen, das habe ich im Forum gefunden:
attr Counter stateFormat {sprintf("%.1f",ReadingsVal("Counter","consumption",0))." W"}
Dein letzter Term müsste dann in etwa so aussehen:
Taupunkt: {sprintf("%.1f",ReadingsVal("SenSorKellerBuero","dewpoint",0))."° C"}

Gruß PeMue
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Bracew am 08 Oktober 2016, 20:48:39
Nein, hat nicht funktioniert.

Aber dieses hier:
attr   SensorKellerBuero userReadings dewpoint_gerundet { int ( 10 * ReadingsVal("SensorKellerBuero","dewpoint",0) + 0.5 ) / 10 } also, aus dem ungerundeten "dewpoint" ein gerundetes "dewpoint1" oder wie ich es getauft habe "dewpoint_gerundet" machen und dies weiterverwenden.

Also, hier nochmals als ganzes:
define SensorKellerBuero dummy
attr   SensorKellerBuero room Kellerbuero
attr   SensorKellerBuero group Temperatur-Feuchtigkeit
attr   SensorKellerBuero userReadings dewpoint { my $dp;; my $temperature = ReadingsVal($name,"temperature",0);; my $humidity = ReadingsVal($name,"humidity",0);; my $A = 17.2694;; my $B = ($temperature > 0) ? 237.3 : 265.5;; my $es = 610.78 * exp( $A * $temperature / ($temperature + $B) );; my $e = $humidity/ 100 * $es;; if ($e == 0) { Log 1, "Error: dewpoint() e==0: temp=$temperature, hum=$humidity";; return 0;; } my $e1 = $e / 610.78;; my $f = log( $e1 ) / $A;; my $f1 = 1 - $f;; if ($f1 == 0) { Log 1, "Error: dewpoint() (1-f)==0: temp=$temperature, hum=$humidity";; return 0;; } $dp = $B * $f / $f1 ;;}
attr   SensorKellerBuero userReadings dewpoint_gerundet { int ( 10 * ReadingsVal("SensorKellerBuero","dewpoint",0) + 0.5 ) / 10 }
attr   SensorKellerBuero stateFormat <span style="color:red">Temperatur: temperature °C </span><br><span style="color:green"> Feuchtigkeit: humidity %</span><br> Taupunkt: dewpoint_gerundet °C

und nun auch noch mit FARBiger Beschriftung (html-Code für rotes "Temperatur: 17.0 °C" bzw. grünes "Feuchtigkeit: 65.5 %"), siehe Bild.

Ich danke sehr herzlich für die Hilfe

Ein schönes Wochenende wünscht
Bracew
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Bracew am 08 Oktober 2016, 21:04:57
Hi nochmals,

leider habe ich nun im Logfile:
Zitat2016-10-08_20:57:04 SensorKellerBuero temperature: 17.0
2016-10-08_20:57:04 SensorKellerBuero dewpoint_gerundet: 10.5
2016-10-08_20:57:05 SensorKellerBuero humidity: 65.7
2016-10-08_20:57:05 SensorKellerBuero dewpoint_gerundet: 10.5
2016-10-08_21:01:00 SensorKellerBuero temperature: 16.9
2016-10-08_21:01:00 SensorKellerBuero dewpoint_gerundet: 10.5
2016-10-08_21:01:01 SensorKellerBuero humidity: 65.7
2016-10-08_21:01:01 SensorKellerBuero dewpoint_gerundet: 10.5

Zu jeder Messung werden nun 2 Zeilen für dewpoint_gerundet geschrieben.

Also, jetzt habe ich zwar eine "schöne" Anzeige, aber viele Bytes im Logfile.

Hmmm, mal überlegen was ich lieber will...
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: LuckyDay am 08 Oktober 2016, 22:24:30
define dew_all dewpoint dewpoint .* temperature humidity dewpoint
attr dew_all absFeuchte 1


Das ist das Modul dewpoint,
das wäre mein Vorschlag gewesen, :)
da bekommt man noch absolute Feuchte gratis zusätzlich zum Reading dewpoint

bist ja noch am probieren/testen
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Bracew am 09 Oktober 2016, 01:21:03
Hallo,

ja, ich bin ja noch am probieren/testen.

Habs nun nochmal geändert und hoffentlich verbessert, nicht verschlimmbessert.
Deshalb hier nochmals der komplette Werdegang für alle Mitleser.

Definition in fhem.cfg:
# #################################################################
# Temperaturmesung
# #################################################################
define telnetPort telnet 7072 global
attr   telnetPort room hidden
#
define dew_all dewpoint dewpoint .* temperature humidity dewpoint
attr   dew_all absFeuchte 1
attr   dew_all room hidden
#
define SensorKellerBuero dummy
attr   SensorKellerBuero room Kellerbuero
attr   SensorKellerBuero group Temperatur-Feuchtigkeit
attr   SensorKellerBuero stateFormat <span style="color:red">Temperatur: temperature °C </span><br><span style="color:green"> Feuchtigkeit: humidity %</span><br> Taupunkt: dewpoint °C<br><span style="color:blue">Abs. Feuchte: absFeuchte g/m3</span>
#
define TempLogfile FileLog ./log/PiSensorKellerBuero-%Y.log SensorKellerBuero
attr   TempLogfile logtype temp4:window,text
attr   TempLogfile room Kellerbuero
attr   TempLogfile group Temperatur-Feuchtigkeit
#
define SVG_SensorKellerBuero SVG TempLogfile:WeBetemp4hum4:CURRENT
attr   SVG_SensorKellerBuero label "Temp. Max.=$data{max1}°C, Min.=$data{min1}°C, Letzte=$data{currval1}°C | Feuchtigk. Max.=$data{max2}%, Min.=$data{min2}%, Letzte=$data{currval2}%"
attr   SVG_SensorKellerBuero room Kellerbuero
attr   SVG_SensorKellerBuero group Temperatur-Feuchtigkeit
#


Bash-Datei, welche die Messdaten vom DHT22/AM2302 Temperatur und Luftfeuchtigkeit Sensor nach FHEM gibt und vom Cron-Job (bei mir) alle 10-Minuten ausgeführt wird:
#!/bin/bash
sudo killall -q loldht > /dev/null 2>&1
cd /opt/lol_dht22
WERTE=$(sudo /opt/lol_dht22/loldht 7 | grep "Humidity")
Hum=$(echo $WERTE|cut -d " " -f3)
Temp=$(echo $WERTE|cut -d " " -f7)
echo $WERTE
echo $HUM
echo $Temp
/opt/fhem/fhem.pl 7072 "setreading SensorAussen temperature $Temp"
/opt/fhem/fhem.pl 7072 "setreading SensorAussen humidity $Hum"


Auszug aus der Log-Datei /opt/fhem/log/PiSensorKellerBuero-2016.log:
2016-10-09_00:57:03 SensorKellerBuero temperature: 17.0
2016-10-09_00:57:04 SensorKellerBuero humidity: 65.8
2016-10-09_00:57:04 SensorKellerBuero absFeuchte: 9.5
2016-10-09_00:57:04 SensorKellerBuero dewpoint: 10.6
2016-10-09_01:07:03 SensorKellerBuero temperature: 16.9
2016-10-09_01:07:04 SensorKellerBuero humidity: 65.8
2016-10-09_01:07:04 SensorKellerBuero absFeuchte: 9.5
2016-10-09_01:07:04 SensorKellerBuero dewpoint: 10.5

dort hinein wird auch der Taupunkt und die absolute Feuchte geschrieben.

Und zum Schluß unten im Anhang (ich habe keine Ahnung wie ich das Bild hier in den Text hineinbekomme) noch wie das ganze nun auf dem Bildschirm bei mir erscheint.

Ich danke allen ganz herzlich.

Gute Nacht wünscht
Bracew

P.S. Ach ja, falls noch jemand mir helfen kann, wie ich unter das erste Diagramm noch ein zweites mit Taupunkt und Abs.Feuchte bekomme, würde ich mich freuen.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: PeMue am 09 Oktober 2016, 07:46:04
Einfach eine zweite SVG Definition mi einer angepassten gplot Datei.

Gruß PeMue
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Bracew am 09 Oktober 2016, 11:12:08
Ok, danke
aber....welchen gplot File kann ich denn dafür nehmen?
Gibt es irgendwo eine Internet-Site auf der ich die mal mit Beispieldaten sehen und mir einen aussuchen kann?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: PeMue am 09 Oktober 2016, 14:30:13
Zitat von: Bracew am 09 Oktober 2016, 11:12:08
Ok, danke
aber....welchen gplot File kann ich denn dafür nehmen?
Entweder Du nimmst Dein WeBetemp4hum4 benennst es um und ersetzt die Daten, die aus dem Log geholt werden, oder Du nimmst den grafischen Editor (https://waschto.eu/logfileplot) (CopyPlotfile und dann bearbeiten). Du brauchst dann in fhem.cfg noch eine zweite SVG Definition ...

Gruß Peter
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Bracew am 09 Oktober 2016, 15:50:35
Ok, got it! Vielen Dank.

Ich habe WeBetemp4hum4.gplot dupliziert und umbenannt und eine zweite SVG Definition gemacht.
Sieht gut aus, oder?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: PeMue am 09 Oktober 2016, 16:25:31
Zitat von: Bracew am 09 Oktober 2016, 15:50:35
Sieht gut aus, oder?
Passt!
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: fervor am 15 Oktober 2016, 12:50:29
Hallo,

ich konnte schon vor einigen Wochen mit Hilfe dieses Threads meinen DHT22 am RPi zum Laufen bringen. Ich habe das allerding nur mit


define telnetPort telnet 7072 global
define allowed_telnetPort allowed


hinbekommen.  Aus Sicherheitsgründen wollte ich den telnetPort aber eigentlich absichern, nur klappt es dann nicht mehr.  Habt Ihr dazu eine Idee?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: hardtacker am 18 Dezember 2016, 13:30:11
Hallo,

ich habe die ganzen Post gelesen und mich Schritt für Schritt durchgearbeitet.

Ich bekomme im PI die Werte vom DHT22 angezeigt.

Jedoch steht in FHEM nur 3 ?.

Könnt ihr mir weiterhelfen?
Wie muss ich die cron anlegen damit diese mein Skript aufruft?

Ist /etc/crontab oder ist es /etc/corntab -e? wo ich den Aufruf einbinden muss?

*/1 *    * * *   root    /home/pi/feuchtigkeit.sh > /dev/null 2>&1 &

Ich denke, das momentan das Script einfach noch nicht aufgerufen wird.

In der FHEM.cfg ist der  telnetPort telnet 7072 definiert und ich habe FHEM auch alle Rechte gegeben
fhem ALL=(ALL) NOPASSWD: ALL

Hoffe ihr könnt mir helfen.

Danke & Gruß,

Hardtacker
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Bracew am 30 Dezember 2016, 19:14:44
Hallo hardtacker,

da mir die cron-Erstellung aus der Shell auswendig auch nicht immer ganz geläufig ist, benutze ich meistens Webmin (https://de.wikipedia.org/wiki/Webmin (https://de.wikipedia.org/wiki/Webmin)) dazu, siehe mein Screen-Shot in der Anlage.

Mit lieben Grüßen
Bracew
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Mik-black am 14 Januar 2017, 20:12:27
Zitat von: moemoe am 21 September 2014, 15:10:57
Ich beschreibe hier mal meine komplette Lösung. Ich verwende die python-Library von Adafruit und speise die Ergebnisse per "telnet" ein.

Gegenüber den anderen Lösungen ergeben sich folgende Vorteile:
- Das Auslesen wird im Fehlerfall (eine konfigurierbare Anzahl mal) wiederholt, denn es kann bei entsprechender Auslastung auch mal fehlschlagen (zB wenn gerade Graphen gezeichnet werden) => mehr Sicherheit beim Auslesen
- Es wird überhaupt erstmal ein Fehlerzustand festgestellt, viele Lösungen interpretieren nur gültige Daten.
- Die Werte werden über das Telnet-Interface an fhem weitergegeben, wobei hier Python-interne Funktionen genutzt werden. Damit muss kein zusätzliches externes telnet-Programm oder gar ein kompletter Perl-Interpreter mit fhem neu gestartet werden => resourcensparend.

Installation python-Library:

apt-get update
apt-get install build-essential python-dev git-core
git clone https://github.com/adafruit/Adafruit_Python_DHT
cd Adafruit_Python_DHT
python setup.py install


Installation Skript:

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


Danach muss mit einem Editor der Wahl die Datei noch angepasst werden, und logischerweise die Pins und Namen angepasst werden.

Meine Definition für die Sensoren und ihr Logging sieht folgendermaßen aus:

define Dach.DHT22 dummy
attr Dach.DHT22 stateFormat T: Temperature H: Humidity
define Wohnzimmer.DHT22 dummy
attr Wohnzimmer.DHT22 stateFormat T: Temperature H: Humidity
set FileLog_Dach_Heizung addRegexpPart  Dach\.DHT22 .*
set FileLog_Wohnzimmer_Heizung addRegexpPart  Wohnzimmer\.DHT22 .*


Damit das ganze regelmäßig (in meinem Fall alle 5min) ausgeführt wird, erstellen wir noch einen Cron-Job:

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


Grüße
Moritz

Guten Abend allerseits,

bin hier im Forum schon einige Zeit am mitlesen und habe dadurch auch schon einige Probleme lösen können, dafür schon mal ein großes Dankeschön.

Bin im Moment dabei einen DHT11 in FHEM einzubinden und stelle mich dabei wohl etwas blöd an. Ich kann die Werte übers Terminal problemlos auslesen aber beim eingliedern in FHEM habe ich große Probleme.
Ich verstehe nicht ganz wo/wie ich dieses Script erstellen muss und wie FHEM dann darauf zugreifen kann.

Auch das mit dem Cron-Job ist mir nicht ganz klar. Das ist ja auch wieder ein Script oder ? Wenn ja, wo muss dieses dann hin und wie genau erstelle ich es ?

Vielen Dank im Voraus
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Dangermouse am 14 Januar 2017, 22:52:25
Hallo Mik-Black,
Ich hoffe ich kann da etwas Licht ins Dunkel bringen:
FHEM greift bei diesem Script nicht darauf zu sondern erhält die ausgelesenen Daten auf dem Telnet-Port. Damit dies funktioniert muss das Script die Daten fehlerfrei aus dem DHT Auslesen uns per Telnet an das FHEM übergeben können. Ist der DHT und fhem auf dem selben Raspi nimmt man die IP 127.0.0.1 (localhost), was aber etwas sinnfrei wäre, denn dann könnte FHEM ja besser direkt auf den DHT zugreifen.
Der Crontab ist dazu da das Script in regelmäßigen Abständen aufzurufen, zu vergleichen mit der Aufgabenplanung unter Windows.
Liebe Grüße
Thorsten
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Mik-black am 14 Januar 2017, 23:46:09
Okay, also ist das nicht die eleganteste Lösung für meinen Fall ? Bei mir laufen FHEM und DHT auf dem selben RPI. Wie würdest du die ganze Sache dann angehen ?

Vielen Dank schon mal für die Infos


Mik-black
Titel: DHT22-Messwerte in fhem auslesen
Beitrag von: Dangermouse am 15 Januar 2017, 00:14:00
DIE eleganteste Lösung gibt es nicht, es hängt immer davon ab was noch auf deinem RasPi läuft. ;)
Ein anderer Lösungsweg wäre zB.

https://waschto.eu/mysensors-luftfeuchtigkeitssensor

oder

http://www.ethersex.de/index.php/Nutzung_in_FHEM_(Deutsch)#DHT22_Temperatur-.2FFeuchtesensoren

Die Netzlast bei diesem Script ist allerdings verschwindend gering, ich habe auf dem RasPi im Wohnzimmer ein Ambilight, Bluetooth-Anwesenheitserkennung und den DHT22 laufen. Ein BMP180 soll noch mal folgen, hier komme ich allerdings zur Zeit nicht dazu das Script oben entsprechend anzupassen. Zu viele Hobbies und Projekte ;)

Thorsten
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Mik-black am 15 Januar 2017, 00:29:41
Der RPI wird noch für die restliche Hausautomatisierung genutzt. Eine CUL ist verbunden sowie ein 433MHZ Modul. Mit der CUL werden ein Wandthermostat und 3 Heizkörperthermostate von MAX! angesteuert. Der 433 Sender steuert einige günstige Steckdosen-Zwischenstecker.

Beim RPI handelt es sich um einen  RPI 2.
Titel: DHT22-Messwerte in fhem auslesen
Beitrag von: Dangermouse am 15 Januar 2017, 00:44:24
Willst du denn bei dem einen DHT bleiben?
Aus persönlicher Erfahrung weiß ich, dass man sehr schnell alle Räume erfassen und auswerten und vielleicht für andere Komponenten wie der Heizung weiter verwenden möchte. Und da ist das Script oben ideal für finde ich, da es Ressourcenschonend direkt im Linux läuft, man könnte beispielsweise auch einen eigenen FHEM installieren, diesen dann per FHEM2FHEM verbinden und einen CloneDummy einrichten, aber der würde wieder Logs produzieren, was die SD wiederum unnötig belasten würde (Stichwort Haltbarkeit).
Was genau ist dir an diesem Script unklar? :)
LG Thorsten

P.S.: hier nochmal ein Link zu einem Beitrag von Justme1968, warum sich das anbinden direkt über GPIO etwas schwierig gestaltet

https://forum.fhem.de/index.php?topic=22546.msg192383#msg192383

Der ist nun schon ein paar Tage alt, ob sich da mittlerweile was getan hat kann ich so spontan auch nicht sagen, hier gilt es das Forum zu durchforsten ;)
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Mik-black am 15 Januar 2017, 01:02:40
Ja, es wird definitiv bei diesem einen DHT bleiben und den verwende ich auch nur aus Kostengründen und weil er eben vorhanden ist.
Eine 2.FHEM kann ich mir im Moment einfach nicht leisten.
Das Problem mit der SD ist nicht vorhanden da ich mit einer HDD/SSD arbeite.

Mir ist bei den ganzen Skripten nur unklar wo diese denn hin müssen und wie ich sie erstelle. Arbeite von Windows aus via SSH Terminal.

Muss ich die Skripte vom PC aus erstellen mit einem Editor und dann an den RPI senden oder direkt auf dem RPI erstellen und wenn ja dann wo ablegen?  :-[

Danke nochmals für deine Bemühungen auch wenn ich mich etwas blöd anstelle.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Dangermouse am 15 Januar 2017, 01:26:23
Kein Problem, wir haben alle mal klein angefangen;)
Also: erstmal muss natürlich der DHT vernünftig angeschlossen und ausgelesen werden. Wenn das funktioniert geht es daran die entsprechenden Scripte zu schreiben. In diesem Fall sagt dir die crontab, wo das Script liegt. Hier ist es /usr/local/sbin/fhem-dht.
Erstellt wird es einfach mit sudo nano /usr/local/sbin/fhem-dht .
Hier wird dann das Script bis EOF rein kopiert. Mit dem letzten Befehl (sudo chmod...) wird das Script dann ausführbar gemacht. Wichtig ist nur es deinen Bedürfnissen anzupassen (DHT-Typ, IP des FHEM u. Port, falls geändert etc.)
Dann wird im FHEM ein dummy angelegt, hier ist auf den Namen zu achten, er muss genauso lauten wie im Script.
Wenn du nun mit cd /usr/local/sbin in das Verzeichnis wechselst und sudo ./fhem-dht eingibst sollte dein dummy im FHEM mit Readings befüllt werden. Wenn das alles funktioniert kannst du im crontab die regelmäßige "Aufgabenplanung" einbauen, in der das Script wie in diesem Fall alle 5 min ausgeführt wird und somit regelmäßig die Daten an FHEM sendet. :)
Natürlich kann das Script auch nahezu überall liegen, da ich den DHT erst mit diesem Tutorial

https://tutorials-raspberrypi.de/raspberry-pi-luftfeuchtigkeit-temperatur-messen-dht11-dht22/

Getestet habe und ich im Home-Verzeichnis war hatte ich das Script auch hier abgelegt . Das wäre dann wenn du mit dem Standard-User Pi arbeitest /home/pi/fhem-dht. Hier muss dann das crontab entsprechend angepasst werden.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Mik-black am 15 Januar 2017, 01:53:02
Okay, das mit dem Skript und dem befüllen des Dummy in FHEM habe ich soweit verstanden. Nur der Teil mit dem Crontab ist noch nicht ganz klar, du schreibst das ich "im Crontab die regelmäßige Aufgabenplanung einbauen" kann.  Wo ist denn der Crontab oder was ist der Crontab ? Wenn du mir das noch erklären könntest wäre ich soweit auf eigenen Beinen weiter zu machen ;-)


Danke für deine Geduld
Titel: DHT22-Messwerte in fhem auslesen
Beitrag von: Dangermouse am 15 Januar 2017, 03:13:00
Kein Problem. :)
Mit sudo crontab -e rufst du die Verwaltung für den User Root auf, hier kannst du "root " in der Zeile weg lassen (das gesamte cron wird ja schon als Root ausgeführt ).
Die Zeilen oben sind für die Bearbeitung von /etc/crontab (nano /etc/crontab) konzipiert.
Das cron , wie es funktioniert und vor allem was man dort alles einstellen kannst findest du unter

https://wiki.ubuntuusers.de/Cron/

Viel Erfolg ;)
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Mik-black am 16 Januar 2017, 00:53:54
Nochmals hallo,

habe jetzt das Skript erstellt und an meine Gegebenheiten angepasst. Habe es danach mit dem chmod ausführbar gemnacht, den DHT11 in FHEM definiert und im Cron die betreffende Zeile ergänzt um die abfrage alle 5 Minuten zu haben. Aber leider wird mir in FHEM nur:

Innen.DHT11 T: Temperature H: Humidity


angezeigt.

Vielleicht eine Idee woran das liegen könnte ?

Titel: DHT22-Messwerte in fhem auslesen
Beitrag von: Dangermouse am 16 Januar 2017, 03:36:52
Im ersten Moment würde ich auf Schreibweise tippen. Poste doch bitte mal dein Script und die Info deines Dummies (list <name >).
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Mik-black am 16 Januar 2017, 22:35:56
Guten Abend,

hier mal das FHEM-DHT script:

Zitat#!/usr/bin/python
import Adafruit_DHT import socket
### CONFIG ###
# fhem's telnet port
host = 'localhost' port = 7072 sensors = [ { 'name': 'Innen.DHT11',
'type': Adafruit_DHT.DHT11, 'pin': 17
},
]
# retry in case of error
retries = 15 delay = 3
### 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)

Und das hier spuckt FHEM bei list Innen.DHT11 aus:

Internals:
   NAME       Innen.DHT11
   NR         18
   STATE      T: Temperature H: Humidity
   TYPE       dummy
Attributes:
   stateFormat T: Temperature H: Humidity

Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Dangermouse am 16 Januar 2017, 23:16:39
Hallo,

Setz das stateFormat mal bitte auf T: temperature H: humidity (kleingeschrieben) dann sollte es funktionieren
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Mik-black am 16 Januar 2017, 23:23:42
Nur das stateFormat oder auch das STATE ?
Titel: DHT22-Messwerte in fhem auslesen
Beitrag von: Dangermouse am 16 Januar 2017, 23:25:47
Das stateFormat gibt an, wie das State auszusehen hat. Das befüllt sich also automatisch
also nur das attr stateFormat ändern
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Mik-black am 16 Januar 2017, 23:58:04
Hat leider nicht zum Erfolg geführt.

Könnte es daran liegen dass ich nicht Wheezy sondern Jessie als Betriebssystem nutze ?
Titel: DHT22-Messwerte in fhem auslesen
Beitrag von: Dangermouse am 17 Januar 2017, 04:02:33
Wird der dummy denn mit Werten befüllt?
Wenn nicht was sagt das Script von adafruit? Werden die Daten korrekt aus dem DHT ausgelesen und auf deiner console ausgegeben?
Und dein Script sieht irgendwie komisch aus. Irgendwie passen die ganzen Einrückungen nicht. Wie hast du es erstellt bzw. ausgelesen und hier eingefügt?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Mik-black am 18 Januar 2017, 19:59:46
Wenn ich den DHT direkt aus dem Terminal anspreche gibt er die richtigen Werte aus. Im Dummy steht nicht wirklich was drin also gehe ich davon aus dass er nicht befüllt wird. Habe das Script einfach kopiert und hier eingefügt. Habe das Script nur übernommen und an meine Gegebenheiten angepasst. Was genau das Adafruit Script macht weiß ich nicht wirklich, da ich das Script ja nur übernommen habe  :-\
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Dangermouse am 18 Januar 2017, 23:32:01
Welche Einstellungen hast du genau angepasst? Bekommst du eine Fehlermeldung wenn du dein Script manuell aufrufst?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Mik-black am 23 Januar 2017, 00:27:17
Servus, habe das gesamte System nochmal neu aufgesetzt, beim manuellen ausführen bekomme ich folgende Fehlermeldung:

  File "./fhem-dht", line 21
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    ^
IndentationError: expected an indented block
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Dangermouse am 23 Januar 2017, 06:36:12
Das ist ein Einrückungsfehler, Python nimmt es sehr übel wenn man sich da nicht genau an die Vorgaben hält. Vor allem wenn man unter Windows mit einem nicht-Unix-kompatiblen Editor arbeitet.
Ich verwende hier gerne Proton, es gibt allerdings bestimmt für solche Fälle geeignetere Editoren, die diese Einrückungen auch mit anzeigen würden.
Wenn das Script nicht exakt wie im Beispiel (abgesehen von deinen Anpassungen) aussieht, wird es nicht klappen.
Hier ist es vielleicht auch hilfreich wenn man nicht benötigte Zeilen nur auskommentiert anstatt sie zu löschen. Schnell ist hier mal ein Space zu viel gelöscht und die Einrückungen passen nicht mehr.
Das ganze wird hier:

http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2011/02/Typische-Fehler-in-Python-Code-vermeiden

und hier

http://www.python-kurs.eu/python3_bloecke.php

schön erklärt.

Schick doch bitte mal ein Screenshot von deinem Code im Editor, wie du ihn bearbeitest...

LG
Thorsten
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Rheingold am 12 Februar 2017, 10:43:54
Hi,

die Anleitung hat mir super geholfen meinen DHT22 Sensor in FHEM zu integrieren. Danke dafür! :)

Frage aber in die Runde: wenn ich auf meinem Raspberry auf dem FHEM läuft ein Passwort auf Telnet vergebe, wie muss ich die Datei unter "/usr/local/sbin/fhem-dht" ändern um das Passwort zu hinterlegen?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: igami am 12 Februar 2017, 10:55:27
Zitat von: Rheingold am 12 Februar 2017, 10:43:54
Frage aber in die Runde: wenn ich auf meinem Raspberry auf dem FHEM läuft ein Passwort auf Telnet vergebe, wie muss ich die Datei unter "/usr/local/sbin/fhem-dht" ändern um das Passwort zu hinterlegen?
Du kannst stann password auch globalpassword verwenden. Die unterschiede sind in der commandref beschrieben.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Rheingold am 12 Februar 2017, 11:06:57
Hi, danke für die flotte Antwort :)

Das heißt einfach wie hier beschrieben: https://fhem.de/commandref_DE.html#telnet folgendes eingeben:

define tPort telnet 7072 global
attr tPort SSL
attr allowed_tPort allowed
attr allowed_tPort validFor tPort
attr allowed_tPort globalpassword ASDF


Sehe ich es richtig, dass ich dann kein Passwort für das Script eintragen muss, da es ja auf dem localhost läuft?
Was ist mit einem bereits definierten Passwort? Bleibt das bestehen oder kann/soll man das entfernen?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: igami am 12 Februar 2017, 11:15:12
Ich glaube  da ist ein Fehler in der commandref und es sollte
define allowed_tPort allowed
heißen.
https://fhem.de/commandref_DE.html#allowed

Zitat von: Rheingold am 12 Februar 2017, 11:06:57
Sehe ich es richtig, dass ich dann kein Passwort für das Script eintragen muss, da es ja auf dem localhost läuft?
So sollte das sein.
Zitat von: Rheingold am 12 Februar 2017, 11:06:57
Was ist mit einem bereits definierten Passwort? Bleibt das bestehen oder kann/soll man das entfernen?
Ich würde nicht zwei Passwörter stehen lassen, da ich nicht weiß was dann passiert und ich ja nur für remote verbindungen ein passwort brauche.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Rheingold am 12 Februar 2017, 12:19:04
Danke für die Hilfe und das gute Zureden :)

Habe es wie aus dem Wiki kopiert und das Script von Seite 1 (https://forum.fhem.de/index.php/topic,25413.msg201619.html#msg201619) funktioniert noch immer. Super :)
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Frosch am 28 Mai 2017, 12:10:22
Hallo zusammen,

ich hatte vor einiger Zeit schon das python-Skript von moemoe angewendet und es hatte bis vor kurzem tadellos funktioniert.
Irgendwann kam dann aber die Meldung im Log:

File "/usr/local/sbin/fhem-dht", line 67, in <module>
    humidity, temperature = Adafruit_DHT.read_retry(sensor['type'], sensor['pin'], retries, delay)
  File "build/bdist.linux-armv7l/egg/Adafruit_DHT/common.py", line 90, in read_retry
  File "build/bdist.linux-armv7l/egg/Adafruit_DHT/common.py", line 76, in read
  File "build/bdist.linux-armv7l/egg/Adafruit_DHT/common.py", line 56, in get_platform
  File "build/bdist.linux-armv7l/egg/Adafruit_DHT/Beaglebone_Black.py", line 24, in <module>
ImportError: cannot import name Beaglebone_Black_Driver

Als Lösung habe ich gefunden die Python Version zu aktualisieren. -> sudo apt-get install python-pip
Nun bekomme ich diese Meldung im FHEM Log:

File "/usr/local/sbin/fhem-dht", line 67, in <module>
    humidity, temperature = Adafruit_DHT.read_retry(sensor['type'], sensor['pin'], retries, delay)
  File "build/bdist.linux-armv7l/egg/Adafruit_DHT/common.py", line 90, in read_retry
  File "build/bdist.linux-armv7l/egg/Adafruit_DHT/common.py", line 77, in read
  File "build/bdist.linux-armv7l/egg/Adafruit_DHT/Beaglebone_Black.py", line 213, in read
RuntimeError: Error accessing GPIO. Make sure program is run as root with sudo!

FHEM ist in der group GPIO. Muss ich FHEM nun auch sudo rechte erteilen?

Gruß Mathias
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: mumpitzstuff am 09 Juli 2017, 12:51:07
Ich habe mir inzwischen 2 DHT22 gekauft und diese erfolgreich eingebunden. Leider sind nur die Temperaturwerte zu gebrauchen, die Luftfeuchtigkeit hingegen sind irgendwelche Mondwerte. Ich habe jetzt jeweils Korrekturwerte drauf rechnen bzw. abziehen müssen. Bei dem einen -8 und bei dem anderen +7 ( was das Ganze natürlich fast unbrauchbar macht, da der Verlauf nicht linear ist). Ich hatte eigentlich angenommen, das die Dinger bereits kalibriert sind... Oder gibt es hier inzwischen Kopien aus China, die sich anders verhalten als die originalen Sensoren?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: jay-jey am 03 Oktober 2017, 13:43:13
Hallo,

ich habe mich auch gerade mit diesem Skript beschäftigt und komme aber gerade nicht weiter: Ich würde gerne die Daten per telnet von einem pi zero auf meinen anderen pi mit fhem senden.
Gleich vorweg, ich habe nicht die kompletten 11 Seiten komplett durchgelesen, daher hoffe ich mal, das ihr mir das nachseht wenn ich hier eine Frage nochmal stelle.

Auf dem pi mit fhem hatte ich ein Passwort auf dem Telnetport. Wie kann ich das Skript von modifizieren um das Passwort einzutragen?

Bzw. da ich sowieso mqtt verwende könnte ich nicht auch die Daten vom Sensor in den mqtt server eintragen lassen?


Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: TimoH am 11 November 2017, 23:51:12
Hallo jay-jey,

ich hatte gerade das gleiche Problem, ich wollte auch die Daten von einem Pi zum passwortgeschützten Server senden.

Die Lösung ist eigentlich trivial, habe aber auch erst eine Weile gerätselt.
Es muss einfach nur als erste Zeile des Datenpakets das Passwort, gefolgt von \n, eingetragen werden:
if humidity is not None and temperature is not None:
            s += "PASSWORT\n"


Und schon läuft es.
Natürlich ist es nicht besonders elegant, das Passwort im Klartext in das Script zu schreiben. Sinnvoller wäre es, das PW aus einer Datei auszulesen, die nur root öffnen kann. Werde ich noch entsprechend ändern, muss mich da aber erstmal einlesen, wie das zu bewerkstelligen ist.

Viele Grüße
Timo
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: klugec am 11 März 2018, 17:54:10
Zitat von: moemoe am 21 September 2014, 15:10:57
Ich beschreibe hier mal meine komplette Lösung. Ich verwende die python-Library von Adafruit und speise die Ergebnisse per "telnet" ein.

Gegenüber den anderen Lösungen ergeben sich folgende Vorteile:
- Das Auslesen wird im Fehlerfall (eine konfigurierbare Anzahl mal) wiederholt, denn es kann bei entsprechender Auslastung auch mal fehlschlagen (zB wenn gerade Graphen gezeichnet werden) => mehr Sicherheit beim Auslesen
- Es wird überhaupt erstmal ein Fehlerzustand festgestellt, viele Lösungen interpretieren nur gültige Daten.
- Die Werte werden über das Telnet-Interface an fhem weitergegeben, wobei hier Python-interne Funktionen genutzt werden. Damit muss kein zusätzliches externes telnet-Programm oder gar ein kompletter Perl-Interpreter mit fhem neu gestartet werden => resourcensparend.

Installation python-Library:

apt-get update
apt-get install build-essential python-dev git-core
git clone https://github.com/adafruit/Adafruit_Python_DHT
cd Adafruit_Python_DHT
python setup.py install


Installation Skript:

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


Danach muss mit einem Editor der Wahl die Datei noch angepasst werden, und logischerweise die Pins und Namen angepasst werden.

Meine Definition für die Sensoren und ihr Logging sieht folgendermaßen aus:

define Dach.DHT22 dummy
attr Dach.DHT22 stateFormat T: Temperature H: Humidity
define Wohnzimmer.DHT22 dummy
attr Wohnzimmer.DHT22 stateFormat T: Temperature H: Humidity
set FileLog_Dach_Heizung addRegexpPart  Dach\.DHT22 .*
set FileLog_Wohnzimmer_Heizung addRegexpPart  Wohnzimmer\.DHT22 .*


Damit das ganze regelmäßig (in meinem Fall alle 5min) ausgeführt wird, erstellen wir noch einen Cron-Job:

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


Grüße
Moritz

Vielen Dank für die super Anleitung. Hat bestens funktioniert.
Eine Frage hätte ich: Wie funktioniert das mit dem Filelog und wie kann ich das dann in einem Diagramm ausgeben?

Vielen Dank schonmal :)
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: hobbyman am 24 März 2018, 21:14:32
Hallo zusammen, bin noch Neuling

Ich habe Probleme den DHT22 in FHEM einzubinden, vielleicht kann mir jemand helfen.

Folgendes habe ich gemacht:
Den DHT22  angeschlossen  an  GPIO 14
/Adafruit_Python_DHT/examples      sudo ./AdafruitDHT.py 22 14
Temp=21.8* Humidity=52.6%    soweit OK.

Installation Skript: in Datei fhemdht22.py eingefügt
/usr/local/sbin/fhem-dht/fhemdht22.py Besitzer root  Gruppe staff Rechte rwxr-xr-x     
'name': 'Wohnzimmer.DHT22'  'pin':  14        eingetragen
Versuche den Skript zu starten:
sudo ./usr/local/sbin/fhem-dht
cd /usr/local/sbin  Verzeichnis  sudo ./fhem-dht          command not found

Wo ist der Fehler ?

In FHEM eingegeben:

define Wohnzimmer.DHT22 dummy
attr Wohnzimmer.DHT22 stateFormat T: Temperature H: Humidity
set FileLog_Wohnzimmer_Heizung addRegexpPart  Wohnzimmer\.DHT22 .*

Fehler: define FileLog_Wohnzimmer_Heizung first     Wie define FileLog  ?


Cron Job   sudo nano /usr/local/sbin/fhem-dht          Zeilen eingetragen

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

lässt sich nicht in Datei speichern,       errors in crontab file cant install

wo können die Fehler sein ?
Muß in FHEM.cfg  noch etwas eingetragen werden ?

Bitte um eure Hilfe
Grüsse 
Wolfgang
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: mumpitzstuff am 24 März 2018, 23:08:06
Dein Skript heisst fhemdht22.py und nicht fhem-dht. Das ist nur das Verzeichnis.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: hobbyman am 28 März 2018, 14:19:59
Hallo zusammen,

Vielleicht kann mir doch noch jemand helfen ?

Den Script habe ich wohl ans Laufen gebracht. Ich habe die Zeilen:

cat << 'EOF' > /usr/local/sbin/fhem-dht   
EOF
chmod +x /usr/local/sbin/fhem-dht 
entfernt, letzten per Konsole ausgeführt.

Wenn ich jetzt als root /usr/local/sbin/fhem-dht
python fhemdht22.py  per Konsole eingebe: wird im dummy der aktuelle
Wert angezeigt und auch ins Logfile geschrieben d.h. der Script
funktioniert. (als sudo fhemdht22.py geht es aber nicht.)

Habe auch in fhem.cfg fhem ALL=(ALL) NOPASSWD: ALL hinzugefügt.

Letztes Problem ist den Cron Job ans Laufen zu bringen.

Habe mit A1 versucht den richtigen
Startbefehl zu finden sudo geht nicht (command not found) python (auch mit –c) geht nicht.
define a1 at +*00:05:00 {  system('sudo /usr/local/sbin/fhem-dht&');; }

define a1 at +*00:05:00 {  system('python /usr/local/sbin/fhem-dht/fhemdht22.py') }

vielleicht weiß jemand die richtige define, wäre toll.

Grüsse

Wolfgang

Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: artoffhem am 26 Oktober 2018, 21:58:49
Hallo Zusammen,

möchte hier eine Lösung teilen wie ich einen DHT11 Sensor ohne Python script eingebunden habe.
Der RPi unterstützt direkt 1-Wire (https://wiki.fhem.de/wiki/Raspberry_Pi_und_1-Wire (https://wiki.fhem.de/wiki/Raspberry_Pi_und_1-Wire)) und DHT Sensoren an einstellbaren GPIO Pins mittels dtoverlay Einstellungen.

Ausgangspunkt für diese Beschreibung ist folgender Blog https://arduinodiy.wordpress.com/2018/05/17/reading-the-dht11-or-dht22-on-the-raspberry-via-an-overlay-and-send-it-to-the-openhab-rest-api/ (https://arduinodiy.wordpress.com/2018/05/17/reading-the-dht11-or-dht22-on-the-raspberry-via-an-overlay-and-send-it-to-the-openhab-rest-api/)

Bei meinem RPi3 habe ich den DHT11 an GPIO5 angeschlossen, da der Standardport (GPIO4) mit dem HM-MOD-RPI-PCB blockiert ist. Kurze Notiz am Rande - DHT Sensoren haben kein 1-Wire Protokoll - war mir Anfangs nicht klar.

Folgende Schritte sind notwendig.

RPi Unterstützung für DHT in /boot/config.txt aktivieren
sudo nano /boot/config.txt
# activtion DHT11/DHT21/DHT22 sensor on GPIOx (default 4)
dtoverlay=dht11,gpiopin=5
# activating device tree debugging (use sudo vcdbg log msg)
dtdebug=on


Neustart RPi
sudo shutdown -r now

Kontrolle ob dht11 aktiviert wurde
sudo vcdbg log msg
in der Ausgabe taucht folgende Meldung auf
xxx: Loaded overlay 'dht11'
xxx: dtparam: gpiopin=5


Kontrolle ob die Werte ausgelesen werden können
cat /sys/devices/platform/dht11@0/iio:device0/in_temp_input
Ausgabe z.B.:
21000
cat /sys/devices/platform/dht11@0/iio:device0/in_humidityrelative_input
Ausgabe z.B:
65000

Anlegen eins CustomReadings in FHEM um die Werte auszulesen
define DHT11 CustomReadings
attr DHT11 readingDefinitions temperature:qx(cat /sys/devices/platform/dht11\@0/iio:device0/in_temp_input 2>%1) / 1000,humidity:qx(cat /sys/devices/platform/dht11\@0/iio:device0/in_humidityrelative_input 2>%1) / 1000

Abfrage Intervall festlegen
attr DHT11 interval 150
event-on-change-reading festlegen damit im Filelog nur bei Änderungen protokolliert wird
attr DHT11 event-on-change-reading .*

FileLog anlegen
define FileLog_DHT11 FileLog ./log/DHT11-%Y.log DHT11

viel Spaß

edit 2018-10-27: Tippfehler in config.txt korrigiert
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: mumpitzstuff am 27 Oktober 2018, 01:01:17
In dem was in config.txt stehen soll sind zwei Fehler. Es müsste dtoverlay und dtdebug sein und nicht dtoverly und dtbebug.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: couchtomato am 05 November 2018, 21:40:50
Zitat von: artoffhem am 26 Oktober 2018, 21:58:49
Hallo Zusammen,

möchte hier eine Lösung teilen wie ich einen DHT11 Sensor ohne Python script eingebunden habe.

Vielen Dank für die coole Anleitung, hat bei mir perfekt funktioniert!  :)
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: mumpitzstuff 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


Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: skycrack am 15 März 2019, 19:08:13
Zitat von: mumpitzstuff am 08 November 2018, 00:13:09
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-/Ausgabefehler
Geht mir ebenso, wäre auch an einer Lösung interessiert.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: mumpitzstuff 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...
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: skycrack am 26 März 2019, 07:36:23
Zitat von: mumpitzstuff am 15 März 2019, 22:26:13

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
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Camix 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
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: mumpitzstuff am 11 Juni 2019, 01:09:20
sudo visudo

Und dort diese Zeile einfügen:

fhem ALL=(ALL) NOPASSWD: /path/to/script/fhem-dht
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Forstling 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
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: betamax am 18 Juni 2020, 12:18:09
Hallo,

ich versuche einen DHT22 auszulesen.
Auf Pi Ebene klappt das auch.

pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./AdafruitDHT.py 22 2
Temp=23.8*  Humidity=61.5%


Ich schaffe es nicht das Installation Skript von moemoe zu installieren.
Der Pi bringt mir folgenden Fehler:

-bash: /usr/local/sbin/fhem-dht: Permission denied
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ chmod +x /usr/local/sbin/fhem-dht
chmod: changing permissions of '/usr/local/sbin/fhem-dht': Operation not permitted


Fehlen mir irgend welche Rechte?
Funktioniert das Script noch unter Debian Stretch?


Zitat von: moemoe am 21 September 2014, 15:10:57

Installation Skript:

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


Danach muss mit einem Editor der Wahl die Datei noch angepasst werden, und logischerweise die Pins und Namen angepasst werden.



Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: mumpitzstuff am 18 Juni 2020, 21:16:04
Der erste Aufruf ist mit sudo erfolgt, der zweite nicht. Das chmod +x musst du auch mit sudo machen, sonst wird das nichts.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: betamax am 19 Juni 2020, 13:24:28
Hallo @mumpitzstuff,

ich habe da ich den Ordner "fhem-dht" nicht gefunden habe den (schon installierten) Script versucht nochmals zu installierten.
Daher kommen wohl die Fehlermeldungen.

Ich habe mir die Antworten von Dangermouse ab Antwort #130 noch mal durchgelesen und jetzt klapp es.

Danke und ein schönes Wochenende!

Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Geisha2021 am 08 November 2020, 20:38:46
Zitat von: artoffhem am 26 Oktober 2018, 21:58:49
Hallo Zusammen,

möchte hier eine Lösung teilen wie ich einen DHT11 Sensor ohne Python script eingebunden habe.


Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Geisha2021 am 08 November 2020, 20:56:21
Ich habe auf einem Raspi  B3+  (Raspbian Buster) FHEM installiert und betreibe mit dem 1-wire Busmaster DS9490R 6 DS18B20 Temperatursensoren was auch sehr gut funktioniert.

Jetzt will ich noch einen DHT22 Sensor nach der Anleitung von arthoffhem installieren jedoch klappt es nicht.
In die config.txt habe ich folgendes eingefügt:

# activation DHT22/x sensor on GPIOx (default 4)
dtoverlay=dht22,gpiopin=5

# activating device tree debugging (use sudo vcdbg log msg)
dtdebug=on


Es kommt folgende Fehlermeldung im Log (pi@raspberrypi:~ $ sudo vcdbg log msg):

002167.771: Failed to load overlay 'dht22'
002168.000: brfs: File read: /mfs/sd/overlays/dht22.dt

Kann mir da jemand weiterhelfen?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Geisha2021 am 09 November 2020, 08:17:30
Habe den Grund schon selbst gefunden. Es gibt kein overlay dht22. Man muss das dht11 nehmen.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Geisha2021 am 10 November 2020, 20:36:12
Prinzipiell funktioniert jetzt die Abfrage der Temperatur und Feuchtigkeit. Gestern konnte ich nach der Anleitung von artoffhem beide Werte mit der Konsole putty auslesen. Da hatte ich den Sensor auf dem Tisch mit 50cm Kabel angeschlossen am GPIO5.

Jetzt habe ich den Sensor mit ca 10m Kabel nach draußen verlegt. Die Abfrage funktioniert jetzt nicht mehr: Es kommt  die Meldung "Eingabe-/Ausgabefehler"

cat /sys/devices/platform/dht11@5/iio:device0/in_temp_input

cat: '/sys/devices/platform/dht11@5/iio:device0/in_temp_input': Eingabe-/Ausgabefehler

In den Dateien "in_temp_input" und "in_humidityrelative_input" stehen jedoch Messwerte die sich auch ändern.

Ich betreibe den Sensor mit 3,3V und 4,7kOhm Pullup Widerstand. Wenn ich ihn mit 5V betreibe (und pullup 3,3V) besteht da ein Risiko dass der GPIO zerschossen wird?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: mumpitzstuff am 11 November 2020, 00:11:30
Ich hab zwar wenig bis keine Ahnung von solchen Dingen, aber ich würde vermuten das du kein vernünftiges geschirmtes Kabel verwendest (twisted wäre vermutlich auch ganz nett)? Das wäre vermutlich die Grundvoraussetzung für solche Kabellängen.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Geisha2021 am 11 November 2020, 07:41:18
Vielen Dank für den Tip.

Ich habe ein cat5 Kabel (Netzwerkkabel) verwendet jedoch den Schirm noch nicht an Masse gelegt. Werde ich heute probieren. Auch den Sensor nochmal mit kurzem Kabel testen.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Geisha2021 am 11 November 2020, 17:45:13
Die Abfrage der Temperatur geht jetzt jedoch kommen immer wieder Null-werte. Wie kann man verhindern dass diese abgespeichert werden?

Zitat2020-11-11_17:36:02 0
2020-11-11_17:36:22 9.4
2020-11-11_17:36:42 0
2020-11-11_17:37:02 9.4
2020-11-11_17:37:22 0
2020-11-11_17:37:42 9.4
2020-11-11_17:38:02 0
2020-11-11_17:38:42 9.4
2020-11-11_17:39:02 0
2020-11-11_17:39:22 9.4
2020-11-11_17:39:42 0
2020-11-11_17:40:02 9.3
2020-11-11_17:40:23 0
2020-11-11_17:40:43 9.4
2020-11-11_17:41:03 0
2020-11-11_17:41:43 9.3
2020-11-11_17:42:03 0
2020-11-11_17:42:23 9.3
2020-11-11_17:42:43 0
#DHT22:temperature:::
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: mumpitzstuff am 12 November 2020, 01:34:44
Das ist ein systematischer Fehler. Du müsstest vielleicht zeigen, wie du die Werte in FHEM rein holst. An diese Stelle solltest du gucken, ob du Fehler bekommst und falls das der Fall ist, die Werte nicht an FHEM durchreichen. Wenn du ein paar Einträge zurück gehst, hatte ich ebenfalls mit solchen Problemen zu kämpfen und habe diesen Weg aufgegeben. Man konnte aber die Fehler erkennen.

https://forum.fhem.de/index.php/topic,25413.msg855374.html#msg855374 (https://forum.fhem.de/index.php/topic,25413.msg855374.html#msg855374)
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Geisha2021 am 12 November 2020, 07:16:57
Jetzt habe ich noch zusätzlich den Effekt dass keine Werte mehr ausgelesen werden.

Wenn ich in der Konsole einen Wert auslesen möchte kommt die Meldung:
Zitatcat: '/sys/devices/platform/dht11@5/iio:device0/in_temp_input': Die Wartezeit für die Verbindung ist abgelaufen

Auch eine reboot vom Raspi ändert daran nichts. Man muss ihm den Strom abschalten und dann geht es wieder.

Denselben Effekt hatte ich vor Monaten als ich DS18B20 Sensoren am GPIO 4 angeschlossen hatte. Habe dann den Busmaster DS9490 installiert und seither funktionieren alle 10 Sensoren zuverlässig.

Ich werde jetzt wie du Python installieren und die Adafruit Library verwenden.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: mumpitzstuff am 12 November 2020, 08:37:04
Die Adafruit Library die ich verwendet habe ist inzwischen veraltet und wurde ersetzt durch etwas anderes. Die alte Library arbeitet auch nicht mehr mit einem Rasperry 4 zusammen. Ich musste da die Library patchen, damit es noch geht. Eventuell musst du dir da was neueres/besseres suchen.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Geisha2021 am 12 November 2020, 09:05:25
Ich habe aber einen Raspberry B3+. Was gibt es da neueres und besseres für diese Sensoren?
Wenn die bisherige Lösung funktioniert dann muss es für mich nichts neueres sein.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Geisha2021 am 19 November 2020, 17:32:46
Ich habe jetzt nach der Anleitung https://learn.adafruit.com/dht-humidity-sensing-on-raspberry-pi-with-gdocs-logging/python-setup (https://learn.adafruit.com/dht-humidity-sensing-on-raspberry-pi-with-gdocs-logging/python-setup) Python3.7 und die Adafruit Library installiert jedoch funktioniert der dort beschriebene Test nicht. In der Datei dht_simpletest.py steht der folgende Code:
import time
import board
import adafruit_dht

# Initial the dht device, with data pin connected to:
dhtDevice = adafruit_dht.DHT22(board.D18)

# you can pass DHT22 use_pulseio=False if you wouldn't like to use pulseio.
# This may be necessary on a Linux single board computer like the Raspberry Pi,
# but it will not work in CircuitPython.
# dhtDevice = adafruit_dht.DHT22(board.D18, use_pulseio=False)

while True:
    try:
        # Print the values to the serial port
        temperature_c = dhtDevice.temperature
        temperature_f = temperature_c * (9 / 5) + 32
        humidity = dhtDevice.humidity
        print(
            "Temp: {:.1f} F / {:.1f} C    Humidity: {}% ".format(
                temperature_f, temperature_c, humidity
            )
        )

    except RuntimeError as error:
        # Errors happen fairly often, DHT's are hard to read, just keep going
        print(error.args[0])
        time.sleep(2.0)
        continue
    except Exception as error:
        dhtDevice.exit()
        raise error

    time.sleep(2.0)


Die entsprechende Anpassung des GPIO 5 habe ich gemacht.

Wenn ich dann in der Konsole "python3 dht_simpletest.py" eingebe kommt immer die Meldung: "python3: can't open file '_simpletest.py': [Errno 2] No such file or directory"

Er findet offensichtlich die Datei nicht. Habe schon alles mögliche probiert aber komme nicht weiter.
Kann mir jemand helfen?

Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: mumpitzstuff am 20 November 2020, 22:27:05
Sehr komisch. Benennt die Datei mal in simpletest.py um und probier es damit.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: KölnSolar am 21 November 2020, 10:10:11
Ich hätt ja auch noch einen DHT22 u. könnt mir den direkt am Rpi vorstellen.
Mich stört aber die Python-Lösung. Hat niemand bisher über eine Perlanbindung nachgedacht ?
Dürfte doch nicht so problematisch sein, wenn man RPI_GPIO als Ausgangspunkt nimmt, oder ?  :-\
Grüße Markus
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Geisha2021 am 23 November 2020, 22:27:24
Zitat von: mumpitzstuff am 20 November 2020, 22:27:05
Sehr komisch. Benennt die Datei mal in simpletest.py um und probier es damit.

Habe das Problem jetzt gelöst. Anscheinend muß man den Pfad zum Speicherort vorgeben. Das Script ist bei mir unter pi/DHT-Sensor gespeichert

pi@raspberrypi:~/DHT-Sensor $ python3 dht_simpletest.py

Als nächstes will ich nun die Werte alle 20s auslesen und in der Maria DB von FHEM speichern.
Python3 und die Adafruit_Python_DHT Library habe ich schon installiert  und auch die Skripte angepasst. Wo muss man die Skripte speichern. Müssen die Skripte mit .py enden?

Wie du siehst fehlen mir die elementaren Kenntniss von Python. Wie startet man die Skripte aus FHEM? Ich bin auf deine (eure) Hilfe angewiesen. Vielen Dank.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: mumpitzstuff am 24 November 2020, 09:57:33
fhem muss zugriff auf die Dateien haben bzw. die Rechte müssen entsprechend gesetzt sein. Du kannst versuchen das Script in der COmmandline von fhem zu starten, um zu überprüfen ob das geht. Dann brauchst du sowas wie ein AT device und kannst dort dein script kommando in Hochkomma schreiben. Dadurch wird es non blocking ausgeführt:

"python script.py"
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Wernieman am 24 November 2020, 10:16:55
Oder einfach in der ersten zeile den Interpreter mit #! reinschreiben,

also z.B.
#!/usr/bin/python3
Dann solltest Du in der Shell das Programm direkt starten können, wenn es ausführbar ist.
chmod +x <DeinProgramm>
Und entsprechend in FHEM wie ein Shellprogramm starten.

ABER .. wenn Du alle 20 Minuten etwas starten willst, warum aus FHEM heraus? Es gibt doch die crontab, also das System!
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Geisha2021 am 24 November 2020, 11:23:03
Vielen Dank für eure Tips jedoch bin ich damit überfordert. Ich kenne mich noch einfach zu wenig damit aus.

Was will ich:
Einen DHT22 Sensor auslesen und die Werte in der FHEM Maria DB speichern. Das Interval soll frei wählbar sein.

Im Putty Terminal funktioniert die Abfrage wie ich bereits oben erwähnt habe alle 4s oder20s.

Um das ganze in FHEM zu implementieren habe ich folgendes gemacht nach diversen Anleitungen im Forum:

- Python3 und die Adafruit Library installiert.

- In FHEM den dummy WP.DHT22 angelegt

- Folgendes Script installiert: Frage: Wie muss der Dateiname (fhem-dht.py) aussehen und wo muss man es speichern (/usr/local/sbin/fhem-dht.py)? In Klammern sind meine Einstellungen.

cat << 'EOF' > /usr/local/sbin/fhem-dht.py
#!/usr/bin/python3

import Adafruit_DHT
import socket

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

sensors = [
    {
        'name': 'WP.DHT22',
        'type': Adafruit_DHT.DHT22,
        'pin':  5
    },
   
]

# 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


- Cronjob-script installiert: Frage: Dateiname (cron-dht)? Speicherort (/etc/cron.d/cron-dht)
Frage: wie ändere ich das Abfrageinterval z. Bsp. auf 4s oder 20s?
# Damit das ganze regelmäßig (in meinem Fall alle 1 min) ausgeführt wird, erstellen wir noch einen Cron-Job:

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

SHELL=/bin/sh

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


Die Rechte (Eigentümer) liegen bei beiden Scripten bei root
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: mumpitzstuff am 24 November 2020, 12:15:49
Crontab funktioniert nur bis runter zu einer Minute. Das ist aber auch mehr als ausreichend. Man braucht keine Temperatur in Echtzeit...
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Geisha2021 am 07 Dezember 2020, 18:04:38
Ich möchte den DHT22 Sensor ohne das python script einbinden und habe deshalb die Lösung von arthoffhem (Beitrag 162) implementiert. Wie schon in meinem Beitrag vom 11.November kommen sehr häufig 0-Werte vor die in der Datenbank  abgespeichert werden und bei der Plotdarstellung stören.
Angewendete Attribute:
DbLogExclude .*
DbLogInclude temperature,humidity
Ich wollte das loggen dieser 0-Werte mit dem Attribut DbLogValueFn verhindern.{
   if ($READING =~ /temperature/ && $VALUE = 0)
   {\$IGNORE=1;;\
   }\
}


aber es funktioniert nicht. Die Nullwerte werden immer noch geloggt.
Was ist hier falsch?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: KölnSolar am 07 Dezember 2020, 20:53:54
ZitatIch möchte den DHT22 Sensor ohne das python script einbinden und habe deshalb die Lösung von arthoffhem (Beitrag 162) implementiert.
damit wäre dann ja meine obige Frage beantwortet.  :D

Hier noch der Link zu
Zitat von: https://forum.fhem.de/index.php/topic,25413.msg850276.html#msg850276Beitrag 162

Grüße Markus
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Geisha2021 am 08 Dezember 2020, 09:45:15
Hallo Markus,

es funktioniert ja prinzipiell jedoch jeder 2. Wert ist 0 und das möchte ich nicht in meiner DB loggen.
Ich kriege es aber einfach nicht weg.

Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: mumpitzstuff am 08 Dezember 2020, 12:20:19
https://buyzero.de/blogs/news/tutorial-dht22-dht11-und-am2302-temperatursensor-feuchtigkeitsensor-am-raspberry-pi-anschliessen-und-ansteuern (https://buyzero.de/blogs/news/tutorial-dht22-dht11-und-am2302-temperatursensor-feuchtigkeitsensor-am-raspberry-pi-anschliessen-und-ansteuern)

Schau mal unten bei DHT11 und DHT22 auf die Sampling Rate. Vermutlich liegt es daran, das die overlay Datei versucht jede Sekunden einen Wert zu samplen, was jedoch beim DHT22 scheitern dürfte und zwar bei jedem 2. Mal. Man kann sich aus den binary overlay Dateien eine Textform erzeugen lassen, sich diese mal ansehen und eventuell die Samling Rate (falls es diese ist) anpassen und daraus wieder eine Binärdatei erzeugen und verwenden.
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Geisha2021 am 08 Dezember 2020, 16:43:33
So ich habe es geschafft. Ich kann jetzt die Temperatur und Feuchtigkeit loggen und vernünftig auch als Plot darstellen.
Im folgenden möchte ich für Neulinge wie mich zusammenfassen was man alles machen muss.

Hier im Forum habe ich den Eindruck, dass zuviel Kenntniss über die Programmiersprachen vorausgesetzt wird.
Als FHEM user will man sich ja nicht unbedingt tief in Perl oder Python einarbeiten.

Also hier meine Lösung ohne Adafruit und ohne Phytonscript basierend auf dem Beitrag 162 von arthoffhem

Wie man den DHT22 anschließt an den Raspberry setze ich als bekannt voraus.

Jetzt alles konfigurieren wie in Beitrag 162 von arthoffhem

Ich nutze jedoch nicht FileLog sonder DBLog (MariaDB)

Dann User reading anlegen:

define DHT22 CustomReadings

Folgende attribute definieren: In den Klammern die Erklärung der Attribute)
attr DHT22 readingDefinitions temperature:qx(cat /sys/devices/platform/dht11\@5/iio:device0/in_temp_input 2>%1) / 1000,humidity:qx(cat /sys/devices/platform/dht11\@5/iio:device0/in_humidityrelative_input 2>%1) / 1000
Ich habe jedoch den DHT22 an GPIO 5 angeschlossen und deshalb muss man das obige attribut anpassen: statt....@0.. in ...@5.. ändern
(Abfrage der DHT22 Parameter die in den Dateien in_temp_input und in_humidityrelative_input abgelegt sind.

attr DHT22 DbLogExclude .* (nichts wird geloggt)
attr DHT22 DbLogInclude temperature,humidity (Temperatur und Feuchtigkeit werden geloggt)

Weil praktisch immer bei beiden Parametern der Wert 0 geloggt wurde der fast bei jeder zweiten Abfrage auftaucht, verhindert das folgende Attribut das loggen der 0-Werte.
Die Besonderheit ist, dass der 0-Wert nicht numerisch sondern als String vorliegt. Deshalb die Abfrage mit eq

attr DHT22 DbLogValueFn {if ($READING =~ /temperature/ && $VALUE eq "0"){$IGNORE=1;}}
{if ($READING =~ /humidity/ && $VALUE eq "0"){$IGNORE=1;}}

attr DHT22 event-on-change-reading temperature,humidity (nur bei Änderung loggen)
attr DHT22 interval 20 (Abfrage interval 20s. wurde zu Testzwecken zunächst auf 4s geändert um Änderungen sofort zu sehen.)


Ich hoffe, dies hilft Leuten die nicht so firm sind in den Programmiersprachen.

Gruß Uli
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Geisha2021 am 08 Dezember 2020, 16:59:19
Zitat von: mumpitzstuff am 08 Dezember 2020, 12:20:19
https://buyzero.de/blogs/news/tutorial-dht22-dht11-und-am2302-temperatursensor-feuchtigkeitsensor-am-raspberry-pi-anschliessen-und-ansteuern (https://buyzero.de/blogs/news/tutorial-dht22-dht11-und-am2302-temperatursensor-feuchtigkeitsensor-am-raspberry-pi-anschliessen-und-ansteuern)

Schau mal unten bei DHT11 und DHT22 auf die Sampling Rate. Vermutlich liegt es daran, das die overlay Datei versucht jede Sekunden einen Wert zu samplen, was jedoch beim DHT22 scheitern dürfte und zwar bei jedem 2. Mal. Man kann sich aus den binary overlay Dateien eine Textform erzeugen lassen, sich diese mal ansehen und eventuell die Samling Rate (falls es diese ist) anpassen und daraus wieder eine Binärdatei erzeugen und verwenden.

Wie macht man aus dem overlay binary eine Textform?.

Mein Problem habe ich gelöst (siehe mein Beitrag). Mir ist es egal wenn da nullwerte kommen solange ich sie nicht loggen muss. Die Messwerte stimmen ja ziemlich.
Interessant wäre es schon wenn man das overlay entsprechend anpassen könnte um das Problem generell zu lösen. Wer hat das eigentlich erstellt?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: mumpitzstuff am 09 Dezember 2020, 01:43:51
Irgendwelche Linux Gurus.

Hier steht was dazu.

https://stackoverflow.com/questions/21670967/how-to-compile-dts-linux-device-tree-source-files-to-dtb (https://stackoverflow.com/questions/21670967/how-to-compile-dts-linux-device-tree-source-files-to-dtb)
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Wernieman am 09 Dezember 2020, 07:52:24
OT:
Also ... CrossCompiling hat jetzt nicht unbedingt mit "Linux-Gurus" zu tuen ....
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Geisha2021 am 09 Dezember 2020, 09:13:34
Das folgende attribut funktioniert jedoch nicht.

attr DHT22 event-on-change-reading temperature,humidity

Es werden auch gleiche Werte geloggt.
Gilt dieses attribut nicht für CustomReadings?

Bei den DS18B20 Sensoren funktioniert es.

Wie kann man erkennen welche attribute funktionieren?
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: Viktor74 am 27 Mai 2021, 19:44:34
Hallo zusammen,

ich habe folgendes Zitat ausprobiert und es funktioniert (ich musste zwar im Rasp etwas anpassen -anstatt DHT11@0 wurde es DHT11@11 ).

Leider habe ich beim Text log immer wieder Aussetzer mit dem Wert 0 für Temperatur und Luftfeuchte:

2021-05-27_16:39:20 DHT22 temperature: 0
2021-05-27_16:39:20 DHT22 humidity: 0
2021-05-27_16:41:49 DHT22 temperature: 15.3
2021-05-27_16:41:49 DHT22 humidity: 48.1
2021-05-27_16:46:49 DHT22 temperature: 15.2
2021-05-27_16:51:49 DHT22 humidity: 47.7
2021-05-27_16:54:19 DHT22 temperature: 15.1
2021-05-27_16:54:19 DHT22 humidity: 48.5
2021-05-27_16:56:49 DHT22 humidity: 48.1
2021-05-27_16:59:19 DHT22 temperature: 15
2021-05-27_16:59:19 DHT22 humidity: 48.7
2021-05-27_17:01:51 DHT22 temperature: 0
2021-05-27_17:01:51 DHT22 humidity: 0

Hat das Jemand schon in den Griff bekommen?

Zitat von: artoffhem am 26 Oktober 2018, 21:58:49
Hallo Zusammen,

möchte hier eine Lösung teilen wie ich einen DHT11 Sensor ohne Python script eingebunden habe.
Der RPi unterstützt direkt 1-Wire (https://wiki.fhem.de/wiki/Raspberry_Pi_und_1-Wire (https://wiki.fhem.de/wiki/Raspberry_Pi_und_1-Wire)) und DHT Sensoren an einstellbaren GPIO Pins mittels dtoverlay Einstellungen.

Ausgangspunkt für diese Beschreibung ist folgender Blog https://arduinodiy.wordpress.com/2018/05/17/reading-the-dht11-or-dht22-on-the-raspberry-via-an-overlay-and-send-it-to-the-openhab-rest-api/ (https://arduinodiy.wordpress.com/2018/05/17/reading-the-dht11-or-dht22-on-the-raspberry-via-an-overlay-and-send-it-to-the-openhab-rest-api/)

Bei meinem RPi3 habe ich den DHT11 an GPIO5 angeschlossen, da der Standardport (GPIO4) mit dem HM-MOD-RPI-PCB blockiert ist. Kurze Notiz am Rande - DHT Sensoren haben kein 1-Wire Protokoll - war mir Anfangs nicht klar.

Folgende Schritte sind notwendig.

RPi Unterstützung für DHT in /boot/config.txt aktivieren
sudo nano /boot/config.txt
# activtion DHT11/DHT21/DHT22 sensor on GPIOx (default 4)
dtoverlay=dht11,gpiopin=5
# activating device tree debugging (use sudo vcdbg log msg)
dtdebug=on


Neustart RPi
sudo shutdown -r now

Kontrolle ob dht11 aktiviert wurde
sudo vcdbg log msg
in der Ausgabe taucht folgende Meldung auf
xxx: Loaded overlay 'dht11'
xxx: dtparam: gpiopin=5


Kontrolle ob die Werte ausgelesen werden können
cat /sys/devices/platform/dht11@0/iio:device0/in_temp_input
Ausgabe z.B.:
21000
cat /sys/devices/platform/dht11@0/iio:device0/in_humidityrelative_input
Ausgabe z.B:
65000

Anlegen eins CustomReadings in FHEM um die Werte auszulesen
define DHT11 CustomReadings
attr DHT11 readingDefinitions temperature:qx(cat /sys/devices/platform/dht11\@0/iio:device0/in_temp_input 2>%1) / 1000,humidity:qx(cat /sys/devices/platform/dht11\@0/iio:device0/in_humidityrelative_input 2>%1) / 1000

Abfrage Intervall festlegen
attr DHT11 interval 150
event-on-change-reading festlegen damit im Filelog nur bei Änderungen protokolliert wird
attr DHT11 event-on-change-reading .*

FileLog anlegen
define FileLog_DHT11 FileLog ./log/DHT11-%Y.log DHT11

viel Spaß

edit 2018-10-27: Tippfehler in config.txt korrigiert
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: KölnSolar am 02 Juli 2021, 14:23:52
Ich habe nun das 58_GPIO4-Modul (https://forum.fhem.de/index.php/topic,121893.0.html) um die Funktionalität für DHT11/DHT22 erweitert. Somit sind weder Python noch CustomReading mit Systembefehl notwendig. Nur noch
- Sensor anschließen
- dtoverlay einrichten
- define des FHEM-devices

Grüße Markus
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: riker1 am 04 Juli 2021, 08:59:44
Hallo

habe es nun geschafft : ist ein Pi4

in der Config:

# activtion DHT11/DHT21/DHT22 sensor on GPIOx (default 4)
dtoverlay=dht11,gpiopin=4
# activating device tree debugging (use sudo vcdbg log msg)
dtdebug=on


Allerdings ist das Verzeichnis anders:


cat /sys/devices/platform/dht11@[b]4[/b]/iio:device0/in_temp_input
24200


allerdings bekomme ich öfters ein Fehler:
cat in_humidityrelative_input
cat: in_humidityrelative_input: Input/output error


wiederholt man es mehrmals kommt manchmal ein Wert?

Muss man da noch was einstellen?

Danke VG T


Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: KölnSolar am 04 Juli 2021, 09:38:06
Nutze einfach mein 58_GPIO4 und es funktioniert problemlos(Lesefehler bleiben, sind aber uninteressant, solange nicht eine wie auch immer geartete zeitkritische Steuerung aufgesetzt ist. Dann ist der DHTxx per GPIO das falsche Konstrukt.)
Grüße Markus
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: riker1 am 04 Juli 2021, 11:58:22
Zitat von: KölnSolar am 04 Juli 2021, 09:38:06
Nutze einfach mein 58_GPIO4 und es funktioniert problemlos(Lesefehler bleiben, sind aber uninteressant, solange nicht eine wie auch immer geartete zeitkritische Steuerung aufgesetzt ist. Dann ist der DHTxx per GPIO das falsche Konstrukt.)
Grüße Markus

top danke läuft.

Bin aber etwas verwirrt mit dem Kommentar zu wiring p1 ....gin wäre egal?

dtoverlay=w1-gpio,gpiopin=4,pullup=off
Der gpiopin kann beliebig gewählt werden, da das FHEM-Modul diesbezüglich unabhängig funktioniert.


habe das gar nicht aktiviert.....

Danke
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: KölnSolar am 05 Juli 2021, 08:09:27
Zitathabe das gar nicht aktiviert.....
Musst Du ja auch nicht.  :D

Das 58_GPIO4 ist im Ursprung für 1wire entstanden. Default-GPIO beim dtoverlay ist 4(genau wie beim dht11-overlay). Nutzt man beides, muss mal also für eins der beiden einen anderen GPIO wählen.

ZitatDer gpiopin kann beliebig gewählt werden, da das FHEM-Modul diesbezüglich unabhängig funktioniert.
Physikalisch kann für 1wire und auch DHT11 der GPIO frei gewählt werden und muss dann, sofern abweichend von 4, als Parameter in der config.txt definiert werden.
Meine Aussage bezog sich auf das FHEM-Modul und den Zugriffspfad auf die Sensordaten. Bei 1wire ist der Pfad "pinneutral". Bei dht11 hat der dtoverlay-Autor den gpiopin in den Pfad eingebaut, weshalb wir auch in FHEM den Pin bekannt machen müssen. Das habe ich dann über das define dht-x gelöst. Ist also eigentlich gar nicht wichtig für den Anwender, der tut, was ihm gesagt wird. Umgekehrt möchten manche ja die Hintergründe verstehen oder fragen sich: Warum muss bei dht11 der GPIO-Pin definiert werden, während es für 1wire nirgend eine Pin-Definition gibt.

Grüße Markus
Titel: Antw:DHT22-Messwerte in fhem auslesen
Beitrag von: riker1 am 05 Juli 2021, 08:21:29
super danke