Der Code befindet sich auch unter https://github.com/openHPI/openhab-demo
Einer unserer Raspberry Pis ist unter https://codeocean.openhpi.de/raspberry zu erreichen und gibt die folgenden Werte aus:
{
"temp": 28.5,
"humidity": 48.7,
"tempout": 18.8,
"door": 1
}
(Temperatur innen, Luftfeuchtigkeit, Temperatur aussen, Fensterstatus).
Schritte zur Inbetriebnahme von openHAB und Codesnippets
- Download von Code und Addons
Anzeige von Daten des Raspberry via REST
Kopieren des HTTP Addons in den Addons Ordner
Hinzufügen des Items in /configurations/items/default_items
Number InnenTemperatur "Temperatur Innen [%.1f] °C" <temperature> { http="<[http://LOKALEIP:10000:JS(getValue.js)]" }
Achtung: Das HTTP Binding kann momentan nicht mit anderen Ports umgehen, wir empfehlen daher den JSON Feed auf dem Raspberry auf Port 80 zu betreiben. Hierfür ist es notwendig den Webserver mit Supernutzerrechten zu betreiben.
Hinzufügen des Items in die Benutzeroberfläche
in /configurations/sitemaps/default.sitemap
sitemap default label="openHPI"
Frame label="openHPI Demo" {
Text label="Raum 1" icon="firstfloor" {
Text item=InnenTemperatur
}
}
Auslesen aus der JSON in /configurations/transform/getValue.js
JSON.parse(input).temp;
Berechnen von Min und Max-Werten
Erstellen der Persistierung: Kopieren des RRD4J Addons in den Addon Ordner
Erstellen einer Persistenz-Konfiguration:
in /configurations/persistence/rrd4j.persist
Strategies {
everyHour : "0 0 * * * ?"
everyDay : "0 0 0 * * ?"
default = everyChange
}
Items {
* : strategy = everyChange, everyDay, restoreOnStartup
}
Hinzufügen der Items
String InnenTemperatur_Min_Formatted "Min. Temp [%s]" <temperature>
String InnenTemperatur_Max_Formatted "Max. Temp [%s]" <temperature>
und in die Benutzeroberfläche (sitemap):
Text item=InnenTemperatur_Min_Formatted
Text item=InnenTemperatur_Max_Formatted
Erstellen einer Regel die Werte berechnet:
rule "Update Temperature Min- and Max values"
when
Item InnenTemperatur changed
then
var Number Min
var Number Max
var String tmp
var SimpleDateFormat df = new SimpleDateFormat( "HH:mm" )
if (InnenTemperatur.state instanceof DecimalType) {
df = new SimpleDateFormat( "HH:mm" )
Min = InnenTemperatur.minimumSince(now.toDateMidnight, "rrd4j").state as DecimalType
tmp = (Math::round(Min.floatValue*10.0)/10.0) + " °C (" + df.format(InnenTemperatur.minimumSince(now.toDateMidnight, "rrd4j").timestamp) + ")"
postUpdate(InnenTemperatur_Min_Formatted, tmp)
Max = InnenTemperatur.maximumSince(now.toDateMidnight, "rrd4j").state as DecimalType
tmp = (Math::round(Max.floatValue*10.0)/10.0) + " °C (" + df.format(InnenTemperatur.maximumSince(now.toDateMidnight, "rrd4j").timestamp) + ")"
postUpdate(InnenTemperatur_Max_Formatted, tmp)
}
end
Einbinden von externen Diensten
Kopieren des Weather Addons in den Addon Ordner
Hinzufügen der Items:
Number Temperature "Temperatur (Web) [%.2f °C]" <temperature> {weather="locationId=home, type=temperature, property=current"}
Number Humidity "Luftfeuchtigkeit (Web) [%d %%]" <water> {weather="locationId=home, type=atmosphere, property=humidity"}
Number Rain "Regen (Web) [%.2f mm/h]" <rain> {weather="locationId=home, type=precipitation, property=rain"}
und in die Benutzeroberfläche
Text item=Temperature
Text item=Humidity
Text item=Rain
dann in /configurations/openhab.cfg einstellen der Konfiguration:
weather:location.home.name=Potsdam
weather:location.home.woeid=29352281
weather:location.home.provider=Yahoo
weather:location.home.language=de
weather:location.home.updateInterval=10
Hinweis: Bei Yahoo muss die woeid aus der URL der Yahoo Wetterseite ausgelesen werden. Es können auch andere Dienste verwendet werden.
Visualiserung
In der Item-Konfiguration:
Chart item=Temperature period=h refresh=3600
Ein weiteren guten Einstieg bietet die openHAB Website unter https://github.com/openhab/openhab/wiki