Einbinden von DHT22 Temperatur u. Feuchtigkeitssensor

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

croix-aigle
Beiträge: 18
Registriert: 20. Mai 2019 08:40

Einbinden von DHT22 Temperatur u. Feuchtigkeitssensor

Beitrag von croix-aigle »

Hallo zusammen,

nach dem ich meinen 1. Wire Temperatursensor eingebunden habe, möchte ich jetzt den DHT22 auch einbinden, leider klappt das nicht so einfach wie ich es mir vorgestellt habe.

Installiert:
Programm: /etc/Adafruit_Python_DHT/examples .... Sensor ist mit ./AdafruitDHT.py 22 17 #GPIO17 abzurufen
Web: IP-Adresse:8080 ⇒ Paperui ⇒ Add-ons ⇒ Bindings ⇒ Suchen: „Exec“ ⇒ Install: „Exec Binding“

Konfiguration:

ArbeitszimmerDHT22.py Ordern /etc/openhab2/scripts/
import Adafruit_DHT
import sys, time

DHT_PIN = 17 #GPIO Nummer hier eintragen
DHT_SENSOR = Adafruit_DHT.DHT22

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

if call == ‚temperature‘: #Messwert 1 Temperatur
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‘: # Messwert 2 humidity Feuchtigkeit
humidity = None
while humidity == None:
humidity, _ = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
if humidity == None:
time.sleep(1.5)
print(humidity)
ArbeitszimmerDHT22.items
Group Klima_Arbeitszimmer_Diagramm (System, Charts)
Number Arbeitszimmer_Temperature „Temperatur [%.1f C]“ <temperature> (Klima_Wohnzimmer_Diagramm) { channel=“exec:command:wohnzimmer_temperature:output“ }
Number Arbeitszimmer_Humidity „Luftfeuchtigkeit [%.1f %%]“ <humidity> (Klima_Wohnzimmer_Diagramm) { channel=“exec:command:wohnzimmer_humidity:output“ }
ArbeitszimmerDHT22.things
Thing exec:command:wohnzimmer_temperature „Arbeitszimmer – Temperatur“ @ „Arbeitszimmer“ [command=“/etc/openhab2/scripts/ArbeitszimmerDHT22.py temperature“, transform=“REGEX((.*?))“, interval=60, timeout=10, autorun=true]

Thing exec:command:wohnzimmer_humidity „Arbeitszimmer – Luftfeuchtigkeit“ @ „Arbeitszimmer“ [command=“/etc/openhab2/scripts/ArbeitszimmerDHT22.py humidity“, transform=“REGEX((.*?))“, interval=60, timeout=10, autorun=true]
Sitemaps sind folgende Zeile eingefügt:
Text item=Arbeitszimmer_Temperature
Text item=Arbeitszimmer_Humidity

Stefan Otten
Beiträge: 73
Registriert: 11. Nov 2018 06:51

Re: Einbinden von DHT22 Temperatur u. Feuchtigkeitssensor

Beitrag von Stefan Otten »

Hallo,

im Item ist Number definiert in der Sitemap Text.....
In der Sitemap müsste stehen: Number item=Arbeitszimmer_Temperatur
etc

Grüße

croix-aigle
Beiträge: 18
Registriert: 20. Mai 2019 08:40

Re: Einbinden von DHT22 Temperatur u. Feuchtigkeitssensor

Beitrag von croix-aigle »

Hallo Stefan,

wenn ich den Text in der Sitemap zu Number ändere, dann startet die Sitemap nicht mehr.

Hier der Auszug von dem onewire:
onewiregpio.items
Number:Temperature ArbeitszimmerSolarOben "SolarpanelOben: [%.2f %unit%]" <temperature> { channel="onewiregpio:sensor:OG1_officeOben:temperature" }
Number:Temperature ArbeitszimmerSolarUnten "SolarpanelUnten: [%.2f %unit%]" <temperature> { channel="onewiregpio:sensor:OG1_officeUnten:temperature" }
Sitemap:
Text item=ArbeitszimmerSolarOben
Text item=ArbeitszimmerSolarUnten
Mit den rechten kann es nicht dran liegen, da der onewire funktioniert:
drwxrwxr-x+ 2 openhab openhabian

Benutzeravatar
peter-pan
Beiträge: 2568
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Einbinden von DHT22 Temperatur u. Feuchtigkeitssensor

Beitrag von peter-pan »

Den Element-Typ "Number" gibt es nicht in der Sitemap. Am besten benutzt du dann "Default item" . Du kannst ja hier mal nachschauen. Du musst aber auch wissen, dass das Exec-Binding nur String-Werte zurückgibt. Deshalb ist die Deklaration in deinem .items-File nicht richtig. Schau mal im Exec-Binding nach. Falls du eine Umwandlung als Number benötigst, musst du das dann über ein Dummy-Item in Verbindung mit einer Regel machen.

Gruss
Peter
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

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

Re: Einbinden von DHT22 Temperatur u. Feuchtigkeitssensor

Beitrag von udo1toni »

Nein, Text ist schon korrekt, wenn der Wert nur angezeigt werden soll.
Bitte nicht Sitemap und Items durcheinader würfeln!
Weiterhin (hat peter-pan ja auch schon erwähnt) muss beim exec Binding immer ein String Item für output verwendet werden, da der Channel output ebenfalls vom Typ string ist.
Eine andere Frage wäre: siehst Du denn in openhab.log irgendwelche Fehlermeldungen?

Wenn Du auf der Konsole htop startest (das muss natürlich installiert sein) musst Du sehen, dass alle 60 Sekunden das Script zweimal kurz ausgeführt wird. Eventuell ist das schwer erkennbar, denn das Script wird nur sehr kurz laufen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

croix-aigle
Beiträge: 18
Registriert: 20. Mai 2019 08:40

Re: Einbinden von DHT22 Temperatur u. Feuchtigkeitssensor

Beitrag von croix-aigle »

mit der Erklärung komme ich jedenfalls nicht weiter.

Hab etwas anderes gefunden und momentan sieht die Ansicht gut aus, nur die Werte fehlen mir.

arbeitszimmerdht22.py -rwxrwxr-x
import Adafruit_DHT
import sys, time

DHT_PIN = 17 #GPIO Nummer hier eintragen
DHT_SENSOR = Adafruit_DHT.DHT22

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

