Dachfenstersteuerung für VELUX INTEGRA®

In einem Mehrfamilienhaus befindet sich im Treppenhaus ein unzugängliches Dachfenster, welches einen Motor mit Fernbedienung zum Öffnen und Schließen besitzt. Zwar schließt sich das Fenster automatisch bei Regen, jedoch wollte ich eine automatische Steuerung realisieren, die das Fenster zeitgesteuert öffnet und schließt. Außerdem war die Idee, den bereits vorhandenen Windsensor meiner Wetterstation zu nutzen um auch bei Wind das Fenster zu schließen bzw. es erst gar nicht zu öffnen.

Zwar bietet Velux selbst ein sog. VELUX INTEGRA® Control Pad an (bei neueren Modellen werden wohl auch schon intelligentere Fernbedienungen mitgeliefert), allerdings schlägt sowas gleich mit knapp 200 Euro zu Buche, was mir doch etwas teuer erschien.

Leider gibt es im Internet kaum Informationen zum verwendeten Funkprotokoll bzw. Bauteile, mit denen man eigene Steuerungen integrieren kann. Zwar schreibt man groß, dass man einen Standard namens IO Homecontrol verwenden würde, tatsächlich handelt es sich aber um einen Zusammenschluss von mehr oder weniger unbekannten Herstellern (außer eben Velux), welche IO Homecontrol verwenden. Also letztlich ein proprietäres Protokoll. Auf Mikrocontroller.net hat jemand vergeblich versucht, das Ganze zu „knacken“.

Somit war dann schließlich die Lösung, eine zweite Fernbedienung auf einer bekannten Auktionsplattform zu erstehen, diese zu zerlegen und dann damit das Fenster zu steuern. Eine solche Fernbedienung bekommt man für um die 15 €.

velux-solar-rollladen-ssl-0000s-aluminium-dunkelgrau-42002231-3

Systemdesign

Die Steuerung besteht aus folgenden Komponenten:

  • der eben beschriebenen Fernbedienung;
  • einer Schaltung, welche die Fernbedienung über digitale Signale („GPIOs“) steuert;
  • einem Mikrocontroller (in diesem Fall ein MSP430, es kam das TI Launchpad zum Einsatz);
  • der Linux-Computer, der den Mikrocontroller über USB steuert.

systemdesign

Pairing

Bevor die Fernbedienung verwendet werden kann, muss sie allerdings mit dem Fenster gepaart werden (sonst könnte ja jeder Nachbar das eigene Fenster steuern). Wenn die bereits vorhandene Fernbedienung umgebaut werden soll, entfällt dieser Schritt.

Für das Pairing gibt es zwei Möglichkeiten:

  1. man hat Zugang zum Motor am Fenster oder
  2. man hat Zugang keinen zum Motor am Fenster, aber eine bereits gepaarte Fernbedienung.

In diesem Fall musste die zweite Möglichkeit herhalten. Leider schweigt sich Velux insgesamt etwas aus, man muss viel im Internet recherchieren um überhaupt herauszufinden, wie das geht. Anscheinend soll für alles ein Handwerker/Techniker kommen. Es geht aber trotzdem: Man muss für mehr als zehn Sekunden den RESET-Knopf der Fernbedienugnsrückseite mit einer Büroklammer drücken. Nicht erschrecken: Der Motor des Fensters fährt nun auf und ab solange sich das Fenster im Paarungsmodus befindet — die alte Fernbedienung hat damit ja nichts zu tun, sie löst den Vorgang nur aus. Nun kann die neue Fernbedienung durch einen kurzen Druck auf die RESET-Taste (wieder mit der Büroklammer) registriert werden. Anschließend sollte sich das Fenster sowohl mit der alten als auch mit der neuen Fernbedienung steuern lassen. Mit den neuen KLR-100-Fernbedienungen (mit Display) geht das Ganze etwas einfacher.

Steuerung der Fernbedienung

Auf der Fernbedienung gibt es drei Tasten: „Auf“, „Ab“ und „Stopp“. Letztere wird für die Steuerung nicht benötigt, da da der Motor ohnehin am Ende stoppt. Nach dem Zerlegen entfernt man die Platine zieht die Folie über den Kontakten ab, so dass man an die blanken Schaltkontakte Drähte anlöten kann. Das Bild zeigt meinen Aufbau:

veluxctrl_fernbedienung

Für die Spannungsversorgung verwende ich die normalen Batterien weiter, eine Anbindung direkt über die USB-Spannung wäre aber über einen Spannungswandler ebenfalls denkbar.

Ein Betätigen des Schaltkontaktes führt intern zu einem „Kurzschluss“ der beiden Drähte. Dies wird in der Steuerung über einen HTC 4066 Analogschalter erreicht. Hier der entsprechende Schaltplan.

Hard- und Software des Mikrocontrollers

Um nun den Analogschalter zu steuern werden entsprechende digitale Signale (pro Taste eine) benötigt. In meinem Fall habe ich dafür einen Mikrocontroller verwendet, um dann die Signale über USB zu steuern. Es wäre aber auch denkbar gewesen, direkt GPIOs eines ARM-Controllers mit Linux zu verwenden (etwa am Raspberry Pi). Es muss allerdings darauf geachtet werden, dass der Spannungspegel (1,8/3,3/5,0 V) des verwendeten HCT 4066 zum Pegel der GPIOs passt.

Es kam ein ohnehin schon vorhandenes TI LaunchPad (MSP-EXP430G2) zum Einsatz, welches 10 Dollar kostet und teilweise auch kostenlos angeboten wird. Eine Alternative wäre der relativ teure Arduino oder jede andere Mikrocontroller-Schaltung. Im LauchPad ist zusätzlich ein USB-nach-UART-Wandler integriert, so dass die resultierende Schaltung über USB angeschlossen werden kann. Das hat zudem noch den Vorteil, dass USB auch zur Spannungsversorgung verwendet wird und so kein zusätzliches Netzteil benötigt wird.

Die verwendete Firmware kann unter Bitbucket heruntergeladen werden. Mit Hilfe des OpenSource-Programmes MSPDebug kann die Firmware auf das LauchPad programmiert werden. Soll der Quellcode kompiliert werden, so wird eine Installation des mspgcc benötigt. Natürlich können auch die proprietären Werkzeuge des Herstellers unter Windows verwendet werden. Eine Einführung zur Programmierung des MSP findet man unter Mikrocontroller.net.

Über die Stiftleisten wird das LaunchPad mit der Adapterplatine verbunden. Wie das bei mir aussieht zeigt dieses Foto:

IMG_0487

Einem PC gegenüber tritt die Platine als USB-UART-Wandler auf, kann also über die serielle Schnittstelle angesprochen werden, normalerweise /dev/ttyACM0. Zum Testen empfiehlt sich ein Terminalprogramm wie picocom (Einführung) oder gtkterm.

Es gibt drei Kommandos:

  • u → up
  • d → down
  • s → stop

Eigentliche Steuerung

Um die eigentliche Steuersoftware soll es in diesem Artikel weniger gehen. Sie ist sehr speziell auf das Projekt, die Wetterstation als Umgebung und den Webserver zugeschnitten. Bei mir läuft sie auf einem Seagate Dockstar, welchen man gar nicht mehr kaufen kann. Heute würde man dafür einen Raspberry Pi oder ein Beaglebone Black verwenden. Bei solchen Boards würde man sich den Zwischenschritt über das LaunchPad ganz sparen und die GPIOs des Boards direkt verwenden.

Trotzdem ein paar Eckpunkte der Steuerung: Die Aufgabe übernimmt ein Python-Skript, welches periodisch über den Wetter-Daemon veterod aufgerufen wird, welcher dann als Umgebungvariablen aktuelle Wetterdaten bekommt. Zusätzlich kann das Skript über den Webserver als CGI-Skript aufgerufen werden. Dann kann das Fenster über eine einfache Webseite manuell gesteuert werden. Da die Webseite sehr einfach ist, kann sie auch unterwegs über ein Mobiltelefon aufgerufen werden. Und zuguter Letzt kann das Skript auch über die Kommandozeile gestartet werden. Die Kommunikation mit dem LaunchPad wird über das Modul pyserial realisiert.

Der Quellcode ist natürlich OpenSource und über BitBucket verfügbar. Hier auch nochmal der Link auf das komplette Repository.

Veröffentlicht unter Embedded, Linux | 5 Kommentare

Compiling vim with Ruby on Windows

