Anfänger braucht Hilfe zum Thema Raumtemperatur

Allgemeine Fragen rund um die "Smart Home" Hardware/Komponenten

Moderatoren: seppy, udo1toni

Antworten
mic905
Beiträge: 47
Registriert: 29. Aug 2020 19:07

Anfänger braucht Hilfe zum Thema Raumtemperatur

Beitrag von mic905 »

Hallo,
ich bin neu hier und beschäftige mich auch erst seit einer guten Woche mit OpenHab bzw. generell mit einem Raspberry.

Ich möchte gerne alle Zimmer im Haus mit Temperatur und Luftfeuchtigkeitsmessung ausstatten.

Im Moment habe ich folgendes Problem.

Ich kann in der Console mit dem Befehl
sudo /usr/bin/python3 /etc/openhab2/scripts/weatherstation.py temperature
die Temperatur anzeigen.

Allerdings habe ich jetzt das Problem das ich leider in OpenHab keine Werte angezeigt bekomme. Wie muss das Exec Thing eingerichtet werden um die py Datei auszulesen ?

Ich habe einen DHT22 im Einsatz.

Hat hierzu jemand Erfahrungen und könnte mich ein bisschen unterstützen?

Vielleicht gehe ich das Thema ja auch falsch an.
Vielen Dank
Michael

EmptySoft
Beiträge: 188
Registriert: 7. Jan 2020 14:45
Answers: 2
Kontaktdaten:

Re: Anfänger braucht Hilfe zum Thema Raumtemperatur

Beitrag von EmptySoft »

Ich mache das ein wenig anders und sende die Daten von Python per MQTT an Openhab, hat den Vorteil, dass der Raspi auch wo anders sein kann. Für Python gibt es https://pypi.org/project/paho-mqtt/ als Library zum Daten senden per MQTT.

Alternative kannst Du ESP8266er nehmen, an denen kannst Du die Sensoren direkt anschließen und dann per MQTT an OpenHAB senden. Funktioniert sogar mit Batteriebetrieb, wenn man den ESP in den Deep Sleep schickt. Einfach danach googeln, es gibt HowTos ohne Ende
BYe
Harald

mic905
Beiträge: 47
Registriert: 29. Aug 2020 19:07

Re: Anfänger braucht Hilfe zum Thema Raumtemperatur

Beitrag von mic905 »

Vielen Dank für die Idee. Ich bin ja für jede Idee dankbar.
Ich habe jetzt paho-mqtt wie beschrieben installiert.
Es gibt jetzt also eine Sensor.py und eine mqtt_subscriber.py.

Der Inhalt von Sensor.py lautet:

#!/usr/bin/env python
import time
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected with result code " + str(rc))
client = mqtt.Client()
client.on_connect = on_connect
client.connect("localhost", 1883, 60)
client.loop_start()
while True:
time.sleep(2)
client.publish("test/temperature", "test")


Der Inhalt der mqtt.subscriber.py lautet:

import paho.mqtt.client as mqtt
MQTT_SERVER = "localhost"
MQTT_PATH = "test_channel"
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
# Subscribing in on_connect() means that if we lose the connection and
# reconnect then subscriptions will be renewed.
client.subscribe(MQTT_PATH)
# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
# more callbacks, etc
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(MQTT_SERVER, 1883, 60)
# Blocking call that processes network traffic, dispatches callbacks and
# handles reconnecting.
# Other loop*() functions are available that give a threaded interface and a
# manual interface.
client.loop_forever()

Was müsste dort jetzt wie angepasst werden ? Wie gesagt ich bin ja noch am lernen und hätte gerne mal ein Erfolgserlebnis.

Wie muß das ganze dann in OpenHab angelegt werden ?

Viele Dank
Michael

Benutzeravatar
udo1toni
Beiträge: 13854
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Anfänger braucht Hilfe zum Thema Raumtemperatur

Beitrag von udo1toni »

Wichtiger wäre der Inhalt von weatherstation.py :)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

mic905
Beiträge: 47
Registriert: 29. Aug 2020 19:07

Re: Anfänger braucht Hilfe zum Thema Raumtemperatur

Beitrag von mic905 »

Alles klar.
Hier der Inhalt von weaterstation.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# import Adafruit_BMP.BMP085 as BMP085
import Adafruit_DHT
import sys, time

# constants
DHT_PIN = 2 # GPIO nr
DHT_SENSOR = Adafruit_DHT.DHT22

if __name__ == '__main__':
if len(sys.argv) > 1:
call = sys.argv[1].lower()

if call == 'temperature':
temperature = None
while temperature == None:
_, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
if temperature == None:
time.sleep(1.5)
print(temperature)

elif call == 'humidity':
humidity = None
while humidity == None:
humidity, _ = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
if humidity == None:
time.sleep(1.5)
print(humidity)

elif call == 'pressure':
sensor = BMP085.BMP085()
print(sensor.read_pressure() / 100.0)

Benutzeravatar
udo1toni
Beiträge: 13854
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Anfänger braucht Hilfe zum Thema Raumtemperatur

Beitrag von udo1toni »

Also, ich kann mir nicht helfen, der Code sieht nicht so aus, als würde er funktionieren. Kann es sein, dass (mindestens beim Einfügen ohne Code-Tags im Forum) die Indentations (Einrückungen) verloren gegangen sind?
In Python sind die Indentations essentiell, und zwar die EXAKTEN Inentations. Kannst Du bitte noch mal alle drei Scripte einfügen, aber mit Code-Tags (im vollständigen Editor den Knopf mit dem </> drauf drücken und dann den Code aus der Zwischenablage einfügen)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

mic905
Beiträge: 47
Registriert: 29. Aug 2020 19:07

Re: Anfänger braucht Hilfe zum Thema Raumtemperatur

Beitrag von mic905 »

Ok. Hier die drei Skripte.

weatherstation.py

Code: Alles auswählen

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# import Adafruit_BMP.BMP085 as BMP085
import Adafruit_DHT
import sys, time

# constants
DHT_PIN = 2                    # GPIO nr
DHT_SENSOR = Adafruit_DHT.DHT22

if __name__ == '__main__':
    if len(sys.argv) > 1:
        call = sys.argv[1].lower()

        if call == 'temperature':
            temperature = None
            while temperature == None:
               _, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
               if temperature == None:
                   time.sleep(1.5)
            print(temperature)

        elif call == 'humidity':
            humidity = None
            while humidity == None:
               humidity, _ = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
               if humidity == None:
                   time.sleep(1.5)
            print(humidity)

        elif call == 'pressure':
            sensor = BMP085.BMP085()
            print(sensor.read_pressure() / 100.0)

sensor.py

Code: Alles auswählen

#!/usr/bin/env python
import time

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))

client = mqtt.Client()
client.on_connect = on_connect

client.connect("localhost", 1883, 60)

client.loop_start()

while True:
    time.sleep(2)
    client.publish("test/temperature", "test")

mqtt_subscriber.py

Code: Alles auswählen

import paho.mqtt.client as mqtt

MQTT_SERVER = "localhost"
MQTT_PATH = "test_channel"

# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))

    # Subscribing in on_connect() means that if we lose the connection and
    # reconnect then subscriptions will be renewed.
    client.subscribe(MQTT_PATH)

# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))
    # more callbacks, etc

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect(MQTT_SERVER, 1883, 60)

# Blocking call that processes network traffic, dispatches callbacks and
# handles reconnecting.
# Other loop*() functions are available that give a threaded interface and a
# manual interface.
client.loop_forever()


Benutzeravatar
udo1toni
Beiträge: 13854
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Anfänger braucht Hilfe zum Thema Raumtemperatur

Beitrag von udo1toni »

Ich bin natürlich auch kein Experte, Python betreffend, aber vielleicht erfüllt das hier den Zweck:

Code: Alles auswählen

#!/usr/bin/env python
import time
import Adafruit_DHT
# import Adafruit_BMP.BMP085 as BMP085
import sys
import paho.mqtt.client as mqtt

# constants
DHT_PIN = 2                    # GPIO nr
DHT_SENSOR = Adafruit_DHT.DHT22
TIME_SPAN = 30                 # Abstand zwischen zwei Messungen
MQTT_SERVER = 'localhost'      # IP, auf dem der Broker erreichbar ist
MQTT_PORT = 1883               # Port, auf dem der Broker erreichbar ist
MQTT_RECONNECT = 60            # Reconnect-Time in Sekunden
MQTT_PATH = 'Sensor/'          # Das Root Topic, unter dem die Topics publiziert werden

def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))

client = mqtt.Client()
client.on_connect = on_connect

client.connect(MQTT_SERVER, MQTT_PORT, MQTT_RECONNECT)

client.loop_start()

while True:
    temperature = None
    humidity = None

    while temperature == None or humidity == None:
        humidity, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
        if temperature == None or humidity == None:
            time.sleep(1.5)
    client.publish(MQTT_PATH+"temperature", str(temperature))
    client.publish(MQTT_PATH+"humidity", str(humidity))

#    sensor = BMP085.BMP085()
#    pressure = sensor.read_pressure() / 100.0
#    client.publish(MQTT_PATH+"pressure", str(pressure))

    time.sleep(TIME_SPAN)
Du hast im Script den Pressure-Teil nicht explizit auskommentiert, aber da Du oben den Import für sensor auskommentiert hast, dürfte das Script mit dem Parameter pressure aufgerufen einen Fehler produzieren. Ich habe den notwendigen Code dennoch mit eingebaut, nur für den Fall.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
udo1toni
Beiträge: 13854
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Anfänger braucht Hilfe zum Thema Raumtemperatur

Beitrag von udo1toni »

Ach so...

Das Script muss nur bei Start vom Raspberry gestartet werden. Üblicherweise macht man das über einen Service. Zum Ausprobieren kannst Du aber das Programm einfach so starten und z.B. mittels mqtt.fx nachschauen, ob bei den Topics Sensor/temperature und Sensor/humidity Werte eintreffen (alle 30 Sekunden). Wenn das geht, können wir das Script als Dienst laufen lassen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten