openHAB :: Einbinden von Temperatursensoren
Nachdem wir openHAB nun installiert und konfiguriert haben, möchten wir natürlich in openHAB unsere Temperatursensoren einbinden, die wir in dieser Anleitung in Form als TEMPer1 USB-Dongles oder aus dieser Anleitung als DHT22-Sensor an unsere Himbeere angeschlossen haben. Nett wäre zudem, die Betriebstemperatur des Raspberry Pi selbst in openHAB zu visualisieren.
Da unser Haushalt leider über keine Anwendungsentwicklungsfachkraft verfügt, sind sämtliche hier vorgestellten Lösungsansätze mit Bash-Scripten und SSH-Verbindungen realisiert. Dennoch ist dieser Weg sehr praktikabel, was Erfahrungen über einen längeren Zeitraum gezeigt haben. Für diese Methode ist es notwendig, den öffentlichen Schlüssel des openHAB-Servers in die Liste der autorisierten Schlüssel aller Raspberry einzufügen. Dies ist detailliert in dieser Anleitung beschrieben. Dabei nicht den letzten Schritt des erstmaligen, manuellen Anmeldens vergessen, da dort noch nach der Zulassung des öffentlichen Schlüssels der Gegenseite gefragt wird.
Verfügbare Artikel zu openHAB
Temperatursensor TEMPer1
Dieser Temperatursensor ist in unserem Beispiel an einem Raspberry angeschlossen, der auf die fiktive IP-Adresse „192.168.23.236“ konfiguriert wurde. Der Server, auf welchem die openHAB-Instanz installiert wurde, ist unter der IP-Adresse „192.168.23.212“ erreichbar.
Zunächst stellen wir sicher, dass der Sensor an der Himbeere selbst korrekt installiert ist und ausgelesen werden kann. Dazu befolgen wir die Schritte dieser Anleitung.
Anschließend erstellen wir auf dem Server ein Script, mit welchem wir die Messwerte via SSH auf dem Raspberry auslesen können und speichern dieses in ein von uns gewähltes Verzeichnis. In unserem Beispiel wurde das Script unter „/scripts/temp.sh“ gespeichert.
#!/bin/bash /usr/bin/ssh -i /scripts/.ssh/id_rsa root@192.168.$1.$2 "/usr/local/bin/temper1.pl"
Wir erlauben die Ausführung des Scripts durch
chmod +x /scripts/temp.sh
und übertragen den Besitz an „openhab“ durch
chown openhab: /scripts/temp.sh
Zur Erläuterung des Scripts:
Das Script erwartet beim Aufruf zwei Parameter: das dritte sowie das letzte Oktett der IP-Adresse des Raspberry Pi’s. Zu dieser nun vollständigen IP-Adresse wird eine SSH-Sitzung aufgebaut und der in den Anführungszeichen gesetzte Befehl ausgeführt. Die Ausgabe des Befehls (in diesem Fall die zurückgegebene Temperatur des TEMPer1-Sensors) wird anschließend auch vom Script ausgegeben. So findet der Temperaturwert den Weg in das eigentliche openHAB-Item, welches wir wie folgt in der „NAME_DER_KONFIGURATION.items“ definieren:
Number TEMP_WOHNZIMMER "Temperatur Wohnzimmer [%.1f °C]" <temperature> { exec="<[/scripts/temp.sh 23 236:60000:REGEX((.*?))]" }
Zur Erläuterung der Item-Definition:
- Der Itemtyp wird als Nummer festgelegt
- Das Item wird als „TEMP_WOHNZIMMER“ bezeichnet
- Die Ausgabe wird auf „Temperatur Wohnzimmer XX°C“ konfiguriert, wobei „%.1f“ mit dem aktuellen Wert des Items ersetzt wird
- Als Icon wird das Symbol „temperatur“ gewählt, welches sich im Ordner „/usr/share/openhab/webapps/images“ befinden muss
- Das Addon „exec“ wird verwendet, welches via „apt-get install openhab-addon-binding-exec“ installiert wird . Zudem wird der gesamte Pfad zum oben erstellten Script angegeben sowie der Scriptname selbst. Im Anschluss werden die vom Script geforderten Parameter übergeben sowie der Aktualisierungsintervall auf 5 Minuten (60.000 Millisekunden) festgelegt. Die Ausgabe des Scripts wird 1:1 als Wert des Items übernommen.
Nun können wir das eben definierte Item in unsere Sitemap einbinden. Im folgenden Beispiel wird zudem eine Datenarchivierung via „RRD4J“ genutzt, so dass wir als Unterseite des eigentlichen Temperatureintrags Statistiken mit wählbaren Zeiträumen darstellen können:
Text item=TEMP_WOHNZIMMER { Switch item=CHART_PERIOD label="Zeitspanne" mappings=[0="Stunde", 1="Tag", 2="Woche"] Chart item=TEMP_WOHNZIMMER period=h refresh=300 visibility=[CHART_PERIOD==0, CHART_PERIOD=="Uninitialized"] Chart item=TEMP_WOHNZIMMER period=D refresh=1800 visibility=[CHART_PERIOD==1] Chart item=TEMP_WOHNZIMMER period=W refresh=3600 visibility=[CHART_PERIOD==2] }
Wenn wir die Graphen wie oben gezeigt einsetzen wollen, dann benötigen wir zudem ein weiteres Item, dass wir in einer beliebigen „.items“-Datei definieren:
Number CHART_PERIOD
Ohne diese Statistiken sähe die abschließende Einbindung wie folgt aus:
Text item=TEMP_WOHNZIMMER
Temperatursensor DHT22
Auch der Temperatur- und Luftfeuchtigkeitssensor Typ DHT22 lässt sich in openHAB einbinden. Dazu befolgen wir zunächst diese Anleitung, um den Sensor am Raspberry Pi anzuschließen und die notwendige Pakete zum Abrufen der Sensordaten zu installieren. Wurde die Anleitung erfolgreich befolgt, können wir lokal am Raspberry die Temperatur sowie die Luftfeuchtigkeit mittels
/PFAD_ZUM_SCRIPT/loldht GPIO-PORT
abrufen und diese werden uns im besten Fall auch vom Sensor mitgeteilt:
Nun prüfen wir, ob wir den gleichen Vorgang vom openHAB-Server aus mittels SSH durchführen können:
/usr/bin/ssh -i /scripts/.ssh/id_rsa root@192.168.23.236 "/scripts/lol_dht22/loldht 5 | grep "Temperatur""
Bei diesem Befehlsaufruf, in welchem natürlich die entsprechende IP-Adresse des eigenen Raspberry eingesetzt werden sollte, gehen wir noch einen kleinen Schritt weiter und filtern die Ausgabe nur nach der Zeile, in der „Temperatur“ vorkommt.
Soweit so gut, jedoch bringt uns die Darstellung beider Werte in einer Zeile nicht all zu viel. Daher nutzen wir das Linux-Tool „cut„, um die Zeile aufzuteilen. Wir definieren als Trenner ein Leerzeichen und wählen für die Luftfeuchtigkeit die dritte Spalte und für die Temperatur die siebte Spalte. Nun erhalten wir als Ausgabe jeweils den Wert, den wir ermitteln wollten.
Genau diesen Vorgang verpacken wir nun in das Bash-Script „/scripts/dht22.sh“ und lassen dabei die Möglichkeit zur Wahl verschiedener Himbeeren offen:
#!/bin/bash GPIO=$2 INPUT=$(/usr/bin/ssh -i /scripts/.ssh/id_rsa root@192.168.23.$1 "/scripts/lol_dht22/loldht $GPIO |grep "Temperature"") HUM=$(echo $INPUT|cut -d " " -f3) TEMP=$(echo $INPUT|cut -d " " -f7) if [ "$3" = "HUM" ]; then echo $HUM fi if [ "$3" = "TEMP" ]; then echo $TEMP fi
chmod +x /scripts/dht22.sh
und übertragen den Besitz an „openhab“ durch
chown openhab: /scripts/dht22.sh
Dieses Script benötigt folgende Parameter zur Ausführung:
- Letztes Oktett der IP-Adresse der Himbeere
- GPIO-Port
- Gesuchter Wert, „HUM“ oder „TEMP„
Zur Erklärung dieses Scripts:
Zunächst wird die gleiche Abfrage durchgeführt, wie wir sie weiter oben manuell durchgeführt haben. Jedoch wird die Ausgabe (die gesamte Zeile mit beiden Daten) in die Variable „INPUT“ gelegt. Nun werden die Werte der Luftfeuchtigkeit sowie der Temperatur „ausgeschnitten“ und ebenfalls in eigene Variablen gelegt. Je nach Abfrage und somit Wert des seitens openHAB übergebenen Parameters wird nun entweder die Luftfeuchtigkeit oder die Temperatur ausgegeben.
Aufgrund dessen, dass es hin und wieder zu „Ausreißern“ bei den Messergebnissen kommt,
habe ich ein kleines Script gebastelt, um solche fehlerhaften Messergebnisse auszusortieren.
Das Script und seine Beschreibung befindet sich am Ende dieses Beitrags.
Anschließend definieren wir zwei Items für die beiden möglichen Werte des DHT22-Sensors:
Number TEMP_WOHNZIMMER "Temperatur Wohnzimmer [%.1f °C]" <temperature> { exec="<[/scripts/dht22.sh 236 5 TEMP:60000:REGEX((.*?))]" } Number LUFT_WOHNZIMMER "Luftf. Wohnzimmer [%.1f %%]" <humidity> { exec="<[/scripts/dht22.sh 236 5 HUM:60000:REGEX((.*?))]" }
In diesem Beispiel wird ein am Raspberry mit der IP-Adresse 192.168.23.236 und GPIO-Port 5 angeschlossener DHT22-Sensor abgefragt; der Temperaturwert in das Item „TEMP_WOHNZIMMER“ und der Wert der Luftfeuchtigkeit in das Item „LUFT_WOHNZIMMER“ gelegt. Als Symbol wird passend „temperature“ bzw. „humidity“ gewählt, dessen entsprechende Bilddateien ebenfalls unter „/usr/share/openhab/webapp/images“ gespeichert sind.
Zur Visualisierung der Werte konfigurieren wir die Sitemap wie folgt:
Text item=TEMP_WOHNZIMMER Text item=LUFT_WOHNZIMMER
Natürlich lassen sich auch hier wie im Beispiel des TEMPer1 gezeigt Unterseiten für Statistiken einfügen.
Als beispielhafte Darstellung hier ein Ausschnitt unserer persönlichen Sitemap, nur von einem anderen Sensor, der jedoch mit dem gleichen Prinzip eingebunden wurde:
Temperatursensor DHT11
Auch für diesen Sensor erstellen wir unter dem Ordner „/scripts“ ein neues Bash-Script und benennen es „dht11.sh„:
#!/bin/bash #Einstellungen MINTEMP=0 MAXTEMP=50 MINHUM=0 MAXHUM=100 if [ ! -d /tmp/dht11vars/ ]; then mkdir /tmp/dht11vars/ fi PIN=$2 INPUT=$(/usr/bin/ssh -i /scripts/.ssh/id_rsa root@192.168.1.$1 "/scripts/dht11/Adafruit_DHT 11 $PIN" |grep "Temp") HUM=$(echo $INPUT|cut -d " " -f7) TEMP=$(echo $INPUT|cut -d " " -f3) if [ "$3" = "HUM" ]; then if [ $(echo "if (${HUM} > ${MAXHUM}) 1 else 0" | bc) -eq 1 -o $(echo "if (${HUM} < ${MINHUM}) 1 else 0" | bc) -eq 1 ]; then if [ -f /tmp/dht11vars/dht_$1_pin$2_hum.txt ]; then cat /tmp/dht11vars/dht_$1_pin$2_hum.txt fi else echo $HUM echo $HUM > /tmp/dht11vars/dht_$1_pin$2_hum.txt fi fi if [ "$3" = "TEMP" ]; then if [ $(echo "if (${TEMP} > ${MAXTEMP}) 1 else 0" | bc) -eq 1 -o $(echo "if (${TEMP} < ${MINTEMP}) 1 else 0" | bc) -eq 1 ]; then if [ -f /tmp/dht11vars/dht_$1_pin$2_temp.txt ]; then cat /tmp/dht11vars/dht_$1_pin$2_temp.txt fi else echo $TEMP echo $TEMP > /tmp/dht11vars/dht_$1_pin$2_temp.txt fi fi
Diesem Script erlauben wir die Ausführung durch
chmod +x /scripts/dht11.sh
Wir definieren die DHT11-Sensoren als neue Items in OpenHAB…
Number TEMP_UG "Temp. Keller [%.1f °C]" <temperature> { exec="<[/scripts/dht11.sh 234 24 TEMP:180000:REGEX((.*?))]" } Number HUM_UG "Luftf. Keller [%.1f %%]" <humidity> { exec="<[/scripts/dht11.sh 234 24 HUM:180000:REGEX((.*?))]" }
…und binden diese in die Sitemap ein:
Text item=TEMP_UG label="Temperatur UG [%.1f °C]" Text item=HUM_UG label="Luftfeuchtigkeit UG [%.1f %%]"
Temperatursensor des Raspberry Pi
Die notwendigen Informationen über die Kerntemperatur eines Raspberry Pi bringt dieser bereits von Haus aus mit. Zumindest kann ich dies bei der Debian-basierenden Distribution „Raspbian“ bestätigen.
Zur Anzeige dieser Temperatur genügt ein einfaches Auslesen der Datei „/sys/class/thermal/thermal_zone0/temp“ beispielsweise mit dem Linux-Tool „cat„:
Dividiert man die Ausgabe nun durch 1000, erhält man die CPU-Temperatur in Grad Celsius. Dies lässt sich natürlich auch ein kleines Bash-Script „/scripts/rbptemp.sh“ verpacken, welches dazu dient auf unserem openHAB-Server ausgeführt zu werden:
#!/bin/bash INPUT=$(/usr/bin/ssh -i /scripts/.ssh/id_rsa root@192.168.23.$1 "/bin/cat /sys/class/thermal/thermal_zone0/temp") echo $INPUT/1000 |bc -l| python -c "print round(float(raw_input()),2)"
Wir erlauben die Ausführung des Scripts durch
chmod +x /scripts/rbptemp.sh
und übertragen den Besitz an „openhab“ durch
chown openhab: /scripts/rbptemp.sh
Zur Erklärung:
Zunächst wird der Wert, wie bereits weiter oben manuell, via SSH auf dem Raspberry ausgelesen und in die Variable „INPUT“ geschrieben. Der Inhalt dieser Variable wird nun durch 1000 geteilt, das Ergebnis auf zwei Nachkommastellen gerundet und abschließend ausgegeben.
Den ausgegeben Wert legen wir nun seitens openHAB in ein neues Item:
Number TEMP_RBP236 "Temperatur rbp236 [%.1f °C]" <temperature> { exec="<[/scripts/rbptemp.sh 236:60000:REGEX((.*?))]" }
Anschließend stellen wir das neue Item in der Sitemap dar:
Text item=TEMP_RBP236
Das Ergebnis könnte nun ähnlich der folgenden Grafik aussehen:
Falls noch Fragen offen sind, schreibt diese einfach in einen Kommentar unter diesen Beitrag.
Daniel Wenzel
21.02.2016 @ 08:55
Hmm, dann bin ich mit meinem Latein so langsam am Ende. Man kann jetzt nur noch blind andere Dinge probieren.
OpenHAB neu starten, Addon löschen und neu in den addon-Ordner kopieren…Mehr fällt mir dazu grad leider nicht ein.
Erscheint denn wenigstens im Logstream
TEMP_WOHNZIMMER updatet to bla ?
Florian
20.02.2016 @ 12:39
als ausgabe von:
/opt/openhab/configurations/scripts/dht22.sh 0 TEMP
bekomme ich:
20.90
wenn ich die items Datei verschiebe arbeitet er normal weiter und wenn ich die Datei zurück verschiebe erkennt er das und updated den Status.
Den Pin hab ich 1zu1 aus deiner Anleitung und er gibt sowohl Temperatur als auch Feuchtigkeit realistisch aus
Daniel Wenzel
20.02.2016 @ 12:10
Sry, das mit der gleichen Maschine habe ich überlesen. Wie sieht denn der genaue Output deines Scripts aus?
In der openhab.cfg muss dieses Addon nicht weiter konfiguriert werden.
Versuch mal bitte, die entsprechende Items-Datei aus dem item Ordner zu verschieben und nach einer Minuten wieder reinzuschieben. Beobachte dabei das Log ob etwas wie
„Loading bla.items“ erscheint. Hängt der DHT wirklich am wiringPi-Port 0, also GPIO 17?
Florian
20.02.2016 @ 11:11
Hallo Daniel,
– das Addon org.openhab.binding.exec-1.8.0 wurde in den addons Ordner kopiert (wie bereits angemerkt wurde nichts in der openhab.cfg eingebunden)
– OpenHAB läuft unter root
– SSH Schlüssel wurde nicht ausgetauscht da ich nicht auf ein anderes System zugreife (siehe exec und bash skript)
Daniel Wenzel
20.02.2016 @ 09:34
Hallo,
dazu erstmal ein paar Standardfragen:
– Wurde das Exec-Addon installiert?
– unter welchem Nutzer läuft OpenHAB?
– wurde der SSH-Schlüssel für einen passwortlosen Login ausgetauscht?
Florian
20.02.2016 @ 09:14
Hallo Zusammen,
an erster Stelle möchte ich mich für die detaillierte Anleitung bedanken. Ich hoffe der Post ist nicht schon zu alt :)
Leider hab ich ein Problem was mir derzeit keine Ruhe lässt.
Ausgangssituation ist ein Raspberry Pi B mit angehängtem DHT22. Die Openhab Runtime (v1.8.0) läuft direkt auf dem Pi an welchem auch der Sensor hängt.
Das bash skript liegt in /opt/openhab/configurations/scripts/dht22.sh und sieht daher wie folgt aus:
#!/bin/bash
GPIO=$1
INPUT=$(/root/lol_dht22/loldht $GPIO |grep "Temperature")
HUM=$(echo $INPUT|cut -d " " -f3)
TEMP=$(echo $INPUT|cut -d " " -f7)
if [ "$2" = "HUM" ]; then
echo $HUM
fi
if [ "$2" = "TEMP" ]; then
echo $TEMP
fi
Das Skript alleine funktioniert auch und gibt die Werte entsprechend aus.
Als Items habe ich ebenfalls die Vorlage angepasst wie folgt:
Number TEMP_WOHNZIMMER "Temperatur Wohnzimmer [%.1f °C]" { exec="<[/opt/openhab/configurations/userscripts/dht22.sh 0 TEMP:6000:REGEX((.*?))]" }
Number LUFT_WOHNZIMMER "Luftf. Wohnzimmer [%.1f %%]" { exec="<[/opt/openhab/configurations/userscripts/dht22.sh 0 HUM:6000:REGEX((.*?))]" }
Die in der Sitemap integrierten Werte zeigen allerdings keine Werte an sondern immer nur –
Ich bekomme keine Fehlermeldung in den Logs, aber auch keine Erwähnung dass die Daten angefordert werden.
Eine eventuelle Vermutung ist das exec Binding. Muss dieses noch in der openhab.cfg erwähnt werden? Hierzu habe ich trotz intensiver suche nichts gefunden.
Freue mich auf Vorschläge
Flo
Daniel Wenzel
30.12.2015 @ 07:05
Es gibt immer mehrere Wege zum Ziel. Natürlich könnte man die gesamte Struktur auch so umsetzen, dass die Himbeeren in regelmäßigen Abständen die Werte zur openHAB-Instanz melden. Ich mag es jedoch lieber, wenn die gesamte „Intelligenz“ an zentraler Stelle sitzt. Wenn im Haushalt irgendwann mal ausreichende Python-Kentnisse zur Verfügung stehen, könnte man über ein „Server-Client-TCP“ Script nachdenken, dass die bisherige SSH-Methode ersetzt.
Bei der Präsenzerkennung jedoch muss das Script direkt an openHAB melden, da eine erkannte Bewegung recht zeitkritisch ist und bei regelmäßigen Abfragen durch openHAB höchstwahrscheinlich untergehen und nicht „bemerkt“ werden würde.
Daniel Wenzel
30.12.2015 @ 06:49
Dazu müsste ich folgendes Wissen:
1) Welchen Temperatursensor setzt du ein?
2) Wie sieht deine Item-definition aus?
Sascha
30.12.2015 @ 02:17
Hallo, super Anleitung!
Eine Frage hätte ich da, was spricht dagegen, die Daten direkt an die REST API zu senden, wie zb bei der Präsenzerkennung oder dem Internet Geschwindigkeitstest? Wäre ja die schönere Lösung?
Danke und weiter so
Sascha
Robin
28.12.2015 @ 23:39
Hallo,
vielen Dank für diese Anleitung. Leider scheint bei mir die Übergabe des Temperatur-Wertes in das Item nicht zu funktionieren. In OpenHab erscheint einfach nur “ – °C“, anstatt der richtige (oder überhaupt ein) Temperaturwert. Ich habe es schon mit verschiedenen Scripten versucht. Auch ein einfaches „echo 22.12“ im Bash Script hat nicht funktioniert. In OpenHab will es nicht erscheinen. Was mach ich falsch?
Daniel Wenzel
09.12.2015 @ 17:08
Hier findest du weitere Informationen zur dynamischen Sitemap:
https://github.com/openhab/openhab/wiki/Explanation-of-Sitemaps#dynamic-sitemaps
Für das grafische Editieren gibt es den openHAB-Designer. Da ich den aber nicht nutze, kann ich dir grad gar nicht sagen, ob man damit auch die Sitemap erstellen kann.
Da der Syntax der Sitemap allerdings so simpel ist, reicht auch ein normaler Texteditor.
Im Verzeichnis „openhab/etc/rrd4j“ liegt für jedes erfasste Item eine .rrd Datei. Wenn du diese löscht (oder via Script löschen lässt) sind auch die Daten der Datenbank weg.
Bin mir nur grad nicht sicher, ob ein Neustart von openHAB notwendig sein wird, muss man halt mal ausprobieren.
jonas
09.12.2015 @ 11:43
Vielen Dank für den Tipp — gleich mal googlen was da on Detail hintersteckt :)
Gibt es eigentlich ein art „grafischer Designer“ für die Sitemap? Irgendwie hätte ich gerne eine Sammlung von Möglichkeiten oder Examples für OpenHab Sitemaps…. :)
–> Eine kleine Frage habe ich aber noch — hast du eine Idee wie ich die Daten aus der RRDb wieder löschen kann?
Gerne würde ich auf Knopfdruck in Openhab ein Script laufen lassen, welche die DB Einträge für ein Item wieder löscht. Mit mySQL sollte das ja ohne Probleme gehen – zur RRDb hab ich allerdings noch nicht viel Info gefunden – ansonsten muss ich wohl mySQL auf den PI2 klatschen :(
Daniel Wenzel
08.12.2015 @ 18:21
Ja, da hätte man noch lange nach suchen können.
Kleiner Tipp noch aus Erfahrung für die Hauptseite der Sitemap:
mit dynamisch angezeigten Items hat man immer die wichtigen Dinge im Blick (Wassertemperaturen, Wetter, offene Fenster)
Viel Erfolg weiterhin.
Daniel
jonas
08.12.2015 @ 09:10
@Daniel: hab den „Fehler“ gefunden — und zwar ist ein DHT22 bei mir defekt gewesen und hat nie wirklich daten bekommen – dadurch wurde die lock datei dauerhaft gesperrt und ich konnte keine erneute datenabfrage machen .. eieiei….
Nun läuft es super und ich kann mich bissel ans sinnige aufbauen meiner sitemap machen :)
jonas
03.12.2015 @ 19:17
Hmm, eigenartig:
also nach dem löschen der Datei funktioniert es – kommt sogar zur richtigen darstellung in openhab – aber aus irgendeinem grund ist bei einer erneuten abfrage die datei wieder gesperrt.
ähnlich verhält es sich, wenn ich die abfrage direkt auf dem pi mit dem sensor mache und danach per ssh – dann ist die datei ebenfalls gesperrt – sehr verwirrend für meine kleinen linux fähigkeiten – mal schauen ob ein sauberes neu aufsetzen abhilfe schafft :)
Daniel Wenzel
03.12.2015 @ 04:54
Hallo Udo,
endlich habe ich eine passende Antwort auf deine Frage:
https://klenzel.de/4676
Grüße
Daniel
Daniel Wenzel
03.12.2015 @ 04:51
Das sieht aus, als hättest du den loldht-Prozess während seiner Arbeit ge-„kill“-t ;) Lösch mal diese Datei: /var/run/dht.lock dann sollte es wieder gehen.
Wenn openHAB die Werte korrekt auslesen kann, dann kann es eigentlich nur noch an der sitemap liegen. Versuch mal eine neue sitemap zu erstellen, wo es nur ein einziges item gibt:
sitemap test label=“Test“ {
Text item=Temp1
}
(Datei test.sitemap)
jonas
02.12.2015 @ 23:49
Ich glaub ich hab den Fehler gefunden – nur wie beheb ich den nun :)
–> Aus irgendeinem Grund sperrt der pi mit dem Sensor die Lock Datei
sudo /home/pi/lol_dht22/loldht 2
Raspberry Pi wiringPi DHT22 reader
http://www.lolware.net
Lock file is in use, exiting…
ich setz die PIs mal neu auf – ich glaub ich hab mir da was mit den Berechtigungen zerballert :))
jonas
02.12.2015 @ 22:53
Jupps
pi@Pi ~ $ /opt/openhab/scripts/GetTemp.sh 102 1 TEMP
21.40
Funktioniert ohne Probleme.
Im Eventlog find ich auch einträge zur aktualisierung:
2015-12-02 22:50:46 – Temp1 state updated to 21.20
2015-12-02 22:50:50 – Hum1 state updated to 68.10
2015-12-02 22:51:49 – Temp1 state updated to 21.20
2015-12-02 22:51:54 – Hum1 state updated to 68.10
Also scheint alles zu funktionieren m.E. :/
Daniel Wenzel
02.12.2015 @ 19:38
Also als Nutzer „pi“ liefert das Script ein erwartetes Ergebnis?
Auf den ersten Blick kann ich in den Definitionen keinen Fehler sehen.
Wie sieht denn das Log von openHAB aus?
Da sollten die items alle 10 Minuten mit beispielsweise „Item Temp1 updatet to bla“ erscheinen.
jonas
02.12.2015 @ 19:32
habe das script mittlerweile ausführbar für den user pi gemacht – daher fällt das aufrufen des scripts über sudo weg…dennoch keine veränderung :(
jonas
02.12.2015 @ 19:27
Hey,
vielen Dank für die fixe Antwort! :)
Items:
Group Schlafzimmer
Group Wohnzimmer
Group Temp_All
Group Hum_All
/* Temps */
Number Temp1 „Temperatur [%.1f °C]“ (Temp_All) { exec=“<[sudo /opt/openhab/scripts/GetTemp.sh 202 1 TEMP:60000:REGEX((.*?))]" }
Number Hum1 "Luftfeuchtigkeit [%.1f %%]" (Hum_All) { exec=“<[sudo /opt/openhab/scripts/GetTemp.sh 202 1 HUM:60000:REGEX((.*?))]" }
Und einmal die Sitemaps:
sitemap home label="HomeTest"
{
Frame {
Group item=Temp_All
Group item=Hum_All
Text item=Temp1
}
}
Sowohl unter den Gruppen als auch das einzele Textitem zeigt keinerlei Werte an :(
Daniel Wenzel
02.12.2015 @ 19:16
Hallo,
wenn die Ausführung des Scripts lokal sowie auch per SSH funktioniert, muss das Problem wohl woanders liegen. Zeig doch mal bitte die entsprechenden Zeilen aus der item-Definition und der Sitemap, dann schauen wir mal.
jonas
02.12.2015 @ 18:07
hey, erstmal ein großes lob an die tolle sammlung des wissens zu openhab – für mich mega hilfreich :)
allerdings habe ich ein kleines problem:
ich versuche nach deiner anleitung ein dth22 Sensor an einer OpenHab Instanz aus zu lesen.
-Sensor am Pi selber funktioniert super
-SSH – Zugriff vom openhab funktioniert auch
-Aufruf des Bash Scripts (dht22.sh IP GPIO HUM/TEMP) funktioniert
-Item wurde wie oben beschrieben hinzugefügt
-Sitemap wurde erstellt und wird angezeigt
–> Leider bleibt die Anzeige leer und unbeschrieben
Hast du eine Idee wie ich hier auf Fehlersuche gehen kann?
Udo
11.10.2015 @ 18:39
Hallo,
Wie hast Du die Datenspeicherung via RRD4J realisiert. Leider gibt es keine Anleitung dazu im Netz. Über eine Kurzanleitung wäre ich dankbar.
Gruss,
Udo
Uwe
02.07.2015 @ 17:28
So, ich habe eine Lösung für mich gefunden. Feige wie ich bin, möchte ich an der Rechte-Schraube nicht drehen. Ich mach das jetzt so, dass ich den Sensor mit einem Cronjob im zwei Minuten-Takt auslese und die Daten in eine von „Gott-und-der-Welt“ lesbaren Datei schreibe. Mit dem OpenHAB-Prozess lese ich dann im fünf Minuten-Takt diese Datei einfach aus. Vielleicht nicht so elegant, aber flutsched :-)
Aber auf alle Fälle vielen Dank für Deine Hilfe.
Uwe
28.06.2015 @ 19:03
Hallo Daniel,
vielen Dank für die schnelle Antwort.
Über „sudoers“ bin ich auch schon „gestolpert“ habe mich aber bis jetzt davor gescheut damit „herumzuspielen“. Ich muss mich erst mal damit im Detail befassen.
OpenHAB unter „root“ laufen zu lassen stellt für mich auch keine Option dar. Die Kiste ist über das Internet erreichbar und da bin ich natürlich etwas vorsichtiger, was die root-Rechte angeht.
Werde mich wieder melden, wenn ich weiter bin.
Daniel Wenzel
28.06.2015 @ 18:15
Hallo Uwe,
das „Problem“ lässt sich leicht erklären: wiringPi steuert die GPIO-Ports an, arbeitet also so „Hardware-nah“, dass es root-Rechte benötigt. Die Lösung des Problems ist da schon ein wenig komplizierter. Spontan fallen mir dazu folgende zwei Lösungswege ein:
– den Nutzer, unter dem openHAB läuft in die sudoers eintragen, aber nur für wiringPi. Dann in den Scripten vor wiringPi das „sudo“ davor setzen.
– openHAB als Nutzer „root“ laufen lassen, davon rate ich aber ab. Vielleicht zu Testzwecken mal probieren.
Uwe
28.06.2015 @ 14:30
Hallo Daniel,
ich habe openHAB 1.7 im Einsatz und versuche anhand Deiner Anleitung einen DHT11 „einzubinden“.
Wenn ich als Benutzer „pi“ das Shell-Script dht22.sh mit sudo aufrufe, funktioniert es wunderbar, ohne sudo bekomme ich die Meldung „wiringPiSetup: Must be root. (Did you forget sudo?)“.
Das scheint ja kein neues Problem zu sein, denn im Internet findet man einige Einträge von Mitmenschen, die das gleiche Problem haben. Bis jetzt habe ich aber keine einfache Antwortgefunden.
Da Du in Deinem Script, bzw. bei der Definition der Items ebenfalls kein sudo anwendest, frage ich mich, wie so es bei Dir funktioniert und bei mir nicht?
Schon mal vielen Dank für Deine Hilfe.
Daniel Wenzel
28.06.2015 @ 10:05
Freut mich, dass ich helfen konnte.
Thomas
28.06.2015 @ 10:03
Vielen Dank für den Tipp… der Fehler war: *.item statt *.items… jetzt läuft es wie geschmiert…
Daniel Wenzel
27.06.2015 @ 05:57
Wenn du openHAB wie in unserer Anleitung beschrieben in einer screen-Sitzung startest, kannst du diese Sitzung mit „screen -r openhab“ öffnen. Verlassen bitte nicht mit STRG+c, sonst beendet das die Sitzung. Die Sitzung verlässt du bei gedrücktert STRG-Taste mit der Zeichenfolge a + d.
Wenn dir openHAB die Variablennamen anzeigt, könnte es darauf hindeuten, dass er die items nicht kennt. Möglicherweise ein Leerzeichen zuviel in der .items-Datei oder die Datei konnte nicht eingelesen werden. Genaueres sagt dir aber die openHAB-Konsole.
Anonymous
26.06.2015 @ 14:55
Ich arbeite über die bash mit openHAB und weiß ehrlich nicht wie ich das in den Vordergrund bringe. Die .item-Datei liegt in items und dem Skript habe ich eben ein chmod a+x verpasst…. also sollte es nicht an den Rechten liegen. Aber es hat sich bisher noch nichts getan… Was mich halt besonders wundert ist, dass in der sitemap die Variablennamen ausgegeben werden und nicht die Bezeichnung wie in items definiert…
Daniel Wenzel
26.06.2015 @ 10:06
Hallo,
da kann es mehrere Möglichkeiten für Fehler geben. Starte mal openHAB in den Vordergrund neu und beobachte die Ausgaben auf der Console. Werden die Temperaturwerte überhaupt eingelesen?
Hast du die .item-Datei in den Ordner items gespeichert?
Hat der Nutzer, unter dem openHAB läuft, das Recht dein Script auszuführen?
Thomas
26.06.2015 @ 09:03
Hallo… ich habe die beliebten DS18B20 Sensoren am 1-Wire (Dallas)-Bus hängen. Ich habe ein Skript gebaut, das mir auf der bash zumindest die Temperatur korrekt ausgibt.Jetzt habe ich in der items Datei:
Group temperatur
Group warmwasser
Number TEMP_HEIZUNG „Temperatur Heizungswasser [%.1f °C]“ (temperatur, warmwasser) { exec=“<[/usr/share/openhab/bin/onewiretemp.sh 28-0000065ce2bd:REGEX((.*?))]"}
Number TEMP_WARMWASSER "Temperatur Warmwasser [%.1f °C]" (temperatur, warmwasser) { exec="<[/usr/share/openhab/bin/onewiretemp.sh 28-0000065c60d8:60000:REGEX((.*?))]" }
definiert. Das addon-binding-exec habe ich installiert… in meiner sitemap Datei habe ich:
sitemap nr110 label="Hauptmenue"
{
Frame label="Temperaturen" icon="temperature"
{
Group label="Wasserspeicher" icon="temperature"
{
Text item=TEMP_HEIZUNG
Text item=TEMP_WARMWASSER
}
}
}
stehen..
Rufe ich OpenHAB über die Android-App auf, so zeigt er mir statt den erwarteten Temperaturwerten einfach nur TEMP_HEIZUNG und TEMP_WARMWASSER an… wo liegt der Hund begraben?