TapHome

Resi DALI

Modbus RTU
Eingereicht von
Zuletzt aktualisiert: 06. 2026

Erfordert externes Gateway

Resi RESI-DALI-PS — Produktseite

Resi DALI

Die Vorlage Resi DALI ist das Runtime-Betriebsgegenstück zum Inbetriebnahme-Tool Resi Dali - Konfiguration. Sie verbindet TapHome mit einem vollständig adressierten DALI-Lichtbus über das Modbus-DALI-Gateway RESI-DALI-SIO oder RESI-DALI-ETH und stellt die tägliche Steuerung für bis zu 64 individuell adressierte DALI-Steuergeräte (Gears) (Kurzadressen 0–63) und 16 DALI-Broadcast-Gruppen (0–15) bereit, plus Pro-Gear-DALI-1.0-Status, Lampenausfall- und Stromausfall-Diagnose.

Die Kommunikation mit dem Gateway nutzt Modbus RTU mit 9600 Baud 8N1. Helligkeitsschreibvorgänge gehen an H:510 LAMP LEVEL (pro Gear) und H:520 GROUP LEVEL (pro Gruppe); Pro-Gear-Konfigurationsbefehle und -Abfragen werden über H:511 LAMP COMMAND / H:512 LAMP COMMAND + REPEAT getunnelt, wobei das Gateway-Register H:550 DALI STATUS auf Antwortbereitschaft gepollt wird.

Diese Vorlage setzt voraus, dass DALI-Kurzadressen bereits programmiert sind. Wenn Gears noch nicht adressiert sind, verwenden Sie zunächst die Vorlage Resi Dali - Konfiguration (oder das kostenlose Hersteller-Tool MODBUSConfigurator / DCA), um den DALI-2.0-Random-Addressing-Wizard auszuführen — siehe Beziehung zur Konfigurations-Vorlage unten.

Hardware-Anschluss

Der RESI-DALI-SIO (RS-485) und der RESI-DALI-ETH (Ethernet) sind Master-Gateways für die DIN-Schiene, die zwischen einem seriellen/Ethernet-Host und einem DALI-Lichtbus sitzen. Der SIO kommt im CEM17-Gehäuse (17,5 × 90 × 56,4 mm), der ETH im breiteren CEM35-Gehäuse (35,8 × 90 × 56,4 mm), um den RJ45-Anschluss aufzunehmen. Keines der Gateways speist den DALI-Bus selbst — ein begleitendes DALI-Bus-Netzteil (RESI-DALI-PS oder ein beliebiges kompatibles 200-mA-DALI-PSU) ist Pflicht.

Anschluss des RESI-DALI-SIO (RS-485)
RESI-DALI-SIO Anschlussschema — externes DALI-PSU (oben) und Kombination mit RESI-DALI-PS (unten)

Klemmen auf der linken Seite des RESI-DALI-SIO (oben → unten): GND, +12..48V=, RS485 DATA+ (A+), RS485 DATA- (B-), RS485 GND, RS232 TX, RS232 RX, RS232 GND. Die DALI-Bus-Klemmen auf der gegenüberliegenden Seite sind D+ / N/C / D- (3-Pin-USLIM-Block, der mittlere N/C-Pin bleibt unbeschaltet).

Verwenden Sie für eine TapHome-Installation die RS-485-Schnittstelle:

  • RS485 DATA+ (A+) → A+/D+ am TapHome-RS-485-Bus
  • RS485 DATA- (B-) → B-/D- am TapHome-RS-485-Bus
  • RS485 GND → GND am TapHome-Netzteil (empfohlen für stabile Kommunikation)
  • +12..48V= / GND → 12–48 V DC Primärversorgung
Anschluss des RESI-DALI-ETH (Ethernet)
RESI-DALI-ETH Anschlussschema — externes DALI-PSU (oben) und Kombination mit RESI-DALI-PS (unten)

Die Ethernet-Variante hat dieselben DALI-Bus-Klemmen (D+ / N/C / D-) und Primärversorgungseingänge (GND, +12..48V=), plus einen einzelnen RJ45-Anschluss für 10/100 Mbit Ethernet. Werkseinstellungen für IP sind 192.168.0.191 / 255.255.255.0 / 192.168.0.1 mit Modbus Unit ID 255; die eingebettete Web-UI verwendet die Anmeldedaten RESI / RESI.

Da es sich um eine Modbus-RTU-Vorlage handelt, kommuniziert TapHome mit dem RESI-DALI-ETH nicht über natives Modbus/TCP. Verwenden Sie es stattdessen im transparenten RTU-over-Ethernet-Modus oder platzieren Sie das SIO hinter einer Seriell-zu-IP-Bridge (Moxa NPort, USR-TCP232) — siehe Konfiguration → RTU-over-TCP-Setup unten.

DALI-Bus-Netzteil (RESI-DALI-PS)
RESI-DALI-PS — Speisung des DALI-Busses eigenständig (oben) und Kombination mit einem SIO/ETH-Gateway (unten)

Das RESI-DALI-PS liefert bis zu 200 mA auf dem DALI-Bus (Kurzschlussstrom ~225 mA, Busspannung typisch 14–18 V) und unterstützt bis zu 64 DALI-1.0-Vorschaltgeräte oder DALI-2.0-Steuergeräte auf einer einzigen Linie. Die Primärseite akzeptiert die gleiche 12–48-V-DC-Versorgung wie die SIO/ETH-Einheit. Gateway und PSU greifen auf dasselbe D+/D--Paar zu — das PSU speist den Bus, während das Gateway DALI-Frames liest und schreibt.

Drei LEDs am PSU helfen bei der Fehlerdiagnose: POWER (primär 12–48 V OK, leuchtet im Normalbetrieb dauerhaft), DALI (blinkt kurz bei DALI-Bus-Verkehr), ERR (leuchtet dauerhaft bei PSU-Fehler, DALI-Kurzschluss oder Busüberlastung — muss im Normalbetrieb aus sein).

DALI-Bus-Topologie

Eine DALI-Linie hat einige harte Einschränkungen, die sich direkt auf die Laufzeitstabilität auswirken:

LeiterquerschnittMax. DALI-Kabellänge
1,5 mm²300 m
1,0 mm²238 m
0,75 mm²174 m
0,5 mm²116 m

Die Grenze ergibt sich aus dem maximal zulässigen Spannungsabfall von 2 V über das DALI-Kabel. Weitere Regeln:

  • Maximal 64 DALI-1.0-Vorschaltgeräte und bis zu 64 DALI-2.0-Steuergeräte pro Bus (getrennte Kurzadressräume).
  • Nur Baumtopologie — keine Ringe, keine Schleifen.
  • Die tatsächliche Gear-Anzahl hängt auch von der PSU-Stromstärke ab (typisch 200 mA am RESI-DALI-PS; rechnen Sie mit ~2 mA pro Gear plus Reserve).

RESI-DALI-PS (oder ein gleichwertiges DALI-PSU) ist Pflicht. Ohne es kann das Gateway den Bus nicht treiben und jeder Pro-Gear-Lesevorgang führt zu “Gear not present!”-Timeout. Wenn ein zweites PSU auf einer langen Linie hinzugefügt wird, fügen Sie eine DALI-Drossel ein oder teilen Sie den Bus in galvanisch getrennte Segmente.

Konfiguration

Modbus-Kommunikation aktivieren

Serielle Hostparameter am RESI-DALI-SIO werden über einen 4-poligen DIP-Schalter am Modul ausgewählt. Die TapHome-Vorlage ist fest auf 9600 Baud 8N1 eingestellt, daher müssen die DIP-Schalter übereinstimmen.

DIP1DIP2Baudrate
OFFOFF9600 bd (von TapHome benötigt)
ONOFF19200 bd
OFFON38400 bd
ONONVerwendet aus FLASH programmierte Baudrate (Werkseinstellung 57600 bd)
DIP4Quelle der Modbus Unit ID
OFFFLASH-Register H:65221 wird berücksichtigt — erforderlich, wenn während der Inbetriebnahme eine nicht-standardmäßige Slave-ID programmiert wurde
ONHardware-Fallback — Unit ID wird auf 255 gesetzt, der FLASH-Wert wird ignoriert

