OpenHAB als Heizungsregelung: Teil 2 - Software-Installation/erste Schritte

Datum
Kommentare 5

Wer die Software einrichten will, kommt um ein Kommandozeilen-Terminal nicht drumherum. Auch die englische Sprache ist unerlässlich, sowohl für das Olinuxino-Board als auch für OpenHAB.

Olinuxino Micro A20 Board mit Debian-Linux bespielen

Olimex als Hersteller des Boards gibt hier die Anleitung und den Download-Link für das jeweils aktuelle Image des Debian-Systems.

Es gibt aber auch unabhänigige Kernel-Entwicklungen, ein mir sehr gut erscheinendes habe ich hier gefunden (auch von Olimex wird es verlinkt). Ich teste es gerade und es scheint mit OpenHAB gut zu laufen.

Das Vorgehen mit den Images ist generell so: Das Image wird mit einem Computer aus dem Internet heruntergeladen. Dieses Image wird dann entpackt und auf eine leere microSD-Karte (in einem Kartenleser am Computer) kopiert. Unter Linux geht das mit dem dd-Befehl:

dd if=QUELLDATEI of=ZIELDATEI bs=1M

(bs bedeutet Blocksize, unter Mac OS wird das “M” zu “m” oder auch zu “000000”.)

In diesem Fall wird als Zieldatei das Device “microSD-Karte” gewählt, welches meist nach Einstecken der Karte als /dev/sdb oder /dev/sdc o.ä. auftaucht. Wenn die Karte partitioniert oder schon formatiert ist, dann wird es auch noch /dev/sdb1 oder /dev/sdc1 geben, was auf die Partition verweist und nicht auf die Karte. Daher wichtig: Als Zieldatei immer die Datei ohne die Zahl am Ende nehmen.

Achtung! Auch die Festplatte in deinem Computer trägt als Bezeichnung /dev/sda1 oder /dev/sdb1 oder ähnliches! Wenn du dich also mit der Bezeichnung vertust, hast du schnell die Festplatte deines Computers mit dem Image überschrieben, also völlig unbrauchbar gemacht.

Wenn die microSD-Karte fertig beschrieben ist, wird sie aus dem Kartenleser entnommen und in das Board gesteckt. Wird dieses jetzt an ein passendes Netzteil angeschlossen, dann sollte es starten, nach einiger Zeit sollte eine kleine grüne Lechtdiode blinken, der sogenannte “Herzschlag”, oder bei manchen Kernels auch dauerhaft leuchten bzw. die SD-Aktivität anzeigen.

Alle modernen System-Images sollten es dem Board ermöglichen, sich direkt an ein Netzwerk anzukoppeln. Wenn ich also das Board mit einem Patchkabel an einen Router oder Switch anschließe, bezieht es automatisch eine IP-Adresse, über die ich mich per SSH auf dem Board anmelden kann (der Router sollte mir die IP-Adresse verraten). Ich öffne also auf meinem Computer ein Terminal-Fenster und gebe ein:

ssh root@192.168.1.24

Zumindest, wenn 192.168.1.24 die IP-Adresse meines Boards ist. Ich werde nach einem Passwort gefragt und gebe ein: “olimex” Denn das ist das Standard-Passwort für das Olinuxino-Board (in der Image-Beschreibung wirst du das richtige Passwort finden).

Hurra! Wenn ich so weit gekommen bin, habe ich mich jedesmal sehr gefreut!! :-)

IP-Adresse statisch machen

Ein Server im Heimnetz sollte immer unter der gleichen IP-Adresse zu finden sein, das ist zumindest sehr praktisch. Daher muss ich die Datei /etc/network/interfaces editieren. Dort steht nämlich bis jetzt, dass das Board per DHCP eine IP vom Router bekommen soll. Also:

nano /etc/network/interfaces

Dort

auto eth0
iface eth0 inet dhcp

auskommentieren, also ein “#” davor schreiben:

#auto eth0
#iface eth0 inet dhcp

Dann mit dem Cursor ganz nach unten gehen und einfügen:

iface eth0 inet static
address 192.168.1.8
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1

Wobei du die IP-Adressen natürlich an dein eigenes Netzwerk anpassen musst. Dann einfach einen Neustart durchführen (da durch die ssh-Verbindung ja die alte IP belegt ist):

reboot

Fertich!

Aktuelles Java installieren

Verzeichnis anlegen:

mkdir /opt/java
cd /opt/java

Ich finde es am einfachsten, das aktuelle Java direkt bei Oracle herunterzuladen. Da Oracle eine Bestätigung seiner Lizenz vor dem Download verlangt, benutze ich diese komplizierte wget-Zeile, um das Paket herunterzuladen:

