AVR-NET-IO

Seitenversionierung:
Version 1.022.01.2011Initialversion
Dr. Boris Neubert omega@online.de

Hausautomation
Neubert & Volmar

Zusammenfassung

Unsere Hausautomation beruht auf den Systemen FS20 und X10. Die Steuerung erfolgt mittels eines Hausautomationsservers und der Software fhem. Ziel war es, die von der Firma Velux stammenden funkferngesteuerten Rolladen (Abbildung der Fernsteuerungen: rechts) für drei Dachflächenfenster in die Hausautomation zu integrieren. Da mit fhem ansprechbare Interfaces von der Firma Velux nicht angeboten werden, wurde das im folgenden beschriebene Interface selbst entwickelt.

Hardware

Eine Entschlüsselung des Protokolls der Funkfernbedienung und dessen Implementierung in der culfw zwecks Nutzung eines Gerätes aus der CUL-Familie von busware wurde gar nicht erst versucht. Stattdessen sollten die Fernbedienungen selbst fernbedient werden.

Dazu kommt das Board AVR-NET-IO von Pollin zum Einsatz. Der im Bausatz mitgelieferte Mikrocontroller wurde durch einen ATMega644 von Atmel ersetzt, um für künftige Erweiterungen gewappnet zu sein. Der Mikrocontroller wurde mit der Firmware Ethersex versehen. Aus dem Intranet heraus kann über telnet ein Dialog mit der Firmware geführt werden, wobei die Skriptsprache ECMD (Ethersex Command) verwendet wird.

Von den beiden Versorgungsspannungen des AVR-NET-IO werden 3,3 V abgegriffen, um die Fernbedienungen und die im folgenden beschriebene Schaltung zu versorgen.

Die Platinen der Fernbedienungen werden aus ihren Gehäusen genommen und die 3V-Knopfzellen entfernt. Die Anschlüsse für die Versorgungsspannung sowie die Anschlußleitungen der drei Taster werden paarweise herausgeführt. Mit den drei Tastern wird der Rolladen, der an die Fernbedienung angelernt wurde, hochgefahren, angehalten oder heruntergefahren.

Das Schalten der Taster übernehmen bilaterale Analogschalter, von denen jeweils vier in einem IC vom Typ SN74HC4066 stecken. Es werden insgesamt drei ICs benötigt, um alle 12 Taster zu betätigen.

Um I/O-Pins am AVR-NET-IO zu sparen und sicherzustellen, daß immer nur eine Taste gleichzeitig gedrückt werden kann, erfolgt die Ansteuerung der SN74HC4066 mit zwei 3-to-8-Line-Dekodern/Demultiplexern vom Typ 74HCT238. Insgesamt 9 der 16 Ausgangsleitungen werden mit den Steuereingängen der Analogschalter verbunden. Von Port 2 des ATMega, der auf der 25-poligen Sub-D-Buchse des AVR-NET-IO herausgeführt wird, werden dann vier Bits fü die Bestimmung des zu schaltenden Steuereingangs und ein Bit für das eigentliche Betätigen der Taste verwendet.

Das folgende Bild zeigt den Aufbau des aktuell verwendeten Prototyps mit einem Dekoder und einem Analogschalter auf einem Experimentierboard.

Software

Client

Der ATMega644 wurde mit einer aktuellen Version von Ethersex versehen. Dabei wurde ECMD sowie der wait-Befehl und die Portsteuerung einkompiliert. Bei den Fuses ist darauf zu achten, daß JTAG abgeschaltet ist, weil sonst nicht alle Pins von Port 2 genutzt werden können.

Server

fhem wurde um die Module ECMD und ECMDDevice erweitert. Diese Module ermöglichen es, das AVR-NET-IO als physikalisches Gerät zu definieren und jede Fernbedienung als logisches Gerät. Die Klassendefinition für die Geräteklasse VeluxRC (Velux Remote Control) sieht wie folgt aus:
# Self-made interface for Velux Remote Control
# 2011-01-17bn
#

# these are the numbers of the buttons as hex chars from 0 to f;
params btnup btnstop btndown

# setter definitions for opening, stopping and closing the shutters
set up cmd {"io set ddr 2 ff\nio set port 2 1%btnup\nwait 1000\nio set port 2 00"}
set stop cmd {"io set ddr 2 ff\nio set port 2 1%btnstop\nwait 1000\nio set port 2 00"}
set down cmd {"io set ddr 2 ff\nio set port 2 1%btndown\nwait 1000\nio set port 2 00"}
Die Definition in der Konfigurationsdatei von fhem lautet wie folgt:
define AVRNETIO ECMD telnet 192.168...:2701
attr AVRNETIO room I-Interfaces
set AVRNETIO classdef VeluxRC .../VeluxRC.classdef

# Velux Rolladen
define 3.kiz.roll ECMDDevice VeluxRC 1 0 2
attr 3.kiz.roll room 3-DG
define 3.kiz.roll.log FileLog /data/Homeautomation/logs/cache/3.kiz.roll.log 3.kiz.roll:.*
attr 3.kiz.roll.log room 3-DG
Um die Rolladen dann abhängig vom Sonnenstand und Wochentag zu öffnen und zu schließen, werden diese Kommandos verwendet:
define at.sunrise.3.kiz.roll.wd at *{sunrise(1800,"06:20")} { fhem("set 3.kiz.roll up") if(!$we) }
define at.sunrise.3.kiz.roll.we at *{sunrise(1800,"08:00")} { fhem("set 3.kiz.roll up") if($we) }
define at.sunset.3.kiz.roll.1 at *{sunset(-1800,"00:00","19:30:00")} set 3.kiz.roll down