Anfänger braucht Hilfe zum Thema Raumtemperatur
-
- Beiträge: 47
- Registriert: 29. Aug 2020 19:07
Anfänger braucht Hilfe zum Thema Raumtemperatur
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
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
-
- Beiträge: 188
- Registriert: 7. Jan 2020 14:45
- Kontaktdaten:
Re: Anfänger braucht Hilfe zum Thema Raumtemperatur
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
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
Harald
-
- Beiträge: 47
- Registriert: 29. Aug 2020 19:07
Re: Anfänger braucht Hilfe zum Thema Raumtemperatur
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
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
- udo1toni
- Beiträge: 13854
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Anfänger braucht Hilfe zum Thema Raumtemperatur
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
-
- Beiträge: 47
- Registriert: 29. Aug 2020 19:07
Re: Anfänger braucht Hilfe zum Thema Raumtemperatur
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)
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)
- udo1toni
- Beiträge: 13854
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Anfänger braucht Hilfe zum Thema Raumtemperatur
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)
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
-
- Beiträge: 47
- Registriert: 29. Aug 2020 19:07
Re: Anfänger braucht Hilfe zum Thema Raumtemperatur
Ok. Hier die drei Skripte.
weatherstation.py
sensor.py
mqtt_subscriber.py
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()
- udo1toni
- Beiträge: 13854
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Anfänger braucht Hilfe zum Thema Raumtemperatur
Ich bin natürlich auch kein Experte, Python betreffend, aber vielleicht erfüllt das hier den Zweck:
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.
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)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
- udo1toni
- Beiträge: 13854
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Anfänger braucht Hilfe zum Thema Raumtemperatur
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.
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