# DALI Commissioning reduction

Is there any way I can reduce the DALI commissioning? I have an Occupancy sensor, photo sensor and a switch which are DALI devices. So every time when I turn on the device it goes for commissioning and it takes 20 secs for one device commissioning.

Is there any way that I can reduce the commissioning process each time when I turn on the device ?

Say if I write the DALI values to an EEPROM, will I be able to use the values instead of commissioning the next time when I turn on the device?

• @jsotola I removed the tag. If you, Vibhu, actually meant to use the tag: edit your question to include information on how the PIC relates to the question, and re-add the tag. – Marcus Müller Jun 26 '19 at 6:03
• Occupancy sensor, photo sensor and switch are example of Control Devices which means that IEC62386-103 is applicable, and that requires that the short address is non-volatile so if you are using compliant devices, they should not need re-addressing at power on. (Unless your controller is specifically clearing the short addresses, using SET SHORT ADDRESS with DTR0= 0xFF). – Martin Jun 26 '19 at 9:17
• It takes the values from EEPROM and I am not giving the commission command but yet it takes the normal commissioning time for the devices to start working. Can you tell me why this could be happening ? – Vibhu Jun 26 '19 at 10:58

Although the short address, along with all the other persistent variables, must be stored in non-volatile memory at some point (the spec requires non-volatile behaviour), it is possible that the manufacturer has misunderstood the command SAVE PERSISTENT VARIABLES. This command forces a flush-write, from RAM to non-volatile (eg EEROM/Flash) and was intended to be used once all commissioning processes had completed to ensure that all variables were saved to non-volatile memory at a particular time. However, some manufacturers might have thought that it meant that the variables could have volatile behaviour if the command is not issued before the next power down, which is wrong because DALI has always required non-volatile behaviour from variables marked as NVM in the Declaration of variables table.

Therefore the fix for your system might be to send SAVE PERSISTENT VARIABLES command (twice within 100ms) after commissioning/addressing.

The commissioning phase is necessary to assign addresses, i.e. to negotiate which device listens to what.

So, no, you can't skip that only on one end; both ends would need to store their configuration. Since that's not standardized, it's not happening, far as I can see. Otherwise, devices simply would have no address under which you could talk to them

20s sounds long, though. Maybe your DALI controller does a very inefficient search during commissioning?

• I tried commenting out the commissioning part in the code after first time. So after 1st time the commissioning command doesn't execute and it takes the short address from EEPROM but still the devices are blinking and doesn't work for 20 seconds, It starts to work only after that. – Vibhu Jun 26 '19 at 6:22
• It takes totally 40 seconds for an occupancy,photo and a switch. – Vibhu Jun 26 '19 at 6:26

Instead of commissioning the devices at each startup, you could just scan for used short addresses. Start with a QUERY MISSING SHORT ADDRESS, sent using broadcast addressing if you want to see if there are any devices with no short addresses. You should only be giving out new addresses to those devices which don't already have a short address.

If you want to search for which short addresses are already used, sending a query such as QUERY DEVICE STATUS, with each short address 0-63 in a loop should be faster than 20 seconds (could be less than 3 seconds).

Since you are looking for Control Devices, these are 24 bit commands from IEC62386-103

QUERY MISSING SHORT ADDRESS is opcode byte 0x33
QUERY DEVICE STATUS is opcode byte 0x30


If you were doing the same for Control Gear (lamp drivers), these would be 16 bit commands from IEC62386-102

QUERY MISSING SHORT ADDRESS is opcode byte 0x96, command number 150
QUERY STATUS is opcode byte 0x90, command number 144


But if the controller stores the short addresses used in non volatile memory, you should not have to check all the devices on each power up, you could use what you have stored in local memory.