DHT22-Messwerte in fhem auslesen

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

Vorheriges Thema - Nächstes Thema

Bracew

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?
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

PeMue

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 (CopyPlotfile und dann bearbeiten). Du brauchst dann in fhem.cfg noch eine zweite SVG Definition ...

Gruß Peter
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

Bracew

Ok, got it! Vielen Dank.

Ich habe WeBetemp4hum4.gplot dupliziert und umbenannt und eine zweite SVG Definition gemacht.
Sieht gut aus, oder?
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

PeMue

RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

fervor

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?

hardtacker

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

Bracew

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) dazu, siehe mein Screen-Shot in der Anlage.

Mit lieben Grüßen
Bracew
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

Mik-black

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

Dangermouse

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

Mik-black

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

Dangermouse

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

Mik-black

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.

Dangermouse

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

Mik-black

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.

Dangermouse

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