A Home Assistant Integration for the Nice TT6 control unit for tubular motors.
The Nice TT6 control unit is used to control projector screens, garage doors, awnings and blinds. It is white labelled by Screen Research as the MCS-N-12V-RS232 projector screen controller and by Beamax as the 11299 projector screen controller.
The control unit has an RS232 serial connection but is known to work with USB to serial converters.
The Integration allows for the control of multiple Covers. There can be one or many control units, each controlling one or many Covers.
The following Home Assistant entities are created for each Cover:
- A
cover
entity that can be used to control each Cover - A
sensor
entity that represents the drop of the Cover
The Integration offers a service called nice.set_drop_percent which will set the drop percentage to greater precision than the standard cover.set_cover_position
service.
The Integration offers a service called nice.apply_preset which will move any number of Covers to preset positions.
The Integration was designed with projector screens in mind and offers some optional features for controlling multiple Covers in a Constant Image Width (CIW) configuration.
A Cover can optionally have an Image Area defined to represent the screen. Then, an optional helper called a "CIW Helper" can be defined which links a Cover that is a Screen and a Cover that is a Mask. The following sensor
entities are created for each "CIW Helper":
- Image Height
- Image Width
- Image Diagonal
- Aspect Ratio
The sensors all round their values to 2 decimal places. They also offer a state variable called full_precision_value
that is not rounded.
Add the Integration to Home Assistant as follows:
- Navigate to Configuration->Integrations
- Click on Add Integration
- Search for Nice
- Click on the Nice integration to initiate the configuration flow
Enter the details of the Integration:
Field | Description |
---|---|
Title | The title of the integration |
Click Submit to move to the next step.
Enter a name for the controller and the serial port.
Examples of valid serial port definitions are:
/dev/ttyUSB0
(Linux)COM3
(Windows)socket://192.168.0.100:50000
(if you are using a TCP/IP to serial converter)
If there is another controller to be added then check the box "Add Another Controller?"
Click Submit to move to the next step or create another controller as appropriate. Note that the Integration will validate the controller at this point by trying to connect to it.
Enter the following details:
Field | Description |
---|---|
Cover Name | Name of the Cover |
Controller | The Controller Select from a drop down list |
Device Address | The TTBus address of the device Get this from your vendor documentation - as an example, the projector screen might be device 2 and the mask might be device 3 |
Device Node | The TTBus node of the device Again, get this from the documentation - usually 4 |
Drop | The maximum drop of the Cover in the unit system specified in the Integration definition |
Image Area | Check this box if the Cover is a screen If the Cover has an Image Area then additional details will be collected in the next step |
Click on Submit to move to the next step.
If the Cover has an Image Area then enter the following details:
Field | Description |
---|---|
Border Below | Height of the border below the image in the unit system specified in the Integration definition |
Height | The height of the Image Area in the unit system specified in the Integration definition |
Aspect Ratio | The Aspect Ratio |
Height plus the Border Below cannot be larger than the maximum drop defined in the previous step.
Click on Submit to move to the next step.
If there is another Cover to be created then check "Add Another Cover?"
Click on Submit to either create another Cover or finish the configuration.
Navigate to Configuration->Integrations, locate the Nice Integration and click on "Configure". The following options can be seleced from the "Choose Action" screen.
Option | Description |
---|---|
Add CIW Helper | Add a CIW Helper This option is shown if there is at least one Cover with an Image Area (a Screen) and one without (a Mask). |
Del CIW Helper | Delete a CIW Helper This option is only shown if any CIW Helpers exist. |
Add Preset | Add a Preset |
Del Preset | Delete a Preset This option is only shown if any Presets exist. |
Select an option and click on Submit to move to the next step.
Enter the following details and then click on Submit to create the CIW Helper.
Field | Description |
---|---|
Name | A friendly name for the Object |
Screen | Name of the screen Only Covers with an Image Area can be selected |
Mask | Name of the mask Only covers without an image Area can be selected |
Select the CIW Helper(s) to be deleted. Click on Submit to delete them.
Give the Preset a name and select the list of Covers to be moved. Click Submit to define the drop for each Cover in turn.
Select the Preset(s) to be deleted. Click on Submit to delete them.
Takes the name of the Preset as the argument
Takes a Cover entity and the percentage drop as parameters. This service will set the drop to an accuracy of up to 0.1% as opposed to the cover.set_current_position
service which uses an int
to specify the position.
Takes a Cover entity and the command name as parameters.
Valid commands are as follows.
"options": {
"stop": "Stop",
"move_down": "Move down",
"move_up": "Move up",
"move_pos_1": "Move to built-in preset 1",
"move_pos_2": "Move to built-in preset 2",
"move_pos_3": "Move to built-in preset 3",
"move_pos_4": "Move to built-in preset 4",
"move_pos_5": "Move to built-in preset 5",
"move_pos_6": "Move to built-in preset 6",
"move_up_step": "Move up a step",
"move_down_step": "Move down a step",
"store_pos_1": "Store current position in built-in preset 1",
"store_pos_2": "Store current position in built-in preset 2",
"store_pos_3": "Store current position in built-in preset 3",
"store_pos_4": "Store current position in built-in preset 4",
"store_pos_5": "Store current position in built-in preset 5",
"store_pos_6": "Store current position in built-in preset 6",
"del_pos_1": "Delete built-in preset 1",
"del_pos_2": "Delete built-in preset 2",
"del_pos_3": "Delete built-in preset 3",
"del_pos_4": "Delete built-in preset 4",
"del_pos_5": "Delete built-in preset 5",
"del_pos_6": "Delete built-in preset 6"
}
If you would like to experiment with this integration then you can run an emulator of the Nice TT6 controller.
Set it up as follows:
python -m venv nice_venv
source nice_venv/bin/activate
pip install nicett6_pp81381
Run it as follows:
source nice_venv/bin/activate
python -m nicett6.emulator
Use it by configuring a Controller with a serial port like socket://localhost:50200