The homekitd node and iOS 17... Ugh

I probably have a couple hundred "devices". Lots of them are scripts that run on my Mac Mini (connected to my entertainment system) or my raspberry pi. For example, I have a device named "Subtitles" that controls subtitles in VLC. I updated my phone today to iOS 17 and was watching a video. VLC defaults to the subtitles being on^. And now when I tell Siri to "Turn off Subtitles", she responds "Subtitles are already off" and refuses to send the command. In iOS 16, Siri would send the command anyway. Now I'm facing a choice between writing on and off shortcuts for each of my 200 devices or restoring the backup I made of iOS 16.

I cannot seem to find any way around this issue other than writing 400 shortcuts, unless anyone knows any trick? Has anyone encountered this issue with being able to control their homekitd "devices" in Node RED and know a way to make it work without having to sometimes toggle things 3 times?

(Is this just the first annoyance of iOS 17, or will this be it?)

^ This is just an example - there are lots of other different cases where states get out of synch due to 1-way communication (e.g. my 433Mhz outlets controlled via pilight). I could simply turn on subtitles with the mouse and then it would be out of synch.

Hi,
iOS17 is causing problems for some people with HomeKit.

I don't know if this is correct but there's nothing we can do about it.

To do what, what is your problem?
If Siri says it's off, check if that's correct in Home.app

There are missing informations to help you:

Are you using the new HomeKit architecture?
Which HK node?
...

Did you restart node-red in the mean time ?
Sometimes it is just a matter of re-adding the bridge to homekit. Or remove the bridge and re-add it.

Apparently this issue isn't with every device, though the differentiating factor may be homekitd versus homebridge. I need to do more testing, but I tested with my humidifier connected to an RF outlet last night (which is configured in homebridge). I told Siri to turn it off (even though it was off) and it didn't tell me it was already off. She just said "ok" and issued the off command.

So so far it appears to only affect homekitd devices, which is ironic since its nodes explicitly have 2 outputs (onSet and onChange), which implies it's intended to work when the state is out of synch.

I have not restarted node red yet or re-added the bridge, as this seemed like a design issue with the way Siri now works with Home devices, but now I'm not sure.

To do what? What is your problem?

Sorry. So the problem is if I tell Siri to "turn off subtitles", she doesn't do it. Instead, she responds that they're already off, when they're on. And I have not implemented a way to keep the state in synch. Honestly, I don't care what the state is because I never intend to us that "device" in any other way than manually, but if I were to write a script to determine state to be able to keep it in synch, I'm not entirely sure how I would do it. I could check to see if VLC is running, but what with there possibly being multiple instances in the dock, I guess I could ask about the foremost app. Then I might be able to implement a way to check the checked value in the menu. But the point is, I don't care what the state is. If I say "turn off subtitles", I want that to trigger the flow that runs the script to turn off subtitles regardless of the state. I have the node's onSet connected.

Does that make sense?

And to answer your other question, the device in the home app is out of synch with the "device" until I "turn it on" (which runs the on script and results in it remaining on) and then turn it off. Then everything works.

For reference...
subtitlesflow

I see that you use the bottom output, this is not recommended because it is triggered a little randomly and several times.

I rather advise using this node as a push button and use the top output, i.e. you press ON in Home.app and NR turns it OFF after 1s (and use one node to enable subtitles and another to disable subtitles)

I have not restarted node red yet or re-added the bridge,

I would recommend to do that first. Homekit is a "sensitive" piece of software depends on mac adressing and multicast DNS and whatever bridge you are using needs to be talking properly to your "updated" homekit hub (which is all synced across devices and cloud). The more "devices" you have defined on a single bridge, the more sensistive it becomes (which is also the reason why homebridge changed to use unbridged devices for every device you add nowadays).

I don't understand how your suggestion could work. The reason I use onSet is because I don't want it to conditionally output based on the current state (which may be (and often is) out of synch). I used to use onChange, but when I realized that sometimes it wasn't issuing commands since the state hadn't changed, I started using onSet for almost everything (except when I explicitly wanted onChange behavior).

And I assume that by "as a push button", you mean as a toggle. Even if I were to overcome the state issue described above, I don't know how I would know which script to run (or which action to perform, rather). It needs to either select "disable" or select the first option containing the word "english" from the subtitles menu.

Well, I restarted Node-RED, and I should point out (assuming by "homekit hub", you mean like an iPad or a home pod set up as an Apple-implemented hub) that I don't have such a hub set up. Nor do I synch homekit via icloud.

I should also point out that my NR instance (and probably the homekitd node) are not up to date to the latest versions. I have a whole bunch of updates I have been putting off, to the point where it's daunting. I'd need a whole day set aside to get everything caught up - a day I don't have ATM.

So it seems reasonable that updates may fix this issue, especially since homebridge devices don't appear to run into it... But if I were to try a couple things before I do the updates, you think that re-adding the bridge might have a chance of addressing it? What about restarting my UDM? I did have an mDNS issue yesterday or the day before, which I assume was due to a UDM update. That happens occassionally - when it does an update overnight, sometimes mDNS gets screwed up. But I would think that if that's the problem, the "device" (e.g. Subtitles) wouldn't work at all? As I mentioned, I can pointlessly "turn it on" to get it in synch (using Siri or the Home app) and then every command there-after, works (until it gets out of synch again).

Yeah, I'm pretty far behind. I've got node-red-contrib-homekit-bridged version 1.0.4. latest is 1.6.0 according to the palette manager. And my NR is 1.0.2. Latest appears to be 3.1.3! Wow. I won't even tell you what my current Node version is. And I've also been meaning to switch from pm2 managing the process to the current recommended method (because I have to manually start it up after a reboot nowadays).

You don't have a Hub so you are using the old architecture.

Ok, I just tested, Siri triggers a message on the second output (even if the status has not changed).

Forget my suggestion, your way (although hacked) remains operational.

I'm curious. So does the latest version of the HomeKit node require you to have a hub? If one is rolling all their own devices, I'm guessing that the benefit of having a hub set up and iCloud sync set up, is for remote operation or is there some other benefit (matter?)? I have thought about setting up a hub, but Apple always screws something up between updates, I'd rather not rely on them for remote access and continue using Webhookrelay.

The new architecture yes, the nrchkb node upgrade no

For remote control and with the new architecture centralization of accessories - no more latency but hub is needed.

Matter is the reason for this new architecture.

Major updates always carry risks, I had no problems updating to iOS17...

If you prefer to pay a subscription that's your choice... many people use it without problem

Regarding webhookrelay... I only use the free version. I have never come close to the monthly 2000 query limit and I use buckets and json to route each request. Though if I ever did, I would seriously consider it. I love webhook relay.

...and I use it for more than just Home stuff. I have a number of apps I send webhooks from that don't have another option for queries, e.g. no MQTT support.