NoreSoft (David Rabel)

Heizungssteuerung - Anleitung

Ich übernehme keine Haftung dafür, dass die beschriebenen Komponenten korrekt funktionieren. Bitte folgen Sie der Anleitung nur soweit, wie Sie sicher sind, weder sich noch anderen versehentlich zu schaden. Sollten Sie Fragen zu der Anleitung haben, wenden Sie sich bitte per E-Mail an David.Rabel@NoreSoft.com.

Einleitung
Diese Anleitung beschreibt beispielhaft die Einrichtung der hier beschriebenen Heizungssteuerung. Da es noch keine Thermostate gibt, arbeiten wir hier lediglich mit Merkurboard und Servo. Mit ewas bastlerischem Geschick lassen sich diese Komponenten in einen nicht mehr benötigten Thermostatgriff einbauen. Eine Anregung dazu finden Sie hier.
Diese Anleitung bezieht sich auf Debian-basierte Linux-Distribution als Arbeitsumgebung. Sollten Sie ein anderes Betriebssystem verwenden, müssen Sie die Anleitung gegebenenfalls anpassen. Die Anleitung setzt grundlegende Kenntnisse im Umgang mit der Kommandozeile und Entwicklungswerkzeugen vorraus.

Benötigte Hardware
Merkurboard Starterkit, Micro Servo, Stromquelle für den Servo, Steckboard (optional), Kabel (optional), A10-OLinuXino-LIME, LCD-OLinuXino-4.3TS, A10-OLinuXino-LIME-UEXT, Kabel 1, Kabel 2, Netzteil, 1 Micro-SD-Karte (mind. 4GB) und eine Möglichkeit, diese mit Ihrem Computer zu verbinden

Einrichten der Merkurboards
Auf den Merkurboards läuft wie gesagt eine modifizierte Version von Contiki-OS. Um die aktuelle Version herunterzuladen wird Git benötigt. Außerdem benötigen Sie noch einige Programme zum kompilieren und anschließenden Aufspielen auf das Board:

>sudo apt-get install git avr-libc binutils-avr gcc-avr gdb-avr simulavr avrdude make

Anschließend laden Sie den aktuellen Quelltext aus dem OS-Domotics Repository herunter:

>git clone https://github.com/osdomotics/osd-contiki.git
>git checkout osd

Als erstes richten Sie eines der Merkurboards als RPL-Border-Router ein. Dieses wird später dem Olimex-Board erlauben, das 6LoWPAN-Netzwerk aufzubauen. Dazu schließen Sie das Merkurboard mit dem USB-Serial-Adapter an ihren Rechner an. Wechseln Sie anschließend in den entsprechenden Unterordner und starten Sie zunächst das run-Script zum Kompilieren und anschließend das flash-Script zum Flashen: (Vorsicht, wenn Sie noch weitere Geräte über USB-Serial-Adapter angeschlossen haben. Das flash-Script nutzt standardmäßig /dev/ttyUSB0.)

>cd examples/osd/rpl-border-router/
>./run.sh
>./flash.sh

Sollte das flash-Script Fehlermeldungen der Form "...not in sync..." ausgeben, hilft es, das Script zweimal direkt hintereinander auszuführen:

>./flash.sh; ./flash.sh

Schließen Sie nun das erste Merkurboard ab und das zweite an und kompilieren und flashen Sie die Software:

>cd ../servo-sensor/
>./run.sh
>./flash.sh;./flash.sh

Anschluss der Merkurboards
Ein Merkurboard wird später (sobald benötigt) mit dem USB-Serial-Adapter an das Olimex-Board angeschlossen. Das andere Board wird an die Batterien aus dem Starterkit angeschlossen. Die Pinbelegung können sie dieser Seite entnehmen.

Der Servo verfügt über drei Leitungen: VCC (rot), GND (braun oder schwarz) und eine Steuerleitung (gelb oder orange). Die Steuerleitung wird mit Pin PE3 (SV1:03) des Merkurboards verbunden (siehe Pinbelegung). Ground (GND) des Servos wird mit Ground des Merkurboards und Ground der Stromversorgung des Servos verbunden. VCC (Betriebsspannung) des Servos wird mit VCC der Stromversorgung des Servos verbunden.