if call == ‚temperature‘: #Messwert 1 Temperatur
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‘: # Messwert 2 humidity Feuchtigkeit
humidity = None
while humidity == None:
humidity, _ = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
if humidity == None:
time.sleep(1.5)
print(humidity)
arbeitszimmerdht22.things -rw-rw-r--
Thing exec:command:arbeitszimmerdht22_temperature "Temperatur" [command="/etc/openhab2/scripts/arbeitszimmerdht22.py temperature", transform="REGEX((.*?))", interval=60, t$
Thing exec:command:arbeitszimmerdht22_humidity "Luftfeuchtigkeit" [command="/etc/openhab2/scripts/arbeitszimmerdht22.py humidity", transform="REGEX((.*?))", interval=10, t$
arbeitszimmerdht22.items -rw-rw-r--
Group arbeitszimmerdht22_Chart (System, Charts)
Number arbeitszimmerdht22_Chart_Period "Periode" (System)
Number arbeitszimmerdht22_Temperature "Temperatur [%.1f °C]" <temperature> (arbeitszimmerdht22_Chart)
Number arbeitszimmerdht22_Humidity "Luftfeuchtigkeit [%.1f %%]" <humidity> (arbeitszimmerdht22_Chart)


String temperature_out { channel="exec:command:arbeitszimmerdht22_temperature:output" }
String humidity_out { channel="exec:command:arbeitszimmerdht22_humidity:output" }
Eintrag in der sitemaps:

Text item=arbeitszimmerdht22_Temperature
Text item=arbeitszimmerdht22_Humidity
Unbenannt.JPG
Wo könnte hier der kleine Fehler liegen oder muss noch etwas ergänzt werden?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

croix-aigle
Beiträge: 18
Registriert: 20. Mai 2019 08:40

Re: Einbinden von DHT22 Temperatur u. Feuchtigkeitssensor

Beitrag von croix-aigle »

wenn ich in /var/log/openhab2/openhab2.log schauen sehe ich das:
nach Beitrag von oben:
019-05-30 09:36:53.826 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'Arbeitszimmer_Humidity' for widget org.eclipse.smarthome.model.sitemap.Text
2019-05-30 09:36:53.831 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'Arbeitszimmer_Humidity' for widget org.eclipse.smarthome.model.sitemap.Text
2019-05-30 09:36:53.835 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'Arbeitszimmer_Humidity' for widget org.eclipse.smarthome.model.sitemap.Text
2019-05-30 09:44:14.482 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item for widget org.eclipse.smarthome.model.sitemap.Text



gehört zum neuen Beitrag (änderung)
019-05-30 09:55:37.995 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item for widget org.eclipse.smarthome.model.sitemap.Text
2019-05-30 09:55:37.998 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'UG_waschkeller' for widget org.eclipse.smarthome.model.sitemap.Text
2019-05-30 09:55:38.000 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'UG_waschkeller' for widget org.eclipse.smarthome.model.sitemap.Text
2019-05-30 09:55:38.002 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'UG_waschkeller' for widget org.eclipse.smarthome.model.sitemap.Text
2019-05-30 09:55:38.005 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item for widget org.eclipse.smarthome.model.sitemap.Text
2019-05-30 09:55:38.007 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'GF_Balcony' for widget org.eclipse.smarthome.model.sitemap.Text
2019-05-30 09:55:38.009 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'GF_Balcony' for widget org.eclipse.smarthome.model.sitemap.Text
2019-05-30 09:55:38.011 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'GF_Balcony' for widget org.eclipse.smarthome.model.sitemap.Text

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

Re: Einbinden von DHT22 Temperatur u. Feuchtigkeitssensor

Beitrag von udo1toni »

croix-aigle hat geschrieben: 30. Mai 2019 09:46 mit der Erklärung komme ich jedenfalls nicht weiter.
Welche Erklärung? Wessen Erklärung?
Hab etwas anderes gefunden und momentan sieht die Ansicht gut aus, nur die Werte fehlen mir.
? Die Ansicht ist gut, aber Du siehst nichts?
import Adafruit_DHT
[...]
Bitte füge Code nicht als Zitat ein! Nutze stattdessen immer die Code-Option.
arbeitszimmerdht22.things -rw-rw-r--
Thing exec:command:arbeitszimmerdht22_temperature "Temperatur" [command="/etc/openhab2/scripts/arbeitszimmerdht22.py temperature", transform="REGEX((.*?))", interval=60, t$
Thing exec:command:arbeitszimmerdht22_humidity "Luftfeuchtigkeit" [command="/etc/openhab2/scripts/arbeitszimmerdht22.py humidity", transform="REGEX((.*?))", interval=10, t$
Diese Datei ist unvollständig (und zwar am Ende jeder Zeile!). So wie der Code gepostet ist, geht da gar nichts!
arbeitszimmerdht22.items -rw-rw-r--
Group arbeitszimmerdht22_Chart (System, Charts)
Number arbeitszimmerdht22_Chart_Period "Periode" (System)
Number arbeitszimmerdht22_Temperature "Temperatur [%.1f °C]" <temperature> (arbeitszimmerdht22_Chart)
Number arbeitszimmerdht22_Humidity "Luftfeuchtigkeit [%.1f %%]" <humidity> (arbeitszimmerdht22_Chart)

String temperature_out { channel="exec:command:arbeitszimmerdht22_temperature:output" }
String humidity_out { channel="exec:command:arbeitszimmerdht22_humidity:output" }
Eintrag in der sitemaps:

Text item=arbeitszimmerdht22_Temperature
Text item=arbeitszimmerdht22_Humidity
Auch für jegliche Konfiguration oder auch Log Ausgaben (openhab.log, events.log ...) bitte immer die code-Option nutzen!

Du lässt die Werte in String Items speichern (die, welche mit dem Channel verlinkt sind) und zeigst andere Number Items an, die mit nichts verlinkt sind. Erwartest Du ernsthaft, dort ohne weiteres Zutun Deine Messwerte zu sehen?
Du benötigst mindestens noch eine Rule, die die Werte aus den String Items in die Number Items überträgt (wobei natürlich eine Wandlung von String nach Number erfolgen muss).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

croix-aigle
Beiträge: 18
Registriert: 20. Mai 2019 08:40

Re: Einbinden von DHT22 Temperatur u. Feuchtigkeitssensor

Beitrag von croix-aigle »

Hallo udo1toni,

mit der Erklärung von peter-pan, mit den zwei links zur Erklärung komme ich hier nicht ganz zu recht.

Wie sich das ganze zusammen setzt, ist mir teils auch unklar.

Wie ich das Rule einbaue, keine Ahnung.

Hab mir für den Einstig das Buch Smarthome mit openhab2 gekauft, aber das schweift teils ganz weg von einzelnen Bauteilen. Wie müsste die Rule sein, das es funktioniert oder fehlt in den dateien einiges, da die zusammen hängen nicht ausreichend vollständig sind?

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

Re: Einbinden von DHT22 Temperatur u. Feuchtigkeitssensor

Beitrag von udo1toni »

Gesetzt den Fall, dass Du in den String Items die korrekten Werte findest, weiter vorausgesetzt, dass die Werte mit einem Punkt als Dezimaltrennzeichen im String Item stehen, und zwar der nackte Wert, also ohne Einheit hinten dran, sähe eine passende Rule so aus:
Items:

Code: Alles auswählen

Group arbeitszimmerdht22_Chart (System, Charts)
Group arbeitszimmerdht22_Sensoren
Number arbeitszimmerdht22_Chart_Period "Periode" (System)
Number arbeitszimmerdht22_Temperature "Temperatur [%.1f °C]" <temperature> (arbeitszimmerdht22_Chart)
Number arbeitszimmerdht22_Humidity "Luftfeuchtigkeit [%.1f %%]" <humidity> (arbeitszimmerdht22_Chart)

String temperature_out (arbeitszimmerdht22_Sensoren) { channel="exec:command:arbeitszimmerdht22_temperature:output" }
String humidity_out (arbeitszimmerdht22_Sensoren) { channel="exec:command:arbeitszimmerdht22_humidity:output" }

Code: Alles auswählen

rule "update temp and humidity"
when
    Member of arbeitszimmerdht22_Sensoren changed
then
    var Number myNumber = Float::ParseFloat(triggeringItem.state.toString)
    var String myName = triggeringItem.name.split("_").get(0)
    arbeitszimmerdht22_Chart.members.filter[i | i.name.contains(myName)].head.postUpdate(myNumber)
end
Diese Rule sieht vielleicht komplex aus, ist es aber eigentlich nicht.
Wenn ein Member der Gruppe arbeitszimmerdht22_Sensoren seinen Wert ändert, wird die Rule getriggert.
Die Rule wandelt den geänderten String zu einer Zahl.
Anschließend sucht sie aus der Gruppe arbeitszimmerdht22_Chart dasjenige Item heraus, dessen Name zu dem Item passt, welches die Rule getriggert hat.
Dieses Item wird auf den Wert gesetzt, der vorher berechnet wurde.

Der Witz ist, dass Du nur diese eine Rule für beide Items brauchst. Solltest Du mehr Sensoren haben, müsstest Du bei der Namensgebung darauf achten, dass die Itemnamen passend gewählt sind. Ich habe jetzt einfach eine Gruppe dazu gebastelt, sinnvollerweise fasst man alle StringReceiveItems zu einer Gruppe zusammen und alle Number Items zu einer anderen Gruppe, wobei die Namen der Items sich an einer bestimmten Stelle gleichen müssen, am besten gibt es immer exakt zwei Items, die bis zum 1. Unterstrich identische Namen haben und sich danach unterscheiden. Der Filter sollte immer exakt ein einzelnes Item zurück liefern (bzw. ein Gruppe von Items, in der aber immer exakt ein Item zu finden ist).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten