RS232-DALI - Gateway
DALI (Digitally Addressable Lighting Interface) ist ein System zur
Ansteuerung von Leuchten und wird im Bereich Hausautomation eingesetzt.
Es gibt inzwischen erschwingliche DALI-Leuchten und auch Schaltnetzteile
mit Strombegrenzung zur Ansteuerung von LED's und integrierter
DALI-Schnittstelle. Damit habe ich gearbeitet.
Das Projekt besteht aus 2 Teilen:
Der Hardware (ATTiny2313), programmiert in C und einem User-Interface,
realisiert mit Python / TKinter.
1.) Hardware + C-Programm
Ein ATTiny2313 fungiert als Gateway zwischen serieller Schnittstelle und
dem DALI-Bus.
Der Controller ist C programmiert, der Flash des Controllers ist zu 50%
genutzt.
Der Controller wird über die serielle Schnittstelle mit Datensätzen
gefüttert. Das kann manuell erfolgen über ein Terminalprogramm oder über
eine beliebige Software, die in der Lage ist, die serielle Schnittstelle
zu bedienen.
Die Datensätze bestehen aus einer Folge von genau 4 Bytes:
1. Byte = Startbyte
2. Byte = DALI-Byte 1
3. Byte = DALI-Byte 2
4. Byte = Cmd (1x senden, 2x senden, das Timing der DALI-Bit-Flanken
zurückliefern)
Die beiden DALI-Bytes müssen entsprechend der DALI-Vorgaben fertig
formatiert sein, sie werden unverändert auf den Dali-Bus geschickt.
Nach Ablauf der Sende- und Wartezeit liefert der Controller eine Antwort
zurück - auch wenn die Antwort häufig nur lautet, dass keine Antwort
empfangen wurde.
Die Rückgabe besteht aus genau 3 Byte:
1. Byte = Startbyte (0xA5)
2. Byte = Statusbyte (zeigt an, ob gültige Daten eingegangen sind oder
ob ein Fehler erkannt wurde)
3. Byte = Datenbyte (ist nur gültig, sofern das Statusbyte dies
signalisiert)
2.) User Interface in Python
Die manuellen Eingabe über ein Terminalprogramm ist möglich, aber etwas
mühsam und fehlerträchtig.
Außerdem ist das DALI-Command-Set recht umfangreich, ein Datenblatt
neben der Tastatur ist Pflicht.
So ist ein ein Tool mit grafischer Oberfläche entstanden, das die
manuelle Eingabe komfortabler gestaltet.
Aufwändigere Aktionen wie etwa das Durchsuchen des DALI-Busses nach
antwortenden Geräten, das Durchsuchen nach RandomAdressen sowie die
Vergabe von ShortAdressen sind damit per Knopfdruck möglich.
Alle Aktionen, die häufiger benötigt werden, können direkt per
Button-Click ausführt werden.
Trotz alledem ist dieses Programm nur zum Testen und zur Konfiguration
gedacht, nicht zur praktischen Steuerung eines DALI-Systems.
Weitergehende Beschreibungen und einen Schaltplan gibt's in der
DALI_readme_151001.pdf,
den C-Code für einen ATtiny2313 in "DALI_c_151001.zip",
die Python-Dateien in "DALI_python_151001.zip".
Michael S.
GUI zur Ansteuerung von Leuchten mit Python/Tkinter
In diesem Beitrag geht es darum, die Leuchten eines Gebäudes über eine
grafischen Oberfläche zu steuern.
Dazu ist eine Demo mit Python / Tkinter entstanden.
Um das Programm zu testen muss weder ein DALI-Bus noch müssen reale
Leuchten vorhanden sein.
Das Prinzip:
Vor dem Hintergrund einer Bitmap mit einer Grundrissdarstellung sind
Räume definiert (bestehend aus einem oder mehreren Rechtecken), denen
Leuchten und Schalter zugewiesen sind.
Die Leuchten können als dimmbar definiert sein, dann kann ihnen ein
Helligkeitswert von 0% bis 100% zugewiesen werden.
Nicht dimmbare Leuchten kennen nur die beiden Werte 0% und 100%.
Nach dem Klicken einer Leuchte mit der <Linken-Maustaste> öffnet sich
ein Fenster, in dem die Helligkeit des gewählten Objektes oder der
gesamten Gruppe (der die Leuchte angehört) geändert werden kann.
Klickt man mit der <Rechten-Maustaste> in einen Raum, dann können alle
Leuchten des Raumes geschaltet oder es kann eine gespeicherte Szene
aufgerufen werden.
Das Konzept der Szenen (entspricht den DALI-Szenen):
Jeder Leuchte können bis zu 16 "Szenen" zugewiesen werden.
Beim Start des Programmes sind diese Szenen undefiniert.
In jeder Szene kann genau ein Helligkeitswert (von 0% bis 100%)
gespeichert werden.
Wird eine Szene aufgerufen, der keine Definition hinterlegt ist
(Wert = 255), dann bleibt die Helligkeit der jeweiligen Leuchte
unverändert.
Um eine Szene zu definieren, klickt man eine Leuchte mit
<Shift-Linke-Maustaste> an und kann dann die aktuell eingestellte
Helligkeit in eine Szene der Leuchte kopieren.
Optional funktioniert das auch für eine ganze Leuchtengruppe oder
sämtliche Leuchten eines Raumes.
Anmerkung zu den Szenen:
In einem echten DALI-System müssen die Szeneneinstellungen nicht
softwaremäßig verwaltet werden, die Werte werden in der Hardware (der
Leuchte) abgelegt.
In den Räumen sind blaue Kreise als Schalter eingebaut.
Die Schalter sind "Nachbildungen" realer Taster (ohne Dimmfunktion):
Sie schalten den Zustand der Leuchten einer Gruppe EIN bzw. AUS.
mfg
Michael S.
Ein Nachtrag zum RS232-DALI-Gateway:
Das RS232-DALI-Gateway bietet nun noch die zusätzliche Option, passiv am
DALI-Bus zu lauschen und die Kommunikation aufzuzeichnen.
Der Controller (in diesem Fall ein AT90S2313) kann alternativ als
DALI-Master oder als DALI-Logger starten. Ein Jumper legt den Modus
fest.
Die Funktionalität des Masters ist unverändert.
Als Logger arbeitend wird der Foreward Frame und (falls vorhanden) der
Backward Frame via Serielle Schnittstelle ausgegeben.
Ein Python-Script (plus eine Prise Tkinter) interpretieren die Daten und
geben sie in einem Editorfenster in lesbarer Form aus.
Natürlich kann jeder das Programm der eigenen Wahl zur Auswertung der
Seriellen Daten einsetzen.
In der erweiterten 'Readme.pdf' ist das Protokoll beschrieben und ein
aktualisierter Schaltplan ist beigefügt.
Den C-Code für den AT90S2313 gibt's in der Datei
'DALI_C_AT90S2313_151223.zip',
den Python-Code für Master und den Logger der Datei
'DALI_Python_151223.zip'.
Viel Spaß beim Leuchten und Loggen,
mfg
Michael S.
Hallo Michael,
erstmal Danke für das Projekt und die ausführliche Dokumentation.
Das war bestimmt eine Menge Arbeit.
Ich habe hier ein paar Leuchten mit DALI EVG herumliegen und werde dein
Projekt verwenden und den DALI Gateway zu testen.
Hat es einen Grund warum die letzte und aktuelle Version des C-Codes auf
einem AT90S2313 läuft und nicht auf dem aktuelleren ATtiny2313 ??
Bei der ersten Version "DALI_c_151001.zip" für den ATtiny2313 fehlt die
DALI Logger Funktion. Richtig ??
Gruß Alois ;)
Alois N. schrieb:> Hat es einen Grund warum die letzte und aktuelle Version des C-Codes auf> einem AT90S2313 läuft und nicht auf dem aktuelleren ATtiny2313 ??
Ja, aber nur einen ganz banalen:
Ich habe aus der Zeit meiner ersten Experimente mit den Controllern noch
einige AT90S2313 liegen, die sollten nun noch eine Aufgabe erhalten.
Um den ATtiny2313 zu verwenden, müssen "nur" einige Registernamen
angepaßt werden.
> Bei der ersten Version "DALI_c_151001.zip" für den ATtiny2313 fehlt die> DALI Logger Funktion. Richtig ??
Das ist richtig.
mfg
Michael S.
Hallo Michael,
deine DALI-Schaltung habe ich inzwischen auf eine kleine Platine (78 x
50mm) gepackt und ein paar Kleinigkeiten ergänzt.
Die Platine ist aufgegliedert in drei Schaltungen:
- DALI Stromversorgung
- DALI Serial Gateway
- USB/Serial Converter
Die Stromversorgung sowie der USB/Serial-Converter können optional
bestückt werden. Auf der Platine befindet sich auch eine 6-polige
AVR-ISP Leiste zum Programmieren des Microcontrollers.
Den Quellcode Stand 23.12.2015 habe ich inzwischen auf den ATtiny2313
angepasst.
Beim Anlernen von neuen DALI-Ballasts ist mir ein Problem im
Python-Programmcode für den DALI-Master aufgefallen:
Während der Suche nach der RandomAdr kann sich das Programm aufhängen.
Bei neuen, bislang noch nicht verwendeten Geräten wird während des
Commissioning übrigens die DALI-Adresse 127 (255 >> 1) angezeigt.
mfg
Michael S.
In diesem Thread hatte ich vor einiger Zeit ein RS232-DALI-Gateway und
später eine GUI mit Python / Tkinter zum Schalten von symbolischen
Leuchten per Mausklick vorgestellt.
In diesem Beitrag sind beide Ansätze vereint, nun können in einem
Grundriss Leuchten angewählt werden, die holen die aktuellen
Helligkeitswerte aus der DALI-Leuchte im Raum und öffnen einen Dialog
zum Schalten von Einzelleuchten oder Leuchtengruppen.
Das GUI-Projekt ist noch einmal gründlich überarbeitet und aufgeräumt
worden.
Die Kommunikation mit den echten DALI-Geräten am DALI-Bus ist
implementiert und in einem Modul zusammengefasst.
Und die Definition des "baulichen Projektes" ist in eine XML-Datei
ausgelagert.
Um die Arbeitsweise praktisch ausprobieren und nachvollziehen zu können,
wird nun allerdings ein DALI-Bus mit realen DALI-Leuchten sowie ein
geeignetes Gateway benötigt.
Ok, genaugenommen ist nur eine Serielle Schnittstelle erforderlich, dann
startet das Programm zumindest - es tut aber nichts wirklich nützliches.
In der readme.pdf bemühe ich mich, die Arbeitsweise der GUI, die
Schnittstelle zum DALI-Bus und den Aufbau der Projektdefinition in der
XML-Datei ausführlicher zu erhellen.
Viel Spaß beim Schalten und Walten,
mfg
Michael S.
Nachtrag zum DaliGateway
Bei der Arbeit mit dem DaliGateway traten im praktischen Betrieb bei
einigen Leuchten Probleme auf:
Sie ließen sich zwar ansteuern, aber das Auslesen von Parametern führte
(fast immer) zu Fehlermeldungen.
Die Analyse der Ursachen brachte folgendes Ergebnis:
Die Bitzeiten der Anworten weichen teilweise deutlich von den
Defaultwerten ab - um bis zu 30%.
Daher mußte ich die Grenzwerte mit den Konstanten HTMIN, HTMAX (HT für
HalberTakt) und GTMIN, GTMAX (GT für GanzerTakt) anpassen.
Wen es interessiert, der findet eine ausführlichere Beschreibung in der
Datei "Nachtrag_160608.pdf".
Die aktualisierte "DALI_main.c" gibt's als "DALI_main_16080.zip" .
mfg
Michael S.
PS.
Kennt jemand Quellen/Dokumentationen zu DALI Version 2 und / oder zur
eDALI-Erweiterung von Tridonic ?
Ein kurzer Hinweis wäre hilfreich.
Michael S. schrieb:> PS.>> Kennt jemand Quellen/Dokumentationen zu DALI Version 2 und / oder zur> eDALI-Erweiterung von Tridonic ?>> Ein kurzer Hinweis wäre hilfreich.
Hallo Michael,
hast du mittlerweile schon Quellen / Dokumentationen zu DALI 2 gefunden
und könntest die bereitstellen?
Oder jemand anderes?
Hi Leute,
weiß jemand ob das Interface mit der Lunatone Software und Lunatone DALI
DT8 Geräten funktioniert? Mir geht es lediglich ums setzen der DALI
Adresse und alles was nötig ist, damit der DALI Aktor funktioniert.
Gesteuert werden soll es mit einem KNX-DALI Gateway.