Anschluss LCD-Display
Das LCD-Display wird mit Kabel 2 an das A10-OLinuXino-LIME-UEXT angeschlossen und dieses wiederum mit Kabel 1 an das Olimex-Board. Wenn Sie das Board mit den USB-Anschlüssen nach unten halten, erkennen Sie über dem rechtesten der vier passenden Anschlüsse die Aufschrift LCD-CON. Auf diesen Anschluss müssen Sie das Kabel 1 so stecken, dass Pin 1 auf dem Olimex-Board wieder mit Pin 1 auf dem UEXT-Board verbunden ist.

Olimex Installation Grundsystem
Als Grundlage dient das von Olmex bereitgestellte Debian-Image, welches Sie hier herunterladen können, um es anschließend Ihre SD-Karte zu schreiben. In der Kommandozeile können Sie mit dem Befehl lsblk herausfinden, welche Device-Datei(en) zur SD-Karte gehören und diese vorher unmounten. Beispielsweise wird bei mir die SD-Karte als /dev/sdb erkannt und enthält zwei Partitionen.

>lsblk
>sudo umount /dev/sdb1
>sudo umount /dev/sdb2

Achtung, führen Sie den folgenden Befehl nur aus, wenn Sie sicher sind, welche Device-Datei Ihrer SD-Karte entspricht. Daten werden unwiderruflich gelöscht.

>sudo dd if=a10_Lime_debian_3.4.90_release_3.img of=/dev/sdb bs=1M

Dieser Vorgang kann eine Weile dauern. Um sich zwischendurch den aktuellen Stand anzeigen zu lassen gibt es einen Trick, welcher hier beschrieben wird.

Olimex Anpassung Grundsystem
Die von Olimex bereitgestellten Debian-Images für die SD-Karte enthalten nicht alle benötigten Kernel-Treiber. Deshalb müssen Sie einen eigenen Kernel aus den Sunxi-Quellen bauen. Verwenden Sie dazu die hier bereitgestelle Kernel-Config. Vorher installieren Sie, falls noch nicht vorhanden, noch ein paar benötigte Programme:

>sudo apt-get install gcc-4.7-arm-linux-gnueabihf ncurses-dev uboot-mkimage build-essential
>git clone https://github.com/linux-sunxi/linux-sunxi
>cd linux-sunxi
>wget http://www.noresoft.com/heizungssteuerung/a10lime_noresoft_defconfig
>cp a10lime_noresoft_defconfig arch/arm/configs/
>make ARCH=arm a10lime_noresoft_defconfig
>make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 uImage
>make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 INSTALL_MOD_PATH=out modules
>make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 INSTALL_MOD_PATH=out modules_install

Ersetzen Sie nun Kernel und -Module auf der SD-Karte durch die selbst kompilierten. Außerdem muss die Datei script.bin zur Nutzung des LCD-Displays angepasst werden. Laden Sie am besten die bereits modifizierte Datei herunter. Ich gehe wieder davon aus, dass /dev/sdb der SD-Karte entspricht.