wget --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u65-b17/jdk-8u65-linux-arm32-vfp-hflt.tar.gz"

Der letzte Teil in den “” muss wahrscheinlich je nach Version aktualisiert werden. Dafür mit einer beliebigen Suchmaschine nach “oracle java arm download” suchen, dort das richtige Paket für “Linux ARM v8 Hard Float” suchen, den Knopf für Lizenzbestätigung klicken und per Rechtsklick den Download-Link kopieren, den du dann zwischen die “” einfügst.

Auspacken:

tar xvzf jdk-8u65-linux-arm32-vfp-hflt.tar.gz

(eventuell den Namen anpassen, je nachdem, was du heruntergeladen hast)

Dem System erklären, wo dein neues Java liegt:

update-alternatives --install "/usr/bin/java" "java" "/opt/java/jdk1.8.0_65/bin/java" 1
update-alternatives --set java /opt/java/jdk1.8.0_65/bin/java

Java testen:

java -version

Und, läuft’s? Herzlichen Glückwunsch! :-)

OpenHAB herunterladen

Die Entwickler von OpenHAB stellen Apt-Repositories zur Verfügung! Das ist doch gut, oder? Wir müssen erstmal den OpenHAB-Schlüssel zum Schlüsselbund hinzufügen:

wget -qO - 'https://bintray.com/user/downloadSubjectPublicKey?username=openhab' | sudo apt-key add -

Dann die Paketquellen hinzufügen:

echo "deb http://dl.bintray.com/openhab/apt-repo stable main" | sudo tee /etc/apt/sources.list.d/openhab.list

Jetzt die Listen herunterladen:

apt-get update

Und Openhab installieren:

apt-get install openhab-runtime

Bei mir kam eine Fehlermeldung, als ich OpenHAB auf Debian Jessy installiert habe: D-Bus connection error
Das hat was mit dem Init-System zu tun, welches bei meinem Debian-Image (dem Armbian) wohl nicht vollständig installiert war, und nach dem Nachinstallieren von systemd-sysv war die Fehlermeldung verschwunden:

apt-get install systemd-sysv

Das war’s, OpenHAB ist drauf!!

Wie kann ich überprüfen, dass es läuft? OpenHAB wird ja über ein WebInterface, also über den Browser, bedient. Ich kann also mit meinem Computer-Browser jetzt mein Board ansurfen, und zwar unter der lokalen IP-Adresse und dem Port 8080, bei mir gebe ich in die Adresszeile des Browsers ein: 192.1681.8:8080

Das Resultat: Eine Fehlermeldung von OpenHAB! Wenn das so ist, bedeutet das aber viel gutes, denn OpenHAB läuft, der integrierte Webserver läuft, nur Daten sind keine da – wir haben ja auch noch keine.

OpenHAB – einfach erklärt

Ich fange mal mit was einfachem an: Einem Schalter auf der Benutzeroberfläche (also im Browser). Der ist entweder an oder aus, und ich kann draufdrücken/klicken und er nimmt den jeweils anderen Zustand an. Hinterher wird der an eines meiner Relais gekoppelt, so dass er auch wirklich was tut.

OpenHAB hat sich auf meiner Festplatte (oder SD-Karte) an zwei Stellen eingenistet: /usr/share/openhab und /etc/openhab. Zuerst wenden wir uns dem zu, wo die Daten liegen, /etc/openhab. Dort gehen wir in den Unterordner configurations:

cd /etc/openhab/configurations

Da heißt eine Datei openhab_default.cfg, die kopieren wir in openhab.cfg:

cp openhab_default.cfg openhab.cfg

Dazu später mehr (erstmal soll was ans Laufen kommen). Wir gehen jetzt in den Unterordner items:

cd items

Dort liegen die “Objekte”, also jetzt mein Schalter. Das heißt, dort muss ich ihn anlegen. Ich mache eine neue Datei mit Namen default.items:

nano default.items

Da füge ich eine Zeile ein:

Switch  ersterSchalter  "Toller Schalter"

Das reicht, nano beenden mit ctrl-x, ja zum Speichern und Dateinamen bestätigen.

Der Schalter ist jetzt da, aber noch nicht zu sehen. Was zu sehen sein soll, kommt in den Unterordner sitemaps. Also gehe ich dorthin:

cd ../sitemaps

Und mache dort eine neue Sitemap:

nano default.sitemap

Da kommt erstmal rein:

sitemap default label="Meine Heizung"
{
  Switch item=ersterSchalter
}

Nano mit ctrl-x (“Yes” – enter) beenden und auf dem Computer die IP meines Boards auf Port 8080 ansurfen, bei mir 192.168.1.8:8080:

OpenHAB-Heizung