DIP3 ist ein produktspezifisches reserviertes Bit; lassen Sie es in der Werksposition. Die Parität ist auf None festgelegt und das Stoppbit auf 1 (8N1-Frame-Format) für die oben gewählten DIP1/DIP2-Baudraten-Kombinationen.

RS-485-Abschluss: Schließen Sie den Bus mit 120 Ω an beiden Enden ab. TapHome Core stellt einen Abschluss an seinen BUS-Klemmen bereit; wenn das RESI-Gateway das letzte Gerät auf der Linie ist, fügen Sie einen diskreten 120-Ω-Widerstand zwischen A+/B- an seinen RS-485-Klemmen hinzu.

Slave-ID

Die werkseitige Modbus Unit ID ist 255 (FLASH-Register H:65221 liest 0xFFFF, was das Gateway auf 255 klemmt). Die Vorlage stellt ein modul-Ebenen-Service-Attribut Slave ID bereit, das dieses Register zurückliest, sodass die konfigurierte Adresse nach dem Import überprüft werden kann.

Die Änderung der Slave-ID ist eine Inbetriebnahme-Angelegenheit, die von der Schwestervorlage Resi Dali - Konfiguration behandelt wird — diese Runtime-Vorlage schreibt absichtlich nicht in H:65221 und löst keinen Software-Reset aus, sodass sie ohne Risiko einer versehentlichen Gateway-Neukonfiguration im Projekt aktiv bleiben kann.

RTU-over-TCP-Setup

Da die Vorlage eine Modbus-RTU-Verbindung verwendet, wird auch ein IpAddress-Importparameter für Installationen angeboten, in denen TapHome das Gateway über eine Seriell-zu-IP-Bridge (Moxa NPort, USR-TCP232) oder über das RESI-DALI-ETH im transparenten RTU-over-Ethernet-Modus erreicht. Zeigen Sie in diesem Fall IpAddress auf die IP der Bridge / ETH-Einheit und behalten Sie alle anderen Einstellungen identisch zur RS-485-Variante bei. Für reines Modbus/TCP wäre eine TCP-basierte Vorlage natürlicher — diese Modbus-RTU-Vorlage erwartet speziell gerahmten RTU-Verkehr.

Nur ein Modbus-Master gleichzeitig. Weder DALI noch Modbus RTU arbitrieren zwischen gleichzeitigen Mastern. Wenn ein PLC, BMS oder PC-Tool (z. B. MODBUSConfigurator) ebenfalls das Gateway pollt, kollidieren Gear-Abfragen und TapHome meldet sporadische “Gear not responding!”-Fehler.

Beziehung zur Konfigurations-Vorlage

Dieselbe Dali.xml-Definition wird mit dem RESI-Gateway als zwei komplementäre TapHome-Vorlagen ausgeliefert, die in verschiedenen Lebenszyklusphasen derselben Hardware arbeiten:

VorlagePhaseWas sie tutWann verwenden
Resi Dali - Konfiguration (resi-dali-daliconfig)Einmalige InbetriebnahmeDALI-2.0-Random-Addressing-Wizard, Pro-Adresse-Device-Type-Probe, Broadcast-ON/OFF-Sanity-Tests, Set Slave ID, Reset GatewayNeue Installation: Kurzadressen 0–63 zu Steuergeräten zuweisen, prüfen welche Adressen belegt sind
Resi DALI (resi-dali-dali, diese Vorlage)Tägliche Runtime-SteuerungPro-Gear-Dimmen (64 Gears), Gruppen-Dimmen (16 Gruppen), Pro-Gear-DALI-1.0-Diagnose, Verwaltung der GruppenmitgliedschaftNach der Inbetriebnahme: Endbenutzer-Lichtsteuerung

Typischer Projektablauf:

  1. Verkabeln und versorgen Sie den DALI-Bus (RESI-DALI-PS) und das Gateway.
  2. Importieren Sie die Vorlage Resi Dali - Konfiguration, führen Sie Reset Short AddressesStartScan / SEARCHADDR / COMPARE / PROGRAM SHORT ADDRESS / Check aus, bis jedes sichtbare Gear eine Kurzadresse hat. Verifizieren Sie über Gear 0..63 und Turn On / Off All Lamps.
  3. Entfernen Sie das Modul Resi Dali - Konfiguration aus dem Projekt.
  4. Importieren Sie die Vorlage Resi DALI (diese) für die Runtime-Steuerung. Mappen Sie Gear N- und Group N-Geräte auf TapHome-Szenen, Zeitpläne und Regeln.

Beide Vorlagen können auch vorübergehend koexistieren — z. B. beim Hinzufügen eines neuen Gears zu einer Live-Installation —, aber nur eine sollte gleichzeitig Modbus-Verkehr senden. Die Runtime-Vorlage lässt Aktionen zur Gateway-Neukonfiguration (Reset Gateway, Set Slave ID, Broadcast ALL LEVEL) absichtlich aus, sodass sie ohne Risiko des Überschreibens von Inbetriebnahme-Einstellungen im Projekt bleiben kann.

Das kostenlose DCA-Tool des Herstellers MODBUSConfigurator (Windows, verfügbar auf der RESI-Website) kann ebenfalls für die Inbetriebnahme statt der TapHome-Vorlage Resi Dali - Konfiguration verwendet werden. Die Runtime-Vorlage Resi DALI funktioniert unabhängig davon, welches Tool zur Zuweisung der Kurzadressen verwendet wurde.

Gerätefunktionen

Die Vorlage stellt 80 DALI-Geräte in TapHome bereit, organisiert in zwei parallelen Gruppen: 64 Gear-Dimmer (einer pro DALI-Kurzadresse) und 16 Group-Dimmer (einer pro DALI-Gruppe). Ein Service-Attribut auf Modulebene rundet das Bild ab.

Pro-Gear-Dimmen — Gear 0 … Gear 63

Jedes der 64 Service-Geräte Gear 0, Gear 1, … Gear 63 ist ein TapHome-Dimmer, der ein einzelnes DALI-Steuergerät an der entsprechenden Kurzadresse anspricht. Helligkeitsschreibvorgänge gehen an H:510 LAMP LEVEL (TapHome 0–100 % wird linear auf den durch die eigenen MIN LEVEL und MAX LEVEL des Gears begrenzten DALI-Arc-Power-Bereich skaliert); der tatsächliche Pegel wird aus H:511 über den DALI-Befehl QUERY ACTUAL LEVEL (0xA0) zurückgelesen und in 0–100 % zurückskaliert.

Wenn die Vorlage ein Gear importiert, prüft ein Init-Skript zuerst das Gear über QUERY STATUS (0x91); eine 0x8000-„keine Antwort"-Antwort markiert das Gear als nicht vorhanden (mit 1–60 s exponentiellem Back-off) und gibt „Gear not present!" im TapHome-Log aus. Wenn das Gear antwortet, liest das Init-Skript QUERY LAMP FAILURE (0x92), QUERY POWER FAILURE (0x9B), QUERY MIN LEVEL (0xA2) und QUERY MAX LEVEL (0xA1) und speichert die Ergebnisse im internen Status für das periodische Read-Skript.

Jedes Gear stellt 10 Service-Attribute bereit, die DALI-1.0/2.0-Abfragebefehle on demand lesen:

Service-AttributDALI-BefehlMeldet
Short Address(intern)Die Kurzadresse (0–63), die dieses Gerät anspricht — fest zur Vorlagen-Importzeit
Device TypeQUERY DEVICE TYPE (0x99)DT{n} (z. B. DT0 Leuchtstoff, DT6 LED, DT8 Farbe / Tunable White) oder -- bei keiner Antwort
Physical Min LevelQUERY PHYSICAL MIN LEVEL (0x9A)Hardwareseitig erzwungener Mindestdimmpegel in %
Max LevelQUERY MAX LEVEL (0xA1)Konfigurierte Obergrenze beim Skalieren von 0–100 % auf DALI Arc Power
Min LevelQUERY MIN LEVEL (0xA2)Konfigurierte Untergrenze beim Skalieren von 0–100 % auf DALI Arc Power
Power Up LevelQUERY POWER ON LEVEL (0xA3)Helligkeit nach Wiederherstellung der DALI-Bus-Spannung
System Failure LevelQUERY SYSTEM FAILURE LEVEL (0xA4)Helligkeit, wenn der Bus die Kommunikation für >500 ms verliert
GroupsQUERY GROUPS 0-7 (0xC0) + QUERY GROUPS 8-15 (0xC1)Komma-getrennte Liste der DALI-Gruppen, zu denen das Gear gehört (None oder z. B. 0,3,7)
Support Lamp FailureQUERY LAMP FAILURE (0x92) Capability-BitYes / No / -- — steuert den „Lamp failure!"-Fehler im periodischen Read-Skript
Support Power FailureQUERY POWER FAILURE (0x9B) Capability-BitYes / No / -- — steuert den „Power failure!"-Fehler im periodischen Read-Skript

Das periodische Read-Skript an jedem Gear liest den aktuellen Arc-Pegel (0xA0) und überwacht, falls unterstützt, Lampen- und Stromausfall-Flags — als TapHome-Warnungen/Fehler ausgegeben, sodass eine ausgefallene Leuchtstoffröhre oder ein abgeschalteter LED-Treiber im Aktivitätsprotokoll ohne manuelles Pollen erscheint.

Pro-Gear-Konfigurationsaktionen

Vier Service-Aktionen an jedem Gear N-Gerät schreiben DALI-Konfigurationsbefehle (automatisch innerhalb von 100 ms über H:512 LAMP COMMAND + REPEAT wiederholt, wie für nichtflüchtige DALI-Befehle erforderlich):

  • Add to Group (Parameter Group ID 0–15) — sendet ADD TO GROUP (0x60+grp), sodass das Gear der gewählten DALI-Gruppe beitritt und nachfolgende Broadcast-Gruppenschreibvorgänge befolgt.
  • Remove from Group (Parameter Group ID 0–15) — sendet REMOVE FROM GROUP (0x70+grp).
  • Reset to Default Settings — sendet DALI RESET (0x20); stellt alle NVM-Parameter des Gears (max/min/power-on/system-failure-Pegel, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
  • Set Startup Levels — erfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level in der Reihenfolge: STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D), jeweils mit 10 ms Abstand.
Gruppen-Dimmen — Group 0 … Group 15

Jedes der 16 Service-Geräte Group 0, Group 1, … Group 15 ist ein nur-schreibender TapHome-Dimmer, der einen einzelnen Arc-Power-Wert an jedes Gear in dieser DALI-Gruppe broadcastet, mit H:520 GROUP LEVEL (TapHome 0–100 % wird mit 0xFE multipliziert → DALI Arc Power 0–254). DALI lässt das Gateway den Gruppenpegel nicht zurücklesen — der Bus trägt nur den Broadcast-Schreibvorgang —, daher hält TapHome den zuletzt geschriebenen Wert als „aktuellen" Pegel. An Gruppen-Geräten gibt es keine Init- oder Read-Skripte.

Jedes Group N-Gerät stellt zwei Service-Aktionen für die Massenmitgliedschaftsverwaltung bereit:

  • Add All Lamps to Group — broadcastet ADD TO GROUP (0x60+grp) über H:532 ALL COMMAND + REPEAT. Jedes Gear am Bus tritt der Gruppe unabhängig von seiner aktuellen Kurzadresse bei.
  • Remove All Lamps from Group — broadcastet REMOVE FROM GROUP (0x70+grp). Jedes Gear verlässt die Gruppe.

Verwenden Sie Gruppen-Dimmen für „Küchenlicht", „Wohnzimmer-Downlights" oder beliebige Zonen, in denen mehrere Gears einem einzelnen Dimmer folgen sollen. Gruppenschreibvorgänge sind weitaus effizienter als die parallele Ansteuerung einzelner Gears — eine einzige Modbus-Transaktion erreicht bis zu 64 Gears gleichzeitig.

Diagnose auf Modulebene

Das Modul stellt ein einzelnes Service-Attribut bereit:

  • Slave ID — liest die im FLASH-Register H:65221 gespeicherte Modbus Unit ID. Aktiv nur, wenn DIP4 = OFF; bei DIP4 = ON zwingt das Gateway die Adresse 255 unabhängig vom FLASH-Wert. Verwenden Sie dies zur Verifizierung der Gateway-Adresse vor dem Hinzufügen weiterer Geräte, insbesondere nach einem Inbetriebnahme-Durchlauf, der eine nicht-standardmäßige ID geschrieben hat.

Fehlerbehebung

„Gear not present!" an einem bekannten adressierten Gear
  1. Prüfen Sie die DALI-Busspannung am Gear: 11,5–22,5 V (typisch 14–16 V). Niedrigere Werte deuten meist auf einen Kurzschluss oder einen Bus hin, der für den Kabelquerschnitt zu lang ist (siehe DALI-Bus-Topologie).
  2. Prüfen Sie die ERR-LED am RESI-DALI-PS — wenn sie leuchtet, ist der Bus kurzgeschlossen, überlastet oder das PSU selbst defekt.
  3. Führen Sie Gear N-Probing in der Schwestervorlage Resi Dali - Konfiguration erneut aus — die Runtime-Vorlage versucht es nur alle 1–60 s mit exponentiellem Back-off erneut, die Konfigurations-Vorlage gibt sofortiges Pass/Fail pro Adresse.
  4. Verifizieren Sie, dass das Gear tatsächlich eine Kurzadresse hat. Wenn es ersetzt oder werksseitig zurückgesetzt wurde, ist es nicht adressiert und muss über Resi Dali - Konfiguration neu in Betrieb genommen werden.
Gruppen-Dimmen hat keine Wirkung
  1. Verifizieren Sie, dass mindestens ein Gear Mitglied der Gruppe ist — öffnen Sie Gear N → Groups an jedem vermuteten Mitglied und prüfen Sie, ob die Gruppen-ID in der komma-getrennten Liste erscheint.
  2. Wenn die Mitgliedschaft fehlt, lösen Sie die Aktion Add to Group an jedem Gear einzeln aus oder verwenden Sie Add All Lamps to Group am Gruppen-Gerät für einen busweiten Broadcast.
  3. Beachten Sie, dass Group N nur-schreibend ist — der Dimmer-Slider in TapHome speichert den zuletzt geschriebenen Wert, spiegelt aber nicht den tatsächlichen Buszustand wider. Wenn Gears ausgeschaltet sind, hat der Gruppenpegel-Befehl keine Wirkung auf sie.
Lampenausfall / Stromausfall werden nicht gemeldet
  1. Öffnen Sie die Service-Attribute des Gears und prüfen Sie Support Lamp Failure / Support Power Failure. Wenn eines No liest, implementiert der Gear-Treiber diese DALI-1.0-Abfrage nicht — das periodische Read-Skript steuert den entsprechenden Fehler und warnt niemals für dieses Gear.
  2. Führen Sie Reset to Default Settings am Gear aus und importieren Sie das Gerät erneut. Das Init-Skript prüft beide Capability-Bits beim nächsten Lesezyklus erneut.
Sporadische Modbus-Fehler nach der Inbetriebnahme
  1. Stellen Sie sicher, dass kein anderer Modbus-Master (MODBUSConfigurator, PLC, BMS) das Gateway gleichzeitig pollt. DALI und Modbus arbitrieren nicht zwischen Mastern.
  2. Verifizieren Sie, dass RS485 GND zwischen dem Gateway und dem gemeinsamen Bezugspunkt des TapHome-Netzteils verbunden ist — fehlende GND ist der häufigste RS-485-Fehler auf langen Linien.
  3. Bestätigen Sie für RTU-over-TCP über eine serielle Bridge, dass die Bridge im gerahmten RTU-Modus läuft (kein Raw-TCP-Socket) und dass der Inter-Character-Gap auf der seriellen Seite das 9600-Baud-8N1-Timing einhält.
  4. Wenn die Symptome nach einer Slave-ID-Änderung über die Vorlage Resi Dali - Konfiguration aufgetreten sind, importieren Sie diese Runtime-Vorlage mit dem neuen Importparameter SlaveId erneut — das zuvor importierte Modul pollt noch an der alten Adresse.

Verfügbare Geräte

Resi DALI Modul
Serviceattribute
Slave IDLiest die im FLASH-Register H:65221 gespeicherte Modbus Unit ID — nur aktiv, wenn DIP4=OFF (Werkseinstellung 255). Verwenden Sie dies zur Verifizierung der Gateway-Adresse vor dem Hinzufügen weiterer Geräte.

Resi Dali

Serviceattribute
${xml_slave_id}
modbusr(H,65221,uint16)
Gear 0 Dimmer

DALI-Steuergerät an Kurzadresse 0 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 0

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 1 Dimmer

DALI-Steuergerät an Kurzadresse 1 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 1

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 2 Dimmer

DALI-Steuergerät an Kurzadresse 2 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 2

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 3 Dimmer

DALI-Steuergerät an Kurzadresse 3 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 3

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 4 Dimmer

DALI-Steuergerät an Kurzadresse 4 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 4

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 5 Dimmer

DALI-Steuergerät an Kurzadresse 5 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 5

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 6 Dimmer

DALI-Steuergerät an Kurzadresse 6 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 6

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 7 Dimmer

DALI-Steuergerät an Kurzadresse 7 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 7

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 8 Dimmer

DALI-Steuergerät an Kurzadresse 8 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 8

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 9 Dimmer

DALI-Steuergerät an Kurzadresse 9 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 9

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 10 Dimmer

DALI-Steuergerät an Kurzadresse 10 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 10

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 11 Dimmer

DALI-Steuergerät an Kurzadresse 11 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 11

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 12 Dimmer

DALI-Steuergerät an Kurzadresse 12 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 12

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 13 Dimmer

DALI-Steuergerät an Kurzadresse 13 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 13

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 14 Dimmer

DALI-Steuergerät an Kurzadresse 14 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 14

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 15 Dimmer

DALI-Steuergerät an Kurzadresse 15 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 15

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 16 Dimmer

DALI-Steuergerät an Kurzadresse 16 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 16

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 17 Dimmer

DALI-Steuergerät an Kurzadresse 17 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 17

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 18 Dimmer

DALI-Steuergerät an Kurzadresse 18 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 18

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 19 Dimmer

DALI-Steuergerät an Kurzadresse 19 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 19

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 20 Dimmer

DALI-Steuergerät an Kurzadresse 20 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 20

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 21 Dimmer

DALI-Steuergerät an Kurzadresse 21 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 21

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 22 Dimmer

DALI-Steuergerät an Kurzadresse 22 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 22

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 23 Dimmer

DALI-Steuergerät an Kurzadresse 23 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 23

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 24 Dimmer

DALI-Steuergerät an Kurzadresse 24 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 24

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 25 Dimmer

DALI-Steuergerät an Kurzadresse 25 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 25

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 26 Dimmer

DALI-Steuergerät an Kurzadresse 26 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 26

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 27 Dimmer

DALI-Steuergerät an Kurzadresse 27 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 27

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 28 Dimmer

DALI-Steuergerät an Kurzadresse 28 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 28

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 29 Dimmer

DALI-Steuergerät an Kurzadresse 29 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 29

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 30 Dimmer

DALI-Steuergerät an Kurzadresse 30 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 30

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 31 Dimmer

DALI-Steuergerät an Kurzadresse 31 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 31

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 32 Dimmer

DALI-Steuergerät an Kurzadresse 32 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 32

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 33 Dimmer

DALI-Steuergerät an Kurzadresse 33 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 33

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 34 Dimmer

DALI-Steuergerät an Kurzadresse 34 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 34

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 35 Dimmer

DALI-Steuergerät an Kurzadresse 35 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 35

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 36 Dimmer

DALI-Steuergerät an Kurzadresse 36 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 36

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 37 Dimmer

DALI-Steuergerät an Kurzadresse 37 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 37

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 38 Dimmer

DALI-Steuergerät an Kurzadresse 38 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 38

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 39 Dimmer

DALI-Steuergerät an Kurzadresse 39 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 39

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 40 Dimmer

DALI-Steuergerät an Kurzadresse 40 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 40

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 41 Dimmer

DALI-Steuergerät an Kurzadresse 41 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 41

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 42 Dimmer

DALI-Steuergerät an Kurzadresse 42 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 42

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 43 Dimmer

DALI-Steuergerät an Kurzadresse 43 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 43

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 44 Dimmer

DALI-Steuergerät an Kurzadresse 44 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 44

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 45 Dimmer

DALI-Steuergerät an Kurzadresse 45 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 45

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 46 Dimmer

DALI-Steuergerät an Kurzadresse 46 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 46

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 47 Dimmer

DALI-Steuergerät an Kurzadresse 47 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 47

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 48 Dimmer

DALI-Steuergerät an Kurzadresse 48 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 48

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 49 Dimmer

DALI-Steuergerät an Kurzadresse 49 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 49

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 50 Dimmer

DALI-Steuergerät an Kurzadresse 50 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 50

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 51 Dimmer

DALI-Steuergerät an Kurzadresse 51 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 51

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 52 Dimmer

DALI-Steuergerät an Kurzadresse 52 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 52

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 53 Dimmer

DALI-Steuergerät an Kurzadresse 53 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 53

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 54 Dimmer

DALI-Steuergerät an Kurzadresse 54 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 54

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 55 Dimmer

DALI-Steuergerät an Kurzadresse 55 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 55

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 56 Dimmer

DALI-Steuergerät an Kurzadresse 56 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 56

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 57 Dimmer

DALI-Steuergerät an Kurzadresse 57 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 57

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 58 Dimmer

DALI-Steuergerät an Kurzadresse 58 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 58

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 59 Dimmer

DALI-Steuergerät an Kurzadresse 59 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 59

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 60 Dimmer

DALI-Steuergerät an Kurzadresse 60 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 60

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 61 Dimmer

DALI-Steuergerät an Kurzadresse 61 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 61

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 62 Dimmer

DALI-Steuergerät an Kurzadresse 62 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 62

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Gear 63 Dimmer

DALI-Steuergerät an Kurzadresse 63 — TapHome-Dimmer, der auf DALI Arc Power 0–100 % über H:510 LAMP LEVEL (Schreiben) und QUERY ACTUAL LEVEL über H:511 (Lesen) gemappt ist, begrenzt durch die eigenen MIN / MAX LEVEL des Gears.

Register: H:511H:510 UInt16 Einheit: % numeric
Serviceattribute
KurzadresseVon diesem Gerät angesprochene DALI-Kurzadresse (0–63) — fest zur Vorlagen-Importzeit, verwendet im oberen Byte jeder Modbus-Schreibung.
Device TypeVon QUERY DEVICE TYPE (0x99) zurückgegebenes DALI-Device-Type-Byte — meldet DT0 (Leuchtstoff), DT6 (LED-Treiber), DT8 (Farbe / Tunable White) usw. oder -- bei keiner Antwort.
Physical Min LevelVom Gear gemeldeter, hardwareseitig erzwungener Mindestdimmpegel — gelesen aus QUERY PHYSICAL MIN LEVEL (0x9A), in Prozent.
Max LevelKonfigurierter DALI MAX LEVEL — gelesen aus QUERY MAX LEVEL (0xA1); verwendet als Obergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Min LevelKonfigurierter DALI MIN LEVEL — gelesen aus QUERY MIN LEVEL (0xA2); verwendet als Untergrenze beim Skalieren von TapHome 0–100 % auf DALI Arc Power.
Power Up LevelHelligkeit nach Wiederherstellung der DALI-Bus-Spannung — gelesen aus QUERY POWER ON LEVEL (0xA3).
System Failure LevelHelligkeit, die angenommen wird, wenn der DALI-Bus die Kommunikation für mehr als 500 ms verliert — gelesen aus QUERY SYSTEM FAILURE LEVEL (0xA4).
GruppenKomma-getrennte Liste der DALI-Gruppen (0–15), zu denen das Gear gehört — dekodiert aus QUERY GROUPS 0-7 (0xC0) und QUERY GROUPS 8-15 (0xC1); zeigt None oder z. B. 0,3,7.
Support Lamp FailureOb die Lampe / der Treiber die Lampenausfallerkennung unterstützt — Yes / No / --. Steuert den Lamp failure!-Fehler im periodischen Read-Skript.
Support Power FailureOb die Lampe / der Treiber die Stromausfallerkennung unterstützt — Yes / No / --. Steuert den Power failure!-Fehler im periodischen Read-Skript.
Serviceaktionen
Add to GroupFügt dieses Gear einer DALI-Gruppe (0–15) über ADD TO GROUP (0x60+grp) hinzu — automatisch innerhalb von 100 ms wiederholt, wie für DALI-Konfigurationsbefehle erforderlich.
Remove from GroupEntfernt dieses Gear aus einer DALI-Gruppe (0–15) über REMOVE FROM GROUP (0x70+grp).
Reset to Default SettingsSendet DALI RESET (0x20) — stellt jeden NVM-Parameter des Gears (max / min / power-on / system-failure level, Gruppenmitgliedschaft, Szenen) auf die Werkseinstellung zurück.
Set Startup LevelsErfasst die aktuelle Arc Power und speichert sie als Power On Level und System Failure Level — Sequenz STORE ACTUAL LEVEL IN DTR (0x21) → STORE DTR AS POWER ON LEVEL (0x2C) → STORE DTR AS SYSTEM FAILURE LEVEL (0x2D).

Gear 63

Lesen (Modul)
var x := 0; var rx := 0;
if Status > 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus < 1
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
Initialisierung
var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
Level lesen
var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end
Level schreiben
var level := 0;
if(Le > 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress << 8) + level );
Serviceattribute
${xml_short_address}
ShortAddress
${xml_device_type}
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return("DT" + x));
end

return("--")
Physical Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9A);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Max Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA1);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Min Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA2);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
Power Up Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA3);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
System Failure Level
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xA4);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, return(round((x / 0xFE) * 100) + " %"));
end

return("--")
${xml_groups}
var x := 0; var rx := 0;
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g1 := modbusr(SH, 511, uint16);
    if (g1 = 0x8000, return("--")); 

    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0xC1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var g2 := modbusr(SH, 511, uint16);
    if (g2 = 0x8000, return("--")); 

    var ret := "";

    if (getbit(g1, 0), ret := ret + "0");
    if (getbit(g1, 1), if (ret = "", ret := "1", ret := ret + ",1"));
    if (getbit(g1, 2), if (ret = "", ret := "2", ret := ret + ",2"));
    if (getbit(g1, 3), if (ret = "", ret := "3", ret := ret + ",3"));
    if (getbit(g1, 4), if (ret = "", ret := "4", ret := ret + ",4"));
    if (getbit(g1, 5), if (ret = "", ret := "5", ret := ret + ",5"));
    if (getbit(g1, 6), if (ret = "", ret := "6", ret := ret + ",6"));
    if (getbit(g1, 7), if (ret = "", ret := "7", ret := ret + ",7"));
    if (getbit(g2, 0), if (ret = "", ret := "8", ret := ret + ",8"));
    if (getbit(g2, 1), if (ret = "", ret := "9", ret := ret + ",9"));
    if (getbit(g2, 2), if (ret = "", ret := "10", ret := ret + ",10"));
    if (getbit(g2, 3), if (ret = "", ret := "11", ret := ret + ",11"));
    if (getbit(g2, 4), if (ret = "", ret := "12", ret := ret + ",12"));
    if (getbit(g2, 5), if (ret = "", ret := "13", ret := ret + ",13"));
    if (getbit(g2, 6), if (ret = "", ret := "14", ret := ret + ",14"));
    if (getbit(g2, 7), if (ret = "", ret := "15", ret := ret + ",15"));

    if (ret = "", return("None"), return(ret));
else
    return("--");
end
Support Lamp Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x92);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    if (suppLampFailure, return("Yes"), return("No"));
end

return("--")
Support Power Failure
if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x9B);
    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    var x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);

    if (suppPowerFailure, return("Yes"), return("No"));
end

return("--")
Serviceaktionen
${xml_add_to_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x60 + grp);
${xml_remove_from_group}
Parameter: Group ID (0–15 grp)
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x70 + grp);
${xml_reset_to_default_settings}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x20);
${xml_set_startup_levels}
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x21);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2c);
sleep(10);
modbusw(SH, 512, uint16, (ShortAddress << 8) + 0x2d);
Group 0 Dimmer

DALI-Broadcast-Gruppe 0 (0–15) — nur-schreibender TapHome-Dimmer, der einen einzelnen Arc-Power-Wert an jedes Gear in dieser Gruppe über H:520 GROUP LEVEL broadcastet. Der Bus echot keine Gruppenpegel zurück, daher hält TapHome den zuletzt geschriebenen Wert.

UInt16 Einheit: % numeric
Serviceaktionen
Add All Lamps to GroupBroadcastet ADD TO GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus tritt dieser Gruppe unabhängig von seiner aktuellen Kurzadresse bei.
Remove All Lamps from GroupBroadcastet REMOVE FROM GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus verlässt diese Gruppe.

Group 0

Level schreiben
var GroupAddress := 0;
modbusw(SH, 520, uint16, (GroupAddress << 8) + (Le * 0xFE));
Serviceaktionen
${xml_add_to_group_all_lamps}
var GroupAddress := 0;
modbusw(SH, 532, uint16, 0x60 + GroupAddress)
${xml_remove_from_group_all_lamps}
var GroupAddress := 0;
modbusw(SH, 532, uint16, 0x70 + GroupAddress)
Group 1 Dimmer

DALI-Broadcast-Gruppe 1 (0–15) — nur-schreibender TapHome-Dimmer, der einen einzelnen Arc-Power-Wert an jedes Gear in dieser Gruppe über H:520 GROUP LEVEL broadcastet. Der Bus echot keine Gruppenpegel zurück, daher hält TapHome den zuletzt geschriebenen Wert.

UInt16 Einheit: % numeric
Serviceaktionen
Add All Lamps to GroupBroadcastet ADD TO GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus tritt dieser Gruppe unabhängig von seiner aktuellen Kurzadresse bei.
Remove All Lamps from GroupBroadcastet REMOVE FROM GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus verlässt diese Gruppe.

Group 1

Level schreiben
var GroupAddress := 1;
modbusw(SH, 520, uint16, (GroupAddress << 8) + (Le * 0xFE));
Serviceaktionen
${xml_add_to_group_all_lamps}
var GroupAddress := 1;
modbusw(SH, 532, uint16, 0x60 + GroupAddress)
${xml_remove_from_group_all_lamps}
var GroupAddress := 1;
modbusw(SH, 532, uint16, 0x70 + GroupAddress)
Group 2 Dimmer

DALI-Broadcast-Gruppe 2 (0–15) — nur-schreibender TapHome-Dimmer, der einen einzelnen Arc-Power-Wert an jedes Gear in dieser Gruppe über H:520 GROUP LEVEL broadcastet. Der Bus echot keine Gruppenpegel zurück, daher hält TapHome den zuletzt geschriebenen Wert.

UInt16 Einheit: % numeric
Serviceaktionen
Add All Lamps to GroupBroadcastet ADD TO GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus tritt dieser Gruppe unabhängig von seiner aktuellen Kurzadresse bei.
Remove All Lamps from GroupBroadcastet REMOVE FROM GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus verlässt diese Gruppe.

Group 2

Level schreiben
var GroupAddress := 2;
modbusw(SH, 520, uint16, (GroupAddress << 8) + (Le * 0xFE));
Serviceaktionen
${xml_add_to_group_all_lamps}
var GroupAddress := 2;
modbusw(SH, 532, uint16, 0x60 + GroupAddress)
${xml_remove_from_group_all_lamps}
var GroupAddress := 2;
modbusw(SH, 532, uint16, 0x70 + GroupAddress)
Group 3 Dimmer

DALI-Broadcast-Gruppe 3 (0–15) — nur-schreibender TapHome-Dimmer, der einen einzelnen Arc-Power-Wert an jedes Gear in dieser Gruppe über H:520 GROUP LEVEL broadcastet. Der Bus echot keine Gruppenpegel zurück, daher hält TapHome den zuletzt geschriebenen Wert.

UInt16 Einheit: % numeric
Serviceaktionen
Add All Lamps to GroupBroadcastet ADD TO GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus tritt dieser Gruppe unabhängig von seiner aktuellen Kurzadresse bei.
Remove All Lamps from GroupBroadcastet REMOVE FROM GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus verlässt diese Gruppe.

Group 3

Level schreiben
var GroupAddress := 3;
modbusw(SH, 520, uint16, (GroupAddress << 8) + (Le * 0xFE));
Serviceaktionen
${xml_add_to_group_all_lamps}
var GroupAddress := 3;
modbusw(SH, 532, uint16, 0x60 + GroupAddress)
${xml_remove_from_group_all_lamps}
var GroupAddress := 3;
modbusw(SH, 532, uint16, 0x70 + GroupAddress)
Group 4 Dimmer

DALI-Broadcast-Gruppe 4 (0–15) — nur-schreibender TapHome-Dimmer, der einen einzelnen Arc-Power-Wert an jedes Gear in dieser Gruppe über H:520 GROUP LEVEL broadcastet. Der Bus echot keine Gruppenpegel zurück, daher hält TapHome den zuletzt geschriebenen Wert.

UInt16 Einheit: % numeric
Serviceaktionen
Add All Lamps to GroupBroadcastet ADD TO GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus tritt dieser Gruppe unabhängig von seiner aktuellen Kurzadresse bei.
Remove All Lamps from GroupBroadcastet REMOVE FROM GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus verlässt diese Gruppe.

Group 4

Level schreiben
var GroupAddress := 4;
modbusw(SH, 520, uint16, (GroupAddress << 8) + (Le * 0xFE));
Serviceaktionen
${xml_add_to_group_all_lamps}
var GroupAddress := 4;
modbusw(SH, 532, uint16, 0x60 + GroupAddress)
${xml_remove_from_group_all_lamps}
var GroupAddress := 4;
modbusw(SH, 532, uint16, 0x70 + GroupAddress)
Group 5 Dimmer

DALI-Broadcast-Gruppe 5 (0–15) — nur-schreibender TapHome-Dimmer, der einen einzelnen Arc-Power-Wert an jedes Gear in dieser Gruppe über H:520 GROUP LEVEL broadcastet. Der Bus echot keine Gruppenpegel zurück, daher hält TapHome den zuletzt geschriebenen Wert.

UInt16 Einheit: % numeric
Serviceaktionen
Add All Lamps to GroupBroadcastet ADD TO GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus tritt dieser Gruppe unabhängig von seiner aktuellen Kurzadresse bei.
Remove All Lamps from GroupBroadcastet REMOVE FROM GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus verlässt diese Gruppe.

Group 5

Level schreiben
var GroupAddress := 5;
modbusw(SH, 520, uint16, (GroupAddress << 8) + (Le * 0xFE));
Serviceaktionen
${xml_add_to_group_all_lamps}
var GroupAddress := 5;
modbusw(SH, 532, uint16, 0x60 + GroupAddress)
${xml_remove_from_group_all_lamps}
var GroupAddress := 5;
modbusw(SH, 532, uint16, 0x70 + GroupAddress)
Group 6 Dimmer

DALI-Broadcast-Gruppe 6 (0–15) — nur-schreibender TapHome-Dimmer, der einen einzelnen Arc-Power-Wert an jedes Gear in dieser Gruppe über H:520 GROUP LEVEL broadcastet. Der Bus echot keine Gruppenpegel zurück, daher hält TapHome den zuletzt geschriebenen Wert.

UInt16 Einheit: % numeric
Serviceaktionen
Add All Lamps to GroupBroadcastet ADD TO GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus tritt dieser Gruppe unabhängig von seiner aktuellen Kurzadresse bei.
Remove All Lamps from GroupBroadcastet REMOVE FROM GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus verlässt diese Gruppe.

Group 6

Level schreiben
var GroupAddress := 6;
modbusw(SH, 520, uint16, (GroupAddress << 8) + (Le * 0xFE));
Serviceaktionen
${xml_add_to_group_all_lamps}
var GroupAddress := 6;
modbusw(SH, 532, uint16, 0x60 + GroupAddress)
${xml_remove_from_group_all_lamps}
var GroupAddress := 6;
modbusw(SH, 532, uint16, 0x70 + GroupAddress)
Group 7 Dimmer

DALI-Broadcast-Gruppe 7 (0–15) — nur-schreibender TapHome-Dimmer, der einen einzelnen Arc-Power-Wert an jedes Gear in dieser Gruppe über H:520 GROUP LEVEL broadcastet. Der Bus echot keine Gruppenpegel zurück, daher hält TapHome den zuletzt geschriebenen Wert.

UInt16 Einheit: % numeric
Serviceaktionen
Add All Lamps to GroupBroadcastet ADD TO GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus tritt dieser Gruppe unabhängig von seiner aktuellen Kurzadresse bei.
Remove All Lamps from GroupBroadcastet REMOVE FROM GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus verlässt diese Gruppe.

Group 7

Level schreiben
var GroupAddress := 7;
modbusw(SH, 520, uint16, (GroupAddress << 8) + (Le * 0xFE));
Serviceaktionen
${xml_add_to_group_all_lamps}
var GroupAddress := 7;
modbusw(SH, 532, uint16, 0x60 + GroupAddress)
${xml_remove_from_group_all_lamps}
var GroupAddress := 7;
modbusw(SH, 532, uint16, 0x70 + GroupAddress)
Group 8 Dimmer

DALI-Broadcast-Gruppe 8 (0–15) — nur-schreibender TapHome-Dimmer, der einen einzelnen Arc-Power-Wert an jedes Gear in dieser Gruppe über H:520 GROUP LEVEL broadcastet. Der Bus echot keine Gruppenpegel zurück, daher hält TapHome den zuletzt geschriebenen Wert.

UInt16 Einheit: % numeric
Serviceaktionen
Add All Lamps to GroupBroadcastet ADD TO GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus tritt dieser Gruppe unabhängig von seiner aktuellen Kurzadresse bei.
Remove All Lamps from GroupBroadcastet REMOVE FROM GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus verlässt diese Gruppe.

Group 8

Level schreiben
var GroupAddress := 8;
modbusw(SH, 520, uint16, (GroupAddress << 8) + (Le * 0xFE));
Serviceaktionen
${xml_add_to_group_all_lamps}
var GroupAddress := 8;
modbusw(SH, 532, uint16, 0x60 + GroupAddress)
${xml_remove_from_group_all_lamps}
var GroupAddress := 8;
modbusw(SH, 532, uint16, 0x70 + GroupAddress)
Group 9 Dimmer

DALI-Broadcast-Gruppe 9 (0–15) — nur-schreibender TapHome-Dimmer, der einen einzelnen Arc-Power-Wert an jedes Gear in dieser Gruppe über H:520 GROUP LEVEL broadcastet. Der Bus echot keine Gruppenpegel zurück, daher hält TapHome den zuletzt geschriebenen Wert.

UInt16 Einheit: % numeric
Serviceaktionen
Add All Lamps to GroupBroadcastet ADD TO GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus tritt dieser Gruppe unabhängig von seiner aktuellen Kurzadresse bei.
Remove All Lamps from GroupBroadcastet REMOVE FROM GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus verlässt diese Gruppe.

Group 9

Level schreiben
var GroupAddress := 9;
modbusw(SH, 520, uint16, (GroupAddress << 8) + (Le * 0xFE));
Serviceaktionen
${xml_add_to_group_all_lamps}
var GroupAddress := 9;
modbusw(SH, 532, uint16, 0x60 + GroupAddress)
${xml_remove_from_group_all_lamps}
var GroupAddress := 9;
modbusw(SH, 532, uint16, 0x70 + GroupAddress)
Group 10 Dimmer

DALI-Broadcast-Gruppe 10 (0–15) — nur-schreibender TapHome-Dimmer, der einen einzelnen Arc-Power-Wert an jedes Gear in dieser Gruppe über H:520 GROUP LEVEL broadcastet. Der Bus echot keine Gruppenpegel zurück, daher hält TapHome den zuletzt geschriebenen Wert.

UInt16 Einheit: % numeric
Serviceaktionen
Add All Lamps to GroupBroadcastet ADD TO GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus tritt dieser Gruppe unabhängig von seiner aktuellen Kurzadresse bei.
Remove All Lamps from GroupBroadcastet REMOVE FROM GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus verlässt diese Gruppe.

Group 10

Level schreiben
var GroupAddress := 10;
modbusw(SH, 520, uint16, (GroupAddress << 8) + (Le * 0xFE));
Serviceaktionen
${xml_add_to_group_all_lamps}
var GroupAddress := 10;
modbusw(SH, 532, uint16, 0x60 + GroupAddress)
${xml_remove_from_group_all_lamps}
var GroupAddress := 10;
modbusw(SH, 532, uint16, 0x70 + GroupAddress)
Group 11 Dimmer

DALI-Broadcast-Gruppe 11 (0–15) — nur-schreibender TapHome-Dimmer, der einen einzelnen Arc-Power-Wert an jedes Gear in dieser Gruppe über H:520 GROUP LEVEL broadcastet. Der Bus echot keine Gruppenpegel zurück, daher hält TapHome den zuletzt geschriebenen Wert.

UInt16 Einheit: % numeric
Serviceaktionen
Add All Lamps to GroupBroadcastet ADD TO GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus tritt dieser Gruppe unabhängig von seiner aktuellen Kurzadresse bei.
Remove All Lamps from GroupBroadcastet REMOVE FROM GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus verlässt diese Gruppe.

Group 11

Level schreiben
var GroupAddress := 11;
modbusw(SH, 520, uint16, (GroupAddress << 8) + (Le * 0xFE));
Serviceaktionen
${xml_add_to_group_all_lamps}
var GroupAddress := 11;
modbusw(SH, 532, uint16, 0x60 + GroupAddress)
${xml_remove_from_group_all_lamps}
var GroupAddress := 11;
modbusw(SH, 532, uint16, 0x70 + GroupAddress)
Group 12 Dimmer

DALI-Broadcast-Gruppe 12 (0–15) — nur-schreibender TapHome-Dimmer, der einen einzelnen Arc-Power-Wert an jedes Gear in dieser Gruppe über H:520 GROUP LEVEL broadcastet. Der Bus echot keine Gruppenpegel zurück, daher hält TapHome den zuletzt geschriebenen Wert.

UInt16 Einheit: % numeric
Serviceaktionen
Add All Lamps to GroupBroadcastet ADD TO GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus tritt dieser Gruppe unabhängig von seiner aktuellen Kurzadresse bei.
Remove All Lamps from GroupBroadcastet REMOVE FROM GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus verlässt diese Gruppe.

Group 12

Level schreiben
var GroupAddress := 12;
modbusw(SH, 520, uint16, (GroupAddress << 8) + (Le * 0xFE));
Serviceaktionen
${xml_add_to_group_all_lamps}
var GroupAddress := 12;
modbusw(SH, 532, uint16, 0x60 + GroupAddress)
${xml_remove_from_group_all_lamps}
var GroupAddress := 12;
modbusw(SH, 532, uint16, 0x70 + GroupAddress)
Group 13 Dimmer

DALI-Broadcast-Gruppe 13 (0–15) — nur-schreibender TapHome-Dimmer, der einen einzelnen Arc-Power-Wert an jedes Gear in dieser Gruppe über H:520 GROUP LEVEL broadcastet. Der Bus echot keine Gruppenpegel zurück, daher hält TapHome den zuletzt geschriebenen Wert.

UInt16 Einheit: % numeric
Serviceaktionen
Add All Lamps to GroupBroadcastet ADD TO GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus tritt dieser Gruppe unabhängig von seiner aktuellen Kurzadresse bei.
Remove All Lamps from GroupBroadcastet REMOVE FROM GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus verlässt diese Gruppe.

Group 13

Level schreiben
var GroupAddress := 13;
modbusw(SH, 520, uint16, (GroupAddress << 8) + (Le * 0xFE));
Serviceaktionen
${xml_add_to_group_all_lamps}
var GroupAddress := 13;
modbusw(SH, 532, uint16, 0x60 + GroupAddress)
${xml_remove_from_group_all_lamps}
var GroupAddress := 13;
modbusw(SH, 532, uint16, 0x70 + GroupAddress)
Group 14 Dimmer

DALI-Broadcast-Gruppe 14 (0–15) — nur-schreibender TapHome-Dimmer, der einen einzelnen Arc-Power-Wert an jedes Gear in dieser Gruppe über H:520 GROUP LEVEL broadcastet. Der Bus echot keine Gruppenpegel zurück, daher hält TapHome den zuletzt geschriebenen Wert.

UInt16 Einheit: % numeric
Serviceaktionen
Add All Lamps to GroupBroadcastet ADD TO GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus tritt dieser Gruppe unabhängig von seiner aktuellen Kurzadresse bei.
Remove All Lamps from GroupBroadcastet REMOVE FROM GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus verlässt diese Gruppe.

Group 14

Level schreiben
var GroupAddress := 14;
modbusw(SH, 520, uint16, (GroupAddress << 8) + (Le * 0xFE));
Serviceaktionen
${xml_add_to_group_all_lamps}
var GroupAddress := 14;
modbusw(SH, 532, uint16, 0x60 + GroupAddress)
${xml_remove_from_group_all_lamps}
var GroupAddress := 14;
modbusw(SH, 532, uint16, 0x70 + GroupAddress)
Group 15 Dimmer

DALI-Broadcast-Gruppe 15 (0–15) — nur-schreibender TapHome-Dimmer, der einen einzelnen Arc-Power-Wert an jedes Gear in dieser Gruppe über H:520 GROUP LEVEL broadcastet. Der Bus echot keine Gruppenpegel zurück, daher hält TapHome den zuletzt geschriebenen Wert.

UInt16 Einheit: % numeric
Serviceaktionen
Add All Lamps to GroupBroadcastet ADD TO GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus tritt dieser Gruppe unabhängig von seiner aktuellen Kurzadresse bei.
Remove All Lamps from GroupBroadcastet REMOVE FROM GROUP über H:532 ALL COMMAND + REPEAT — jedes Gear am Bus verlässt diese Gruppe.

Group 15

