LIFX Developer Zone

Building a LIFX packet


#42

Can you share the code you’re using? I would like to try that out as well.

In my own project, I use the node-lifx library, but I don’t know what it’s actually doing under the hood. It might be worth looking into; specifically this file which assembles a packet:

Using this folder of packets:


#43

Thanks for the answer.

I didn’t write any code yet. I tried to understand how it works first. I used the application Packet Sender, where I entered the long hexedecimal expression in HEX field, the ip address of the bulb in Address field, 56700 in Port field, slected UDP and then Send. However, nothing happens.

I also tried to use node-lifx library but failed to make it work. In examples/interactive-cli.js, I added some parameters as follows:
client.init({
address: ‘10.42.0.1’, // this is the ip address of the wifi interface
broadcast: ‘10.42.0.255’, // got this by running ipconfig
lights: [‘10.42.0.68’] // this is the ip address of the lifx bulb
});

However, nothing happened, even with the discovery turned on or off. Is there any missing parameter/configuration?
Thanks again,


#44

That’s strange. I just init without any parameters as it will auto-discover using my machine’s IP range etc. If your lights are on a different network, that’s when you’ll wanna put in that info.

When you say “nothing happened”, what do you mean? There should be a callback function that you pass into the discovery function such as lifxClient.init().on('light-new', () => {})

Here’s a project I wrote that does just that:


#45

I was digging around for an example on how to build and send @daniel_hall 's packet using Ruby but couldn’t find one. Pasting this here in case anyone finds it useful:

#!/usr/bin/env ruby

lifx_message = "310000340000000000000000000000000000000000000000000000000000000066000000005555FFFFFFFFAC0D0004000"

# split string to 2 chars in an array and convert each char pair to hex values
udp_payload = lifx_message.scan(/../).map { |s| sprintf("0x%s", s).hex }

# pack all (*) hex values as 8-bit unsigned (C)
udp_payload = udp_payload.pack('C*')

UDP_HOST   = "10.0.1.255" # broadcast to subnet with 255, or the IP address of specific bulb
UDP_PORT   = 56700
UDP_FLAGS = 0

# build socket, send broadcast option and send the packet
socket = UDPSocket.new
socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)
socket.send(udp_payload, UDP_FLAGS, UDP_HOST, UDP_PORT)
socket.close

puts "done!"

It’s a shame there is no more Ruby LAN Protocol support since the original lifx-gem is defunct. Using bindata (as the original gem did) - it should be pretty straightforward to build one…


#46

If anyone would find it helpful, I have created Java libraries for working with Lifx smart lights. You can download the source code here: https://github.com/olsenn1/LifxCommander_v1.0


#47

I see that there is set group and get group…but maybe I am misreading its intent. Can I use the group unique ID tags to set power state via broadcast. I cant imagine sending unicast to 75 bulbs are being efficient.

Would like to use broadcast with unique group addresses to control multiples lights (large scale.)


#48

Hi, Thanks for the code.
Is it possible do this in Java?

Thanks
JR