Gut, das sieht jetzt nicht beeindruckend aus, aber ich habe einen Schalter im Browser, den ich per Mausklick oder Fingerdruck (mit Touchscreen) ein- und ausschalten kann!

Autor
Kategorien

Kommentare

  1. Joachim

    Hallo Boris,
    ich habe mit Spannung deine 2 Artikel über Heizungsregelung mit openhab gelesen und Frage mich nun, ob und wie es weitergegangen ist. Ich möchte so etwas mit einem Raspberry Pi realisieren und bin gerade auf der Suche nach der richtigen Software.
    LG Joachim

  2. Weber

    Hallo möchte das Projekt erweitern und einen Kombispeicher mit drei Mess Punkten einbinden ware aber über Ratschläge Dankbar

  3. Boris

    Hallo Weber!
    Für allgemeine Ratschläge OpenHAB betreffend kann ich dir die gute Dokumentation auf https://www.openhab.org/docs/ empfehlen. Für weitergehende Fragen hat die Community, in der ich auch vertreten bin, ein offenes Ohr: https://community.openhab.org/
    Da es inwzischen meist um OpenHAB 2 geht, kann ich dir, falls du OpenHAB 1.8 einsetzt, noch den Tipp geben, dich auf https://github.com/openhab/openhab1-addons/wiki umzusehen.
    Oder wende dich mit konkreten Fragen an mich hier in den Kommentaren!

  4. Andre Haupt

    Hallo Boris,

    Mich würde die Ansteuerung des Mischerventils interessieren. Wie regeltest du die passenden Ausgangstemperatur. Ein Einblick in deine wahrscheinlich geschriebene Rule würde mir sehr helfen.
    Ich habe ein KNX Haus mit OpenHab und möchte meinen Heizkamin einbinden.

  5. Boris

    Hallo Andre,

    da du dich mit OpenHAB auszukennen scheinst, kopiere ich hier einfach mal Teile meiner Rule rein:

    			var Number difference = raumSoll – raumIst
    			var Number hystereseRaumHalf = (HystereseRaum.state as DecimalType) / 2
    			var Number steigung = Heizkurve_Steigung.state as DecimalType
    			var Number summand = Heizkurve_Summand.state as DecimalType
    			if ( difference + hystereseRaumHalf < 0 ) postUpdate(Temperature_VorlaufSoll, 0)
    			else if (difference – hystereseRaumHalf > 0 ) postUpdate(Temperature_VorlaufSoll, steigung * difference + summand)

    Obiges legt die Soll-Temperatur des Vorlaufs fest.

    			if ((tempVorlaufSoll <= 0) && (mischer > 0)) { 
    				postUpdate(Mischer, 0)
    				sendCommand(MischerMinus, ON)
    				createTimer(now.plusSeconds(150))[|
    					sendCommand(MischerMinus, OFF)
    				]
    			} else {
    				var Number tempVorlauf = Temperature_Vorlauf.state as DecimalType
    				var Number difference = tempVorlaufSoll - tempVorlauf			
    				var Number hystereseVorlaufHalf = (HystereseVorlauf.state as DecimalType) / 2
    				var Number increment = 5
    				// if ((difference < 5) && (difference > -5)) increment = 2
    				if (mischer == 0) increment = 60    //von 0 direkt auf 60
    
    				if ((tempVorlauf < (tempVorlaufSoll - hystereseVorlaufHalf)) && (mischer < 145)) {
    					mischer = mischer + increment 
    					postUpdate(Mischer, mischer)
    					sendCommand(MischerPlus, ON)
    					createTimer(now.plusSeconds(increment.intValue())) [|
    							sendCommand(MischerPlus, OFF)
    					]
    				}
    				else if ((tempVorlauf > (tempVorlaufSoll + hystereseVorlaufHalf)) && (mischer > 0)) {
    					mischer = mischer - increment
    					if (mischer < 0) mischer = 0
    					postUpdate(Mischer, mischer)
    					sendCommand(MischerMinus, ON)
    					createTimer(now.plusSeconds(increment.intValue())) [|
    							sendCommand(MischerMinus, OFF)
    					]					
    				}			
    			}
    

    Und hier wird dann der Mischer bedient, der Mischer braucht 145s von 0 bis 100%, also 14,5s für 10% Erhöhung/Erniedrigung. Da ich über die Zeit gemerkt habe, dass 60 ein guter Anfangswert ist, um auf Temperatur zu kommen, geht der Mischer direkt auf 60, wenn er vorher auf 0 war (das ist aber nur für den Komfort einer schnelleren Reaktion).

Kommentare

Geben Sie Ihren Kommentar hier ein. * Eingabe erforderlich. Sie müssen die Vorschau vor dem Absenden ansehen.





← Älter Neuer →