>sudo mount /dev/sdb1 /mnt/sd
>cp arch/arm/boot/uImage /mnt/sd
>wget http://www.noresoft.com/heizungssteuerung/script.bin
>cp script.bin /mnt/sd
>sudo umount /dev/sdb1
>sudo mount /dev/sdb2 /mnt/sd
>sudo rm -rf /mnt/sd/lib/modules/*
>sudo cp -rfv out/lib/modules/3.4.90+/ /mnt/sd/lib/modules/
>sudo rm -rf /mnt/sd/lib/firmware/
>cp -rfv out/lib/firmware/ /mnt/sd/lib/
>sudo umount /dev/sdb2

Wenn das Touch-Display nicht richtig funktionieren sollte, kann man es nach dem ersten Booten kalibrieren. Dazu auf dem Olimex ein Terminal öffnen und mit root-Rechten das Programm ts_calibrate aufrufen und anschließend die Kalibrierungsdatei kopieren. Das root-Passwort lautet "olimex":

>su
>ts_calibrate
>exit
>sudo cp -f /etc/pointercal /usr/etc/pointercal

tunslip6
Um tunslip6 zu installieren, benötigen Sie die Contiki-Sourcen auf Ihrem Olimex-Rechner. Am praktischsten ist es, wenn Sie diesen mit dem Internet verbinden. Damit der Network Manager die Verbindung handhaben kann, setzen Sie in der Datei /etc/NetworkManager/NetworkManager.conf den Schlüssel managed auf true. Jetzt können Sie das Olimex-Board neustarten und anschließend im GUI rechts unten auf das Netzwerk Symbol klicken und die Verbindung herstellen.

Öffnen Sie anschließend ein Terminal und wechseln Sie dann vom Contiki-Basisordner in den Unterordner tools und kompilieren dort tunslip6, um es anschließend nach /usr/sbin/ zu kopieren:

>git clone https://github.com/contiki-os/contiki.git
>cd contiki/tools
>make tunslip6
>sudo cp tunslip6 /usr/sbin/

Um tunslip6 automatisch beim Starten des Olimex-Rechners auszuführen, benötigen Sie ein init-Script und müssen dieses registrieren. Und damit tunslip6 richtig als Daemon ausgeführt wird, verpacken Sie dessen Aufruf nochmal in ein Script, welches Sie nach /usr/sbin kopieren. Beide Scripte können Sie hier herunterladen, aber Sie sollten zumindest einmal reingucken:

>cd ~
>wget http://noresoft.com/heizungssteuerung/tunslip6
>chmod a+x tunslip6
>sudo mv tunslip6 /etc/init.d/
>wget http://noresoft.com/heizungssteuerung/tunslip6.sh
>chmod a+x tunslip6.sh
>sudo mv tunslip6.sh /usr/sbin/
>sudo update-rc.d tunslip6 defaults

Achtung, tunslip6 startet automatisch nur beim Start des Olimex-Boards. Wenn dann kein als RPL-Border-Router programmiertes Merkurboard erkannt wird, beendet sich tunslip6 wieder. Das gleiche gilt, wenn das Merkurboard im Betrieb abgezogen wird. In diesem Fall müssen Sie entweder das Olimex-Board neustarten oder tunslip6 von Hand neu starten.

In dem Script tunslip6.sh sollten Sie das IPv6 Prefix durch ein selbst generiertes ersetzen. Ein solches kann man zum Beispiel unter unique-local-ipv6.com generieren lassen.

libcoap
Die Installation des coap-client von libcoap ist sehr simpel und hier gut beschrieben. Lediglich wird dort scheinbar davon ausgegangen, dass sie Root sind. Zur Not fügen Sie bei Berechtigungsproblemen ein sudo an entsprechender Stelle ein.

heating-master
Für die Installation von heating-master benötigen Sie mindestens g++-4.7 sowie die C++ GTK+-Anbindung gtkmm. Da auf dem Debian-Image g++-4.6 installiert ist und das Makefile von heating-master den symbolischen Link g++ verwendet, muss dieser umgebogen werden.

>sudo apt-get install g++-4.7
>sudo rm /usr/bin/g++
>sudo ln -s /usr/bin/g++-4.7 /usr/bin/g++
>sudo apt-get install libgtkmm-3.0-dev

Anschließend kann der Quelltext heruntergeladen und kompiliert werden.

>git clone git://git.savannah.nongnu.org/heating-master.git
>cd heating-master
>git submodule init
>git submodule update
>./configure
>make
>sudo make install

Jetzt kann es schon losgehen. Heating Master nutzt standardmäßig das Config-File /usr/local/etc/heating-master/heating-master.conf. In diesem wird das zuvor schon verwendete IPv6-Prefix eingetragen. Außerdem jeweils pro Slave ein Name (frei wählbar), dessen MAC-Adresse (steht auf dem Merkurboard) und Min- und Maxwerte. Diese beziehen sich auf die Ansteuerung des Servos und sollten normalerweise bei 575 und 2425 bleiben.

Zur Nutzung des Kommandozeilentools heating-master und des GUI-Tools heating-master-gui lohnt sich ein Blick in heating-master --help und heating-master-gui --help. Um heating-master-gui bei jedem Start automatisch zu starten, legen Sie einen Autostart-Eintrag unter /etc/xdg/autostart/ an. heating-master-gui lässt sich jederzeit mit Alt+F4 beenden.

>wget http://noresoft.com/heizungssteuerung/heating-master-gui.desktop
>sudo mv heating-master-gui.desktop /etc/xdg/autostart/

Zugriff übers Webinterface
Zunächst einmal brauchen Sie hierzu einen Webserver. In diesem Fall wird lighttpd verwendet, ein anderer würde auch funktionieren.

>sudo apt-get update
>sudo apt-get install php5-cgi lighttpd

Um die fastcgi-Mod zu nutzen, aktivieren sie diese:

>sudo lighttpd-enable-mod fastcgi

Außerdem fügen Sie ans Ende der Datei /etc/lighttpd/lighttpd.conf folgende Zeilen zur Konfiguration:

fastcgi.server = (
  ".php" => (
    "localhost" => (
      "bin-path" => "/usr/bin/php-cgi",
      "socket" => "/var/run/lighttpd/php-fastcgi.sock",
      "max-procs" => 4, # default value
      "bin-environment" => (
        "PHP_FCGI_CHILDREN" => "1", # default value
      ),
      "broken-scriptfilename" => "enable"
    )
  )
)

Danach können Sie lighttpd neustarten.

>sudo /etc/init.d/lighttpd restart

Als Heimautomatisierungssystem mit Webanbindung wird linknx/knxweb2 verwendet. Diese können einfach mit einem Script installiert werden:

>cd ~
>wget https://raw.githubusercontent.com/selfbus/linux-bus-tools/master/raspberry/Scripts/selfbus_eib.sh
>chmod a+x selfbus_eib.sh
>sudo ./selfbus_eib.sh

Nun legen Sie einen neuen Benutzer für linknx an und machen dessen Konfigurationsdatei für ihn verfügbar.

>sudo adduser linknx
>sudo chown linknx:linknx /etc/linknx.xml

Und tragen ihn in das init.d Script von linknx ein. Dazu setzen Sie LINKNX_USER in der Datei /etc/init.d/linknx auf linknx. Anschließend sollten Sie die Datei http://127.0.0.1/knxweb2/check_install.php im Webbrowser aufrufen und die einzelnen Punkte durchgehen. Denken Sie dabei daran, dass EIBD richtigerweise deaktiviert ist. Wenn das Olimex-Board in einem lokalen Netzwerk mit Ihrem PC ist, können Sie auch über diesen auf das Webinterface zugreifen. Passen Sie dazu einfach die IP-Adresse an.

Ein beispielhaftes Design und eine passende Konfiguration können Sie hier herunterladen:

>wget http://noresoft.com/heizungssteuerung/config.xml
>wget http://noresoft.com/heizungssteuerung/design.xml
>wget http://noresoft.com/heizungssteuerung/linknx.xml
>sudo mv linknx.xml /etc/linknx.xml
>sudo mv config.xml /var/www/knxweb2/include/config.xml
>sudo mkdir /var/www/knxweb2/design/default
>sudo mv design.xml /var/www/knxweb2/design/default/design.xml

In der Datei design.xml ist wieder die IP-Adresse anzupassen. Anschließend können Sie unter http://127.0.0.1/knxweb2/ das Webinterface abrufen. Um dieses auch aus dem Internet zu erreichen, sind verschiedene Lösungen denkbar (VPN, Dynamisches DNS mit Portweiterleitung, etc). Denken Sie aber immer daran: Sobald Sie Dienste ihres Rechners für das Internet verfügbar machen, entsteht ein potentielles Sicherheitsrisiko. Tun Sie also nichts, dass Sie nicht verstehen.