My favorite text editor is Vim even on Microsoft Windows (which am I forced to use sometimes at work). I also like the Lusty plugin. This plugin is written in Ruby.

And that’s the problem. Vim on Windows is compiled with dynamic Ruby support. Which means that Vim loads the Ruby library at runtime, if it’s available. So Vim ships without Ruby and if you install it, it can use it. So the theory. In practice, that works well with other scripting languages like Python or Tcl. But Ruby seems to change its ABI very often. On Linux, everything is compiled by the distribution, so everything fits together.

At the result I was unable to find a suitable Ruby for the binary distribution of Vim. So I compiled my own Vim in MinGW. I tried Visual Studio, but that’s much more complicated.

So here are the steps to compile Vim with proper Ruby support:

  1. Download and install MinGW with following packages:
    • mingw-base
    • developer-tools
    • msys-base
    • msys-gcc-c++
  2. Download and install Ruby. I’m using „2.0.0 p364 (x86)“. The important thing is that it’s the 32 bit version, not the 64 bit version.
  3. Download and install Mercurial.
  4. Add c:\mingw\bin to the %PATH%.
  5. Add c:\mingw\bin to the %PATH%.
  6. Now change into the vim directory you just cloned and execute in the src subdirectory
    the build commands
    c:\> make -f Make_ming.mak RUBY=c:\\ruby200 RUBY_VER=20 RUBY_VER_LONG=2.0.0 GUI=no
    c:\> make -f Make_ming.mak RUBY=c:\\ruby200 RUBY_VER=20 RUBY_VER_LONG=2.0.0
    This will produce a vim.exe and gvim.exe.
  7. Now just copy the executables in the already installed program files directory of vim and enjoy your vim with Ruby support!
Veröffentlicht unter Programming, Windows | Hinterlasse einen Kommentar

Use an Apple keyboard on Linux

I have to admit that I use a Mac at home as my primary workstation. I also like the Apple keyboard (the one with a cable). That keyboard is hard-wired for Macs, which means that on a PC

  • one cannot use the function keys without pressing fn
  • the tilde (in the English/International layout) is not left of the 1 key but right of the left Shift key
  • Alt and Windows are swapped (if you type blindly and ignore the labels).

The good news is that Linux comes with a hid_apple kernel driver which can “fix” all that issues. By default, that driver doesn’t change the behavior, you have to set some kernel parameters. On recent Linux distributions, all you have to do is to create a file /etc/modprobe.d/hid-apple.conf with following contents:

options hid_apple fnmode=2 iso_layout=0 swap_opt_cmd=1

I the driver is loaded in initramfs (e.g. you have an encrypted root partition, so you need to enter your password in the early boot phase), then you have to re-create the initramfs, e.g. by mkinitcpio -p linux on Arch Linux.

Veröffentlicht unter Allgemein, Linux, Mac | Hinterlasse einen Kommentar

Swap Alt and Windows key in Windows

I use VirtualBox on Mac OS. Windows guest, Mac OS host. On the Mac, the keyboard layout is a bit different: While on the PC the three first keys in the last row on the keyboard are Ctrl, Windows and Alt, the Mac has Ctrl, Alt and Command. From the key code perspective, Command and Windows are the same.

The problem is now that the Windows guest gets the key codes, i.e. Alt and Windows are swapped. Of course the label stays, the same, but if you type blind, this doesn’t matter. So to use Alt+Tab (to switch between different windows) one needs to press the second key, not the third key. Maybe some people like that behavior, but I don’t. There are feature requests, but VirtualBox developers don’t want to implement it.

So I decided to look for a solution inside the VM. There are many tools in Windows to swap keys, but most of them are way too overloaded. Searching around in the web, I found a much simpler solution which consists only of adding a value in the registry.

There’s a so-called Scan-code mapper for keyboards described in the MSDN documentation. All you need to do is to add a value called HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout\Scancode Map with following value:

00 00 00 00  00 00 00 00 
03 00 00 00  38 00 5b e0
5b e0 38 00  00 00 00 00

After that, just reboot. No need to install tools, no autostart. If you want to get rid of the behavior, just delete the registry key and you’re done.

Veröffentlicht unter Allgemein, Mac | Hinterlasse einen Kommentar

Using WPS with OpenWRT

