DHT22-Messwerte in fhem auslesen

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

Vorheriges Thema - Nächstes Thema

Mik-black

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

Dangermouse

#136
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 ;)
FHEM auf Synology-NAS via Docker
piVCCU
HM-LAN & SCC 868 (MAX!) als Funkschnittstelle

Mik-black

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 ?


Dangermouse

#138
Im ersten Moment würde ich auf Schreibweise tippen. Poste doch bitte mal dein Script und die Info deines Dummies (list <name >).
FHEM auf Synology-NAS via Docker
piVCCU
HM-LAN & SCC 868 (MAX!) als Funkschnittstelle

Mik-black

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


Dangermouse

Hallo,

Setz das stateFormat mal bitte auf T: temperature H: humidity (kleingeschrieben) dann sollte es funktionieren
FHEM auf Synology-NAS via Docker
piVCCU
HM-LAN & SCC 868 (MAX!) als Funkschnittstelle

Mik-black

Nur das stateFormat oder auch das STATE ?

Dangermouse

#142
Das stateFormat gibt an, wie das State auszusehen hat. Das befüllt sich also automatisch
also nur das attr stateFormat ändern
FHEM auf Synology-NAS via Docker
piVCCU
HM-LAN & SCC 868 (MAX!) als Funkschnittstelle

Mik-black

Hat leider nicht zum Erfolg geführt.

Könnte es daran liegen dass ich nicht Wheezy sondern Jessie als Betriebssystem nutze ?

Dangermouse

#144
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?
FHEM auf Synology-NAS via Docker
piVCCU
HM-LAN & SCC 868 (MAX!) als Funkschnittstelle

Mik-black

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

Dangermouse

Welche Einstellungen hast du genau angepasst? Bekommst du eine Fehlermeldung wenn du dein Script manuell aufrufst?
FHEM auf Synology-NAS via Docker
piVCCU
HM-LAN & SCC 868 (MAX!) als Funkschnittstelle

Mik-black

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

Dangermouse

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
FHEM auf Synology-NAS via Docker
piVCCU
HM-LAN & SCC 868 (MAX!) als Funkschnittstelle

Rheingold

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?
Fhem auf Raspi 3; Jeelink mit 6x TX29DTH; CUL433 mit 9x RCS 1000 N und Somfy-Steuerung; CUL868; MAX-Cube + Thermostate; Philips Hue & Ikea Tradfri; Google Home Assistant; FTUI für Tablet und SmartPhone via Reverse-Proxy