Skip to content

Local API returns available: false for io devices despite devices being fully functional and controllable #217

Description

@Cinecom

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

Metadata

Metadata

Labels

No labels
No labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions