Why is my TI CC2652 smart lighting control system unable to read light sensor data?

hey guys am creating a smart lighting control system using a TI CC2652 with Embedded Linux. The system should read data from a Thread light sensor, I am using the NCP Thread Border Router Software (Model: OpenThread Border Router, Version: 0.3.0). But am getting the error Error reading light level: Device not found i have verified the Thread network configuration and device commissioning, checked the light sensor status and connection, made sure the OpenThread library is correctly installed and configured here is my code
import openthread

ot_instance = openthread.Instance()
ot_instance.factory_reset()

try:
ot_instance.thread_start()
light_sensor = ot_instance.device_manager.get_device('LightSensor')
light_level = light_sensor.read_attribute('LightLevel')
except Exception as e:
print(f"Error reading light level: {e}")
finally:
ot_instance.thread_stop()
import openthread

ot_instance = openthread.Instance()
ot_instance.factory_reset()

try:
ot_instance.thread_start()
light_sensor = ot_instance.device_manager.get_device('LightSensor')
light_level = light_sensor.read_attribute('LightLevel')
except Exception as e:
print(f"Error reading light level: {e}")
finally:
ot_instance.thread_stop()
@Middleware & OS
Solution:
Thanks @Dark AI it's already been resolved, I updated the code to scan for the correct node and added some initialization checks. Here's the updated version: ```python import openzwave.option import openzwave.network...
Jump to solution
6 Replies
Camila_99$$
Camila_99$$4mo ago
Hi I think your problem is with the device name you're using in your code, make sure the device name 'LightSensor' matches exactly what the Thread network recognizes.
Dark AI
Dark AI4mo ago
it looks like the code assumes the door sensor is always node 1, have you confirmed the node ID of the door sensor? Nodes might not always be in a sequential order. You might need to scan the network for the correct node ID. Also, openzwave.network.ZWaveNetwork and openzwave.options.ZWaveOption might require proper initialization parameters. Make sure to configure the Z-Wave options correctly. Here’s a bit more detailed setup:
import openzwave.option
import openzwave.network
import time

options = openzwave.option.ZWaveOption("/dev/ttyUSB0", config_path="/path/to/openzwave/config", user_path=".", cmd_line="")
options.lock()
network = openzwave.network.ZWaveNetwork(options, log=None)

network.start()

for i in range(0, 300):
if network.state >= network.STATE_AWAKED:
break
time.sleep(1)

print("Network state:", network.state)

for node in network.nodes:
print(f"Node {node.node_id}: {node}")

door_sensor = None
for node in network.nodes:
if node.product_name == "Your Door Sensor Product Name":
door_sensor = node
break

if door_sensor:
try:
door_status = door_sensor.get_sensor_binary_value()
print(f"Door Status: {door_status}")
except Exception as e:
print(f"Error reading door status: {e}")
else:
print("Door sensor not found")

network.stop()
import openzwave.option
import openzwave.network
import time

options = openzwave.option.ZWaveOption("/dev/ttyUSB0", config_path="/path/to/openzwave/config", user_path=".", cmd_line="")
options.lock()
network = openzwave.network.ZWaveNetwork(options, log=None)

network.start()

for i in range(0, 300):
if network.state >= network.STATE_AWAKED:
break
time.sleep(1)

print("Network state:", network.state)

for node in network.nodes:
print(f"Node {node.node_id}: {node}")

door_sensor = None
for node in network.nodes:
if node.product_name == "Your Door Sensor Product Name":
door_sensor = node
break

if door_sensor:
try:
door_status = door_sensor.get_sensor_binary_value()
print(f"Door Status: {door_status}")
except Exception as e:
print(f"Error reading door status: {e}")
else:
print("Door sensor not found")

network.stop()
Enthernet Code
Enthernet Code4mo ago
@Boss lady it’s good practice to ensure the network is fully initialized before trying to access nodes. Sometimes the initialization might take a bit longer. You might want to increase the waiting time or add additional checks.
RED HAT
RED HAT4mo ago
Hey @Boss lady , it seems like the code assumes the device name is always LightSensor. Have you confirmed the device name and address? Devices might not always have straightforward names. You might need to discover the device first and make sure the Thread network is fully initialized and the devices are properly discovered before accessing them. For instance:
import openthread
import time

ot_instance = openthread.Instance()
ot_instance.factory_reset()

try:
ot_instance.thread_start()

# Wait for the Thread network to be initialized
time.sleep(5)

device_list = ot_instance.device_manager.get_device_list()
light_sensor = None
for device in device_list:
print(f"Discovered device: {device}")
if device.name == 'LightSensor':
light_sensor = device
break

if light_sensor:
light_level = light_sensor.read_attribute('LightLevel')
print(f"Light Level: {light_level}")
else:
print("Light sensor not found")

except Exception as e:
print(f"Error reading light level: {e}")

finally:
ot_instance.thread_stop()
import openthread
import time

ot_instance = openthread.Instance()
ot_instance.factory_reset()

try:
ot_instance.thread_start()

# Wait for the Thread network to be initialized
time.sleep(5)

device_list = ot_instance.device_manager.get_device_list()
light_sensor = None
for device in device_list:
print(f"Discovered device: {device}")
if device.name == 'LightSensor':
light_sensor = device
break

if light_sensor:
light_level = light_sensor.read_attribute('LightLevel')
print(f"Light Level: {light_level}")
else:
print("Light sensor not found")

except Exception as e:
print(f"Error reading light level: {e}")

finally:
ot_instance.thread_stop()
Boss lady
Boss lady4mo ago
Okay @Camila_99$$ should I scan for device name
Solution
Boss lady
Boss lady4mo ago
Thanks @Dark AI it's already been resolved, I updated the code to scan for the correct node and added some initialization checks. Here's the updated version:
import openzwave.option
import openzwave.network
import time

options = openzwave.option.ZWaveOption("/dev/ttyUSB0", config_path="/path/to/openzwave/config", user_path=".", cmd_line="")
options.lock()
network = openzwave.network.ZWaveNetwork(options, log=None)

network.start()

for i in range(0, 300):
if network.state >= network.STATE_AWAKED:
break
time.sleep(1)

print("Network state:", network.state)

door_sensor = None
for node in network.nodes.values():
print(f"Node {node.node_id}: {node}")
if node.product_name == "Your Door Sensor Product Name":
door_sensor = node
break

if door_sensor:
try:
door_status = door_sensor.get_sensor_binary_value()
print(f"Door Status: {door_status}")
except Exception as e:
print(f"Error reading door status: {e}")
else:
print("Door sensor not found")

network.stop()
import openzwave.option
import openzwave.network
import time

options = openzwave.option.ZWaveOption("/dev/ttyUSB0", config_path="/path/to/openzwave/config", user_path=".", cmd_line="")
options.lock()
network = openzwave.network.ZWaveNetwork(options, log=None)

network.start()

for i in range(0, 300):
if network.state >= network.STATE_AWAKED:
break
time.sleep(1)

print("Network state:", network.state)

door_sensor = None
for node in network.nodes.values():
print(f"Node {node.node_id}: {node}")
if node.product_name == "Your Door Sensor Product Name":
door_sensor = node
break

if door_sensor:
try:
door_status = door_sensor.get_sensor_binary_value()
print(f"Door Status: {door_status}")
except Exception as e:
print(f"Error reading door status: {e}")
else:
print("Door sensor not found")

network.stop()
Want results from more Discord servers?
Add your server