DHT22-Messwerte in fhem auslesen

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

Vorheriges Thema - Nächstes Thema

MichlB

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
1x PI 2B+ FHEM - Heizung
1x Pi 3b+ - FHEM - Haussteuerung
1x Pi 3 - MagicMirror
2x Pi B - Musicbox

MichlB

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



1x PI 2B+ FHEM - Heizung
1x Pi 3b+ - FHEM - Haussteuerung
1x Pi 3 - MagicMirror
2x Pi B - Musicbox

kpwg

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.

MichlB

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.
1x PI 2B+ FHEM - Heizung
1x Pi 3b+ - FHEM - Haussteuerung
1x Pi 3 - MagicMirror
2x Pi B - Musicbox

kpwg

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


zYloriC

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

suppenesser

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

Gruß
Raspberry PI B+ | HM-LAN-CFG | HM-LC-Sw1PBU-FM | HM-TC-WM-W-EU | DECT 200 | DHT22 | 1 Wire Temp.Sensoren

Renrudal

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?

suppenesser

Schau mal im Beitrag 4, hier im thread.
Raspberry PI B+ | HM-LAN-CFG | HM-LC-Sw1PBU-FM | HM-TC-WM-W-EU | DECT 200 | DHT22 | 1 Wire Temp.Sensoren

Andy89

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
FHEM 6.0 auf rPi4 docker (mit Alexa & Siri); dbLog, FTUI, Sonos, XiaomiMapCreator auf rPi4 docker;
raspimatic auf rPi3+ > diverse Aktoren und Sensoren;
LGW > (PCA301),EC3000,LaCrosse; MQTT2 > WLAN-Steckdosen,Xiaomi Map;
Harmony Hub;Sonos;Onkyo AVR;RGB WLAN Controller;Netatmo;Withings;Unifi;AMAD

zYloriC

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

phil1283

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

zYloriC

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

zYloriC

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

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...

newby

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