FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Matti am 21 Februar 2016, 15:39:32

Titel: [Gelöst] Temperaturwert von GPIO RaspberryPi
Beitrag von: Matti am 21 Februar 2016, 15:39:32
Hallo zusammen,
ich habe irgendwie einen Knoten im Hirn. Ich habe auf einem RaspberryPi fhem installiert und lese nach der Anleitung (http://www.knight-of-pi.org/measure-temperature-and-humidity-with-the-sensor-dht22-am2302/) auf einem zweiten Pi die Temperatur mit dem Adafruit python Script aus.

Wie bekomme ich jetzt die Temperatur auf dem Pi wo fhem installiert ist?

Ich scheitere berreits an der Richtung der Information:
- Push von Pi2 ins fhem oder
- Wert von Pi1 (fhem) holen und reading befüllen

Herzlichen Dank für die Unterstützung.
Matti
Titel: Antw:Temperaturwert von GPIO RaspberryPi
Beitrag von: ernst1024 am 21 Februar 2016, 15:48:23
Gegenfrage: Warum denn 2 PI's, bzw warum liest du die Fühlerwerte nicht direkt in Fhem ein? Ein räumliches Problem?
Titel: Antw:Temperaturwert von GPIO RaspberryPi
Beitrag von: Matti am 21 Februar 2016, 16:07:02
Zitat von: ernst1024 am 21 Februar 2016, 15:48:23
Gegenfrage: Warum denn 2 PI's, bzw warum liest du die Fühlerwerte nicht direkt in Fhem ein? Ein räumliches Problem?

Ich nutze den Pi2 als babyphone und daher auch der Temperatur Sensor, das zweite ist noch die Räumlichkeit
Pi1 mit fhem: Wohnzimmer, EG
Pi2 als babyphone: Kinderzimmer, 1.Stock

Ich bin jetzt schon ein bischen weiter gekommen und lese die Werte nicht über python aus sondern mit einem Script über WiringPi.
Jetzt schaue ich mal welche Möglichkeiten es gibt...

Matti
Titel: Antw:Temperaturwert von GPIO RaspberryPi
Beitrag von: ernst1024 am 21 Februar 2016, 16:17:57
Gut, auslesen der Werte und Datenübertragung sind ja zwei Paar Schuhe. Wie soll, bzw erfolgt denn die Übertragung? Über WLAN?  433Mhz Sender/Empfänger? Kabel?

Meine Lösung basiert auf dem ESP-8266 der für das auslesen und anschließendes Übertragen an fhem zuständig ist. Wie ich finde eine super sexy Lösung. Aber viele Wege führen nach Rom, daher meine Fragen.
Titel: Antw:Temperaturwert von GPIO RaspberryPi
Beitrag von: Matti am 21 Februar 2016, 16:24:58
Zitat von: ernst1024 am 21 Februar 2016, 16:17:57
Gut, auslesen der Werte und Datenübertragung sind ja zwei Paar Schuhe. Wie soll, bzw erfolgt denn die Übertragung? Über WLAN?  433Mhz Sender/Empfänger? Kabel?

Meine Lösung basiert auf dem ESP-8266 der für das auslesen und anschließendes Übertragen an fhem zuständig ist. Wie ich finde eine super sexy Lösung. Aber viele Wege führen nach Rom, daher meine Fragen.

Das ist ja mein Problem, das ich nicht weis welche Wege es nach Rom gibt.

Nun habe ich eine sehr gute Lösung von moemoe (Post #8) (http://forum.fhem.de/index.php?topic=25413.0) gefunden und werde die heute abend mal testen.
Ich werde Euch berichten. Es ist auch nicht einfach ;)

Matti
Titel: Antw:Temperaturwert von GPIO RaspberryPi
Beitrag von: Matti am 21 Februar 2016, 20:49:59
An der Stelle danke an moemo, und entschuldigung, dass ich nicht gleich den anderen Thread (http://forum.fhem.de/index.php/topic,25413.0.html) gefunden habe.
Dafür gibt es jetzt die komplette Anleitung ;)

Mit den richtigen Worten habe ich jetzt alles im Forum (und diversen Blogs) gefunden und erfolgreich umsetzen können.

Auf dem Pi1 (Fhem):
erstmal das Device anlegen mit:
define OG.Ki1.Se.Temperatur dummy
attr OG.Ki1.Se.Temperatur stateFormat H Humidity T Temperature


Auf dem Pi2 (Babyphone):

Hardware:
Den Sensor AM2302 habe ich am GPIO Pin 22 angeschlossen

Software:
Installation python-Library
sudo apt-get update
sudo 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


Das Skript anlegen:
sudo nano /usr/local/sbin/fhem-dht.py

''#!/usr/bin/python''

import Adafruit_DHT
import socket

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

sensors = [
    {
        'name': 'OG.Ki1.Se.Temperatur',
        'type': Adafruit_DHT.DHT22,
        'pin':  22
    },
]

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


Die Werte
host und unter sensort name und pin anpassen!

Das Skript jetzt noch ausführbar machen:
sudo chmod -x fhem-dht.py

Ich lasse noch das Skript alle 5 Minuten ausführen
sudo crontab -e
*/5 * * * * /usr/local/sbin/fhem-dht.py


Damit läuft es bei mir einwandfrei

Matti