Forum: Projekte & Code RS232-DALI-Gateway für ATtiny2313 / Python-GUI


von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Alois N. (alois)


Lesenswert?

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 ;)

von Michael S. (Gast)


Lesenswert?

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.

von Alois N. (alois)



Lesenswert?

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.

von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Pastor Braune (Gast)


Lesenswert?

Wie funktioniert eigentlich die Dali Stromversorgung ?
Welche Spannung
Wieviel Strom
kann man damit auch Daligeräte am Bus speisen ?

mfg

von Michael S. (Gast)


Lesenswert?

Siehe Microchip AN1465

mfg

Michael S.

von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Tobias .. (bitfehler)


Lesenswert?

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?

von Dennis (Gast)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.