Level schreiben
var GroupAddress := 15;
modbusw(SH, 520, uint16, (GroupAddress << 8) + (Le * 0xFE));
Serviceaktionen
${xml_add_to_group_all_lamps}
var GroupAddress := 15;
modbusw(SH, 532, uint16, 0x60 + GroupAddress)
${xml_remove_from_group_all_lamps}
var GroupAddress := 15;
modbusw(SH, 532, uint16, 0x70 + GroupAddress)
Verbindung: Modbus RTU • 9600 baud• 8N1 • Slave ID: $[SlaveId]
Mögliche Verbesserungen (23)
  • H:531 ALL COMMAND (broadcast DALI command) — Single-shot broadcast DALI command (no repeat). Template uses H:532 (ALL COMMAND + REPEAT) for group membership but never exposes plain ALL OFF / ALL ON / ALL ARC POWER as a service action — turn-on/off-all are not present (sibling daliconfig template has them via H:530)
  • H:530 ALL LEVEL (broadcast arc power) — Sets brightness for every gear in one Modbus write. Convenient 'turn off all lamps' / 'turn on all lamps' shortcut — implemented in the sibling daliconfig template, missing in this operational template
  • H:521 GROUP COMMAND (per-group DALI command) — Per-group DALI command (single-shot). Could expose group-level OFF / RECALL MIN / RECALL MAX / GO TO SCENE as service actions on each Group device, but template only writes H:520 GROUP LEVEL
  • H:522 GROUP COMMAND + REPEAT — Per-group DALI configuration command (auto-repeated within 100 ms). Required for STORE DTR AS GROUP SCENE etc. — not exposed as a service action
  • H:541 DIRECT 16-BIT FRAME — Raw DALI 1.0 frame send. Used by sibling daliconfig template for the DALI 2.0 random-addressing algorithm; not needed for runtime brightness control
  • I:10020-I:10027 DALI 24-BIT FRAME — DALI 2.0 24-bit frames — required for DT8 colour control (XY, colour temperature, RGBW), DALI 2.0 control gear queries, and DALI-2 input devices (push-buttons, presence detectors). Template exposes only DALI 1.0 brightness layer per gear
  • I:10030-I:10047 DALI 25-BIT eDALI FRAME — Lunatone-proprietary 25-bit eDALI frames (auto and user redundant-bit variants). Not used by any DALI 1.0 gear
  • I:10050-I:10067 DALI 28-BIT / 32-BIT FRAME — Extended DALI 2.0 frames (memory bank access, DALI-2 application controllers). Template scope is single-channel arc power per gear
  • H:500 (DSI VALUE) DSI 8-bit value send — Send a raw 8-bit DSI/DALI value with no addressing (bus-level diagnostics). Bypassed by every TapHome script
  • C:0 / H:551 DALI Bus Error — 1 = DALI bus fault / short circuit / missing PSU. Useful diagnostic — could be added as a module-level service attribute. Currently bus errors only surface indirectly through 'Gear not responding!' errors emitted by per-gear readscripts
  • H:100 DALI PRIORITY SLOT — 0..4 → 12-16 ms forward-frame timing. Default 2 (configuration). Bus-tuning parameter; template runs at default
  • H:6000 DIP SWITCH / SOFTWARE RESET — Read returns the 4 DIP switch values; write 1 reboots the gateway. Sibling daliconfig template exposes Reset Gateway / Set Slave ID; this runtime template intentionally does not (commissioning concern)
  • H:65222 / H:65224 / H:65225 BAUD_RATE / PARITY / STOP_BITS (FLASH) — FLASH-stored serial parameters. Template hard-codes 9600 8N1 in connection_details, so these are out of scope
  • I:0 / I:50-I:53 / scenes DALI 1.0 scenes (recall / store / query) — DALI 1.0 standard supports 16 stored scenes per gear/group recallable via GO TO SCENE (0x10..0x1F) and storable via STORE DTR AS SCENE (0x40..0x4F). Template exposes per-gear ADD/REMOVE FROM GROUP and RESET, but no scene recall/store/remove/query actions
  • H:512 (RECALL MAX/MIN/GOTO LAST/UP/DOWN/STEP) DALI 1.0 high-level commands per gear — RECALL MAX LEVEL (0x05), RECALL MIN LEVEL (0x06), UP (0x01), DOWN (0x02), STEP UP (0x03), STEP DOWN (0x04), GO TO LAST ACTIVE LEVEL (0x0A) — useful as service actions for visual feedback / smooth dimming. Not exposed; brightness goes only through linear scaling
  • H:512 (STORE DTR AS MAX/MIN/POWER ON/SYSTEM FAILURE LEVEL) Per-gear configuration write commands — STORE DTR AS MAX LEVEL (0x2A), STORE DTR AS MIN LEVEL (0x2B), STORE DTR AS POWER ON LEVEL (0x2C), STORE DTR AS SYSTEM FAILURE LEVEL (0x2D), STORE DTR AS FADE TIME / FADE RATE — template has 'Set Startup Levels' (combines 0x21, 0x2C, 0x2D) but does NOT expose individual writes for max/min/fade-time/fade-rate
  • H:511 (QUERY FADE TIME / FADE RATE / RANDOM ADDRESS / EXT VERSION) Additional DALI queries — QUERY FADE TIME / FADE RATE (0xA5), QUERY VERSION NUMBER (0x97), QUERY RANDOM ADDRESS H/M/L (0x98/0xC2/0xC3), QUERY CONTENT DTR/DTR1/DTR2 — not exposed in service attributes, only the 10 attributes listed per gear are populated
  • H:511 (QUERY CONTROL GEAR / RESET STATE / LIMIT ERROR / LAMP POWER ON / MISSING SHORT ADDRESS) DALI gear health / topology queries — QUERY CONTROL GEAR (0x90), QUERY RESET STATE (0x95), QUERY LIMIT ERROR (0x94), QUERY LAMP POWER ON (0x93), QUERY MISSING SHORT ADDRESS (0x96, broadcast) — diagnostic queries. Could be useful as module-level diagnostics; template exposes only QUERY STATUS / LAMP FAILURE / POWER FAILURE / DEVICE TYPE / MIN-MAX-PHYSICAL MIN-POWER UP-SYSTEM FAILURE LEVEL / GROUPS
  • H:511 (READ MEMORY LOCATION 0xC5) DALI memory bank read — READ MEMORY LOCATION (0xC5) is required to read DALI 2.0 memory banks (Bank 0 device GTIN, FW version, serial number; Bank 1 for emergency lighting). Not used
  • ASCII protocol commands Parallel ASCII text protocol — RESI gateway also exposes a CR-terminated text protocol (#LARC, #GARC, #AARC, #LGS, #LCMD, #LCMDA, #DALI CMDxx etc.). Template uses Modbus exclusively — ASCII would only matter for diagnostics/terminal access
  • DT6 fade time / fade rate / DAPC sequence Smooth dimming primitives — DAPC (Direct Arc Power Control) sequence allows fast continuous level updates for smooth dimming. Each gear has stored fade time / fade rate that affect transitions. Template writes raw arc power without configuring fade behaviour
  • DT8 colour control (XY, colour temperature, RGBW) DALI DT8 tunable white / RGB / RGBW — DT8 colour control gears (tunable white CCT, XY colour, RGBW) require DALI 2.0 24-bit frames sent via H:541 / I:10020. Template exposes plain ModbusDimmer per gear — for DT8 lamps use a dedicated DT8 template
  • DT1 emergency lighting DALI DT1 self-contained emergency lights — Emergency-luminaire device type with periodic self-tests (function/duration test) and battery state queries. Out of scope — template is general-purpose dimming

Quellen

Haben Sie ein Problem mit dieser Gerätevorlage gefunden?

Sagen Sie uns, was nicht funktioniert, was fehlt oder wie sich die Vorlage verhalten sollte. Ihr Feedback hilft uns, den Katalog genau zu halten.

Von TapHome verifiziert

Möchtest du das in deinem TapHome Core verwenden?

Öffne diese Vorlage im Kundenportal, um sie auf eine deiner Wohnungen anzuwenden, oder entwirf eine Anpassung und reiche sie an den Katalog ein.

Im Portal öffnen