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

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/sdb1oder /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!

9 Kommentare on "OpenHAB als Heizungsregelung: Teil 2 – Software-Installation/erste Schritte"


  1. Hallo Bernhard,

    ich habe mit Begeisterung deine Blogeinträge zur Heizungssteuerung mit dem Olinuxino gelesen und möchte ein ähnliches System aufbauen. Die Installation der Heizungsanlage wird im kommenden Frühjahr stattfinden.
    Ich schreibe dir da ich ein paar Infos oder Artikel vermisse in deinem Blog.

    1. Wie steuerst du die Thermostate an die für die Zu- und Abschaltung der einzelnen Heizkreisläufe (Räumen) auf dem Heizkreisverteiler sitzen? Regelst du dabei nur auf/zu oder auch prozentuale Öffnung zum Temperaturerhalt?
    2. Die Vorlaufanhebung nach welchen Kriterien änderst du die Vorlauftemperatur?
    3. Die Umwälzepumpe muss ja nur laufen wenn einer der Heizkreisläufe geöffnet ist. Einfach über ein Relais an und aus schalten oder wie realisierst du das? Oder hast du eine automatische Pumpe (die selber erkennt ob Heizkreise geöffnet sind)?

    Bin Java Entwickler und habe ein gutes technisches Verständnis und mich für die Planung der Heizungsanlage auch schon gut eingelesen ins Thema Heizungsbau. Wäre dir aber sehr Dankbar wenn du mir ein paar Tipps geben kannst auf was ich bei der Auswahl der Komponenten achten sollte und wie du die aufgelisteten Punkte gelöst hast.

    Hier ein kurze Beschreibung der geplanten Heizungsanlage:
    Die geplante Anlage wird aus einem wasserführenden Grundofen (dieser wurde bereits gebaut), ca. 12qm Solarthermie und einer Elektro-Heizung (Notfall-Backup) bestehen. Über den zentralen Schichtspeicher sollen die Wandheizungen in den Zimmern versorgt und das warme Brauchwasser erhitzt werden.

    Viele Grüße
    David Staron

    Antworten

    1. Hallo David,

      Zu 1.
      Wenn der hydraulische Abgleich des Heizkreislaufs stimmt, brauchen die einzelnen Räume/Heizkörper keine eigene Regelung. Um dennoch manuell raumweise eingreifen zu können, reichen normale Thermostatköpfe aus — nur eine höhere Temperatur als der Raumthermostat vorgibt, ist natürlich nicht möglich.
      Um einen Raum im 2. Stock, der eher selten genutzt und geheizt wird, bei Bedarf vorheizen zu können, ohne hinzurennen, setze ich dort zwei günstige Max!-Thermostatköpfe ein, die auch per OpenHAB geschaltet werden.
      Zu 2.
      Da dieses Haus gut isoliert ist, macht sich die Regel-Störgröße „Außentemperatur“ (die im Normalfall für die Vorlauftemperatur-Anhebung verwendet wird), kaum bemerkbar. Daher ist hier die Vorlauftemperatur auf einen Erfahrungswert fest eingestellt. Wenn ich merke, dass es zum Frühstück morgens nicht warm genug geworden ist, hebe ich die Temperatur manuell um ein Grad an für den Folgetag. Wenn die Räume zu schnell warm geworden sind (3/4h statt 1h) senke ich etwas ab.
      Zu 3.
      Steht im Artikel: Per Relais. Sobald die gewünschte Raumtemperatur erreicht ist, macht gleichzeitig der Mischer zu und die Umwälzpumpe geht aus.

      Tipps:
      Der Speicher ist nie zu groß. 😉
      Die Isolierung der Außenwände kann gar nicht dick genug sein.
      Bei uns gibt der Ofen viel zu viel Wärme direkt in den Raum — aber das wird baulich bedingt sein.
      Ich würde noch eine unabhängige (Not-)Wärmequelle einplanen (alte Gastherme zum Beispiel).

      Viel Glück mit dem Vorhaben!
      Boris (!= Bernhard)

      Antworten

      1. Hallo,

        vielen Dank für die Tipp, Boris!
        Hatte erst ne Mail an Bernhard geschrieben. Er schrieb ich solle doch das gleiche hier per Kommentar an dich schreiben … dabei habe ich vergessen den Namen zu ändern. Tut mir leid. 😉
        Da es bei uns ne Wandheizung ist wird es ja keine Thermostate in den Zimmern geben. Sondern Temperaturfühler und im Keller einen zentralen HKV an dem die Heizkreise der Räume geregelt werden. Somit muss ich ja das was das Thermostat im Raum sonst übernimmt mit meinen Stellmotoren regeln. Wenn alle HKs zu sind geht die Pumpe aus. Wenn ich von einem Thermostat an einem normalen Heizkörper (unterm fester) ausgehe öffnet das ja auch prozentual zum Temperatur halten und voll um auf zu heizen zB nach dem lüften (hydraulischer Abgleich vrrausgesetzt). Dies wird bei mir ja im Keller mit den Stellmotoren realisiert. Gibt es da Tabellen um sich so eine Regelung eines Thermostat an zu schauen? Ich habe dazu bis jetzt nicht viel gefunden.

        Gruß David

        Antworten

        1. Dazu kann ich dir nur meine Erfahrungswerte sagen: Ein normales Heizkörper-Thermostatventil folgt so ziemlich einer Integral-Regelung. Solange die Wunschtemperatur nicht erreicht ist, bleibt es voll geöffnet, ist sie erreicht, schließt es komplett. Natürlich gibt es einen kleinen Hysteresebereich.
          Wenn du das erstmal so realisiert und dann feststellen solltest, dass der Raum dabei wärmer wird als gewünscht (also überschwingt), dann müsstest du schon bei Annäherung an die Wunschtemperatur das Ventil proportional schließen (ein sogenannter P-Regler).
          Es kann jedoch eigentlich kaum etwas schlimmes passieren, wenn du das im Live-Betrieb austestest – schlimmstenfalls wird es halt etwas wärmer als gewünscht und pendelt dann ein wenig stärker.

          Antworten

  2. 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.

    Antworten

    1. 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).

      Antworten

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

    Antworten

    1. 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!

      Antworten

  4. 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

    Antworten

Schreibe einen Kommentar zu David Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.