This 3rd version implements a new API released by Somfy (yes, another one). This time, it no longer relies on any cloud-based API, but will directly discuss with your local Tahoma box.
Basically, the only requirement is to host the node-red instance on the same network than your Tahoma box. That's all. No more quotas, no more expiring tokens. Good news, isn't it?
Even though your flows should not be modified, the config-node must be reconfigured using this new API.
However, please note that even though this release was tested before being published, you might encounter unexpected issues. Please backup your flow before proceeding with this major release.
You can read this guide from Node-RED official portal. This will help you install this node. Typically, the command are as follows:
cd $HOME/.node-red
npm install node-red-contrib-tahoma
For local development, you can run an isolated Node-RED instance automatically linked to this plugin:
npm install
npm run testmode
This command will:
- build the plugin
- prepare an isolated user directory in
test/node-red - symlink
node-red-contrib-tahomainto that runtime - start Node-RED on port
1880(override withNODE_RED_PORT)
For auto-rebuild and auto-restart while editing:
npm run testmode:watch
This software is provided as-is. Be careful: your devices can be fully controlled via API actions. I am not responsible of any mis-usage or corruption of the devices configuration.
This node relies on the Local API provided by Somfy, and available on the Tahoma box.
You will need to enable the developer mode on your Somfy account to use this module. This guide will walk you through this process.
When creating your first node:
- generate a token in the TaHoma mobile app Developer Mode menu, then paste it in the config node
- discover your local gateway IP from mDNS (or set it manually)
- validate the configuration from the wizard
For TLS, this plugin embeds the Somfy root CA and validates certificates by default.
This node accepts an object as input. The following properties will be parsed:
| Property | Type | Required? | Description |
|---|---|---|---|
action |
enum (see below) | Yes | The action to perform |
position |
int (0-100) | No | The position you want to set your blinds/door to |
rotation |
int (0-100) | No | The rotation you want to set your blinds to |
lowspeed |
boolean | No | Should the action be triggered in low-speed mode? |
Currently, only a few commands are understood by this node. The possible values for the action property are:
open: This will open the device (door, blind...)close: This will close the devicestop: This will stop all running actionscustomPosition: This will set the device to a custom position. The position is passed using thepositionproperty, which is required in this mode.customRotation: This will set the device (blinds) to a custom rotation. The rotation is passed using theorientationproperty, which is required in this mode.
The node will output its original msg.payload enriched with the result of the expected action. msg.payload.output will contain 2 properties:
open: a boolean. Set to true if the device is open, or false otherwiseposition: an integer (0-100). Set to the position returned by the Tahoma box.luminance: in case of a Sun Sensor, returns the current value of core:LuminanceState (See issue #6)
This node will ignore all data provided as input. You can specify the desired device by editing the node properties.
(Note: you can still trigger a tahoma-read instuction periodically by using an inject node. See #28)
The node will output its original msg.payload enriched with the selected device information. The fields returned are the raw information sent by the Tahoma box.
An example flow can be found in the docs/ folder. Basically, all it does is close and open shutters based on manual triggers. Those can be replaced by some logic (e.g. a node calculating the sunset and sunrise times). The output is sent to a local MQTT broker.
This was tested with the following devices:
- IO-HomeControl Roller Shutters
- IO-HomeControl Garage Door
- Sunea IO Awning (thanks to @xeor)
Feel free to send any feedback of any other compatible items or known limitations :)

