(By the way, this is using my own code for packet creation, parsing, sending and receiving - so it may well be due to some kind of packet creation bug that’s entirely my own fault. The output below is a (slightly cleaned up) dump of what my code prints out into the terminal.)
OK, so this is what happens when I broadcast a packet with source set to 0
Frame header: size 36 origin 0 tagged 1 addressable 1 protocol 1024 source 0
Frame address: target 0 reserved0 0 reserved1 0 ack_required 1 res_required 1 sequence 0
Protocol header: reserved2 0 message_type 2 reserved3 0
Sent message type: 2 (Device::GetService)
To: 192.168.0.255 56700
Payload: {}
Waiting for 1 message(s) of type 3
Received message from: 192.168.0.53 56700
Frame header: size 36 origin 1 tagged 0 addressable 1 protocol 1024 source 0
Frame address: target 151646752830416 reserved0 55346429577548 reserved1 0 ack_required 0 res_required 0 sequence 0
Protocol header: reserved2 1437029037422000004 message_type 45 reserved3 0
Message type: 45 (Device::Acknowledgement)
Payload: {}
Received message from: 192.168.0.53 56700
Frame header: size 41 origin 1 tagged 0 addressable 1 protocol 1024 source 0
Frame address: target 151646752830416 reserved0 55346429577548 reserved1 0 ack_required 0 res_required 0 sequence 0
Protocol header: reserved2 1437029037431000004 message_type 3 reserved3 0
Message type: 3 (Device::StateService)
Payload: {'port': 56700, 'service': 1}
Which is all present and correct. But if I broadcast the same message with source 12345, I don’t receive either an acknowledgement or a response. If I keep the socket listening for a few minutes instead of timing it out, eventually I get something like this:
Frame header: size 36 origin 0 tagged 1 addressable 1 protocol 1024 source 12345
Frame address: target 0 reserved0 0 reserved1 0 ack_required 1 res_required 1 sequence 0
Protocol header: reserved2 0 message_type 2 reserved3 0
Sent message type: 2 (Device::GetService)
To: 192.168.0.255 56700
Payload: {}
Waiting for 1 message(s) of type 3
Received message from: 192.168.0.53 56700
Frame header: size 100 origin 1 tagged 0 addressable 1 protocol 1024 source 1380667970
Frame address: target 151646752830416 reserved0 55346429577548 reserved1 0 ack_required 0 res_required 0 sequence 0
Protocol header: reserved2 1437030738160000004 message_type 59 reserved3 0
Message type: 59 (Device::EchoResponse)
Payload: {'random payload': bytearray(b'LIFXU\xae\xe1c')}
Received message from: 192.168.0.53 56700
Frame header: size 88 origin 1 tagged 0 addressable 1 protocol 1024 source 1380667970
Frame address: target 151646752830416 reserved0 55346429577548 reserved1 0 ack_required 0 res_required 0 sequence 0
Protocol header: reserved2 1437030738177000004 message_type 107 reserved3 0
Message type: 107 (Light::State)
Payload: {'hue': 0, 'saturation': 0, 'brightness': 65535, 'kelvin': 3500, 'power_level': 65535, 'reserved1': 0, 'reserved0': 0, 'label': bytearray(b'Downlight 3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')}
Received message from: 192.168.0.53 56700
Frame header: size 38 origin 1 tagged 0 addressable 1 protocol 1024 source 1380667970
Frame address: target 151646752830416 reserved0 55346429577548 reserved1 0 ack_required 0 res_required 0 sequence 0
Protocol header: reserved2 1437030740160000004 message_type 111 reserved3 0
Message type: 111 (unknown message type)
Payload: {}
Received message from: 192.168.0.53 56700
Frame header: size 50 origin 1 tagged 0 addressable 1 protocol 1024 source 1380667970
Frame address: target 151646752830416 reserved0 55346429577548 reserved1 0 ack_required 0 res_required 0 sequence 0
Protocol header: reserved2 1437030742209000004 message_type 13 reserved3 0
Message type: 13 (Device::StateHostInfo)
Payload: {'reserved': 5600, 'signal': 0.0, 'rx': 0, 'tx': 0}
Received message from: 192.168.0.53 56700
Frame header: size 50 origin 1 tagged 0 addressable 1 protocol 1024 source 1380667970
Frame address: target 151646752830416 reserved0 55346429577548 reserved1 0 ack_required 0 res_required 0 sequence 0
Protocol header: reserved2 1437030744209000004 message_type 17 reserved3 0
Message type: 17 (Device::StateWifiInfo)
Payload: {'reserved': 0, 'signal': 3.1622775509276835e-07, 'rx': 4633, 'tx': 5786}
Received message from: 192.168.0.53 56700
Frame header: size 40 origin 1 tagged 0 addressable 1 protocol 1024 source 1380667970
Frame address: target 151646752830416 reserved0 55346429577548 reserved1 0 ack_required 0 res_required 0 sequence 0
Protocol header: reserved2 1437030746209000004 message_type 406 reserved3 0
Message type: 406 (unknown message type)
Payload: {}
I’m guessing that maybe these messages aren’t actually a response to my message at all - they’re responding to something else that’s sending messages to my bulbs - like maybe Lifx Cloud is checking in with the bulbs or something?
But regardless, that doesn’t explain why I don’t get an acknowledgment or a StateService message in response if I set the source to 12345 instead of 0 in my GetService message.