brezn.muc.ccc.de_kiu_mooddev.jpg brezn.muc.ccc.de_kiu_mooddev1.jpg

Uebersicht

Die aktuellen Moodlamps besitzen einen ATMega644P als Controller, RFM12-Module fuer den Funk, RS485 Treiber fuer eine kabelgbundene Kommunikation und einen FT232R falls die Lampe an einen PC angeschlossen werden soll.

Es werden grob zwei Klassen von Lampen unterschieden:

  1. Master
    • Besitzt immer den USB-Chip und kann per USB angesteuert werden sowie Daten per Funk und RS485 an andere Lampen verteilen.
  2. Slave
    • Besitzt keinen USB-Chip oder verwendet ihn nicht. Wird per Funk oder RS485 angesteuert.

Alle Lampen besitzen immernoch die Option sie per RC5 Fernbedienung zu steuern.

Status der Platine

Die Platine liegt in Version 0.3 vor und wurde als 100er Los gefertigt.

Status der Software

Lampen

  • Die Lampen starten immer als Slave und wechseln bei Aktivitaet auf dem USB in den Mastermodus.

Kompilieren

Module

Name Funktion
fnordlicht.cStartup, andere Module initialisieren, Hauptschleife
pwm.c staticscripts.c Fnordlicht PWM und Skripte
rf_handler.c rs485.c rc5_handler.cEmpfangen von Paketen, Daten per Funk, Rs485 und IR sowie Weiterleitung an das Kommandomodul
cmd_handler.cInterpretiert empfangene Komandos und fuehr die passenden Funktionen aus
control.cHaupt-Statemachine, die die Lampe kontrolliert

Addressvergabe auf dem Funk

Momentan besitzt der MoodLampDeamon (MLD) die feste Adresse 1 und die Lampe am Rechner die feste Adresse 2.

Alle Lampen besitzen eine eindeutige Bezeichnung, in der Regel einen Domainnamen mit einem Zusatz fuer den Namen der Lampe. (z.B. moodlamp1.blinkenlichts.net)

Wenn eine Lampe eingeschaltet wird, broadcastet sie ihre Bezeichnung an die Adresse 0 und wartet darauf, dass der MLD ihr mit einem weiteren Broadcast eine lokale Adresse, sowie die lokale Serveradresse zuweist.

Eine Lampe, die eine Adresse erhalten hat, meldet sich nun per Unicast mit ihrer Bezeichnung an die Serveradresse. Der Server legt nun fuer die Lampe ein Objekt an, fragt die Version der Lampe ab und quittiert die erfolgreiche Anmeldung.

Nun führt der Server eine Liste von Lampen mit ihrer zugehörigen lokalen Adresse, sowie ihrer eindeutigen Bezeichnung. Clients können diese abrufen und so mit einer Lampe kommunizieren, deren Bezeichnung sie kennen.

Host-Software

Auf dem PC liegt der Prototyp eines in Python geschriebenen Servers vor, der die Lampen verwaltet und sie per TCP/IP im Netztwerk ansprechbar macht.

Im Verzeichnis “mld” im svn befindet sich das Eclipse-Project und ein paar Applicationen, die eine einfache Ansteuerung durchfuehren.
https://brezn.muc.ccc.de/svn/moodlamp-rf/trunk/mld/

Unter freebsd müssen die mld files angepasst werden, freebsd kernel erzeugt nicht /dev/ttyUSB0 sonder /dev/ttyU0 fuer den ftdi usb chip .

(Paralleles) Verwenden von RS485 und Funk

Da durch den USB nicht zu verachtende Latenzen in das System eingefuegt werden (~15ms mit Standard ttyUSBx Device) findet die Verwaltung der Paketdaten zum Grossteil auf der Masterlampe statt. Momentan versendet sie noch alle Pakete per Funk. Hier sollte noch eine dem Host gegenueber transparente Umschaltung auf RS485 erfolgen, falls die angesprochene Lampe per RS485 verfuegbar ist.

Die Lampen werden mit einem einzelnen Byte adressiert. Dies führt zu max. 254 Lampen im Netz.

SVN

https://brezn.muc.ccc.de/svn/moodlamp-rf/trunk/

Mit dem neuen Board ist die Funktionalitaet der ehemals nur als Interface zwischen USB und Funk dienenden bridge/ in das moodlamp-rf Paket eingeflossen.

Neben der Host-Software mld/ befinden sich unter lib/ noch die Module fuer das USART, den Funkchip und den Packetstack. Unter funkloader/ gibt es einen fuer den M66P noch nicht funktionsfaehigen Funkbootloader. Die restlichen Verzeichnisse enthalten nurnoch alten Code zum debuggen bzw. testen.

ToDo

  • Die Netzwerkschnittstelle besser Dokumentieren und ein Protokoll definieren.
  • Ein Protokoll fuer den RS485-Bus definieren. Vlt. laesst sich das unter lib/rf12packet verwendete Protokoll anwenden.
  • Die Masterlampe zum senden auf dem RS485 bringen
  • Applikationen fuer den PC entwickeln(z.B. mplayer, pulseaudio, gstreamer-Plugin)
  • Master und Slave-Software vereinigen