Summary
The local API on my TaHoma Switch returns "available": false for some io-homecontrol devices, even though:
- Commands execute successfully on these devices
- The devices respond and move correctly
- The
core:StatusState shows "available"
- The devices work perfectly in the TaHoma app and via Google Home (cloud API)
This causes Home Assistant (via the Overkiz integration) to mark these devices as "unavailable", making them unusable despite being fully functional.
Environment
- Gateway: TaHoma Switch
- Firmware Version: 2025.6.4-4
- Protocol Version: 2025.6.4-4
- Affected devices: io-homecontrol roller shutters and exterior screens
Detailed Problem Description
API Response showing the bug
When querying /enduser-mobile-web/1/enduserAPI/setup/devices, some devices return "available": false at the device level, while their internal states show they are actually available:
Example - Affected device (Roller Shutter):
{
"deviceURL": "io://<gateway-id>/<device-id-1>",
"label": "Shutter Side",
"available": false,
"enabled": true,
"synced": true,
"controllableName": "io:RollerShutterGenericIOComponent",
"states": [
{"name": "core:StatusState", "value": "available"},
{"name": "core:DiscreteRSSILevelState", "value": "normal"},
{"name": "core:RSSILevelState", "value": 74},
{"name": "core:ClosureState", "value": 0},
{"name": "core:MovingState", "value": false}
]
}
Example - Working device (same type) for comparison:
{
"deviceURL": "io://<gateway-id>/<device-id-2>",
"label": "Shutter Front",
"available": true,
"enabled": true,
"synced": true,
"controllableName": "io:RollerShutterGenericIOComponent",
"states": [
{"name": "core:StatusState", "value": "available"},
{"name": "core:DiscreteRSSILevelState", "value": "good"},
{"name": "core:RSSILevelState", "value": 90},
{"name": "core:ClosureState", "value": 0}
]
}
Both devices:
- Are the same type (
io:RollerShutterGenericIOComponent)
- Have
enabled: true and synced: true
- Have
core:StatusState: "available"
- Have good RSSI signal strength (74-90)
- Accept and execute commands successfully
Proof that commands work on "unavailable" devices
I can successfully send commands to devices marked as available: false:
Request:
curl -k -X POST "https://<gateway-ip>:8443/enduser-mobile-web/1/enduserAPI/exec/apply" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"label":"Test","actions":[{"deviceURL":"io://<gateway-id>/<device-id>","commands":[{"name":"setClosure","parameters":[50]}]}]}'
Response:
{"execId":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}
The shutter physically moves to 50% position. The device is clearly functional.
What I have tried (nothing fixes it)
| Action |
Result |
| Rebooted the TaHoma Switch via API |
available flag remains false after reboot |
| Regenerated Developer Mode token |
available flag remains false |
Sent refreshState commands to devices |
States update but available stays false |
Set device names via setName command |
Names update but available stays false |
Set memorized positions via setMemorized1Position |
Positions save but available stays false |
| Waited extended periods |
The flag never self-corrects |
Affected Devices
| Device Type |
controllableName |
available |
Actually works? |
| Roller Shutter 1 |
io:RollerShutterGenericIOComponent |
false |
YES |
| Exterior Screen 1 |
io:VerticalExteriorAwningIOComponent |
false |
YES |
| Exterior Screen 2 |
io:VerticalExteriorAwningIOComponent |
false |
YES |
| Roller Shutter 2 |
io:RollerShutterGenericIOComponent |
true |
YES |
All devices are io-homecontrol protocol, have good signal strength, and respond to commands.
Impact
This bug makes the local API unusable for home automation systems like Home Assistant, openHAB, ioBroker, and others that rely on the available field to determine if a device can be controlled.
Users are forced to use the cloud API, which defeats the purpose of local control and introduces dependency on internet connectivity.
Expected Behavior
The available field should be true for all devices that:
- Have
core:StatusState: "available"
- Are responding to commands
- Have good radio signal (RSSI)
- Are
enabled: true and synced: true
Request
Please investigate why the available flag becomes stuck at false for some devices despite all evidence showing they are available and functional.
A fix in the gateway firmware would resolve this issue for all users of the local API.
Additional Information
- The TaHoma app and Google Home can control all devices perfectly (they use the cloud API)
- This issue appeared without any configuration changes
- All affected devices are io-homecontrol protocol (not RTS)
- Developer Mode is enabled and the token is valid
- The issue persists across token regeneration and gateway reboots
Summary
The local API on my TaHoma Switch returns
"available": falsefor some io-homecontrol devices, even though:core:StatusStateshows"available"This causes Home Assistant (via the Overkiz integration) to mark these devices as "unavailable", making them unusable despite being fully functional.
Environment
Detailed Problem Description
API Response showing the bug
When querying
/enduser-mobile-web/1/enduserAPI/setup/devices, some devices return"available": falseat the device level, while their internal states show they are actually available:Example - Affected device (Roller Shutter):
{ "deviceURL": "io://<gateway-id>/<device-id-1>", "label": "Shutter Side", "available": false, "enabled": true, "synced": true, "controllableName": "io:RollerShutterGenericIOComponent", "states": [ {"name": "core:StatusState", "value": "available"}, {"name": "core:DiscreteRSSILevelState", "value": "normal"}, {"name": "core:RSSILevelState", "value": 74}, {"name": "core:ClosureState", "value": 0}, {"name": "core:MovingState", "value": false} ] }Example - Working device (same type) for comparison:
{ "deviceURL": "io://<gateway-id>/<device-id-2>", "label": "Shutter Front", "available": true, "enabled": true, "synced": true, "controllableName": "io:RollerShutterGenericIOComponent", "states": [ {"name": "core:StatusState", "value": "available"}, {"name": "core:DiscreteRSSILevelState", "value": "good"}, {"name": "core:RSSILevelState", "value": 90}, {"name": "core:ClosureState", "value": 0} ] }Both devices:
io:RollerShutterGenericIOComponent)enabled: trueandsynced: truecore:StatusState: "available"Proof that commands work on "unavailable" devices
I can successfully send commands to devices marked as
available: false:Request:
Response:
{"execId":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}The shutter physically moves to 50% position. The device is clearly functional.
What I have tried (nothing fixes it)
availableflag remainsfalseafter rebootavailableflag remainsfalserefreshStatecommands to devicesavailablestaysfalsesetNamecommandavailablestaysfalsesetMemorized1PositionavailablestaysfalseAffected Devices
availableio:RollerShutterGenericIOComponentfalseio:VerticalExteriorAwningIOComponentfalseio:VerticalExteriorAwningIOComponentfalseio:RollerShutterGenericIOComponenttrueAll devices are io-homecontrol protocol, have good signal strength, and respond to commands.
Impact
This bug makes the local API unusable for home automation systems like Home Assistant, openHAB, ioBroker, and others that rely on the
availablefield to determine if a device can be controlled.Users are forced to use the cloud API, which defeats the purpose of local control and introduces dependency on internet connectivity.
Expected Behavior
The
availablefield should betruefor all devices that:core:StatusState: "available"enabled: trueandsynced: trueRequest
Please investigate why the
availableflag becomes stuck atfalsefor some devices despite all evidence showing they are available and functional.A fix in the gateway firmware would resolve this issue for all users of the local API.
Additional Information