Skip to content

Conversation

silva324
Copy link
Owner

(TL;DR: use Lunatone's DALI Cockpit SW to talk to your python-dali using an emulated protocol.)

My USB-to-DALI interface is connected to a tiny headless Pi Zero, which is running some Python code (built on top of python-dali) for stuff like circadian color temperature control, automatic blinds, automatic light based on movement, etc. This all works well, but every now and then I have a need to run Lunatone's DALI Cockpit to perform some changes in my devices' configuration.

That's a Windows application, so I would usually fire up a VM with Windows and the DALI Cockpit, stop my automation, and then use usb-ip to export the USB device over network from my embedded server, e.g.:

ssh [email protected] systemctl restart usbip-bind@17b5:0020.service

...then import that at my desktop, e.g.:

usbip attach -r private.example.org -b $(usbip list -p -r private.example.org | grep 17b5:0020 | cut '-d:' -f1 | awk '{print $1}')

...and finally attach that to the VM:

echo "

" | virsh attach-device win10 /dev/stdin

That works, but it's a pain, and the automatic lights at the WC won't react to movement, and it's not great if it's dark in there.

So I got fed up and wrote this tiny emulator of the Lunatone DALI-2 IoT Gateway. The idea is that you can run this on the Linux machine which has the USB-to-DALI interface already connected, and you can let your Windows VM connect to that over IP, using the device's emulated Websocket entry point. It's possible to run this either as a standalone application, or you can simply put it into your application code.

(TL;DR: use Lunatone's DALI Cockpit SW to talk to your python-dali using
an emulated protocol.)

My USB-to-DALI interface is connected to a tiny headless Pi Zero, which
is running some Python code (built on top of python-dali) for stuff like
circadian color temperature control, automatic blinds, automatic light
based on movement, etc. This all works well, but every now and then I
have a need to run Lunatone's DALI Cockpit to perform some changes in my
devices' configuration.

That's a Windows application, so I would usually fire up a VM with
Windows and the DALI Cockpit, stop my automation, and then use usb-ip to
export the USB device over network from my embedded server, e.g.:

 ssh [email protected] systemctl restart usbip-bind@17b5\:0020.service

...then import that at my desktop, e.g.:

 usbip attach -r private.example.org -b $(usbip list -p -r private.example.org | grep 17b5:0020 | cut '-d:' -f1 | awk '{print $1}')

...and finally attach that to the VM:

 echo "<hostdev mode='subsystem' type='usb' managed='yes'><source><vendor id='0x17b5'/><product id='0x0020'/></source><address type='usb' bus='0' port='3'/></hostdev>" | virsh attach-device win10 /dev/stdin

That works, but it's a pain, and the automatic lights at the WC won't
react to movement, and it's not great if it's dark in there.

So I got fed up and wrote this tiny emulator of the Lunatone DALI-2 IoT
Gateway. The idea is that you can run this on the Linux machine which
has the USB-to-DALI interface already connected, and you can let your
Windows VM connect to that over IP, using the device's emulated
Websocket entry point. It's possible to run this either as a standalone
application, or you can simply put it into your application code.
@silva324 silva324 closed this Jun 10, 2025
@silva324 silva324 reopened this Jun 10, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants