Selection Methods
Control specific rows, columns, layers, and fans
Row Selection
Single Row
Control all fans in a single row:

single_row.py
from windsuite_sdk import WindsuiteSDK
sdk = WindsuiteSDK(base_url="http://windshape.local")
sdk.start_communication()
sdk.fan_controller.row(2).set_intensity(percent=75).apply()
Multiple Rows
Control specific rows using a list:

multiple_rows.py
from windsuite_sdk import WindsuiteSDK
sdk = WindsuiteSDK(base_url="http://windshape.local")
sdk.start_communication()
sdk.fan_controller.rows(rows=[1, -2, -1]).set_intensity(percent=25).apply()
Row Range
Control a range of rows:

row_range.py
from windsuite_sdk import WindsuiteSDK
sdk = WindsuiteSDK(base_url="http://windshape.local")
sdk.start_communication()
print("Setting rows 3 to 5 to 60%...")
sdk.fan_controller.rows(from_row=3, to_row=5).set_intensity(percent=60)
print("Setting rows 8 to -3 to 60%... (can take negative indices)")
sdk.fan_controller.rows(from_row=8, to_row=-3).set_intensity(percent=60).apply()
Column Selection
Column selection works similarly to row selection:

column_selection.py
from windsuite_sdk import WindsuiteSDK
sdk = WindsuiteSDK(base_url="http://windshape.local")
sdk.start_communication()
print("Setting columns 2 to -2 to 80%...")
sdk.fan_controller.columns(from_col=2, to_col=-2).set_intensity(percent=80).apply()
Row and Column Combination
Combine row and column selection for precise control:

row_col_combination.py
from windsuite_sdk import WindsuiteSDK
sdk = WindsuiteSDK(base_url="http://windshape.local")
sdk.start_communication()
print("Setting row 1, 2, -1, -2 and columns 1, 2, -1, -2 to 70%...")
sdk.fan_controller.rows(rows=[1, 2, -1, -2]).columns(
columns=[1, 2, -1, -2]
).set_intensity(percent=70).apply()
Layer Selection
For multi-layer modules, you can control specific layers:
from windsuite_sdk import WindsuiteSDK
sdk = WindsuiteSDK(base_url="http://windshape.local")
sdk.start_communication()
# Control only the downstream layer
sdk.fan_controller.downstream().set_intensity(percent=50).apply()
# Control only the upstream layer
sdk.fan_controller.upstream().set_intensity(percent=75).apply()
# Not selecting a layer controls both layers
sdk.fan_controller.set_intensity(percent=60).apply()
# You can explicitly combine layers but it's not necessary as both are selected by default
sdk.fan_controller.downstream().upstream().set_intensity(percent=70).apply()
Individual Fan Selection
For 0816 modules (9 fans per layer), select specific fans:
When selecting specific fans on a single fan module (e.g., 2420), the fan selection is ignored and the fan is treated as selected.

fan_selection.py
from windsuite_sdk import WindsuiteSDK
sdk = WindsuiteSDK(base_url="http://windshape.local")
sdk.start_communication()
sdk.fan_controller.fans(fans=[1, 3, 5, 7, 9]).set_intensity(percent=71).apply()
Even/Odd Modules
For easier patterns, you can select all even or odd modules.
Example of a checkerboard pattern:

checkerboard.py
from windsuite_sdk import WindsuiteSDK
sdk = WindsuiteSDK(base_url="http://windshape.local")
sdk.start_communication()
sdk.fan_controller.fans(fans=[1, 3, 5, 7, 9]).even_modules().set_intensity(
percent=[[30]]
)
sdk.fan_controller.fans(fans=[2, 4, 6, 8]).odd_modules().set_intensity(
percent=[[100]]
)
sdk.fan_controller.apply()