I’m using a TP-Link TL-WR710N WLAN access point with OpenWRT installed. However, pairing non-computer devices like a Wireless speaker using the WPA passphrase is a pain (especially if it’s a good passphrase).

That’s where WPS comes into play. However, the OpenWRT web interface doesn’t support WPS out-of-the-box. To pair WPS devices with OpenWRT, I did following steps on the command line (via SSH):

  1. Removing wpad-mini using opkg
  2. Installing wpad and hostapd-utils using opkg
  3. Reboot
  4. Press the push button via hostapd_cli wps_pbc.

Now the device should be ready for pairing.

Veröffentlicht unter Allgemein, Linux | Hinterlasse einen Kommentar

Mounting NFS shares on Mac OS

When trying to mount a NFS share that is exported by a Linux NFS server (the kernel implementation), I got a „Permission denied“ error. There are lots of explanations around in the internet that recommend to use the resvport mount option like

$ sudo mount -t nfs -o resvport,rw kepler:/home/bwalle /Volumes/kepler

However, I didn’t want to change the settings on the client but on the server. This has the advantage that I can still use Finder to mount NFS which isn’t able to provide special mount options.

The solution was to use insecure in /etc/exports like

/home/bwalle *(rw,no_subtree_check,insecure)

What is insecure about that option? Well, the check comes from the early days of Unix where only the system administrator had the root password. So only applications running as root can open TCP connections with privileged source ports (below 1024). However, nowadays everybody knows that NFS in its versions 2 and 3 are insecure by design and removing the check for the source port doesn’t make it more insecure.

Veröffentlicht unter Allgemein, Mac | Hinterlasse einen Kommentar

Using a dark background with CoIDE

At work I had to develop some firmware for two different ARM micro controllers (LPC and STM32). Although I don’t like IDEs in general, after some search I’ve chosen CoIDE for that task.

It works well with Segger JLink, supports a broad list of micro controllers (including the ones our hardware had)  and it’s free (in terms of beer, not speech). Well, it only works on Microsoft Windows, but as long as I only have to work under Windows and not for Windows, that’s okay for a while.

The only thing I missed was the ability to choose a dark colour theme. Yes, I don’t like white background when coding. I hate it! CoIDE is based on Eclipse and on eclipsecolorthemes there are plenty of themes available for that IDE, including – of course – dark ones.

Unfortunately the developers of CoIDE removed the ability import options, which makes it also impossible to import that theme. But when using an text editor, the theme can be imported manually by editing a few settings file. That’s what I describe here.

So let’s download a theme and open the EPF file. It looks like

/instance/org.eclipse.ui.editors/AbstractTextEditor.Color.SelectionForeground.SystemDefault=false
/instance/org.eclipse.ui.editors/AbstractTextEditor.Color.SelectionBackground.SystemDefault=false
/instance/org.eclipse.ui.editors/AbstractTextEditor.Color.Background.SystemDefault=false
/instance/org.eclipse.ui.editors/AbstractTextEditor.Color.Foreground.SystemDefault=false

Most settings are for different Eclipse plugin (in Eclipse, every function is a plugin, even the core text editor). My theme has settings for C/C++ (CDT), Java (JDT), PHP, Ruby, Python and so on. In case of CoIDE, we care about following:

  • /instance/org.eclipse.ui.editors
  • /instance/org.eclipse.cdt.ui

That’s it. All lines that don’t start with one of the two prefixes can be removed.

Now make sure that CoIDE is not running and open the file C:\CooCox\CoIDE\configuration\ProgramData\.metadata\.plugins\org.eclipse.core.runtime\.settings\org.eclipse.cdt.ui.prefs in the text editor of your choice. That can be ViM or Notepad++. Append each line that starts with /instance/org.eclipse.cdt.ui but remove the prefix. Example:

asm_directive=147,199,99
asm_label=224,226,228
c_braces=232,226,183
c_comment_task_tag=255,139,255

The same for org.eclipse.ui.editors.prefs in the same directory: Add everything that starts with /instance/org.eclipse.ui.editors and remove the prefix. Either use rectangular selection or search and replace.

Now start CoIDE and enjoy the result:

coide_screenshot

That’s Obsidian, BTW.

Veröffentlicht unter Allgemein, Embedded | 2 Kommentare